将i18n添加到现有自定义CMS系统(使用C#构建)的最佳方式是什么



我目前负责一个现有的CMS,该CMS是几年前用C#.Net构建的,一些客户要求他们的网站是西班牙语的。这些网站预先填充了库中的页面,目前该应用程序不支持i18n。什么是让客户拥有西班牙语网站的最快方法?允许使用任何语言的最佳方式是什么?

我知道这是两个不同的答案,但我想为未来做计划,同时提供一个快速的解决方案来取悦客户。

最简单的i18n解决方案通常涉及对程序中的任何文本使用字符串字典。

而不是像这样做:

TextBox t = new TextBox();
t.Text = "Hello, user!";

你会做一些类似的事情:

TextBox t = new TextBox();
t.Text = i18nStringDictionary["HelloUserMessage"]; //some people prefer an enum to 
//bare strings in this case

其中i18nStringDictionary是全局或半全局字典。然后,在应用程序启动时,您可以使用配置文件指定的文件中的正确值对其进行初始化。每种语言都有一个文件。举例来说,在你的英语文件中,你会有:

HelloUserMessage, "Hello, user!"
//More message pairs in english

并且在您的西班牙语文件中:

HelloUserMessage, "Hola, usario!"
//More message pairs in spanish.

最后,将这些对解析为字典类型。

当然,这只是当你想推出自己的库时,但它展示了大多数i18n库的隐藏功能。否则,您可以使用C#的内置功能(https://msdn.microsoft.com/en-us/goglobal/bb688096.aspx),或者找到大量的第三方工具。

无论如何,它可能根本不会很快,因为它涉及到将站点/程序中的所有字符串文字替换为对某个字典或库的引用。不过,一旦完成,您只需要进行翻译并设置配置文件变量,就可以开始了。

最终编辑:

既然你谈论的是一个网站,你可能也有包含文本的视图或模板。这些通常也需要替换为对字符串库的引用。

只需搜索ASP.NET全球化和本地化

资源文件

您可以为ASP.NET控件中使用的所有静态文本添加资源文件(RESX)。这是一篇MSDN文章,甚至涵盖了西班牙语。

在Visual Studio中创建一个新的RESX文件将为您提供一个表视图。假设您将Text.resx添加到项目中。这将是默认语言。

|Name|Value||HelloWorld|HelloWorld||欢迎留言|欢迎|

您现在可以引用代码后面的名称:

Label label = new Label();
label.Text = Text.WelcomeMessage;

或者您可以在设计器中设置绑定

<asp:Label ID="Button1" runat="server" 
Text="<%$ Resources:Text, WelcomeMessage %>" />

切换语言

现在要添加另一种语言,只需创建一个名为Text的新文件语言国家.resx。因此,在您的情况下文本.es es.resx.

当您切换到西班牙语时,您在此处添加的每个条目都将覆盖默认语言。如果缺少,则会显示默认值。

|名称|价值||欢迎留言|¡Bienvenidos|

您可以通过更改当前线程的区域性属性来切换语言

Thread.CurrentThread.CurrentUICulture = 
new CultureInfo("es-ES");

否则,可以根据浏览器设置设置语言。更多信息请点击此处:https://msdn.microsoft.com/en-us/library/ff647353.aspx

翻译

RESX文件实际上是可以嵌入到程序集中的XML文档,这些文档被引用为内容文件。因此,您可以将默认资源文件发送给翻译机构,让他们进行编辑。只是提醒他们不要翻译"名称"列中的任何条目。

最新更新