如何在winforms中制作多语言应用程序

时间:2015-10-07 09:51:01

标签: c# .net winforms localization

我有一个应用程序,我需要在该应用程序中使用两种语言(例如,英语和阿拉伯语),但我不知道该怎么做。有人可以帮我这个吗?我需要在C#Windows Forms中使用一些示例。

4 个答案:

答案 0 :(得分:15)

使用表单的LocalizableLanguage属性

Form班级有LocalizableLanguage属性。如果将Localizable属性设置为true,则可以为默认语言的表单添加控件,并为默认语言设置属性。然后,您可以选择其他语言并更改这些语言的属性。这样,值或可本地化的属性将存储在不同文化的单独资源文件中。

注意:如果属性用Localizable(true)属性修饰,则该属性被视为可本地化。例如,BackColor属性不可本地化,但Text属性是可本地化的。

使用Resx资源文件本地化邮件和图像

项目在Rseources.Resx文件夹下有一个Properties文件,您可以使用该文件来本地化图像和消息。您还可以将.resx资源文件添加到项目中。例如,您可以创建Strings.resx文件并向其添加一些字符串键和值,然后将其复制为strings.en.resxstrings.fa.resx并编辑这些语言的值。然后您可以使用这些资源值,例如:

MessageBox.Show(Properties.Resources.AreYouSure);

将使用当前的UI文化语言显示AreYouSure文件中Resources.Resx的值。

如果找不到资源文件的文化或指定区域性的资源键,将使用Resx文件的中性文化中的键值。

在运行时更改语言

您可以使用以下内容将应用程序的文化设置为Persian

System.Threading.Thread.CurrentThread.CurrentCulture =
    System.Globalization.CultureInfo.GetCultureInfo("fa");

System.Threading.Thread.CurrentThread.CurrentUICulture =
    System.Globalization.CultureInfo.GetCultureInfo("fa");

您应将上述代码放在应用程序的开头或显示表单之前。

更多信息

有关详细信息和示例:

答案 1 :(得分:7)

在某些情况下,使用资源文件可能会更容易。

  1. 在Visual Studio中向项目添加新资源文件。 例如。 en.resx为英语fr.resx为法语。

  2. 打开资源文件,在字符串中为您的字符串命名,并在值单元格中添加不同的翻译。例如:next stationen.resx的值为next station,但fr.resx中的值可以为Prochaine station。 示例如下: en_local.resx fr_local.resx

  3. 在代码中,使用public static ResourceManager rm = new ResourceManager("WindowsFormsApp1.en_local", Assembly.GetExecutingAssembly()); 选择语言资源。

  4. 当您需要向应用程序输出任何字符串时,请使用函数GetString(),例如label1.Text = rm.GetString("welcome");

答案 2 :(得分:4)

wwjih123的答案中有一些缺失部分。

在VS2017中

1 - 首先在项目根文件夹中创建资源(不在Resources文件夹中)。将其命名为lang_en,lang_tr,lang_fr等......

2 - 然后对象属性窗口将Build action保留为Embedded Resource

3 - 在lang_tr.resx文件中添加新字符串lbl_error并在土耳其语中添加“Hata”(无论你喜欢什么)

4-在类中定义变量:

    ResourceManager res_man;    // declare Resource manager to access to specific cultureinfo

在InitializeComponent();

之后的5-in类初始化
Console.WriteLine("You are speaking {0}", 
System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName);
res_man = new ResourceManager("MyApp.lang_"+ System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName, Assembly.GetExecutingAssembly());

lblError.Text = res_man.GetString("lbl_error");

如果你的ui语言是土耳其语,它会自动加载lang_tr.resx, 如果英语将加载lang_en.resx文件 等...

祝你好运

答案 3 :(得分:-1)

创建一个扩展类并执行以下操作:

 public static class TranslateToKurdish
{
    public static void ToKurdish(this Control control,string kurdishText,float fontSize=10)
    {
        switch (control)
        {
            case TextBox textBox:
                textBox.PlaceholderText = kurdishText;
                textBox.RightToLeft = RightToLeft.Yes;
                textBox.PlaceholderText = kurdishText;
                textBox.Font = new Font("Calibri", fontSize, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));

                break;
            case Label label:
                label.Text = kurdishText;
                label.RightToLeft = RightToLeft.Yes;
                label.Font = new Font("Calibri", fontSize, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));

                break;
            case Button button:
                button.Text = kurdishText;
                button.RightToLeft = RightToLeft.Yes;
                button.Font = new Font("Calibri", fontSize, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));

                break;
        }
    }
}

然后你可以在Form中使用

   if (userLanguage == stringLanguage)
        {
            isKurdishLanguage = true;
            RightToLeft = RightToLeft.Yes;
            RightToLeftLayout = true;


            btnTruckTracking.Font = new Font("Calibri", 13.5F, FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));


            btnTruckTracking.ToKurdish(@"بارهه‌ڵگره‌كان",12);
            btnSearch.ToKurdish(@"گـــه‌ڕان",12);
            BtnProduct.ToKurdish(@"بـــه‌رهــه‌م",12);
            btnCompany.ToKurdish(@"كــۆمپـانیـایه‌كـان",12);
            btnUsers.ToKurdish(@"به‌كارهێنه‌ران",12);
            btnClose.ToKurdish(@"داخســـتن",12);

        }