【问题标题】:What is the best way to add i18n to an existing custom CMS system (build with C#)?将 i18n 添加到现有自定义 CMS 系统(使用 C# 构建)的最佳方法是什么?
【发布时间】:2015-04-24 02:41:01
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net internationalization


    【解决方案1】:

    最简单的 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),或查找大量第三方工具。

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

    最终编辑:

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

    【讨论】:

      【解决方案2】:

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

      资源文件

      您可以为 ASP.NET 控件中使用的所有静态文本添加资源文件 (RESX)。 Here is an MSDN article even covering Spanish.

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

      |姓名 |价值 | |你好世界 |你好世界 ! | |欢迎留言 |欢迎 ! |

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

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

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

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

      切换语言

      现在要添加另一种语言,只需创建一个名为 Text.language-country.resx 的新文件。所以在你的情况下 Text.es-ES.resx.

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

      |姓名 |价值 | |欢迎留言 | ¡ |

      你可以通过改变当前线程的文化属性来切换语言

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

      否则可以根据浏览器设置设置语言。 更多信息在这里:https://msdn.microsoft.com/en-us/library/ff647353.aspx

      翻译

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-09
        • 1970-01-01
        • 2011-03-09
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多