【问题标题】:How can I convert a C# .NET application to support multiple languages?如何转换 C# .NET 应用程序以支持多种语言?
【发布时间】:2012-01-15 06:37:12
【问题描述】:

我有一个需要转换为支持英语和西班牙语的 C# 应用程序,是否有一种半简单的方法来添加它并能够在以后添加其他语言?

【问题讨论】:

标签: c# winforms localization


【解决方案1】:

是的!它称为资源 (.resx) 文件。你要做的是:

  1. 将可本地化表单的Localizable 属性更改为true。这将使设计人员从 .resx 文件中获取文本和其他属性,而不是对其进行硬编码。
  2. 用一种语言创建程序,比如说英语。
  3. 接下来,将所有表单更改为另一种语言,如下所示:
    1. 将表单的Language 属性更改为其他语言,比如西班牙语。
    2. 更改所有控件上的文本。设计器会自动为该语言生成一个新的 .resx 文件。
    3. 在开发过程中根据需要来回交换。
  4. 发布时,进入您的程序集设置并更改语言。我认为您还可以更改代码中的语言。

然后瞧!大功告成!

【讨论】:

  • 谢谢,这正是我所需要的。简单明了的步骤,无需第三方工具!
【解决方案2】:

您将所有表单和控件标记为可本地化。这会将所有与 UI 相关的文本(标签等)放在资源文件中。如果您需要在代码中创建字符串,则使用字符串资源文件并通过资源键(例如StringResource.Get("My_Message"))查找字符串。然后,您可以使用工具来翻译所有资源。通常,您为每种语言创建一个本地化的 .dll。我们为此使用 Passolo,但周围还有其他工具。

【讨论】:

    【解决方案3】:

    您可以通过两种方式制作多语言应用程序:

    1. 通过使应用程序可本地化,因此当用户更改设备的文化时,如果您已将此语言添加到应用程序中支持的语言,应用程序将自动切换到文化的 UI。 您可以通过将项目中每个表单的 Localizable 属性设置为 Localizable 来执行此操作,然后将 UI 更改为新的文化。

    2. 通过为应用程序中添加的每种语言创建一个语言选项和一个资源文件 (.resx),根据所选语言,您可以从所选语言的资源文件加载图像或字符串。

    【讨论】:

      【解决方案4】:

      无需安装任何 3rd 方工具、API 或 dll 对象,我就可以使用 App_LocalResources。虽然我仍然使用谷歌翻译来翻译要翻译的单词和句子,并将其复制并粘贴到文件中,如您在下面的屏幕截图之一中所见(或者您可以使用人工翻译并手动输入添加)。在您的项目文件夹中(使用 MS Visual Studio 作为编辑器),添加 App_LocalResources 文件夹并创建英语和其他语言(resx 文件)。就我而言,它是西班牙语(es-ES)翻译。请参阅下面的屏幕截图。

      接下来,在您的 aspx 上,添加将在 App_LocalResources 中匹配的元标记 (meta:resourcekey)。一个用于英语,另一个用于西班牙语文件。请看下面的截图:

      西班牙语:(文件名.aspx.es-ES.resx)

      英文:(filename.aspx.resx)

      .

      然后在您的母版页文件上创建一个带有查询字符串的链接,该链接将切换页面翻译并在所有页面上可用:

      <%--ENGLISH/SPANISH VERSION BUTTON--%>
      <asp:HyperLink ID="eng_ver" runat="server" Text="English" Font-Underline="false"></asp:HyperLink> | 
      <asp:HyperLink ID="spa_ver" runat="server" Text="Español" Font-Underline="false"></asp:HyperLink>
      <%--ENGLISH/SPANISH VERSION BUTTON--%>
      

      .

      在您的母版页代码后面,创建一个指向超链接标签的动态链接:

      ////LOCALIZATION
      string thispage = Request.Url.AbsolutePath;
      eng_ver.NavigateUrl = thispage;
      spa_ver.NavigateUrl = thispage + "?ver=es-ES";
      ////LOCALIZATION
      

      .

      现在,在您页面文件的代码后面,您可以设置一个会话变量,通过始终向 url 添加一个查询字符串来使所有链接或重定向坚持所需的翻译。

      在页面加载时:

              ///'LOCALIZATION
              //dynamic querystring; add this to urls ---> ?" + Session["add2url"]
              {
                  if (Session["version"] != null)
                  {
                      Session["add2url"] = "?ver=" + Session["version"]; //SPANISH version
                  }
                  else
                  {
                      Session["add2url"] = ""; // ENGLISH as default
                  }
              }
              ///'LOCALIZATION
      

      。 点击事件示例:

          protected void btnBack_Click(object sender, EventArgs e)
          {
              Session["FileName.aspx"] = null;
              Response.Redirect("FileName.aspx" + Session["add2url"]);
          }
      

      我希望我的描述足够简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多