如何在mvc3中对来自@ Html.LabelFor()的内容进行本地化

时间:2012-03-15 15:58:35

标签: asp.net asp.net-mvc-3 razor localization

我只是稍稍延长this question

我的MVC Web应用程序中有 App_LocalResources (我没有单独的dll)。

我的模型在不同的装配中。在模型中,我有2个类CountryCity

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应用程序中的资源文件中读取文本?

3 个答案:

答案 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