2

asp.net mvc 4 を使用して独自の cms を構築し、それを多言語にしたい

これらの行のデータベースにテーブルを作成することを考えました:id、name、language、value

次に、正しい言語をチェックして名前の正しい値を与えるヘルパーを作成します

@html.L("Newsletter.Title")

ところで、.resx ファイルについて聞いたことがありますが、どの方法が最適でしょうか? (パフォーマンス)ビジュアルスタジオで作成する代わりに、Webを使用してこのファイルを処理する方法はありますか?

ユーザー (.rest ファイルやプログラミングなどを知らない) が言語を追加して Web で翻訳できる機能を追加したいと考えています。

4

3 に答える 3

1

リソース ファイル (.resx) はサーバー上の事実上 XML ファイルであるため、パフォーマンスの点ではリソース ファイル (.resx) を使用するのに勝るものはありません。ローカリゼーション テキストを取得するためにデータベースを往復する必要はありません。

システムは、関連付けられたテキスト値を持つキーと、サポートされているロケールごとに個別の resx ファイルを使用します。

これらの文字列を消費するには、次のように厳密に型指定されたクラスを使用します。

<h1>@WebResources.Page_Title_String</h1>

<p>@WebResources.Intro_Paragraph</p>

これにより、すべての文字列が 1 か所にあり、Visual Studio の内外でファイルを操作するために使用できるツールがたくさんあるため、サイトをさまざまな言語に翻訳するために簡単に送信できます。Bing を使用してファイルを翻訳し、翻訳者に有利なスタートを切ることもできます。

これは事実上 XML ファイルであるため、Linq to XML を使用して簡単に操作し、必要に応じてテキストを変更する Web インターフェイスを作成できます。製品テキストのローカリゼーションとカスタマイズの両方にこのアプローチを使用する商用製品を少なくともいくつか見てきました。

リソース ファイルの詳細については、「 ASP.NET Web ページ リソースの概要」および「方法: ASP.NET Web サイトのリソース ファイルを作成する」を参照してください。

于 2013-07-14T16:46:47.823 に答える
1

resx ファイルは、ボタンやナビゲーションなどの「静的」リソースをローカライズするのに最適ですが、ページ上のテキストのような実際には動的なコンテンツではありません。ただし、それは常に、CMS の使用目的によって異なります。私が知っているほぼすべての CMS は、データをデータベースに保存します。.resx ファイルよりも柔軟です。
ただし、独自の CMS を構築しないでください。なぜあなたはそれをしたいですか?高度に最適化された CMS はたくさんあります。

于 2013-07-15T08:29:46.963 に答える
0

最高のパフォーマンスを実現するには、リソース ファイル (静的コンテンツ用) とローカライズされた DB 文字列 (CMS で作成された動的コンテンツ用) を混在させる必要があります。

これは、ブログのこのガイドで説明した ResourceFiles + LocalizationRoute + LocalizationAttribute GlobalFilter アプローチを使用して簡単に行うことができます。

ローカリゼーション ルート:

routes.MapRoute(
    name: "DefaultLocalized",
    url: "{lang}/{controller}/{action}/{id}",
    constraints: new { lang = @"(\w{2})|(\w{2}-\w{2})" },   // en or en-US
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

ローカリゼーション属性:

public class LocalizationAttribute : ActionFilterAttribute
{
    private string _DefaultLanguage = "en";
    public LocalizationAttribute(string defaultLanguage)
    {
        _DefaultLanguage = defaultLanguage;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string lang = (string)filterContext.RouteData.Values["lang"] ?? _DefaultLanguage;
        if (lang != _DefaultLanguage)
        {
            try
            {
                Thread.CurrentThread.CurrentCulture =
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
            }
            catch (Exception e)
            {
                throw new NotSupportedException(String.Format("ERROR: Invalid language code '{0}'.", lang));
            }
        }
    }
}

そのスケルトンを実装するとすぐに、現在のスレッドに適切なローカライズ セットが設定されるため、ローカライズされたリソース ファイルが自動的に選択されます。現在のスレッドのローカライズ設定に最も適したローカライズされたコンテンツ (利用可能な場合) を DB にクエリするだけです。

于 2015-08-03T21:16:31.907 に答える