我已经写了一篇博客文章,涵盖了多语言asp.net mvc应用程序的以下方面:
数据库:我将表分为两个部分,一个包含不可翻译的字段,另一个包含需要翻译的字段。
Url路由:通常我会在URL中保留语言环境,这样可以获得良好的多语言站点索引。
routes.MapRoute(
name: "ML",
url: "{lang}/{controller}/{action}/{id}",
defaults: new { lang = "en-CA", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
你可以从一个基础控制器类中使{lang}参数在你的控制器中可用。有关所有详细信息,请参见博客文章。
查询数据: 你只需将Culture传递给你的存储库或数据库上下文。思路是创建一个视图模型,合并你为翻译而分开的两个表格。
public ActionResult Index(string id)
{
var vm = pages.Get(id, Language);
return View(vm);
}
您的看法:使用带有通用两位字母语言代码的.NET资源文件,例如:HomePage.en.resx,HomePage.fr.resx。区域设置en**-US**,en**-CA**可用于格式化货币、日期、数字等。您的资源文件很可能对英语美国、加拿大等都是相同的。
图片:使用像imagename-en.png,imagename-fr.png这样的格式。从您的视图中通过扩展方法使{lang}路由参数可用,并像这样显示您的图像:
<img src="/content/logos/imagename-@this.CurrentLanguage()" />
你也可以为支持的语言单独创建一个完整的文件夹。例如:/content/en/imagename.png、/content/fr/imagename.png。
JavaScript:我通常创建一个名为LanguagePacks的文件夹和名为Lang-en.js、Lang-fr.js的JS文件。这个想法是创建一个“静态”类,你可以在其他JS文件中使用它。
var Lang = {
globalDateFormat = 'mm-dd-yy';
greeting: 'Hello'
};
在您的视图中,加载正确的语言文件。
<script type="text/javascript" src="/content/js/languagepacks/lang-@(this.CurrentLanguage()).js"></script>
从JavaScript模块中
var UI = function() {
function notify() {
alert(Lang.greeting);
}
return {
notify: notify
}
};
制作多语言 Web 应用没有唯一的方法。使用资源来翻译您的文本,它们可以在运行时快速交换。您有多个编辑器可以打开这些资源文件,以便您可以将其传递给翻译人员等。
您可以查看博客文章并获取详细示例,了解我如何实现此功能。