如何在Winforms中创建多语言应用程序?

xdnvmnnf  于 2023-06-24  发布在  其他
关注(0)|答案(4)|浏览(139)

我有一个应用程序,我需要在该应用程序中使用两种语言。例如:

  • 英语
  • 阿拉伯语

但我不知道我该怎么做。有人能帮我吗?
我需要一些C# Windows Forms的例子。

vql8enpb

vql8enpb1#

使用Form的LocalizableLanguage属性

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

  • 注意:如果一个属性用[Localizable(true)]属性修饰,则该属性被认为是可本地化的。例如,BackColor属性不可本地化,但Text属性可本地化。*
    使用Resx资源文件本地化消息和图像

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

MessageBox.Show(Properties.Resources.AreYouSure);

将使用当前UI区域性语言显示Resources.Resx文件中AreYouSure的值。
如果未找到区域性的资源键或未找到资源文件的指定区域性,则将使用Resx文件的非特定区域性中的键的值。

运行时更改语言

您可以使用以下命令将应用程序的区域性设置为Persian

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

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

你应该把上面的代码放在应用程序的开始或者显示窗体之前。

更多信息

有关更多信息和示例:

ngynwnxp

ngynwnxp2#

在某些情况下,使用资源文件可能更容易。
1.在VisualStudio中向项目添加新的资源文件。例如,en_local.resx表示英语fr_local.resx表示法语。
1.打开资源文件,在字符串中,命名您的字符串并在值单元格中放置不同的翻译。例如:next stationen_local.resx中的值是next station,但在fr_local.resx中可以是Prochaine station。示例如下:

1.在代码中,使用public static ResourceManager rm = new ResourceManager("WindowsFormsApp1.en_local", Assembly.GetExecutingAssembly());选择语言资源。
1.当您需要向应用程序输出任何字符串时,请使用函数GetString(),例如label1.Text = rm.GetString("welcome");

xienkqul

xienkqul3#

wwjih 123的回答中有一些遗漏的部分。
在VS 2017中
1-首先,在项目根文件夹中创建资源(不在资源文件夹中)。比如lang_en,lang_tr,lang_fr等等。
2-则对象属性窗口将生成操作保留为嵌入资源
3-在lang_tr.resx文件中添加新的字符串lbl_error和土耳其语的值“Hata”(随您喜欢)
4-在类内部将变量定义为:

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

5-在InitializeComponent()之后进行类初始化;

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");

如果你的用户界面语言是土耳其语,它会自动加载lang_tr.resx,如果英语,则会加载lang_en.resx文件,等等。
好运

kadbb459

kadbb4594#

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

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);

        }

相关问题