これは、ページの翻訳に対する別のアプローチです。ローカライズを目的としたものではありません。すべての ViewModel が継承するクラス TransModel を作成しました。このクラスは、現在の ViewModel に関連する文字列のペアをデータベースから取得し、「labels」ディクショナリに格納します。そのペアのキーは、ここの文字列「ユーザー名」の値であり、値は翻訳された値です。
[Display(Name = "User Name")]
public string UserName { get; set; }
View で Html.LabelFor を使用する代わりに、TransLabelFor という拡張子を使用します
public static MvcHtmlString TransLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression,TransModel model)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
string trans = "";
model.labels.TryGetValue(metadata.DisplayName, out trans);
if (trans == null)
{
trans = metadata.DisplayName;
}
return MvcHtmlString.Create(String.Format("<label for='{0}'>{1}</label>", metadata.DisplayName, trans));
}
今、私が返すものをそれで置き換えたいと思います。これによって返される元のタグが必要です:
MvcHtmlString originalTag = System.Web.Mvc.Html.LabelExtensions.LabelFor(html, expression);
しかし、私の翻訳で。
文字列の検索/置換の代わりにそれを行うためのきちんとした方法はありますか? モデルを渡す必要があるのも好きではありません。より良いアイデアはありますか?