i18n asp.net mvc4属性?

时间:2013-03-16 09:57:20

标签: asp.net-mvc-4 internationalization

我正在开展一个网站项目,我需要将项目国际化。现在,我使用资源文件。

我已经将almos的所有内容都国际化,但有一件事我想知道怎么做是这样的:

假设我有一系列已经在我的数据库中的类,每个类都有一个名为Description的字符串属性。有没有办法根据区域设置浏览器显示说明?我的意思是,我使用英文浏览器并用英文显示描述,但我将其更改为法语并用法语显示这些描述? (我想为每个描述分配一个“数字”值,然后在资源文件中有1:人力资源,2:IT,3:医疗保健等等。另一个法文文件及其各自的值,但我认为这是一种搞砸了)

非常感谢

1 个答案:

答案 0 :(得分:1)

嗯,鉴于描述文本是常量,您是否无法将相应文本的翻译密钥写入数据库,然后从翻译文件中获取匹配(本地化)值?如果您无法更改数据库,可以简单地使用数据库中的现有值作为翻译文件中的键,并映射到相应的翻译。你可能不得不摆脱空间等,但这不应该是一个大问题。

在你的数据库中:

Human Resources
Health Care
...

翻译文件示例:

英文:

Human_Resources | Human Resources
Health_Care     | Health Care
...

法:

Human_Resources | Service du personnel
...

检索翻译的值(伪):

var translationKey = descriptionValueFromDB.Replace(' ', '_');
var translatedDescription = ResourceManager.GetString(translationKey);

您怎么看?

干杯,亚历克斯

更新: 使用标准技术在视图中显示已翻译的字符串非常简单。我假设您正在使用模型对象向视图提供数据。然后,您可以将现成的翻译写入模型并在视图中使用它:

    public class FooModel
    {
      public string Description {get; set;}
      public string TranslatedDescription
      {
        get { return Description.ToTranslationKey().Translate(); }
      }
    }

    public static class TranslationExtensions
    {
      public static string ToTranslationKey(this string term)
      {
        if (string.IsNullOrEmpty(term))
          return term;

        return term.Replace(' ', '_');
      }

      public static string Translate(this string term)
      {
        if (string.IsNullOrEmpty(term))
          return term;

        return ResourceManager.GetString(term);
      }
    }

<div id="fooDescription">@Model.TranslatedDescription</div>

当然,如果您更喜欢,也可以将翻译部分移动到视图中:

<div id="fooDescription">@Model.Description.ToTranslationKey().Translate()</div>

Mkay?