Cocos2d-X定位简体/繁体中文
-
12-12-2019 - |
题
我需要分开简体/繁体中文。在iPhone的Cocos2d中,我只是使用“Hans”和“Hant”。但是在Cocos2d-x中,我潜入代码,这里是ccapplication的代码:
ccLanguageType ret = kLanguageEnglish;
if ([languageCode isEqualToString:@"zh"])
{
ret = kLanguageChinese;
}
else if ([languageCode isEqualToString:@"en"])
{
ret = kLanguageEnglish;
}
else if ([languageCode isEqualToString:@"fr"]){
ret = kLanguageFrench;
}
else if ([languageCode isEqualToString:@"it"]){
ret = kLanguageItalian;
}
else if ([languageCode isEqualToString:@"de"]){
ret = kLanguageGerman;
}
else if ([languageCode isEqualToString:@"es"]){
ret = kLanguageSpanish;
}
else if ([languageCode isEqualToString:@"ru"]){
ret = kLanguageRussian;
}
return ret;
.
请注意,只有“zh”为中文(简化/传统,也许)
所以我怎么能区分它们?
编辑: 我使用Cocos2D-X并需要使用Android。不仅仅是iPhone。米奇的答案仅适用于iPhone。谢谢。
解决方案
您需要在Cocos2dx Android JNI中进行一些更改: 在 cocos2d-x-2.x.x / cocos2dx / platform / android / java / src / org / cocos2dx / lib / cocos2dxhelper.java ,
替换
return Locale.getDefault().getLanguage();
.
与
return Locale.getDefault().toString();
.
因此,您可以获得zh_cn,zh_tw中的ccapplication :: getCurrentlanguage(),也必须更新CCapplication :: GetCurrentLanguage()中的实现(找到Cocos2d-x-2.xx / cocos2dx / platform / android / ccapplication.cpp):
ccLanguageType CCApplication::getCurrentLanguage()
{
std::string languageName = getCurrentLanguageJNI();
if (languageName.find("zh_CN") == 0) {
return kLanguageChineseCN; // need define this value by yourself
} else if (languageName.find("zh_TW") == 0) {
return kLanguageChineseTW; // need define this value by yourself
} else if (languangeName.find("en") == 0) {
return kLanguageEnglish;
} ...
return kLanguageEnglish;
}
. 其他提示
我在Cocos2d HelloWorld上测试了以下代码。我可以通过 zh-hans来分离简化/传统的和 zh-hant 。
step1。在HelloWorldlayer.m中,您需要在顶部添加此行或无法编译:
#import <Foundation/NSLocale.h>
.
step2。现在,你可以得到语言。例如,
-(id)init{
NSString* currentLang = [[NSLocale preferredLanguages] objectAtIndex:0] ;
NSLog(@"Language: %@", currentLang);
}
. 这是我如何修改cocos2d-x代码来区分简化和繁体中文。注意,这适用于Cocos2D-X V3.0 +。
for ios,修改cocos2d_libs.xcodeproj / platform / iOS / ccapplications-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"] || [countryCode isEqualToString:@"TW"]) {
ret = LanguageType::CHINESE_TRADITIONAL; // You need to add these enum values to LanguageType
} else {
ret = LanguageType::CHINESE_SIMPLIFIED; // You need to add these enum values to LanguageType
}
}
else if ([languageCode isEqualToString:@"en"])
{
ret = LanguageType::ENGLISH;
}
.....
.....
.
对于Android,修改Cocos2D / Cocos / platform / Android / CCapplication-Android.cpp
LanguageType Application::getCurrentLanguage()
{
std::string languageName = getCurrentLanguageJNI();
const char* pLanguageName = languageName.c_str();
const char* languageCode = getCurrentLanguageCode();
LanguageType ret = LanguageType::ENGLISH;
if (0 == strcmp("zh", languageCode))
{
/** Change the following lines */
if (languageName.find("TW") != std::string::npos) {
ret = LanguageType::CHINESE_TRADITIONAL;
} else {
ret = LanguageType::CHINESE_SIMPLIFIED;
}
}
else if (0 == strcmp("en", languageCode))
{
ret = LanguageType::ENGLISH;
}
else if (0 == strcmp("fr", languageCode))
.....
.....
.
还修改libcos2d / org / cocos2dx / lib / cocos2dxhelper.java
public static String getCurrentLanguage() {
// This would return language code as well as region code, e.g. zh_CN
return Locale.getDefault().toString();
}
.