Xamarin.Formsで多言語対応する方法
Xamarin.Formsで多言語対応する方法をご紹介します。
スマホの言語設定に応じて、アプリの表示言語を切り替えます。
目次
条件
- Xamarin.Forms
- Visual Studio 2019
- SHARP SH-M12(Android 9.0 – API 28)
Resxファイルの作成
共通プロジェクトにResxファイルを追加します。
追加 > 新しい項目の追加 を選択して追加を行います。
しかし、肝心のResxファイルが候補にありません。
必要なコンポーネントのインストール
Resxファイルを項目の追加に表示させるためには、「.NET デスクトップ開発」がインストールされている必要があります。
Visual Studio インストーラを起動し、Visual Studio 2019の変更を選択します。
「.NET デスクトップ開発」をチェックし、「ダウンロードしながらインストール」を実行します。
以上で、Resxファイルを追加できるようになります。
言語別のResxファイル追加
AppResources.resxをResxフォルダの下に作成します。
- 右上の「アクセス修飾子」で”Public”を選択します。
- 名前と値を設定します。
さらに、表示したい言語設定分のresxファイルを追加します。
ここでは、以下2つを追加しました。
- AppResources.en.resx
- AppResources.en-US.resx
それぞれのファイルに、言語ごとの名前と値を設定します。
また、右上の「アクセス修飾子」は”コード生成なし”とします。
既定のカルチャを指定
共通プロジェクトのAssemblyInfo.csに、NeutralResourcesLanguageを指定します。
ここでは、「[assembly: NeutralResourcesLanguage(“ja-JP”)]」を追記しました。
using System.Resources; using Xamarin.Forms.Xaml; [assembly: XamlCompilation(XamlCompilationOptions.Compile)] [assembly: NeutralResourcesLanguage("ja-JP")]
xamlファイルでの指定
ContentPageタグに「xmlns:resources=”clr-namespace:LangTest.Resx”」を追記します。
(自分の環境に応じて、適宜変更して下さい。)
また、表示するテキストは「{x:Static resources:AppResources.値}」で設定します。
以下は、MainPage.xamlでの設定例です。
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:resources="clr-namespace:LangTest.Resx" x:Class="LangTest.MainPage"> <StackLayout> <Label Text="{x:Static resources:AppResources.SampleText}" FontSize="Large" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" /> </StackLayout> </ContentPage>
動作結果
スマホの言語設定が「日本語」の場合
スマホの言語設定が「日本語」であることを確認します。
アプリを実行すると、日本語(AppResources.resxで設定した値)で表示されます。
スマホの言語設定が「English(United Kingdom)」の場合
スマホの言語設定が「English(United Kingdom)」であることを確認します。
アプリを実行すると、AppResources.en.resxで設定した値で表示されます。
スマホの言語設定が「English(United States)」の場合
スマホの言語設定が「English(United States)」であることを確認します。
アプリを実行すると、AppResources.en-US.resxで設定した値で表示されます。