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で設定した値で表示されます。

参考

Microsoft:Xamarin.Forms での文字列とイメージのローカライズ

https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/app-fundamentals/localization/text?pivots=windows

Add New Item –> Resource File (.RESX) missing

https://developercommunity.visualstudio.com/content/problem/85616/add-new-item-resource-file-resx-missing.html

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です