Localisation Cocos2D-X Simplifiée / Chinois traditionnel
-
12-12-2019 - |
Question
J'ai besoin de séparer les chinois simplifiés / traditionnels.Dans Cocos2D pour iPhone, j'utilise simplement "Hans" et "Hant".Mais dans CocOS2D-X, je plonge dans le code et voici le code de 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;
Notez que seulement 'ZH' pour le chinois (simplifié / traditionnel, peut-être)
Alors, comment puis-je les distinguer?
EDIT: J'utilise Cocos2D-X et j'ai besoin de travailler avec Android.pas seulement iPhone.La réponse de Mickey fonctionne uniquement pour iPhone uniquement.Merci.
La solution
Vous devez faire quelques modifications dans Cocos2DX Android JNI:
dans
remplacer
return Locale.getDefault().getLanguage();
avec
return Locale.getDefault().toString();
Ainsi, vous pouvez obtenir zh_cn, zh_tw in ccappllication :: getcurrentLanguage (), vous devez également mettre à jour les implémentations dans CCApplication :: getCurrentLanguage () (localise cocos2d-x-2.xx / cocos2dx / plate-forme / 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;
}
Autres conseils
J'ai testé le code suivant sur Cocos2D Helloworld.Je peux séparer simplifié / traditionnel par zh-hans et zh-hant .
.Step1.Dans helloworldlayer.m, vous devez ajouter cette ligne en haut ou ne pas compiler:
#import <Foundation/NSLocale.h>
Step2.Maintenant, vous pouvez obtenir une langue.Par exemple,
-(id)init{
NSString* currentLang = [[NSLocale preferredLanguages] objectAtIndex:0] ;
NSLog(@"Language: %@", currentLang);
}
Voici comment j'ai modifié le code COCOS2D-X pour distinguer les chinois simplifiés et traditionnels.Remarque, ceci est pour Cocos2D-X v3.0 +.
pour iOS, modifier COCOS2D_LIBS.XCODEPROJ / 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"] || [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;
}
.....
.....
pour Android, modifiez 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))
.....
.....
et modifier également libcocos2d / 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();
}