我有一个应用程序,我需要在该应用程序中使用两种语言。例如:
但我不知道我该怎么做。有人能帮我吗?我需要一些C# Windows Forms的例子。
C# Windows Forms
vql8enpb1#
使用Form的Localizable和Language属性
Localizable
Language
Form类具有Localizable和Language属性。如果将Localizable属性设置为true,则可以将控件添加到默认语言的窗体,并设置默认语言的属性。然后,您可以选择其他语言并更改这些语言的属性。这样,值或可本地化的属性将存储在不同区域性的单独资源文件中。
Form
[Localizable(true)]
BackColor
Text
该项目在Properties文件夹下有一个Resources.Resx文件,您可以使用它来本地化图像和消息。您也可以将.resx资源文件添加到项目中。例如,您可以创建一个Strings.resx文件,并向其中添加一些字符串键和值,然后将其复制为strings.en.resx和strings.fa.resx并编辑这些语言的值。然后,您可以使用这些资源值,例如:
Properties
Resources.Resx
Strings.resx
strings.en.resx
strings.fa.resx
MessageBox.Show(Properties.Resources.AreYouSure);
将使用当前UI区域性语言显示Resources.Resx文件中AreYouSure的值。如果未找到区域性的资源键或未找到资源文件的指定区域性,则将使用Resx文件的非特定区域性中的键的值。
AreYouSure
Resx
运行时更改语言
您可以使用以下命令将应用程序的区域性设置为Persian:
Persian
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("fa"); System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("fa");
你应该把上面的代码放在应用程序的开始或者显示窗体之前。
更多信息
有关更多信息和示例:
ngynwnxp2#
在某些情况下,使用资源文件可能更容易。1.在VisualStudio中向项目添加新的资源文件。例如,en_local.resx表示英语fr_local.resx表示法语。1.打开资源文件,在字符串中,命名您的字符串并在值单元格中放置不同的翻译。例如:next station在en_local.resx中的值是next station,但在fr_local.resx中可以是Prochaine station。示例如下:
en_local.resx
fr_local.resx
next station
Prochaine station
1.在代码中,使用public static ResourceManager rm = new ResourceManager("WindowsFormsApp1.en_local", Assembly.GetExecutingAssembly());选择语言资源。1.当您需要向应用程序输出任何字符串时,请使用函数GetString(),例如label1.Text = rm.GetString("welcome");
public static ResourceManager rm = new ResourceManager("WindowsFormsApp1.en_local", Assembly.GetExecutingAssembly());
GetString()
label1.Text = rm.GetString("welcome");
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文件,等等。好运
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); }
4条答案
按热度按时间vql8enpb1#
使用Form的
Localizable
和Language
属性Form
类具有Localizable
和Language
属性。如果将Localizable
属性设置为true,则可以将控件添加到默认语言的窗体,并设置默认语言的属性。然后,您可以选择其他语言并更改这些语言的属性。这样,值或可本地化的属性将存储在不同区域性的单独资源文件中。[Localizable(true)]
属性修饰,则该属性被认为是可本地化的。例如,BackColor
属性不可本地化,但Text
属性可本地化。*使用Resx资源文件本地化消息和图像
该项目在
Properties
文件夹下有一个Resources.Resx
文件,您可以使用它来本地化图像和消息。您也可以将.resx资源文件添加到项目中。例如,您可以创建一个Strings.resx
文件,并向其中添加一些字符串键和值,然后将其复制为strings.en.resx
和strings.fa.resx
并编辑这些语言的值。然后,您可以使用这些资源值,例如:将使用当前UI区域性语言显示
Resources.Resx
文件中AreYouSure
的值。如果未找到区域性的资源键或未找到资源文件的指定区域性,则将使用
Resx
文件的非特定区域性中的键的值。运行时更改语言
您可以使用以下命令将应用程序的区域性设置为
Persian
:你应该把上面的代码放在应用程序的开始或者显示窗体之前。
更多信息
有关更多信息和示例:
ngynwnxp2#
在某些情况下,使用资源文件可能更容易。
1.在VisualStudio中向项目添加新的资源文件。例如,
en_local.resx
表示英语fr_local.resx
表示法语。1.打开资源文件,在字符串中,命名您的字符串并在值单元格中放置不同的翻译。例如:
next station
在en_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");
xienkqul3#
wwjih 123的回答中有一些遗漏的部分。
在VS 2017中
1-首先,在项目根文件夹中创建资源(不在资源文件夹中)。比如lang_en,lang_tr,lang_fr等等。
2-则对象属性窗口将生成操作保留为嵌入资源
3-在lang_tr.resx文件中添加新的字符串lbl_error和土耳其语的值“Hata”(随您喜欢)
4-在类内部将变量定义为:
5-在InitializeComponent()之后进行类初始化;
如果你的用户界面语言是土耳其语,它会自动加载lang_tr.resx,如果英语,则会加载lang_en.resx文件,等等。
好运
kadbb4594#
创建一个扩展类并执行以下操作:
那么你可以在Form中使用