ISOLanguage.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package language
  2. import (
  3. "fmt"
  4. "github.com/allanpk716/ChineseSubFinder/internal/types/language"
  5. "strings"
  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) language.MyLanguage {
  12. lowerString := strings.ToLower(isoString)
  13. // 639-1
  14. switch lowerString {
  15. case language.ISO_639_1_Chinese:
  16. return language.ChineseSimple
  17. case language.ISO_639_1_English:
  18. return language.English
  19. case language.ISO_639_1_Korean:
  20. return language.Korean
  21. case language.ISO_639_1_Japanese:
  22. return language.Japanese
  23. }
  24. // 639-2/B
  25. switch lowerString {
  26. case language.ISO_639_2B_Chinese:
  27. return language.ChineseSimple
  28. case language.ISO_639_2B_English:
  29. return language.English
  30. case language.ISO_639_2B_Japanese:
  31. return language.Japanese
  32. case language.ISO_639_2B_Korean:
  33. return language.Korean
  34. }
  35. // 639-2/T
  36. switch lowerString {
  37. case language.ISO_639_2T_Chinese:
  38. return language.ChineseSimple
  39. case language.ISO_639_2T_English:
  40. return language.English
  41. case language.ISO_639_2T_Japanese:
  42. return language.Japanese
  43. case language.ISO_639_2T_Korean:
  44. return language.Korean
  45. }
  46. // 639-3
  47. switch lowerString {
  48. case language.ISO_639_3_Chinese:
  49. return language.ChineseSimple
  50. case language.ISO_639_3_English:
  51. return language.English
  52. case language.ISO_639_3_Korean:
  53. return language.Korean
  54. case language.ISO_639_3_Japanese:
  55. return language.Japanese
  56. }
  57. // 中文编码变种
  58. switch lowerString {
  59. case language.ChineseISO_Hans:
  60. return language.ChineseSimple
  61. case language.ChineseISO_Hant:
  62. return language.ChineseTraditional
  63. case language.ChineseISO_CN:
  64. return language.ChineseSimple
  65. case language.ChineseISO_TW:
  66. return language.ChineseTraditional
  67. case language.ChineseISO_SG,
  68. language.ChineseISO_MY:
  69. return language.ChineseSimple
  70. case language.ChineseISO_HK,
  71. language.ChineseISO_MO:
  72. return language.ChineseTraditional
  73. }
  74. return language.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 language.ISO_639_1_Chinese, language.ISO_639_1_English, language.ISO_639_1_Korean, language.ISO_639_1_Japanese:
  83. // 639-1
  84. return true
  85. }
  86. switch lowerString {
  87. case language.ISO_639_2B_Chinese, language.ISO_639_2B_English, language.ISO_639_2B_Japanese, language.ISO_639_2B_Korean:
  88. // 639-2/B
  89. return true
  90. }
  91. switch lowerString {
  92. case language.ISO_639_2T_Chinese, language.ISO_639_2T_English, language.ISO_639_2T_Japanese, language.ISO_639_2T_Korean:
  93. // 639-2/T
  94. return true
  95. }
  96. switch lowerString {
  97. case language.ISO_639_3_Chinese, language.ISO_639_3_English, language.ISO_639_3_Korean, language.ISO_639_3_Japanese:
  98. // 639-3
  99. return true
  100. }
  101. switch lowerString {
  102. case language.ChineseISO_Hans,
  103. language.ChineseISO_Hant,
  104. language.ChineseISO_CN,
  105. language.ChineseISO_TW,
  106. language.ChineseISO_SG,
  107. language.ChineseISO_MY,
  108. language.ChineseISO_HK,
  109. language.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 language.ISO_639_1_Chinese:
  122. // 639-1
  123. return true
  124. }
  125. switch lowerString {
  126. case language.ISO_639_2B_Chinese:
  127. // 639-2/B
  128. return true
  129. }
  130. switch lowerString {
  131. case language.ISO_639_2T_Chinese:
  132. // 639-2/T
  133. return true
  134. }
  135. switch lowerString {
  136. case language.ISO_639_3_Chinese:
  137. // 639-3
  138. return true
  139. }
  140. switch lowerString {
  141. case language.ChineseISO_Hans,
  142. language.ChineseISO_Hant,
  143. language.ChineseISO_CN,
  144. language.ChineseISO_TW,
  145. language.ChineseISO_SG,
  146. language.ChineseISO_MY,
  147. language.ChineseISO_HK,
  148. language.ChineseISO_MO:
  149. // 中文编码变种
  150. return true
  151. }
  152. return false
  153. }
  154. // ISOSupportRegexRule 获取 ISO 匹配的 regex 表达式
  155. func ISOSupportRegexRule() string {
  156. if isoISORegString != "" {
  157. return isoISORegString
  158. }
  159. isoISORegString = language.RegISORuleFront
  160. isoISORegString += addISORegSubLangString(language.ChineseISO_Hans)
  161. isoISORegString += addISORegSubLangString(language.ChineseISO_Hant)
  162. isoISORegString += addISORegSubLangString(language.ChineseISO_CN)
  163. isoISORegString += addISORegSubLangString(language.ChineseISO_TW)
  164. isoISORegString += addISORegSubLangString(language.ChineseISO_SG)
  165. isoISORegString += addISORegSubLangString(language.ChineseISO_MY)
  166. isoISORegString += addISORegSubLangString(language.ChineseISO_HK)
  167. isoISORegString += addISORegSubLangString(language.ChineseISO_MO)
  168. isoISORegString += addISORegSubLangString(language.ISO_639_1_Chinese)
  169. isoISORegString += addISORegSubLangString(language.ISO_639_1_English)
  170. isoISORegString += addISORegSubLangString(language.ISO_639_1_Korean)
  171. isoISORegString += addISORegSubLangString(language.ISO_639_1_Japanese)
  172. isoISORegString += addISORegSubLangString(language.ISO_639_2T_Chinese)
  173. isoISORegString += addISORegSubLangString(language.ISO_639_2T_English)
  174. isoISORegString += addISORegSubLangString(language.ISO_639_2T_Korean)
  175. isoISORegString += addISORegSubLangString(language.ISO_639_2T_Japanese)
  176. isoISORegString += addISORegSubLangString(language.ISO_639_2B_Chinese)
  177. isoISORegString += language.RegISORuleEnd
  178. return isoISORegString
  179. }
  180. func addISORegSubLangString(inLang string) string {
  181. return fmt.Sprintf(`\b%s\b|`, inLang)
  182. }
  183. var isoISORegString = ""