MVC3应用程序中的本地化

时间:2012-08-28 10:02:27

标签: c# asp.net-mvc asp.net-mvc-3

在我的MVC 3应用程序中,我需要进行本地化。我想问一些建议是什么是最好的方法。还有一个问题。我在我的应用程序中使用这样的模型:

public class MyModel
{          
    [HiddenInput(DisplayValue = false)]
    public Guid? DepartmentId { get; set; }

    [Display(Name = "Caption")]
    public string Caption { get; set; }

    [Display(Name = "Owner")]
    public string Owner { get; set; }

    [Display(Name = "Enabled")]
    public bool Enabled { get; set; }
}

如何在此模型类中使用本地化?

更新

我决定创建一个自定义resource.xml而不是使用asp.net的Resource .resx实现,如何在这个模型类中使用本地化?

4 个答案:

答案 0 :(得分:4)

使用[Display]属性中的以下设置:

[Display(Name = "Caption", ResourceType = typeof(SomeResource))]

其中SomeResource是资源文件的类名。要正确获取命名空间和类名,只需打开添加资源文件时生成的 designer.cs 文件。确保资源文件的自定义工具设置为 PublicResXFileCodeGenerator 。这可以在资源文件的“属性”窗口中完成。

更新原始问题后:

如果你去找一个resources.xml文件,那么可能会出现重载或新属性,例如你可以使用XPath表达式和xml文件的位置。

你可以连接一个新的提供者,如:

ModelValidatorProviders.Providers.Add(new CustomMetadataValidationProvider());

,其中

public class CustomMetadataValidationProvider : DataAnnotationsModelValidatorProvider
{

}

您可能也会对Orchard CMS解决问题的方式感兴趣。他们使用.po files

答案 1 :(得分:0)

您可以使用资源文件来存储字符串的本地化版本。查看following guide

答案 2 :(得分:0)

您无需修改​​模型即可完成此操作:

public class MyModel
{          
    [HiddenInput(DisplayValue = false)]
    public Guid? DepartmentId { get; set; }

    public string Caption { get; set; }
    public string Owner { get; set; }
    public bool Enabled { get; set; }
}

如果您在我的Griffin.MvcContrib中使用 自定义元数据提供商 http://www.codeproject.com/Articles/352583/Localization-in-ASP-NET-MVC-with-Griffin-MvcContri

源代码:https://github.com/jgauffin/griffin.mvccontrib

<强>更新

您可以使用XML作为数据源。只需实现接口ILocalizedStringProvider并使用它从XML文件加载字符串。

然后像这样配置MVC:

var stringProvider = new MyXmlProvider(@"C:\AppData\MyStrings.xml");
ModelMetadataProviders.Current = new LocalizedModelMetadataProvider(stringProvider);

答案 3 :(得分:0)

如果要将本地化字符串存储在自定义文件中而不是RESX中,则可以实现资源提供程序。有关详细信息,请查看以下文章:
http://msdn.microsoft.com/en-us/library/aa905797.aspx#exaspnet20rpm_topic4