WinRTで多言語アプリケーションをサポートするための組み込みツールはありますか?たとえば、英語のテキストコンテンツが「追加」、「削除」、「編集」のボタンがいくつかあり、ポーランド語では「Dodaj」、「Usun」、「Edytuj」などになります。このテキストをユーザーの言語に自動的に設定できますか?(そしてユーザーの言語を自動的に検出する方法は?)言語モデルを使用してボタンのコンテンツをViewModelプロパティにバインドすることはできますが、それを行うためのより良い方法はありませんか?
質問する
540 次
1 に答える
2
これは十分にサポートされており、MS には非常に優れたサンプルがあります: http://code.msdn.microsoft.com/windowsapps/Application-resources-and-cd0c6eaa
要素がデータバインドされている場合、x:uid を使用して「静的」コンテンツのテキストを設定しても機能しません。たとえば、ユーザー名のビュー モデルを含むビュー モデルに観察可能なコレクションがあり、次のことを試みて実行します (疑似コード!!):-
<List ItemSource={Binding Users}>
<List.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock x:uid="ByUser"/>
<TextBlock Text={Binding Username}/>
</StackPanel>
</DataTemplate>
</List.ItemTemplate>
</List>
(uid ByUser に基づいて) 最初のテキスト ボックスを設定する必要があるテキストは設定されません。これを回避するにResourceLoader
は、グローバリゼーション サービスをラップして、これを "UsersName" ビュー モデルに渡します。次に、ByUserText というプロパティを公開し、それにバインドします。理想的ではありません。うまくいけば、これは修正されるでしょう。
他にグローバリゼーション サービスを使用する必要があるのは、メッセージ ボックスなどです。
これは私が渡すグローバル化サービスです:-
using Windows.ApplicationModel.Resources;
public class GlobalisationService : IGlobalisationService
{
private readonly ResourceLoader resourceLoader;
public GlobalisationService()
{
resourceLoader = new ResourceLoader();
}
public string GetString(string key)
{
try
{
return resourceLoader.GetString(key);
}
catch
{
return "NOT FOUND: " + key;
}
}
public string this[string key]
{
get
{
return GetString(key);
}
}
}
于 2013-01-15T15:42:24.283 に答える