diff --git a/cocos/base/ccUtils.cpp b/cocos/base/ccUtils.cpp index 9106cc7c5ffc..4db84379f8d5 100644 --- a/cocos/base/ccUtils.cpp +++ b/cocos/base/ccUtils.cpp @@ -440,6 +440,91 @@ std::string getDataMD5Hash(const Data &data) return hexOutput; } +LanguageType getLanguageTypeByISO2(const char* code) +{ + // this function is used by all platforms to get system language + // except windows: cocos/platform/win32/CCApplication-win32.cpp + LanguageType ret = LanguageType::ENGLISH; + + if (strncmp(code, "zh", 2) == 0) + { + ret = LanguageType::CHINESE; + } + else if (strncmp(code, "ja", 2) == 0) + { + ret = LanguageType::JAPANESE; + } + else if (strncmp(code, "fr", 2) == 0) + { + ret = LanguageType::FRENCH; + } + else if (strncmp(code, "it", 2) == 0) + { + ret = LanguageType::ITALIAN; + } + else if (strncmp(code, "de", 2) == 0) + { + ret = LanguageType::GERMAN; + } + else if (strncmp(code, "es", 2) == 0) + { + ret = LanguageType::SPANISH; + } + else if (strncmp(code, "nl", 2) == 0) + { + ret = LanguageType::DUTCH; + } + else if (strncmp(code, "ru", 2) == 0) + { + ret = LanguageType::RUSSIAN; + } + else if (strncmp(code, "hu", 2) == 0) + { + ret = LanguageType::HUNGARIAN; + } + else if (strncmp(code, "pt", 2) == 0) + { + ret = LanguageType::PORTUGUESE; + } + else if (strncmp(code, "ko", 2) == 0) + { + ret = LanguageType::KOREAN; + } + else if (strncmp(code, "ar", 2) == 0) + { + ret = LanguageType::ARABIC; + } + else if (strncmp(code, "nb", 2) == 0) + { + ret = LanguageType::NORWEGIAN; + } + else if (strncmp(code, "pl", 2) == 0) + { + ret = LanguageType::POLISH; + } + else if (strncmp(code, "tr", 2) == 0) + { + ret = LanguageType::TURKISH; + } + else if (strncmp(code, "uk", 2) == 0) + { + ret = LanguageType::UKRAINIAN; + } + else if (strncmp(code, "ro", 2) == 0) + { + ret = LanguageType::ROMANIAN; + } + else if (strncmp(code, "bg", 2) == 0) + { + ret = LanguageType::BULGARIAN; + } + else if (strncmp(code, "be", 2) == 0) + { + ret = LanguageType::BELARUSIAN; + } + return ret; +} + } NS_CC_END diff --git a/cocos/base/ccUtils.h b/cocos/base/ccUtils.h index d613f96e2e56..c850bb380ef9 100644 --- a/cocos/base/ccUtils.h +++ b/cocos/base/ccUtils.h @@ -179,6 +179,14 @@ namespace utils * @return The md5 hash for the data */ CC_DLL std::string getDataMD5Hash(const Data &data); + + /** + @brief Converts language iso 639-1 code to LanguageType enum. + @return LanguageType enum. + * @js NA + * @lua NA + */ + CC_DLL LanguageType getLanguageTypeByISO2(const char* code); } NS_CC_END diff --git a/cocos/platform/CCCommon.h b/cocos/platform/CCCommon.h index 856f8ec64553..5d27ad58893e 100644 --- a/cocos/platform/CCCommon.h +++ b/cocos/platform/CCCommon.h @@ -69,7 +69,8 @@ enum class LanguageType TURKISH, UKRAINIAN, ROMANIAN, - BULGARIAN + BULGARIAN, + BELARUSIAN }; // END of platform group diff --git a/cocos/platform/android/CCApplication-android.cpp b/cocos/platform/android/CCApplication-android.cpp index 9f7573e5fa74..00303ef81900 100644 --- a/cocos/platform/android/CCApplication-android.cpp +++ b/cocos/platform/android/CCApplication-android.cpp @@ -30,6 +30,7 @@ THE SOFTWARE. #include "platform/android/jni/JniHelper.h" #include "platform/CCApplication.h" #include "base/CCDirector.h" +#include "base/ccUtils.h" #include #include #include @@ -111,87 +112,9 @@ const char * Application::getCurrentLanguageCode() LanguageType Application::getCurrentLanguage() { - std::string languageName = JniHelper::callStaticStringMethod(helperClassName, "getCurrentLanguage"); - const char* pLanguageName = languageName.c_str(); - LanguageType ret = LanguageType::ENGLISH; + const char* code = getCurrentLanguageCode(); - if (0 == strcmp("zh", pLanguageName)) - { - ret = LanguageType::CHINESE; - } - else if (0 == strcmp("en", pLanguageName)) - { - ret = LanguageType::ENGLISH; - } - else if (0 == strcmp("fr", pLanguageName)) - { - ret = LanguageType::FRENCH; - } - else if (0 == strcmp("it", pLanguageName)) - { - ret = LanguageType::ITALIAN; - } - else if (0 == strcmp("de", pLanguageName)) - { - ret = LanguageType::GERMAN; - } - else if (0 == strcmp("es", pLanguageName)) - { - ret = LanguageType::SPANISH; - } - else if (0 == strcmp("ru", pLanguageName)) - { - ret = LanguageType::RUSSIAN; - } - else if (0 == strcmp("nl", pLanguageName)) - { - ret = LanguageType::DUTCH; - } - else if (0 == strcmp("ko", pLanguageName)) - { - ret = LanguageType::KOREAN; - } - else if (0 == strcmp("ja", pLanguageName)) - { - ret = LanguageType::JAPANESE; - } - else if (0 == strcmp("hu", pLanguageName)) - { - ret = LanguageType::HUNGARIAN; - } - else if (0 == strcmp("pt", pLanguageName)) - { - ret = LanguageType::PORTUGUESE; - } - else if (0 == strcmp("ar", pLanguageName)) - { - ret = LanguageType::ARABIC; - } - else if (0 == strcmp("nb", pLanguageName)) - { - ret = LanguageType::NORWEGIAN; - } - else if (0 == strcmp("pl", pLanguageName)) - { - ret = LanguageType::POLISH; - } - else if (0 == strcmp("tr", pLanguageName)) - { - ret = LanguageType::TURKISH; - } - else if (0 == strcmp("uk", pLanguageName)) - { - ret = LanguageType::UKRAINIAN; - } - else if (0 == strcmp("ro", pLanguageName)) - { - ret = LanguageType::ROMANIAN; - } - else if (0 == strcmp("bg", pLanguageName)) - { - ret = LanguageType::BULGARIAN; - } - return ret; + return utils::getLanguageTypeByISO2(code); } Application::Platform Application::getTargetPlatform() diff --git a/cocos/platform/ios/CCApplication-ios.mm b/cocos/platform/ios/CCApplication-ios.mm index 2966765904f6..9793cd7ee7d4 100644 --- a/cocos/platform/ios/CCApplication-ios.mm +++ b/cocos/platform/ios/CCApplication-ios.mm @@ -31,6 +31,7 @@ of this software and associated documentation files (the "Software"), to deal #import "math/CCGeometry.h" #import "platform/ios/CCDirectorCaller-ios.h" +#import "base/ccUtils.h" NS_CC_BEGIN @@ -109,26 +110,7 @@ of this software and associated documentation files (the "Software"), to deal NSDictionary* temp = [NSLocale componentsFromLocaleIdentifier:currentLanguage]; NSString * languageCode = [temp objectForKey:NSLocaleLanguageCode]; - if ([languageCode isEqualToString:@"zh"]) return LanguageType::CHINESE; - if ([languageCode isEqualToString:@"en"]) return LanguageType::ENGLISH; - if ([languageCode isEqualToString:@"fr"]) return LanguageType::FRENCH; - if ([languageCode isEqualToString:@"it"]) return LanguageType::ITALIAN; - if ([languageCode isEqualToString:@"de"]) return LanguageType::GERMAN; - if ([languageCode isEqualToString:@"es"]) return LanguageType::SPANISH; - if ([languageCode isEqualToString:@"nl"]) return LanguageType::DUTCH; - if ([languageCode isEqualToString:@"ru"]) return LanguageType::RUSSIAN; - if ([languageCode isEqualToString:@"ko"]) return LanguageType::KOREAN; - if ([languageCode isEqualToString:@"ja"]) return LanguageType::JAPANESE; - if ([languageCode isEqualToString:@"hu"]) return LanguageType::HUNGARIAN; - if ([languageCode isEqualToString:@"pt"]) return LanguageType::PORTUGUESE; - if ([languageCode isEqualToString:@"ar"]) return LanguageType::ARABIC; - if ([languageCode isEqualToString:@"nb"]) return LanguageType::NORWEGIAN; - if ([languageCode isEqualToString:@"pl"]) return LanguageType::POLISH; - if ([languageCode isEqualToString:@"tr"]) return LanguageType::TURKISH; - if ([languageCode isEqualToString:@"uk"]) return LanguageType::UKRAINIAN; - if ([languageCode isEqualToString:@"ro"]) return LanguageType::ROMANIAN; - if ([languageCode isEqualToString:@"bg"]) return LanguageType::BULGARIAN; - return LanguageType::ENGLISH; + return utils::getLanguageTypeByISO2([languageCode UTF8String]); } diff --git a/cocos/platform/linux/CCApplication-linux.cpp b/cocos/platform/linux/CCApplication-linux.cpp index 0e27e79a191e..6472320b998e 100644 --- a/cocos/platform/linux/CCApplication-linux.cpp +++ b/cocos/platform/linux/CCApplication-linux.cpp @@ -31,6 +31,7 @@ THE SOFTWARE. #include #include #include "base/CCDirector.h" +#include "base/ccUtils.h" #include "platform/CCFileUtils.h" NS_CC_BEGIN @@ -184,7 +185,6 @@ const char * Application::getCurrentLanguageCode() LanguageType Application::getCurrentLanguage() { char *pLanguageName = getenv("LANG"); - LanguageType ret = LanguageType::ENGLISH; if (!pLanguageName) { return LanguageType::ENGLISH; @@ -195,84 +195,7 @@ LanguageType Application::getCurrentLanguage() return LanguageType::ENGLISH; } - if (0 == strcmp("zh", pLanguageName)) - { - ret = LanguageType::CHINESE; - } - else if (0 == strcmp("en", pLanguageName)) - { - ret = LanguageType::ENGLISH; - } - else if (0 == strcmp("fr", pLanguageName)) - { - ret = LanguageType::FRENCH; - } - else if (0 == strcmp("it", pLanguageName)) - { - ret = LanguageType::ITALIAN; - } - else if (0 == strcmp("de", pLanguageName)) - { - ret = LanguageType::GERMAN; - } - else if (0 == strcmp("es", pLanguageName)) - { - ret = LanguageType::SPANISH; - } - else if (0 == strcmp("nl", pLanguageName)) - { - ret = LanguageType::DUTCH; - } - else if (0 == strcmp("ru", pLanguageName)) - { - ret = LanguageType::RUSSIAN; - } - else if (0 == strcmp("ko", pLanguageName)) - { - ret = LanguageType::KOREAN; - } - else if (0 == strcmp("ja", pLanguageName)) - { - ret = LanguageType::JAPANESE; - } - else if (0 == strcmp("hu", pLanguageName)) - { - ret = LanguageType::HUNGARIAN; - } - else if (0 == strcmp("pt", pLanguageName)) - { - ret = LanguageType::PORTUGUESE; - } - else if (0 == strcmp("ar", pLanguageName)) - { - ret = LanguageType::ARABIC; - } - else if (0 == strcmp("nb", pLanguageName)) - { - ret = LanguageType::NORWEGIAN; - } - else if (0 == strcmp("pl", pLanguageName)) - { - ret = LanguageType::POLISH; - } - else if (0 == strcmp("tr", pLanguageName)) - { - ret = LanguageType::TURKISH; - } - else if (0 == strcmp("uk", pLanguageName)) - { - ret = LanguageType::UKRAINIAN; - } - else if (0 == strcmp("ro", pLanguageName)) - { - ret = LanguageType::ROMANIAN; - } - else if (0 == strcmp("bg", pLanguageName)) - { - ret = LanguageType::BULGARIAN; - } - - return ret; + return utils::getLanguageTypeByISO2(pLanguageName); } NS_CC_END diff --git a/cocos/platform/mac/CCApplication-mac.mm b/cocos/platform/mac/CCApplication-mac.mm index ddf1819d9df8..bfae1e348561 100644 --- a/cocos/platform/mac/CCApplication-mac.mm +++ b/cocos/platform/mac/CCApplication-mac.mm @@ -29,10 +29,11 @@ of this software and associated documentation files (the "Software"), to deal #import #include -#import "platform/CCApplication.h" +#include "platform/CCApplication.h" #include "platform/CCFileUtils.h" #include "math/CCGeometry.h" #include "base/CCDirector.h" +#include "base/ccUtils.h" NS_CC_BEGIN @@ -173,27 +174,7 @@ static long getCurrentMillSecond() NSDictionary* temp = [NSLocale componentsFromLocaleIdentifier:currentLanguage]; NSString * languageCode = [temp objectForKey:NSLocaleLanguageCode]; - if ([languageCode isEqualToString:@"zh"]) return LanguageType::CHINESE; - if ([languageCode isEqualToString:@"en"]) return LanguageType::ENGLISH; - if ([languageCode isEqualToString:@"fr"]) return LanguageType::FRENCH; - if ([languageCode isEqualToString:@"it"]) return LanguageType::ITALIAN; - if ([languageCode isEqualToString:@"de"]) return LanguageType::GERMAN; - if ([languageCode isEqualToString:@"es"]) return LanguageType::SPANISH; - if ([languageCode isEqualToString:@"nl"]) return LanguageType::DUTCH; - if ([languageCode isEqualToString:@"ru"]) return LanguageType::RUSSIAN; - if ([languageCode isEqualToString:@"ko"]) return LanguageType::KOREAN; - if ([languageCode isEqualToString:@"ja"]) return LanguageType::JAPANESE; - if ([languageCode isEqualToString:@"hu"]) return LanguageType::HUNGARIAN; - if ([languageCode isEqualToString:@"pt"]) return LanguageType::PORTUGUESE; - if ([languageCode isEqualToString:@"ar"]) return LanguageType::ARABIC; - if ([languageCode isEqualToString:@"nb"]) return LanguageType::NORWEGIAN; - if ([languageCode isEqualToString:@"pl"]) return LanguageType::POLISH; - if ([languageCode isEqualToString:@"tr"]) return LanguageType::TURKISH; - if ([languageCode isEqualToString:@"uk"]) return LanguageType::UKRAINIAN; - if ([languageCode isEqualToString:@"ro"]) return LanguageType::ROMANIAN; - if ([languageCode isEqualToString:@"bg"]) return LanguageType::BULGARIAN; - return LanguageType::ENGLISH; - + return utils::getLanguageTypeByISO2([languageCode UTF8String]); } bool Application::openURL(const std::string &url) diff --git a/cocos/platform/tizen/CCApplication-tizen.cpp b/cocos/platform/tizen/CCApplication-tizen.cpp index 0ec0b545b1e6..91554c7ea516 100644 --- a/cocos/platform/tizen/CCApplication-tizen.cpp +++ b/cocos/platform/tizen/CCApplication-tizen.cpp @@ -41,6 +41,7 @@ #include "base/CCDirector.h" #include "base/CCEventKeyboard.h" #include "base/CCEventDispatcher.h" +#include "base/ccUtils.h" #include "platform/CCFileUtils.h" #ifdef LOG_TAG @@ -603,7 +604,6 @@ std::string Application::getVersion() LanguageType Application::getCurrentLanguage() { char *pLanguageName = getenv("LANG"); - LanguageType ret = LanguageType::ENGLISH; if (!pLanguageName) { return LanguageType::ENGLISH; @@ -614,68 +614,7 @@ LanguageType Application::getCurrentLanguage() return LanguageType::ENGLISH; } - if (0 == strcmp("zh", pLanguageName)) - { - ret = LanguageType::CHINESE; - } - else if (0 == strcmp("en", pLanguageName)) - { - ret = LanguageType::ENGLISH; - } - else if (0 == strcmp("fr", pLanguageName)) - { - ret = LanguageType::FRENCH; - } - else if (0 == strcmp("it", pLanguageName)) - { - ret = LanguageType::ITALIAN; - } - else if (0 == strcmp("de", pLanguageName)) - { - ret = LanguageType::GERMAN; - } - else if (0 == strcmp("es", pLanguageName)) - { - ret = LanguageType::SPANISH; - } - else if (0 == strcmp("nl", pLanguageName)) - { - ret = LanguageType::DUTCH; - } - else if (0 == strcmp("ru", pLanguageName)) - { - ret = LanguageType::RUSSIAN; - } - else if (0 == strcmp("ko", pLanguageName)) - { - ret = LanguageType::KOREAN; - } - else if (0 == strcmp("ja", pLanguageName)) - { - ret = LanguageType::JAPANESE; - } - else if (0 == strcmp("hu", pLanguageName)) - { - ret = LanguageType::HUNGARIAN; - } - else if (0 == strcmp("pt", pLanguageName)) - { - ret = LanguageType::PORTUGUESE; - } - else if (0 == strcmp("ar", pLanguageName)) - { - ret = LanguageType::ARABIC; - } - else if (0 == strcmp("nb", pLanguageName)) - { - ret = LanguageType::NORWEGIAN; - } - else if (0 == strcmp("pl", pLanguageName)) - { - ret = LanguageType::POLISH; - } - - return ret; + return utils::getLanguageTypeByISO2(pLanguageName); } NS_CC_END diff --git a/cocos/platform/win32/CCApplication-win32.cpp b/cocos/platform/win32/CCApplication-win32.cpp index dc6248ef4dce..6ee0b8c685cd 100644 --- a/cocos/platform/win32/CCApplication-win32.cpp +++ b/cocos/platform/win32/CCApplication-win32.cpp @@ -236,6 +236,9 @@ LanguageType Application::getCurrentLanguage() case LANG_BULGARIAN: ret = LanguageType::BULGARIAN; break; + case LANG_BELARUSIAN: + ret = LanguageType::BELARUSIAN; + break; } return ret; diff --git a/cocos/platform/winrt/CCApplication.cpp b/cocos/platform/winrt/CCApplication.cpp index ca37f228ec74..606e40cc9152 100644 --- a/cocos/platform/winrt/CCApplication.cpp +++ b/cocos/platform/winrt/CCApplication.cpp @@ -140,83 +140,9 @@ const char * Application::getCurrentLanguageCode() LanguageType Application::getCurrentLanguage() { - LanguageType ret = LanguageType::ENGLISH; - const char* code = getCurrentLanguageCode(); - - if (strncmp(code, "zh", 2) == 0) - { - ret = LanguageType::CHINESE; - } - else if (strncmp(code, "ja", 2) == 0) - { - ret = LanguageType::JAPANESE; - } - else if (strncmp(code, "fr", 2) == 0) - { - ret = LanguageType::FRENCH; - } - else if (strncmp(code, "it", 2) == 0) - { - ret = LanguageType::ITALIAN; - } - else if (strncmp(code, "de", 2) == 0) - { - ret = LanguageType::GERMAN; - } - else if (strncmp(code, "es", 2) == 0) - { - ret = LanguageType::SPANISH; - } - else if (strncmp(code, "nl", 2) == 0) - { - ret = LanguageType::DUTCH; - } - else if (strncmp(code, "ru", 2) == 0) - { - ret = LanguageType::RUSSIAN; - } - else if (strncmp(code, "hu", 2) == 0) - { - ret = LanguageType::HUNGARIAN; - } - else if (strncmp(code, "pt", 2) == 0) - { - ret = LanguageType::PORTUGUESE; - } - else if (strncmp(code, "ko", 2) == 0) - { - ret = LanguageType::KOREAN; - } - else if (strncmp(code, "ar", 2) == 0) - { - ret = LanguageType::ARABIC; - } - else if (strncmp(code, "nb", 2) == 0) - { - ret = LanguageType::NORWEGIAN; - } - else if (strncmp(code, "pl", 2) == 0) - { - ret = LanguageType::POLISH; - } - else if (strncmp(code, "tr", 2) == 0) - { - ret = LanguageType::TURKISH; - } - else if (strncmp(code, "uk", 2) == 0) - { - ret = LanguageType::UKRAINIAN; - } - else if (strncmp(code, "ro", 2) == 0) - { - ret = LanguageType::ROMANIAN; - } - else if (strncmp(code, "bg", 2) == 0) - { - ret = LanguageType::BULGARIAN; - } - return ret; + + return utils::getLanguageTypeByISO2(code); } Application::Platform Application::getTargetPlatform() diff --git a/cocos/scripting/js-bindings/script/jsb_boot.js b/cocos/scripting/js-bindings/script/jsb_boot.js index 5b463222f55e..dbbed11d199a 100644 --- a/cocos/scripting/js-bindings/script/jsb_boot.js +++ b/cocos/scripting/js-bindings/script/jsb_boot.js @@ -1087,6 +1087,14 @@ var _initSys = function () { */ sys.LANGUAGE_BULGARIAN = "bg"; + /** + * Belarusian language code + * @constant + * @default + * @type {Number} + */ + sys.LANGUAGE_BELARUSIAN = "be"; + /** * Unknown language code * @memberof cc.sys @@ -1375,6 +1383,7 @@ var _initSys = function () { case 16: return sys.LANGUAGE_UKRAINIAN; case 17: return sys.LANGUAGE_ROMANIAN; case 18: return sys.LANGUAGE_BULGARIAN; + case 19: return sys.LANGUAGE_BELARUSIAN; default : return sys.LANGUAGE_ENGLISH; } })(); diff --git a/cocos/scripting/lua-bindings/script/cocos2d/Cocos2dConstants.lua b/cocos/scripting/lua-bindings/script/cocos2d/Cocos2dConstants.lua index 67b9f411f974..66a2b4c1c688 100644 --- a/cocos/scripting/lua-bindings/script/cocos2d/Cocos2dConstants.lua +++ b/cocos/scripting/lua-bindings/script/cocos2d/Cocos2dConstants.lua @@ -208,6 +208,7 @@ cc.LANGUAGE_TURKISH = 15 cc.LANGUAGE_UKRAINIAN = 16 cc.LANGUAGE_ROMANIAN = 17 cc.LANGUAGE_BULGARIAN = 18 +cc.LANGUAGE_BELARUSIAN = 19 cc.NODE_ON_ENTER = 0 cc.NODE_ON_EXIT = 1