c# - 在 Asp.Net MVC 3 中通过文化和 UI 文化解决字段本地化问题

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

我有一个包含以下字段的地址模型类型:

public string CountyState { get; set; }
public string PostZip { get; set; }

我正在使用 DisplayNameAttribute 的自定义版本(在 .Net 4 DisplayAttribute 为我们提供本地化之前编写),它可以对这两个字段的显示名称进行本地化.

所以自然地 en-GB 这些翻译是 "County""Post Code",而对于 en -US 它们当然是 “State”“Zip Code”

但是,我的 MVC 网站在不同位置显示不同企业的支付页面,这些页面也必须能够翻译成其他语言。因此,UI 区域性可能是 en-GB,但地址字段仍应显示 "State""Zip Code"被视为美国企业(en-US 的后端文化)。

因此,对这些显示字段进行单个资源类型/键本地化查找似乎是不够的。我不想根据国家/地区使用不同的模型类型,我不想编写不同的 Html - 这两种解决方案都将随着我的网站的增长而变得难以管理,因为业务等将通过数据库添加。

我的网站已经在使用 CurrentCulture 来表示企业的默认文化(当然用于格式化货币),而我正在使用 CurrentUICulture 来表示用户的文化;所以我考虑了我认为有点古怪的解决方案:

使用 CurrentCulture 本地化的字符串来查找该字段的资源键 - 例如ResourceName_Display_Address_PostZip。当 en-GB 时,这将返回 DisplayName_GB_PostCode,但当 en-US 时,它将返回 DisplayName_US_ZipCode

现在使用 CurrentUICulture 查找它的本地化版本。

然后我将不得不编写一个属性来包装这个逻辑,以便它与 MVC 兼容。

一个好的解决方案?还是我错过了一些非常明显的东西!?

最佳答案

这只是伪代码。我现在不在测试和调试的地方。但是,如果您的 DisplayNameAttribute 自定义版本具有关联的 CurrentCulture,您应该能够编写和扩展类似的方法:

    public static string GetLocalizedDisplayName<TProperty>(Expression<Func<TProperty>> e)
    {
        var modelType = ((MemberExpression)e.Body).Member.ReflectedType.GetType();
        var classProperties = TypeDescriptor.GetProperties(modelType).OfType<CustomAttribute>;
        var prop = from property in classProperties
                   where property.CultureInfo == CultureInfo.CurrentCulture
                   select property;

        return prop != null && !string.IsNullOrEmpty(prop.DisplayName) ? prop.DisplayName : member.Member.Name;
    }

关于c# - 在 Asp.Net MVC 3 中通过文化和 UI 文化解决字段本地化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6610245/

相关文章:

c# - 为什么更改 ListView 的 HeaderStyle 会挂起应用程序?

c# - 请帮忙弄清楚这个C#方法是做什么的?

c# - 是否可以在非托管 VC++ 应用程序中使用使用 C# 创建的 DLL?

c# - 无法加载资源: the server responded with a status of 500 (Internal Server Error) Azure MVC

javascript - asp.net MVC 中的 Jquery .ajax POST 函数错误返回

asp.net-mvc - 强制 SquishIt 刷新/重新创建缩小的文件

c# - 如何创建到另一个服务器 (URI) 的 Http 请求并同步调用它

c# - MVC3 - 文件下载 - 等待状态指示器

asp.net-mvc-3 - 使用 Razor 在 Asp.Net MVC3 上合并、缩小和 GZIP 样式和脚本的完整解决方案

c# - .NET 程序集内存使用