我正在开展一个网站项目,我需要将项目国际化。现在,我使用资源文件。
我已经将almos的所有内容都国际化,但有一件事我想知道怎么做是这样的:
假设我有一系列已经在我的数据库中的类,每个类都有一个名为Description的字符串属性。有没有办法根据区域设置浏览器显示说明?我的意思是,我使用英文浏览器并用英文显示描述,但我将其更改为法语并用法语显示这些描述? (我想为每个描述分配一个“数字”值,然后在资源文件中有1:人力资源,2:IT,3:医疗保健等等。另一个法文文件及其各自的值,但我认为这是一种搞砸了)
非常感谢
答案 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?