2014年1月3日金曜日

cocos2d-xにおけるローカライズ(多言語対応)方法 CCLocalizedString



明日試してみたいと思うが以下メモを転機させて頂きました。



CCLocalizedString

(今更ですが)ローカライズのときに便利なCCLocalizedString関数を紹介します。iOSではNSLocalizedStringがありましたが、cocos2d-xには存在しません。そこで小 苏氏がCCLocalizedString関数を公開してくれているので、感謝しつつこれを利用しましょう。
ファイルはこちらからダウンロードできます。
http://www.cocos2d-x.org/boards/18/topics/14981?r=15087#message-15087
CCLocalizedString
しかし、最新バージョン(cocos2d-x 2.1.2)で利用するにはソースを編集しなければいけないので、導入手順も含めご紹介します。動作確認はiOSとAndroidで行っています。なお利用方法はNSLocalizedStringと同じです。

導入手順

  1. CCLocalizedString.cppの変更箇所は3ヶ所あります。
14行目 「cocoa/」を追加します。
?
1
#include "cocoa/CCString.h"
30行目 getCurrentLanguage関数の呼び出し方法変更
?
1
ccLanguageType curLanguage = CCApplication::sharedApplication()->getCurrentLanguage();
57行目 fullPathForFilename関数へ変更
?
1
fullPath = CCFileUtils::sharedFileUtils()->fullPathForFilename( fileName );

  1. ソースの配置
CCLocalizedString.h/.cppを
cocos2d-2.1rc0-x-2.1.2/cocos2dx/platform
へ配置します。

  1. cocos2d.hの編集
cocos2d-2.1rc0-x-2.1.2/cocos2dx/include/cocos2d.h
?
1
#include "platform/CCLocalizedString.h"
を追記します。

  1. プロジェクトへの取り込み
  • Androidの場合
cocos2d-2.1rc0-x-2.1.2/cocos2dx/Android.mk
上記ファイルにて、「LOCAL_SRC_FILES」に対して「platform/CCLocalizedString.cpp」を追加します。
?
1
2
LOCAL_SRC_FILES := \
platform/CCLocalizedString.cpp \
  • iOSの場合
Xcode上で、cocos2dxプロジェクトにCCLocalizedString.h/.cppを取り込みます。

利用方法

  1. CCLocalizedString.cppの修正
32行目よりローカライズの言語設定を行います。例えば、英語と日本語(デフォルト英語)に対応するのであれば、次のようにすれば良いでしょう。
?
1
2
3
4
5
6
7
8
switch (curLanguage) {
    case kLanguageJapanese:
        fileName = "Localized_ja";
        break;
    default:
        fileName = "Localized_en";
        break;
}

  1. ローカライズ用のファイルを作成する
1. で設定したファイル名のファイルを、Resourcesディレクトリに配置します。上記の場合は、
  •  Localized_en
  •  Localized_ja
を用意します。
ファイルの中身は
(キー) = “(表示する文字列)”;
の形式で記述します。例えば、キーが「HELLO」表示する文字列が「ハローワールド」の場合、
?
1
HELLO = "ハローワールド";
とします。

  1. ローカライズが必要な箇所にてCCLocalizedString関数を利用する。
CCLocalizedString関数の第1引数はキー、第2引数はコメントとなっています。NSLocalizedStringと同じですね。
?
1
2
string hoge = CCLocalizedString("HELLO", NULL);
string fuga = CCLocalizedString("HELLO", "はろーわーるど");
ただ毎回CCLocalizedStringと書くのは面倒なので、マクロ定義しておけば良いでしょう。
?
1
#define CCLS(key) CCLocalizedString(key, NULL)
すると、ソースがスッキリします。
?
1
string hoge = CCLS("HELLO");

  1. アプリの実行
画像だけでは判り難いですが、OSの言語設定を変更すると日本語と英語が切り替わります。
ローカライズ英語
ローカライズ日本語

0 件のコメント:

コメントを投稿