2

Silverlight 5アプリケーション(Prism + MEF)を翻訳するために利用できるオプションは何ですか?可能であれば、次のことを行います。

  • resxファイルがない(管理方法が気に入らない)
  • むしろ、xaml文字列を抽出してから変換します(すべてのXAMLノードをカスタム属性でマークして文字列を抽出するMicrosoftのツールがあったと思います)
  • 外部アセンブリ(Prismではモジュールの場合もあります)に変換を行い、必要に応じてそれらをロードします
  • 実行時に言語を変更する

このトピックに関する提案とベストプラクティスを受け入れます。

編集:LocBamlは私が上で話していたものですが、Silverlightでは使用できないようです

4

2 に答える 2

2

これには多くの従来の回答が返ってくることは承知していますが、Silverlight のより効率的なローカリゼーションのために私たちが試みた (そして成功した) 完全に独創的なものを提案したいと思います。

完了後の Silverlight プロジェクトのローカリゼーション

基本的には、添付プロパティを使用して、ローカライズ文字列を動的に変更するためのフックを XAML で提供します。それらが最初に解析されると、コードは関連する要素に変更を加える機会を得ます。言語スワップは、現在のページをリロードすることを意味します。

ローカリゼーション文字列は、単純な RIA サービス呼び出しを使用してサーバー データベースから取得されます。返されるエントリは、選択した言語の単純なキーと値のペアです。

このメソッドには、多く見られる従来のバインディング メソッドの (かなり大きな) オーバーヘッドもありません。アプリの起動時に、選択した言語文字列のみをダウンロードします。また、編集/修正をサーバーに送り返すことも可能にする可能性があります (アプリ内のエディターのオーバーヘッドを負担できる場合...これを行いましたが、多くの作業が必要でした)。

PS PRISM を使用していましたが、依存関係 (Unity など) がないため、どの Silverlight アプリでも同様に機能します。

PPS。今夜帰宅したら、このシステムのコード スニペットを投稿します。

(Resxはとても「前世紀」です)

于 2012-06-07T10:43:58.260 に答える
1

私の現在の解決策は、グローバルに利用可能な文字列コレクション、つまりシングルトンにローカライズしたいプロパティ (つまり、 、 、ToolTips など) で DataBinding を使用することTextBoxです。私の場合、MVVM Light を使用しているため、.TextButtonContentLocalizedStringCollectionViewModelLocator

このコレクションは、XLIFF ファイル ( https://en.wikipedia.org/wiki/Xliffを参照) から、Dictionary<string, string>私のコレクションのメンバーである にロードされます。

文字列を公開するためのコレクションの重要な部分は次のとおりです。

/// <summary>
/// A Singleton bindeable collection of localized strings.
/// </summary>
public class LocalizedStringCollection : ObservableObject, INotifyCollectionChanged
{
    private Dictionary<string, string> _items;
    /// <summary>
    /// The content of the collection.
    /// </summary>
    public Dictionary<string, string> Items
    {
        get { return _items; }
        private set
        {
            _items = value;
            RaisePropertyChanged();
            if (CollectionChanged != null)
                CollectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
        }
    }

    /// <summary>
    /// Convenience accessor, most likely entry point.
    /// </summary>
    /// <param name="key">A localized string name</param>
    /// <returns>The localized version if found, an error string else (ErrorValue in DEBUG mode, the key in RELEASE)</returns>
    public string this[string key]
    {
        get
        {
            Contract.Requires(key != null);
            Contract.Ensures(Contract.Result<string>() != null);

            string value;
            if (Items.TryGetValue(key, out value))
                return value ?? String.Empty;

#if DEBUG
            return ErrorValue;
#else
            return key;
#endif
        }
    }
}

XLIFF の解析は、組み込みの XML サポートを使用すると簡単です。

XAML の使用例を次に示します (使用する構文に応じて、多かれ少なかれ冗長になる可能性があります)。

<TextBlock Text="{Binding LocalizedStrings[login_label], Source={StaticResource Locator}}" />

<Button ToolTipService.ToolTip="{Binding LocalizedStrings[delete_content_button_tip], Source={StaticResource Locator}}" />

お役に立てれば :)

人々が興味を持っているなら、私はこれの記事を(完全なソースとともに)作るかもしれません.

于 2012-06-08T13:19:26.687 に答える