ごった煮

色々な事を書いてます

UWPでリアルタイムな言語の切り替えを実装する

アプリの多言語化ってなかなか面倒ですけどストアとかに上げるときに必ず必要になりますってことでちょっとまとめます。

今回は、ただリソースを作って言語毎に切り替わるだけじゃ芸がないのでボタンを押したら言語が切り替わるみたいな感じです。

 

とりあえず実装

ソースは以下のような感じなので、適当にボタンが押されたら実行されるとかでOKです。

 

            Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride == "ja" ? "en-US" : "ja-JP";
            ResourceContext.GetForCurrentView().Reset();
            ResourceContext.GetForViewIndependentUse().Reset();

        this.Frame.Navigate(typeof(MainPage));

 

 

リソースは、以下のように日本語と英語のリソースを作ります。※ハローワールドが日本語でもう片方が英語です。

image

 

image

 

実行してみる

画面についてるボタンを押すとテキストが言語毎に切り替わります。

image

 

image

 

ボタンを押すとテキストがさし変わります。

注意点

なぜかWindows10と8.1で挙動が違ったのでそこらへん注意してください。

具体的には、10だと画面遷移するとすぐに反映されるっぽいんですが、8.1だと画面遷移が完了した段階で完全に言語のリソースの読み込みが終わってなさそうな雰囲気で一部切り替わっていないみたいな感じになっていました。その場合、切り替えた後、画面が遷移する前に100msほどディレイを入れたらうまくいきました。

参考までに

 

まとめ

リアルタイムな多言語切り替えは、結構ハードだと思ってたらただ実装するだけなら機構的にはかなり楽に考えられいます。

多言語のリアルタイム切り替えは、B2Cなんかだとあまり関係ないかもしれないですが、不特定多数のユーザが使う商業施設などへの据え置き型のタブレットを使ったりする場合は、アプリの切り替えを手動でやったりといったことが現実的に不可能なんで、こんな感じにいつでもできるように組んでいくと楽かもしれません