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

C# 将i18n添加到现有定制CMS系统(使用C构建)的最佳方式是什么?,c#,.net,internationalization,C#,.net,Internationalization,我目前负责一个现有的CMS,它是几年前用C.Net建立的,一些客户要求用西班牙语建立他们的网站。这些网站预先填充了库中的页面,目前该应用程序不支持i18n。什么是最快的方式,让客户有他的网站在西班牙语?允许使用任何语言的最佳方式是什么 我知道这是两个不同的答案,但我想为未来做计划,同时提供一个快速的解决方案来取悦客户。最简单的i18n解决方案通常涉及对程序中的任何文本使用字符串字典 而不是像这样做: TextBox t = new TextBox(); t.Text = "Hello, user

我目前负责一个现有的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的内置功能,或者找到大量的第三方工具

在任何情况下,它可能都不会很快,因为它涉及到用对某个字典或库的引用替换站点/程序中的所有字符串文本。但是,一旦完成,您只需要翻译并设置config file变量,就可以开始了

最终编辑:

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

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

资源文件 您可以为ASP.NET控件中使用的所有静态文本添加资源文件RESX。

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

| Name | Value | | HelloWorld | Hello World ! | | WelcomeMessage | Welcome ! | 也可以在设计器中设置绑定

<asp:Label ID="Button1" runat="server" 
Text="<%$ Resources:Text, WelcomeMessage %>" />
否则,可以根据浏览器设置设置语言。 更多信息请点击此处:

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

<asp:Label ID="Button1" runat="server" 
Text="<%$ Resources:Text, WelcomeMessage %>" />
| Name | Value | | WelcomeMessage | ¡Bienvenidos! |
Thread.CurrentThread.CurrentUICulture = 
new CultureInfo("es-ES");