アプリを国際化するために、Xamarin.iOSで日本語と英語で多言語化する場合を例示します。
ラベルとアプリケーションの表示名をローカライズしてみます。

既定のアプリケーション名

アプリケーション名はプロジェクトのプロパティから定義します。

 

画面

以下のようにラベルを定義したとします。
LocalizedStringで多言語のキーを指定します。

public override void ViewDidLoad()
{
    base.ViewDidLoad();
 
    // 背景色を変更
    base.View.BackgroundColor = UIColor.White;
  
    // ラベルを作成
    float width = UIScreen.MainScreen.Bounds.Width * 0.5f;
    _label = new UILabel(new RectangleF(width * 0.5f, 100f, width, 20f));
    _label.Text = NSBundle.MainBundle.LocalizedString("HelloLabel""Comment");
    _label.TextAlignment = UITextAlignment.Center;
    _label.TextColor = UIColor.Black;
  
    // 親Viewに追加
    base.View.AddSubview(_label);
}

 

ローカライズ用ファイルの作成

プロジェクトのResourcesフォルダに以下のフォルダを追加します。

  • en.lproj
  • ja.lproj


それぞれのフォルダ内に以下のファイルを追加します。
Visual Studioからだと難しいので、テキストファイルを直接配置してプロジェクトに取り込みます。
取り込んだらビルドアクションを「BundleResource」に変更します。

  • Localizable.strings
  • InfoPlist.strings

※余談※
プロジェクト直下にフォルダを配置し、ビルドアクションが「コンテンツ」でも多言語化は可能です。
ただ、クラスライブラリ内で多言語化する場合は「BundleResource」でなければいけません。


本サイトでは多言語化のファイルはXMLを使用しています。
文字コードはUTF-8で保存します。

まずはアプリケーション名のローカライズです。
en.lproj/InfoPlist.strings

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>CFBundleDisplayName</key>
        <string>Hello World</string>
    </dict>
</plist>


ja.lproj/InfoPlist.strings

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>CFBundleDisplayName</key>
        <string>ハロー</string>
    </dict>
</plist>

 

アプリ内で使用する文字のローカライズです。
複数定義する場合はkeyとstringを連続して追加します。
en.lproj/Localizable.strings

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>HelloLabel</key>
    <string>Hello!</string>
  </dict>
</plist>


ja.lproj/Localizable.strings

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>HelloLabel</key>
    <string>こんにちわ♪</string>
  </dict>
</plist>

 

シミュレータで実行してみましょう。
インストール直後のシミュレータは英語なので、英語のローカライズ文字が表示されます。


ホームボタンを押してアイコンを表示すると、アプリケーション名も英語でローカライズされています。


ここで、シミュレータの言語を日本語に変更してみます(手順は割愛)。
再度アプリを開くと日本語で表示されました♪
アプリ名も日本語になってます。


登録言語の種類

ローカライズした場合、対応しない言語ではどうなるかが大事だったりします。
シミュレータだと過去に選んだ言語順で最初に合致した言語になるようですが、iPhone(実機)だと英語になるようです。
このため、必ず英語を含めておくと良いと思います。