Last active
January 28, 2021 00:15
-
-
Save mumunuu/7cd6c9dd537a49acb2924bd7499a5099 to your computer and use it in GitHub Desktop.
check Language
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"strings" | |
"golang.org/x/text/language" | |
) | |
func main() { | |
fmt.Println(getLanguageCode("ㅁㄴㅇㅁ")) //없는값 시도 en | |
fmt.Println(getLanguageCode("123")) //없는값 시도 en | |
fmt.Println(getLanguageCode("1")) //없는값 시도 en | |
fmt.Println(getLanguageCode("true")) //없는값 시도 en | |
fmt.Println(getLanguageCode("ar")) //ar | |
fmt.Println(getLanguageCode("ar-EG")) //ar-EG | |
fmt.Println(getLanguageCode("ar-SA")) //ar-SA | |
fmt.Println(getLanguageCode("ar-123")) //없는 값으로 시도하면 en으로 나옴 | |
fmt.Println(getLanguageCode("en")) //en | |
fmt.Println(getLanguageCode("en-AU")) //en | |
fmt.Println(getLanguageCode("en-CA")) //en | |
fmt.Println(getLanguageCode("en-GB")) //en | |
fmt.Println(getLanguageCode("en-IG")) //en | |
fmt.Println(getLanguageCode("en-IN")) //en | |
fmt.Println(getLanguageCode("en-SG")) //en | |
fmt.Println(getLanguageCode("en-US")) //en | |
fmt.Println(getLanguageCode("en-ZA")) //en | |
fmt.Println(getLanguageCode("en-AA")) //없는 값으로 시도하면 en으로 나옴 | |
fmt.Println(getLanguageCode("fr")) //fr | |
fmt.Println(getLanguageCode("fr-CA")) //fr | |
fmt.Println(getLanguageCode("fr-CH")) //fr | |
fmt.Println(getLanguageCode("fr-asdasd")) //없는 값으로 시도하면 en으로 나옴 | |
fmt.Println(getLanguageCode("de")) //de | |
fmt.Println(getLanguageCode("de-AT")) //de | |
fmt.Println(getLanguageCode("hi")) //hi | |
fmt.Println(getLanguageCode("id")) //id | |
fmt.Println(getLanguageCode("it")) //it | |
fmt.Println(getLanguageCode("ja")) //ja | |
fmt.Println(getLanguageCode("jA")) //대소문자 이상하게 섞어도 ja로 출력 | |
fmt.Println(getLanguageCode("KO")) //대문자로 하더라도, ko로 출력 | |
fmt.Println(getLanguageCode("ko")) //ko | |
fmt.Println(getLanguageCode("ko-KR")) //ko | |
fmt.Println(getLanguageCode("ko-ㅁㄴㅇㄹㅁ")) //없는값으로 시도하면 en | |
fmt.Println(getLanguageCode("ms")) //ms | |
fmt.Println(getLanguageCode("pt")) //pt | |
fmt.Println(getLanguageCode("pt-BR")) //pt | |
fmt.Println(getLanguageCode("pt-PT")) //pt | |
fmt.Println(getLanguageCode("pt-PT")) //pt | |
fmt.Println(getLanguageCode("ru")) //ru | |
//중국어 분기 시작 | |
//TOOD: 홍콩 타이완 분기 요구 | |
fmt.Println(getLanguageCode("zh")) //zh-cn | |
fmt.Println(getLanguageCode("zh-cn")) //zh-cn | |
fmt.Println(getLanguageCode("zh-tw")) //zh-tw | |
fmt.Println(getLanguageCode("zh-HK")) //zh-tw //확인 결과, 홍콩으로 요청하면 TW으로 반환됩니다. | |
// TODO: NG는 중국어 리스트에 없는데, zh-cn으로 반환되고, VZ도 없지만 en 으로 반환됨 | |
fmt.Println(getLanguageCode("zh-NG")) //zh-cn | |
fmt.Println(getLanguageCode("zh-VZ")) //en | |
// TODO: 컨플루언스 기준, 다른 조건은 충족하지만 zh-mo등은 충족하지 않아서 확인 필요 | |
// https://namu.wiki/w/%EC%A4%91%EA%B5%AD%EC%96%B4%20%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC | |
// 简体(간체, zh-hans) : 문자만 간체로 변환함.[참고] //Simplified | |
// 繁體(번체, zh-hant) : 문자만 번체로 변환함.[참고] //Traditional | |
// 大陆简体(대륙 간체, zh-cn) : 중국 대륙 간체자. | |
// 香港繁體(향항 번체, zh-hk) : 홍콩 번체자. | |
// 澳門繁體(오문 번체, zh-mo) : 마카오 번체자. | |
// 大马简体(대마 간체, zh-my) : 말레이시아 간체자.[9] | |
// 新加坡简体(신가파 간체, zh-sg) : 싱가포르 간체자. | |
// 臺灣正體(대만 정체, zh-tw) : 대만 정체자. | |
// 확인 결과, 간체/번체 차이로만 번역함. | |
// 홍콩, 마카오, 대만은 번체를 사용하므로 zh-tw으로 리턴함 | |
fmt.Println(getLanguageCode("zh-hans")) //zh-cn | |
fmt.Println(getLanguageCode("zh-hant")) //zh-cn | |
fmt.Println(getLanguageCode("zh-mo")) //zh-tw //마카오도 번체를 쓰므로 tw | |
fmt.Println(getLanguageCode("zh-my")) //zh-tw //말레이시아 간체를 쓴다는데 tw으로 오는 의문...... | |
fmt.Println(getLanguageCode("zh-sg")) //zh-cn //싱가포르는 중국 본토와 같이 사용하기 때문에 zh-cn | |
fmt.Println(getLanguageCode("es")) //es | |
fmt.Println(getLanguageCode("es-AR")) //es | |
fmt.Println(getLanguageCode("es-CL")) //es | |
fmt.Println(getLanguageCode("es-CO")) //es | |
fmt.Println(getLanguageCode("es-CR")) //es | |
fmt.Println(getLanguageCode("es-DO")) //es | |
fmt.Println(getLanguageCode("es-EC")) //es | |
fmt.Println(getLanguageCode("es-SV")) //es | |
fmt.Println(getLanguageCode("es-GT")) //es | |
fmt.Println(getLanguageCode("es-HN")) //es | |
fmt.Println(getLanguageCode("es-MX")) //es | |
fmt.Println(getLanguageCode("es-NI")) //es | |
fmt.Println(getLanguageCode("es-PA")) //es | |
fmt.Println(getLanguageCode("es-PE")) //es | |
fmt.Println(getLanguageCode("es-PR")) //es | |
fmt.Println(getLanguageCode("es-PY")) //es | |
fmt.Println(getLanguageCode("es-US")) //es | |
fmt.Println(getLanguageCode("es-UY")) //es | |
fmt.Println(getLanguageCode("es-VE")) //es | |
fmt.Println(getLanguageCode("th")) //th | |
fmt.Println(getLanguageCode("tr")) //tr | |
fmt.Println(getLanguageCode("vi")) //vi | |
} | |
func getLanguageCode(s string) string { | |
//추후 국가 추가시, tag 추가로 간단히 해결할 수 있습니다. | |
//https://pkg.go.dev/golang.org/x/text/language#Tag | |
//디폴트 언어인 영어가 제일 위에 위치해 있어야 함 | |
matcher := language.NewMatcher([]language.Tag{ | |
language.English, | |
language.Arabic, | |
language.French, | |
language.German, | |
language.Hindi, | |
language.Indonesian, | |
language.Italian, | |
language.Japanese, | |
language.Korean, | |
language.Malay, | |
language.Portuguese, | |
language.Russian, | |
language.SimplifiedChinese, | |
language.TraditionalChinese, | |
language.Chinese, | |
language.Spanish, | |
language.Thai, | |
language.Turkish, | |
language.Vietnamese, | |
}) | |
preferred, _, _ := language.ParseAcceptLanguage(s) | |
code, _, _ := matcher.Match(preferred...) | |
base, _ := code.Base() | |
langauge, _ := code.Region() | |
if base.String() == "zh" { //중국어 예외처리 | |
return "zh-" + strings.ToLower(langauge.String()) | |
} | |
return base.String() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment