Cocos2d-x localización simplificado / chino tradicional

Necesito separar chino simplificado / tradicional. En cocos2d para iPhone, simplemente uso "hans" y "hant". Pero en cocos2d-x, me sumerjo en el código y aquí está el código 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; 

Tenga en cuenta que sólo "zh" para el chino (tanto simplificado / tradicional, tal vez)

Así que ¿cómo puedo distinguirlos?

EDIT: Utilizo cocos2d-x y necesito trabajar con android. No sólo el iPhone. La respuesta de Mickey funciona sólo para iPhone. Gracias.

Necesitas hacer algunos cambios en cocos2dx android jni: en cocos2d-x-2.xx / cocos2dx / platform / android / java / src / org / cocos2dx / lib / Cocos2dxHelper.java ,

reemplazar

 return Locale.getDefault().getLanguage(); 

con

 return Locale.getDefault().toString(); 

Por lo tanto, puede obtener zh_CN, zh_TW en CCApplication :: getCurrentLanguage (), también, debe actualizar las implementaciones en CCApplication :: getCurrentLanguage () (localiza 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; } 

He probado el siguiente código en cocos2D helloworld. Puedo separar simplificado / tradicional por zh-Hans y zh-Hant .

Paso 1. En HelloWorldLayer.m, debe agregar esta línea en la parte superior o no puede compilar:

 #import <Foundation/NSLocale.h> 

Paso 2. Ahora, usted puede conseguir el lenguaje. Por ejemplo,

 -(id)init{ NSString* currentLang = [[NSLocale preferredLanguages] objectAtIndex:0] ; NSLog(@"Language: %@", currentLang); } 

He aquí cómo modifiqué el código cocos2d-x para distinguir el chino simplificado y el chino tradicional. Tenga en cuenta que esto es para cocos2d-x v3.0 +.

Para iOS, modifique 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; } ..... ..... 

Para Android, modifique 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)) ..... ..... 

Y también modificar libcocos2d / org / cocos2dx / lib / Cocos2dxHelper.java

 public static String getCurrentLanguage() { // This would return language code as well as region code, eg zh_CN return Locale.getDefault().toString(); } 
  • Localización y travesaños
  • ¿Cómo evitar la dirección automática de texto de derecha a izquierda para el hebreo y el árabe?
  • Mostrar fecha en la ubicación actual
  • Configurar el idioma de la aplicación en Preferencias de Android
  • Aplicación de Android con ActionBar NullPointerException con configuración regional no predeterminada
  • Lengua ucraniana de Android
  • Adición de cotizaciones en Java
  • Quiero mostrar el idioma Reginonal (Gurumukhi) en mi aplicación para Android
  • CyanogenMod: traducir un proyecto
  • Android cambia y establece la configuración regional predeterminada dentro de la aplicación
  • ¿Permitiendo al usuario seleccionar el idioma / la configuración de la aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.