cocos2d-xでNSLocalizedStringのようなローカライズ

cocos2d-xで多言語対応させたい場合、iOSのNSLocalizedStringのようなクラスが欲しくなるのだけど、そうしたクラスは標準では用意されていないようだ。
そこで自前で用意する。

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

こちらのブログを参考にさせて頂きました。
ありがとうございます。

ただ、ここに記述されたコードでは、ローカライズ対象の文章に ” を含めたい場合に、上手くいかない場合がある。
たとえば "ABC" のように、""で囲ったテキストを使いたい場合。
Localizable.stringsに "key" = ""ABC""; と記述したいところだけど、これだと取り出されるテキストは ABC となってしまう。
"key" = "value";のvalueの両端にある"はカットされてしまうのだ。

これでは都合が悪かったので、上記のコードを元に自前で作成してみたコードが以下。

CCLocalizedString.h


CCLocalizedString.cpp


使い方はalbatrus.comさんのコードと同じです。
仕様としては、

  1. Localizable.stringsを1行ずつパースします。
    1行ごとに"key" = "value";で記述してください。

  2. 各行の先頭と末尾のスペースはカットします。

  3. コメントアウトに対応しています。
    // で始まる行と、 /* で始まる行から */ で終わる行までを無視します。

  4. keyとvalueは、最初の = で分割します。
    なので、keyに=を含めることはできません。
    valueには = を含めても問題ありません。

  5. 末尾の ; は有っても無くても同じです。
    keyとvalueを""で囲む必要もありません。
    "key" = "value";(標準)も、"key" = "value"(末尾に;なし)も、key = value""で囲まない)もkey=value(=の前後にスペース無し)もすべて同じです。

  6. "はそのまま使えます。
    "key" = ""ABC"";"key" = "ABC"EFG";も問題ありません。

  7. "をそのまま使うのが気持ち悪い人は\"にも対応しています。
    "key" = "\"ABC\"";"key" = "ABC\"EFG";のように。

  8. 事前にパースしておきたいケースもあるだろうと、CCLocalizedString::init()を用意しました。
    明示的に使わない場合は、最初にCCLocalizedString::localizedStringを呼び出したときに自動で呼ばれます。

以上です。
見よう見まねで作ったので、なにか不備等あれば教えてください。


コメントを残す