天天看點

Cocos2d-x多語言支援解決方式

利用.plist檔案讓Cocos2d-x輕松支援多語言。

.plist檔案類似于XML檔案。以下是.plist檔案的一個模版:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>tutorial_on</key>
    <string>Tutorial: ON</string>
    <key>tutorial_off</key>
    <string>Tutorial: OFF</string>
  </dict>
</plist>      

将不同語言儲存在不同的.plist檔案中,例如以下圖:

​​​​

然後在程式中要用到這些字元串的時候用下面宏調用:LocalizedCStringByKey(“tutorial_on”);。宏定義的完整代碼例如以下:

//Language.h

using namespace cocos2d;

//return type:const char*
#define LocalizedCStringByKey(key) Language::getStringByKey(key)

class Language{

public:

    static const char* getStringByKey(const char * key){

        //擷取目前系統環境語言類型
        ccLanguageType languageType = CCApplication::sharedApplication()->getCurrentLanguage();

        //字典
        CCDictionary *pDic;

        if(kLanguageChinese == languageType)
            //依據語言選擇不同的屬性表
           pDic = CCDictionary::createWithContentsOfFile("language/zh.plist");
        else
            pDic = CCDictionary::createWithContentsOfFile("language/en.plist");

        std::string keyStr = key;

        //傳回key相應的value
        return (pDic -> valueForKey(keyStr))->getCString();
    }

};