【cocos2dx】アプリをローカライズさせて海外にも売り込もう!

【cocos2dx】アプリをローカライズさせて海外にも売り込もう!
   


前作の「BOOK QUEST- action RPG -iPhone/iPod touch」を出した際に、ローカライズしていないにもかかわらず「海外の方から英語版はないのか」と問い合わせを数件いただいていたので、今作成しているアプリではローカライズさせようと考えていました。
今回は、cocos2dxでローカライズをさせる方法を紹介したいと思います。

ローカライズの基本

日本語の部分を英語などの別の言語に置き換えることを「ローカライズ」といいます。
作業の手間を考えると、ゲームをデザインする段階で、日本語を極力減らせば、このローカライズをする手間も省けます。
これは、どのようなゲームになるかで変わってきます。

例えばRPGなどは、会話の部分が多くなるので、ローカライズをする手間がかかります。


Cocos2dxでローカライズをする


まずは、ローカライズの際に取り出す言葉を書いておくファイルを作成します。
ファイル名は「Localizable.strings」にします。

2013-9-25-fdsds


[File Type]を[Plain Text]にします。

Localizable.strings2013-9-25


[Localization]にあるボタンを押して、ローカライズさせる言語を選択します。

2013-9-25-fdsds


言語を選択したら、Japaneseを含めてチェックをいれると完成です。

2013-9-25-ffsds

ここに、日本語と英語で表示をする言語を書いていきます。

実際に利用する


今回のコードがこちらから参考にしています。
詳しくは本を買って見て下さい。

Cocos2d‐x開発のレシピ―iOS/Android対応Cocos2d‐x開発のレシピ―iOS/Android対応
松浦 晃洋,齊藤 建二,古木 映治

秀和システム
売り上げランキング : 96672

Amazonで詳しく見る


const char *LocalizeController::LocalizedString(const char* searchKey, const char* comment)
{
    using namespace std;
    const char* ret = comment;
    
    static map<string, string> localizable;
    if(localizable.empty()){
        // 言語ディレクトリを検索対象にする
        CCFileUtils* fileUtils = CCFileUtils::sharedFileUtils();
        ccLanguageType lang = CCApplication::sharedApplication()->getCurrentLanguage();
        if (lang == kLanguageEnglish)
        {
            fileUtils->addSearchPath("en.lproj");
        }
        else if (lang == kLanguageJapanese)
        {
            fileUtils->addSearchPath("ja.lproj");
        }
        // 言語ファイルを開く
        unsigned long size;
        string fullpath = fileUtils->fullPathForFilename("Localizable.strings");
        unsigned char* data = fileUtils->getFileData(fullpath.c_str(), "rb", &amp;size);
        if (data == NULL)
        {
            return ret;
        }
        // Localizable.string のパース
        istringstream is((char*)data);
        delete [] data;
        string line;
        while (std::getline(is, line))
        {
            string::size_type sep = line.find('=');
            if (sep != string::npos)
            {
                string key = line.substr(0,sep-1);
                string val = line.substr(sep+1);
                // スペース、セミコロンなどをトリミングする
                key.erase(0, key.find_first_not_of(" \""));
                key.erase(key.find_last_not_of(" \"")+1);
                val.erase(0, val.find_first_not_of(" \""));
                val.erase(val.find_last_not_of(" \";")+1);
                localizable.insert(pair<string, string>(key,val));
            }
        }
    }
    
    // キー値の検索
    map<string,string>::iterator ite = localizable.find(searchKey);
    if (ite != localizable.end())
    {
        ret = CCString::create((ite->second).c_str())->getCString();
    }
    return ret;
}



実際に利用する際には以下のコードを呼び出します。
私は、上記コードを[LocalizeController]クラスに設置して、クラスメソッドとして呼び出しています。


    //引数1は、ローカライズされた言語を呼び出すキーワード。
    //引数2は、キーワードに対しての何も設定されていない場合に呼び出す文字。
    const char*textHellow = LocalizeController::LocalizedString("hello_label", "Hello World");



あらかじめ先ほど作成した「Localizable.strings」にキーワードに対しても文字を、JapaneseとEnglishに設定をしておきます。


//Localizable.strings(Japanese)

/*日本語テスト*/

"hello_label"  = "こんにちは これは日本語バージョンです";







//Localizable.strings(English)
/*English test */

"hello_label"  = "Hello World. this is English version!!";






最後に

このローカライズを使えば、文字だけではなく画像ファイル名を指定して、画像も各言語ごとに変えることができます。
ただ、文字だけではなく、画像を変えるとなると容量が大きくなってしまう恐れがあるので、よく考えてゲームデザインをする必要がありますね。

Related Posts Plugin for WordPress, Blogger...