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.

Était-ce utile?

La solution

Vous devez faire quelques modifications dans Cocos2DX Android JNI: dans cocos2d-x-2.x.x / cocos2dx / plate-forme / Android / Java / src / org / cocos2dx / lib / cocos2dxhelper.java ,

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();
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top