如何转换C#.NET应用程序以支持多种语言?

时间:2011-12-07 18:34:05

标签: c# winforms localization

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

4 个答案:

答案 0 :(得分:8)

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

  1. 将可本地化表单的Localizable属性更改为true。这将使设计人员从.resx文件中获取文本和其他属性,而不是对其进行硬编码。
  2. 用一种语言创建你的程序,比方说英语。
  3. 接下来,将所有表单更改为其他语言,如下所示:
    1. 将表单的Language属性更改为其他语言,例如西班牙语。
    2. 更改所有控件上的文字。设计人员将自动为该语言生成一个新的.resx文件。
    3. 在开发过程中根据需要来回切换。
  4. 发布时,请进入“装配设置”并更改语言。我认为你也可以用代码改变语言。
  5. 瞧!你做完了!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

无需安装任何第三方工具,API或dll对象,我就可以利用App_LocalResources。尽管我仍然使用Google翻译来翻译单词和句子,然后将其复制并粘贴到文件中,如下面的屏幕截图之一所示(或者您可以使用人员翻译并手动键入以进行添加)。在您的Project文件夹中(使用MS Visual Studio作为编辑器),添加一个App_LocalResources文件夹并创建英语和其他语言(resx文件)。就我而言,这是西班牙语(es-ES)的翻译。请参见下面的屏幕截图。 enter image description here

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

enter image description here

西班牙语:(filename.aspx.es-ES.resx)

enter image description here

英语:(filename.aspx.resx)

enter image description here

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

<%--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--%>

在后面的母版页代码上,创建指向Hyperlink标签的动态链接:

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

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

在PageLoad上:

        ///'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"]);
    }

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