12
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

RubyMotionで多言語対応する方法

RubyMotionで多言語対応するためにはresourcesディレクトリ配下に、言語に応じたディレクトリと、それぞれの言語で使用する設定ファイルを配置する必要があります。

ディレクトリ構造

例えば日本語版と英語版を作る場合には以下のようにディレクトリを作成します。それぞれja.lprojディレクトリが日本語版、en.lprojディレクトリが英語版を指します。

[RUBY_MOTION_ROOT]
  └/resources
    ├── /ja.lproj
    │     ├── InfoPlist.strings
    │     └── Localizable.strings
    └── /en.lproj
          ├── InfoPlist.strings
          └── Localizable.strings

InfoPlist.strings

InfoPlist.stringsファイルには言語別のアプリ名を設定します。

  • CFBundleName
    • そのアプリであることが分かる16字未満の値を設定します。
  • CFBundleDisplayName
    • アイコンの下に表示されるアプリ名を設定します。
ja.proj/InfoPlist.strings
CFBundleName = "日本語ですよ";
CFBundleDisplayName = "日本語";
en.proj/InfoPlist.strings
CFBundleName = "English Ver";
CFBundleDisplayName = "English";

Localizable.strings

Localizable.stringsファイルには言語別にアプリ内で使用する文字列を設定します。

形式は以下の通りです。

"key" = "value";
ja.proj/Localizable.strings
"run" = "実行";
"build" = "ビルド";
"stop" = "中止";
en.proj/Localizable.strings
"run" = "Run";
"build" = "Build";
"stop" = "Stop";

アプリ内で使用する場合

ObjectiveCではNSLocalizedString((NSString *)key, (NSString *)comment)でキーを指定して使用することができますが、どうやらこのメソッドはマクロのようで、RubyMotionから使用することができません。

使用する場合は自分でNSBundleから取得する方法と、BubbleWrapを使用する方法があります。

NSBundleを使用する場合

以下のようなコードを読み込んでおくと便利です。(RubyMotionフォーラムからの引用です

module Kernal
  def localized_string(*args)
    key     = args.shift
    default = args.shift || key
    NSBundle.mainBundle.localizedStringForKey(key, value:default, table:nil)
  end
end

BubbleWrapを使用する場合

以下のようなコードでローカライズされた文字列を取得することができます。

BW::localized_string(:run, 'Run')

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
12
Help us understand the problem. What are the problem?