CocosBuilderとローカライズ

CocosBuilderを使うと画面上にラベルを表示してアニメーションさせたりが非常に簡単になりますが、
ローカライズはどうするのかなと思っていました。

とりあえずベストなやり方がわからなかったので、CocosBuilder上は日本語で作っておいて、
cocos2d-xのプログラム上で言語設定を見て、英語の場合はラベルを英語に置き換えるようにしました。

もっといい方法があるかもしれません。


今回使用したバージョン

  • cocos2d-2.1beta3-x-2.1.1
  • CocosBuilder3.0a


実装方法
Layerが初期化されたタイミングで言語設定を見て判別したいのですが、initメソッドではCocosBuilderのLayerがまだロードされていないのか、うまくいきません。
なのでCCNodeLoaderListenerを継承してonNodeLoadedを実装します。

HogeLayer.h

// CCNodeLoaderListener継承
class HogeLayer : public CCLayer, public CCNodeLoaderListener
{
public:
	CCBAnimationManager* mAnimationManager;
	
	HogeLayer();
	virtual ~HogeLayer();
	
	virtual bool init();
	
	// onNodeLoaded
	virtual void onNodeLoaded(cocos2d::CCNode * pNode, cocos2d::extension::CCNodeLoader * pNodeLoader);
	
	CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(TitleLayer,create);
	
	void setAnimationManager(CCBAnimationManager *pAnimationManager);
};

HogeLayer.cpp

// ロード後
void HogeLayer::onNodeLoaded(cocos2d::CCNode *pNode, cocos2d::extension::CCNodeLoader *pNodeLoader)
{
	// 日本語以外の場合のローカライズ
	if(CCApplication::sharedApplication()->getCurrentLanguage() != kLanguageJapanese)
	{
		CCLabelBMFont *titleLabel = (CCLabelBMFont *)this->getChildByTag(10);
		titleLabel->setString("English title!");
	}
}

Nodeがロードされたタイミングで、日本語以外の場合はラベルをそれぞれ別の言語に置きかえます。
上の例ではTagを使ってCCLabelBMFontを取得していますが、onAssignCCBMemberVariableを使って事前に紐付けておいても大丈夫です。

ちなみにcocos2d-x 2.0.4以前ではkLanguageJapaneseの定義がないので、追加が必要です。
その場合、このサイトが参考になります。
tks2.net - このウェブサイトは販売用です! - 講演 依頼 開発 イラスト ウェブ 作成 ソフトウェア デザイン リソースおよび情報