0

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

我已经将所有东西都国际化了,但是我想知道的一件事是:

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

非常感谢你

4

1 回答 1

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>

麦凯?

于 2013-03-16T10:13:09.357 回答