Locale 확인 시 중국과 대만이 구분되지 않는 부분
알다시피 중국과 대만의 locale 코드는 zh-CN 과 zh-TW 이다.
하지만 왜 이렇게 되있는지 모르겠지만 cocos2d는 앞자리인 zh 만으로 언어를 구분하도록 되어있어
플랫폼 별로 모든 소스를 다 고쳐야 제대로된 처리를 할 수 있다.
자바 플랫폼 변경방법 ----------------------------------------------------------------
설치 경로에 따라 다를수 있겠지만 아래 파일을 열어
/코코스설치경로/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java
public static String getCurrentLanguage() {
return Locale.getDefault().getLanguage(); --> return Locale.getDefault().toString();
}
위와 같이 바꾸어주면 java쪽에서 ko-KR 같이 완전한 값을 리턴하게 된다.
그후에 cocos에서 호출하는 실제 getCurrentLanguage() 함수를 한번 더 수정해 줘야 하는데 위치는 아래 경로에 있다.
/코코스설치경로/cocos/platform/android/CCApplication-android.cpp
LanguageType Application::getCurrentLanguage()
{
std::string languageName = getCurrentLanguageJNI();
const char* pLanguageCode = languageName.c_str();
const char* pLanguageName = getCurrentLanguageCode();
LanguageType ret = LanguageType::ENGLISH;
std::cout << languageName << std::endl;
if (0 == strcmp("zh", pLanguageName))
{
if(0 == strcmp("zh-TW", pLanguageCode)
{
ret = LanguageType::TAIWAN; // platform/CCCommon.h 파일에 추가해준다.
}
else
{
ret = LanguageType::CHINESE;
}
}
//이하 생략
}
ios 플랫폼 변경방법 ----------------------------------------------------------------
/코코스설치경로/cocos/platform/ios/CCApplication-ios.mm
LanguageType Application::getCurrentLanguage()
{
// get the current language and country config
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
// get the current language code.(such as English is "en", Chinese is "zh" and so on)
NSDictionary* temp = [NSLocale componentsFromLocaleIdentifier:currentLanguage];
NSString * languageCode = [temp objectForKey:NSLocaleLanguageCode];
LanguageType ret = LanguageType::ENGLISH;
if ([languageCode isEqualToString:@"zh"])
{
/** CHANGE THE FOLLOWING LINES */
NSString* scriptCode = [temp objectForKey:NSLocaleScriptCode];
NSString* countryCode = [temp objectForKey:NSLocaleCountryCode];
// On iOS, either chinese hong kong or chinese taiwan are traditional chinese.
if ([scriptCode isEqualToString:@"Hant"] || [countryCode isEqualToString:@"HK"]) {
ret = LanguageType::TAIWAN; // You need to add these enum values to LanguageType
} else {
ret = LanguageType::CHINESE; // You need to add these enum values to LanguageType
}
}
//이하생략
}
Win32 플랫폼 변경방법 ----------------------------------------------------------------
/코코스설치경로/cocos/platform/win32/CCApplication-win32.cpp
LanguageType Application::getCurrentLanguage()
{
LanguageType ret = LanguageType::ENGLISH;
LCID localeID = GetUserDefaultLCID();
unsigned short primaryLanguageID = localeID & 0xFF;
switch (primaryLanguageID)
{
case LANG_CHINESE:
{
if(localeID == 0x404 || localeID == 0xC04) //대만, 홍콩
ret = LanguageType::TAIWAN;
else
ret = LanguageType::CHINESE;
}
}
}
GetUserDefaultLCID() 반환코드 관련
https://support.microsoft.com/ko-kr/kb/193080
https://msdn.microsoft.com/en-us/goglobal/bb964664.aspx