2013-03-16 44 views
0

我正在开发一个网站项目,我需要将项目国际化。现在,我使用资源文件。i18n asp.net mvc4属性?

我Almos酒店都已经国际化,但有一两件事,我想出了至极,我想知道怎么做是这样的:

假设我有那些已经在我的分贝班系列,每个类都有一个名为Description的字符串属性。有没有基于区域设置浏览器显示说明的方法?我的意思是,我使用英文浏览器并用英文显示描述,但我将其更改为法文并用法文显示这些描述? (我想为每个描述分配一个“数字”值,然后在资源文件中有1:人力资源,2:IT,3:HealthCare等等。认为这是一种,搞砸)

非常感谢您

回答

1

那么鉴于描述文本是常数,不能你写相应的文本翻译按键到你的数据库,然后获取匹配(本地化)价值从您的翻译文件?如果您无法更改数据库,也许只需使用DB中的现有值作为翻译文件中的键并映射到相应的翻译。你可能不得不摆脱空间等,但这不应该是一个大问题。

在你的DB:

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); 

你觉得呢?

干杯,亚历

UPDATE: 显示的视图中的翻译字符串简单的使用标准技术。我假设您正在使用模型对象将数据提供给您的视图。然后,你可以,例如写现成的翻译到您的模型和视图中使用它:

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?

+0

我喜欢你的想法亚历克斯,但我不知道如何用剃刀处理它。我能想到的唯一方法是替换控制器中的对象属性,我认为这不是一种很好的方法,因为我会覆盖对象。 你能帮我从视图中怎么做吗?谢谢 – 2013-03-16 10:24:19

+0

我为可能的方法添加了示例代码。 – 2013-03-16 13:35:06