我只是稍稍延长this question。
我的MVC Web应用程序中有 App_LocalResources (我没有单独的dll)。
我的模型在不同的装配中。在模型中,我有2个类Country
和City
:
public class Country: MyContainer
{
public City city {get;set;}
}
public class City
{
public CityName {get;set;}
}
public class MyContainer
{
public Cid {get;set;}
}
因此,在我的action方法中,我创建并传递country的对象作为我的viewmodel。
在视图中我使用了这个:
@Html.LabelFor(mdl=>mdl.City.CityName)
@Html.LabelFor(mdl=>mdl.Cid)
因此效果很好,带文字的标签用英文呈现。
但是如何修改它以便它从我的Web应用程序中的资源文件中读取文本?
答案 0 :(得分:13)
您可以编写自定义显示属性:
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
public LocalizedDisplayNameAttribute(string key): base(FormatMessage(key))
{
}
private static string FormatMessage(string key)
{
// TODO: fetch the corresponding string from your resource file
throw new NotImplementedException();
}
}
然后:
public class City
{
[LocalizedDisplayName("cityname")]
public string CityName { get; set; }
}
您也可以结帐following localization guide。它提供了样本属性的完整实现。
答案 1 :(得分:4)
您可以使用[Display(ResourceType = typeof(App_LocalResources), Name = "AgreeTandCs")]
,其中App_LocalResources
是资源类的名称(您的.resx
),而Name是您要引用的静态字符串的名称。在您的视图中照常使用LabelFor,它会自动拉入您的资源。
在我的示例中,标签显示使用变量名称AgreeTandCs存储的字符串,如果您以英语查看它,它将在页面中显示为"我同意这些条款和条件&# 34。
答案 2 :(得分:0)
您还可以在翻译字符串中使用带有{0},{2}参数的翻译。 他是我的榜样Localize Compare attribute