ISOLanguage.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. package language
  2. import (
  3. "fmt"
  4. "strings"
  5. language2 "github.com/allanpk716/ChineseSubFinder/pkg/types/language"
  6. )
  7. // ISOString2SupportLang 从语言缩写字符串转换为内部的 MyLanguage 类型
  8. // 1. 支持 ISO 639-1、639-2/B、639-2/T、639-3
  9. // 2. 支持中文的多种变种编码
  10. // https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
  11. func ISOString2SupportLang(isoString string) language2.MyLanguage {
  12. lowerString := strings.ToLower(isoString)
  13. // 639-1
  14. switch lowerString {
  15. case language2.ISO_639_1_Chinese:
  16. return language2.ChineseSimple
  17. case language2.ISO_639_1_English:
  18. return language2.English
  19. case language2.ISO_639_1_Korean:
  20. return language2.Korean
  21. case language2.ISO_639_1_Japanese:
  22. return language2.Japanese
  23. }
  24. // 639-2/B
  25. switch lowerString {
  26. case language2.ISO_639_2B_Chinese:
  27. return language2.ChineseSimple
  28. case language2.ISO_639_2B_English:
  29. return language2.English
  30. case language2.ISO_639_2B_Japanese:
  31. return language2.Japanese
  32. case language2.ISO_639_2B_Korean:
  33. return language2.Korean
  34. }
  35. // 639-2/T
  36. switch lowerString {
  37. case language2.ISO_639_2T_Chinese:
  38. return language2.ChineseSimple
  39. case language2.ISO_639_2T_English:
  40. return language2.English
  41. case language2.ISO_639_2T_Japanese:
  42. return language2.Japanese
  43. case language2.ISO_639_2T_Korean:
  44. return language2.Korean
  45. }
  46. // 639-3
  47. switch lowerString {
  48. case language2.ISO_639_3_Chinese:
  49. return language2.ChineseSimple
  50. case language2.ISO_639_3_English:
  51. return language2.English
  52. case language2.ISO_639_3_Korean:
  53. return language2.Korean
  54. case language2.ISO_639_3_Japanese:
  55. return language2.Japanese
  56. }
  57. // 中文编码变种
  58. switch lowerString {
  59. case language2.ChineseISO_Hans:
  60. return language2.ChineseSimple
  61. case language2.ChineseISO_Hant:
  62. return language2.ChineseTraditional
  63. case language2.ChineseISO_CN:
  64. return language2.ChineseSimple
  65. case language2.ChineseISO_TW:
  66. return language2.ChineseTraditional
  67. case language2.ChineseISO_SG,
  68. language2.ChineseISO_MY:
  69. return language2.ChineseSimple
  70. case language2.ChineseISO_HK,
  71. language2.ChineseISO_MO:
  72. return language2.ChineseTraditional
  73. }
  74. return language2.Unknown
  75. }
  76. // IsSupportISOString 是否是受支持的语言,中、英、日、韩
  77. // 1. 支持 ISO 639-1、639-2/B、639-2/T、639-3
  78. // 2. 支持中文的多种变种编码
  79. func IsSupportISOString(isoString string) bool {
  80. lowerString := strings.ToLower(isoString)
  81. switch lowerString {
  82. case language2.ISO_639_1_Chinese, language2.ISO_639_1_English, language2.ISO_639_1_Korean, language2.ISO_639_1_Japanese:
  83. // 639-1
  84. return true
  85. }
  86. switch lowerString {
  87. case language2.ISO_639_2B_Chinese, language2.ISO_639_2B_English, language2.ISO_639_2B_Japanese, language2.ISO_639_2B_Korean:
  88. // 639-2/B
  89. return true
  90. }
  91. switch lowerString {
  92. case language2.ISO_639_2T_Chinese, language2.ISO_639_2T_English, language2.ISO_639_2T_Japanese, language2.ISO_639_2T_Korean:
  93. // 639-2/T
  94. return true
  95. }
  96. switch lowerString {
  97. case language2.ISO_639_3_Chinese, language2.ISO_639_3_English, language2.ISO_639_3_Korean, language2.ISO_639_3_Japanese:
  98. // 639-3
  99. return true
  100. }
  101. switch lowerString {
  102. case language2.ChineseISO_Hans,
  103. language2.ChineseISO_Hant,
  104. language2.ChineseISO_CN,
  105. language2.ChineseISO_TW,
  106. language2.ChineseISO_SG,
  107. language2.ChineseISO_MY,
  108. language2.ChineseISO_HK,
  109. language2.ChineseISO_MO:
  110. // 中文编码变种
  111. return true
  112. }
  113. return false
  114. }
  115. // IsSupportISOChineseString 是否是受支持的语言,中
  116. // 1. 支持 ISO 639-1、639-2/B、639-2/T、639-3
  117. // 2. 支持中文的多种变种编码
  118. func IsSupportISOChineseString(isoString string) bool {
  119. lowerString := strings.ToLower(isoString)
  120. switch lowerString {
  121. case language2.ISO_639_1_Chinese:
  122. // 639-1
  123. return true
  124. }
  125. switch lowerString {
  126. case language2.ISO_639_2B_Chinese:
  127. // 639-2/B
  128. return true
  129. }
  130. switch lowerString {
  131. case language2.ISO_639_2T_Chinese:
  132. // 639-2/T
  133. return true
  134. }
  135. switch lowerString {
  136. case language2.ISO_639_3_Chinese:
  137. // 639-3
  138. return true
  139. }
  140. switch lowerString {
  141. case language2.ChineseISO_Hans,
  142. language2.ChineseISO_Hant,
  143. language2.ChineseISO_CN,
  144. language2.ChineseISO_TW,
  145. language2.ChineseISO_SG,
  146. language2.ChineseISO_MY,
  147. language2.ChineseISO_HK,
  148. language2.ChineseISO_MO:
  149. // 中文编码变种
  150. return true
  151. }
  152. return false
  153. }
  154. // MyLang2ISO_639_1_String 内置的语言转换到 ISO_639-1_codes 标准
  155. func MyLang2ISO_639_1_String(myLanguage language2.MyLanguage) string {
  156. switch myLanguage {
  157. case language2.ChineseSimple,
  158. language2.ChineseTraditional,
  159. language2.ChineseSimpleEnglish,
  160. language2.ChineseTraditionalEnglish,
  161. language2.ChineseSimpleJapanese,
  162. language2.ChineseTraditionalJapanese,
  163. language2.ChineseSimpleKorean,
  164. language2.ChineseTraditionalKorean:
  165. return language2.ISO_639_1_Chinese
  166. case language2.English:
  167. return language2.ISO_639_1_English
  168. case language2.Japanese:
  169. return language2.ISO_639_1_Japanese
  170. case language2.Korean:
  171. return language2.ISO_639_1_Korean
  172. default:
  173. return language2.MathLangChnUnknown
  174. }
  175. }
  176. // MyLang2ChineseISO 中文语言编码变种,见 ISOLanguage.go 文件,这里区分简体、繁体等,如果语言是非中文则这里是空
  177. func MyLang2ChineseISO(myLanguage language2.MyLanguage) string {
  178. switch myLanguage {
  179. case language2.ChineseSimple,
  180. language2.ChineseSimpleEnglish,
  181. language2.ChineseSimpleJapanese,
  182. language2.ChineseSimpleKorean:
  183. return language2.ChineseISO_Hans
  184. case language2.ChineseTraditional,
  185. language2.ChineseTraditionalEnglish,
  186. language2.ChineseTraditionalJapanese,
  187. language2.ChineseTraditionalKorean:
  188. return language2.ChineseISO_Hant
  189. case language2.English, language2.Japanese, language2.Korean:
  190. return ""
  191. default:
  192. return ""
  193. }
  194. }
  195. // ISOSupportRegexRule 获取 ISO 匹配的 regex 表达式
  196. func ISOSupportRegexRule() string {
  197. if isoISORegString != "" {
  198. return isoISORegString
  199. }
  200. isoISORegString = language2.RegISORuleFront
  201. isoISORegString += addISORegSubLangString(language2.ChineseISO_Hans)
  202. isoISORegString += addISORegSubLangString(language2.ChineseISO_Hant)
  203. isoISORegString += addISORegSubLangString(language2.ChineseISO_CN)
  204. isoISORegString += addISORegSubLangString(language2.ChineseISO_TW)
  205. isoISORegString += addISORegSubLangString(language2.ChineseISO_SG)
  206. isoISORegString += addISORegSubLangString(language2.ChineseISO_MY)
  207. isoISORegString += addISORegSubLangString(language2.ChineseISO_HK)
  208. isoISORegString += addISORegSubLangString(language2.ChineseISO_MO)
  209. isoISORegString += addISORegSubLangString(language2.ISO_639_1_Chinese)
  210. isoISORegString += addISORegSubLangString(language2.ISO_639_1_English)
  211. isoISORegString += addISORegSubLangString(language2.ISO_639_1_Korean)
  212. isoISORegString += addISORegSubLangString(language2.ISO_639_1_Japanese)
  213. isoISORegString += addISORegSubLangString(language2.ISO_639_2T_Chinese)
  214. isoISORegString += addISORegSubLangString(language2.ISO_639_2T_English)
  215. isoISORegString += addISORegSubLangString(language2.ISO_639_2T_Korean)
  216. isoISORegString += addISORegSubLangString(language2.ISO_639_2T_Japanese)
  217. isoISORegString += addISORegSubLangString(language2.ISO_639_2B_Chinese)
  218. isoISORegString += language2.RegISORuleEnd
  219. return isoISORegString
  220. }
  221. func addISORegSubLangString(inLang string) string {
  222. return fmt.Sprintf(`\b%s\b|`, inLang)
  223. }
  224. var isoISORegString = ""