0

WinRTで多言語アプリケーションをサポートするための組み込みツールはありますか?たとえば、英語のテキストコンテンツが「追加」、「削除」、「編集」のボタンがいくつかあり、ポーランド語では「Dodaj」、「Usun」、「Edytuj」などになります。このテキストをユーザーの言語に自動的に設定できますか?(そしてユーザーの言語を自動的に検出する方法は?)言語モデルを使用してボタンのコンテンツをViewModelプロパティにバインドすることはできますが、それを行うためのより良い方法はありませんか?

4

1 に答える 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 に答える