4

在我的 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

4 回答 4

5

在 [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 文件

于 2012-08-28T10:05:53.540 回答
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);
于 2012-08-28T10:39:30.707 回答
0

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

于 2012-08-28T10:55:51.350 回答
0

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

于 2012-08-28T10:06:08.130 回答