我有一个应用程序,我需要在该应用程序中使用两种语言(例如,英语和阿拉伯语),但我不知道该怎么做。有人可以帮我这个吗?我需要在C#Windows Forms中使用一些示例。
答案 0 :(得分:15)
使用表单的Localizable
和Language
属性
Form
班级有Localizable
和Language
属性。如果将Localizable
属性设置为true,则可以为默认语言的表单添加控件,并为默认语言设置属性。然后,您可以选择其他语言并更改这些语言的属性。这样,值或可本地化的属性将存储在不同文化的单独资源文件中。
注意:如果属性用Localizable(true)
属性修饰,则该属性被视为可本地化。例如,BackColor
属性不可本地化,但Text
属性是可本地化的。
使用Resx资源文件本地化邮件和图像
项目在Rseources.Resx
文件夹下有一个Properties
文件,您可以使用该文件来本地化图像和消息。您还可以将.resx资源文件添加到项目中。例如,您可以创建Strings.resx
文件并向其添加一些字符串键和值,然后将其复制为strings.en.resx
和strings.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)
在某些情况下,使用资源文件可能会更容易。
在Visual Studio中向项目添加新资源文件。
例如。 en.resx
为英语fr.resx
为法语。
打开资源文件,在字符串中为您的字符串命名,并在值单元格中添加不同的翻译。例如:next station
中en.resx
的值为next station
,但fr.resx
中的值可以为Prochaine station
。
示例如下:
在代码中,使用public static ResourceManager rm = new ResourceManager("WindowsFormsApp1.en_local", Assembly.GetExecutingAssembly());
选择语言资源。
当您需要向应用程序输出任何字符串时,请使用函数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);
}