iOS,android适用
1,iOS:修改 cocos2d/platform/ios/CCApplication.mm:
const char * Application::getCurrentLanguageCode()
{
static char code[30]={0};
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
const char *code_full = [currentLanguage cStringUsingEncoding:NSASCIIStringEncoding];
log("Application::getCurrentLanguageCode()============code_full:%s",code_full);
// 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];
[languageCode getCString:code maxLength:2 encoding:NSASCIIStringEncoding];
const char *code_short = [languageCode cStringUsingEncoding:NSASCIIStringEncoding];
log("Application::getCurrentLanguageCode()============code_short:%s",code_short);
if (strcmp("zh", code_short) == 0) {
if ([[NSString stringWithUTF8String:code_full] rangeOfString:@"Hant"].location != NSNotFound ||
[[NSString stringWithUTF8String:code_full] rangeOfString:@"zh-HK"].location != NSNotFound ||
[[NSString stringWithUTF8String:code_full] rangeOfString:@"zh-TW"].location != NSNotFound) {
strcpy(code, [@"zh-Hant" UTF8String]);
}else
{
strcpy(code, [@"zh-Hans" UTF8String]);
}
}else
{
strcpy(code, code_short);
}
log("Application::getCurrentLanguageCode()============code:%s",code);
return code;
}
2,adndroid:修改cocos2d/platform/android/CCApplication.cpp
a .增加函数
const char * Application::getCurrentLanguageCode()
{
#define len 7//3
static char code[len]={0};
strncpy(code,getCurrentLanguageJNI().c_str(),len-1);
code[len-1]='\0';
log("android Application::getCurrentLanguageCode()========%s,%s",code,getCurrentLanguageJNI().c_str());
return code;
}
增加函数
extern std::string getCurrentCountryJNI() ;
std::string getCurrentLanguageJNI() {
JniMethodInfo t;
std::string ret("");
if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "getCurrentLanguage", "()Ljava/lang/String;")) {
jstring str = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
ret = JniHelper::jstring2string(str);
t.env->DeleteLocalRef(str);
}
return ret;
}
无须修改
cocos2d/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java:
public static String getCurrentLanguage() {
return Locale.getDefault().getLanguage();
}
4.调用
std::string getLocalLang()
{
bool bFind = false;
t_string lng = cocos2d::Application::getCurrentLanguageCode();
log("loadGameCfg1------------------------------------lang:%s",lng.c_str());
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
if ("zh" == lng) {
t_string countryStr = cocos2d::Application::getInstance()->getCurrentCountry();
if (countryStr == "HK" || countryStr == "TW") {
lng = "zh-Hant";
}else if (countryStr == "CN")
{
lng = "zh-Hans";
}
}
#endif
for(t_ulong i = 0;i<m_strLngs.size();i++)
{
if(lng == m_strLngs[i])//m_string:游戏的多语言 en,es,ja,pt,th,zh-Hant,zh-Hans,ko,de
{
bFind = true;
break;
}
}
if(!bFind)
{
lng = "en";
}
return lng;}