多言語エンタープライズ Web サイトを開発しており、ローカリゼーションをデータベースに保存したいと考えています。
私は非常に良い次の記事を読みましたが、個人的にはそれはオーバーヘッドであり、同じことを非常に簡単に達成できると思います:
ASP.NET 2.0 リソース プロバイダー モデルの拡張
私はすでにいくつかの地面をセットアップしていますが、私のアプローチがうまくいくかどうかはわかりません. 基本的に、DIに登録するサービスを作成しました。
public interface ILocalizedStringProvider
{
string GetLocalizedString(string key);
string GetLocalizedString(string key, string deafultValue);
}
また、このようなHtmlヘルパーを作成しました
public static MvcHtmlString LocalizedString(this HtmlHelper helper, string key, string defaultValue)
{
if (string.IsNullOrEmpty(defaultValue)) return new MvcHtmlString("");
if (string.IsNullOrEmpty(key)) return new MvcHtmlString(defaultValue);
ILocalizedStringProvider localizedStringProvider = DependencyResolver.Current.GetService<ILocalizedStringProvider>();
if (localizedStringProvider == null)
{
return MvcHtmlString.Create(defaultValue);
}
string val = localizedStringProvider.GetLocalizedString(key, defaultValue);
if (string.IsNullOrEmpty(val))
{
return MvcHtmlString.Create(defaultValue);
}
return MvcHtmlString.Create(val);
}
その後、ヘルパーはビューから呼び出されます。
まず、このアプローチが優れているかどうか、アンチパターンではないかどうかを知りたいです。
次に私の懸念は次の行です。
ILocalizedStringProvider localizedStringProvider = DependencyResolver.Current.GetService<ILocalizedStringProvider>();
コントローラー内のサービス ILocalizedStringProvider をコンストラクター インジェクションで解決し、コントローラーが ViewBag にローカリゼーションを設定する方がよいでしょうか?
ありがとう!