mcpField
M
maui-localization

maui-localization

github.com/davidortinau開発17653 回インストール16 週間前に更新
リポジトリ

maui-localization について

.NET MAUI アプリのローカライズや実行時の言語切り替えを行う開発者向けのガイドです。リソース設定、カルチャ設定、RTL レイアウト、プラットフォームごとの宣言を扱います。

主な機能

  1. 01NeutralLanguage とリソースファイルの設定
  2. 02各プラットフォームの対応言語宣言
  3. 03実行時のカルチャ設定切り替え
  4. 04バインディングによる UI テキスト更新
  5. 05RTL ページレイアウトの設定

活用シーン

  1. 01MAUI アプリへの多言語文字列の追加
  2. 02実行時の言語切り替え実装
  3. 03プラットフォームの言語一覧やリソース生成の調査
  4. 04RTL 言語とローカライズされた書式への対応

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davidortinau/maui-skills --skill maui-localization

インストール後、Claude Code で/maui-localizationを入力して読み込まれたか確認します。

同梱ファイルreferences/localization-api.md

詳細

.NET MAUI のローカライズ

よくある注意点

問題解決方法
既定のカルチャで ResourceManager が null を返す.csproj に <NeutralLanguage>en-US</NeutralLanguage> を設定します
iOS でカルチャのオーバーライドが無視されるInfo.plist に CFBundleLocalizations がありません
Windows で正しい言語が表示されないPackage.appxmanifest に <Resource Language="..." /> がありません
言語切り替え時に x:Static バインディングが更新されないx:Static は一度だけ評価されます。INotifyPropertyChanged を使ったバインディング方式を使用します
VS Code で .Designer.cs が再生成されない<CoreCompileDependsOn>PrepareResources;$(CoreCompileDependsOn)</CoreCompileDependsOn> を追加し、dotnet build を実行します

⚠️ NeutralLanguage は必須です


<PropertyGroup>
  <NeutralLanguage>en-US</NeutralLanguage>
</PropertyGroup>


プラットフォームごとの宣言 — 忘れずに設定してください

iOS / Mac Catalyst

⚠️ これを設定しないと、iOS のシステム設定でアプリの言語を選択できません。


<key>CFBundleLocalizations</key>
<array>
  <string>en</string>
  <string>es</string>
  <string>fr</string>
</array>
Windows

<Resources>
  <Resource Language="en-US" />
  <Resource Language="es" />
  <Resource Language="fr-FR" />
</Resources>
Android

Android では .resx ベースのローカライズが自動的に適用されます。マニフェストに追加のエントリは不要です。✅

実行時の言語切り替え — x:Static の落とし穴


<Label Text="{x:Static resx:AppResources.WelcomeMessage}" />


<Label Text="{Binding [WelcomeMessage], Source={x:Static local:LocalizationResourceManager.Instance}}" />

カルチャを切り替える際、書式設定に一貫性を持たせるには、次の3つすべてのプロパティを設定します。

// ✅ Complete culture switch
var culture = new CultureInfo("es");
CultureInfo.CurrentUICulture = culture;  // resource lookup
CultureInfo.CurrentCulture = culture;     // dates/numbers
AppResources.Culture = culture;           // ResourceManager

// ❌ Only sets UI culture — dates/numbers stay in old culture
CultureInfo.CurrentUICulture = new CultureInfo("es");

RTL レイアウト — ページレベルで FlowDirection を設定する


<ContentPage FlowDirection="RightToLeft">
  <StackLayout FlowDirection="MatchParent" />
</ContentPage>


<ContentPage>
  <StackLayout FlowDirection="RightToLeft" />
</ContentPage>

VS Code での注意点

⚠️ 保存時に .Designer.cs が再生成されない場合があります。.csproj に追加し、.resx の変更後に dotnet build を実行してください。

<CoreCompileDependsOn>PrepareResources;$(CoreCompileDependsOn)</CoreCompileDependsOn>

選択の目安

要件方法
静的な多言語文字列.resx ファイルと x:Static バインディング
実行時の言語切り替えINotifyPropertyChanged バインディングを使う LocalizationResourceManager
カルチャ固有の画像画像に banner_{culture}.png という名前を付けるか、パスを .resx に保存します
RTL のサポートページレベルで FlowDirection を設定し、TextInfo.IsRightToLeft で判定します
日付/数値の書式設定CurrentUICulture とともに CultureInfo.CurrentCulture を設定します

クイックチェックリスト

  • .csproj に NeutralLanguage を設定する
  • 既定の AppResources.resx にすべてのキーを含める
  • 各対象言語用の AppResources.{culture}.resx を用意する
  • iOS/Mac:CFBundleLocalizations にサポートするすべての言語を記載する
  • Windows:Package.appxmanifest で <Resource Language="..." /> を宣言する
  • RTL カルチャではページ/アプリレベルで FlowDirection を設定する
  • 実行時の切り替えでは CurrentUICulture、CurrentCulture、AppResources.Culture の3つすべてを設定する
  • .resx の変更後に dotnet build で .Designer.cs が再生成されることを確認する

コメント