cocos2d-x localización chino simplificado/tradicional
Frecuentes
Visto 2,407 veces
4
necesito separar chino simplificado/tradicional. en cocos2d para iPhone, simplemente uso "hans" y "hant". pero en cocos2d-x, me sumergí en el código y aquí está el código para 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 solo 'zh' para chino (ambos simplificado/tradicional, tal vez)
Entonces, ¿cómo puedo distinguirlos?
EDITAR: uso cocos2d-x y necesito trabajar con Android. no solo iPhone. La respuesta de Mickey solo funciona para iPhone. Gracias.
3 Respuestas
2
Probé 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 compilar:
#import <Foundation/NSLocale.h>
Paso 2. Ahora, usted puede obtener el idioma. Por ejemplo,
-(id)init{
NSString* currentLang = [[NSLocale preferredLanguages] objectAtIndex:0] ;
NSLog(@"Language: %@", currentLang);
}
contestado el 25 de mayo de 12 a las 10:05
1
Así es como modifiqué el código cocos2d-x para distinguir el chino simplificado y el 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 modifique 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();
}
Respondido 03 Oct 16, 19:10
Hay un error en el código, cuando verifique para comparar el código, debe buscar un código de país de TW o HK para considerarlo chino tradicional. Hans es el de simplificado. (Para la versión de iOS). ¿Y no debería buscar HK en el nombre del idioma para la versión de Android también? - Pocos
@Chiquis tiene razón. La condición de iOS debe actualizarse a [scriptCode isEqualToString:@"Hant"] || [el código del país es igual a la cadena: @"HK"] || [el código de país es igual a la cadena: @"TW"] - BoJIHa npocmombI
Gracias Chiquis y BoJIHa, actualicé la condición en iOS. Para Android, no es necesario verificar la subcadena HK, ya que solo hay zh_rCN y zh_rTW para distinguir el chino simplificado del chino tradicional. - marcwjj
0
Necesitas hacer algunos cambios en cocos2dx android jni: en cocos2d-x-2.x.x/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(), además, 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;
}
Respondido 13 ago 13, 10:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android iphone localization cocos2d-iphone cocos2d-x or haz tu propia pregunta.
Yo uso cocos2d-x, no cocos2d. - OMGPOP