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

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

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

您还可以将.resx资源文件添加到项目中。 例如,创建一个Strings.resx文件并向其中添加一些字符串键和值,然后将其复制为strings.en.resxstrings.fa.resx并编辑这些语言的值。

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

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

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

有关更多信息和示例:

  • 全球化Windows窗体
  • 演练:本地化Windows窗体

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

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

  2. 打开资源文件,在字符串中为您的字符串命名,并在值单元格中添加不同的翻译。 例如: en.resx中的next station的值是next stationfr.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");

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

在VS2017

1 – 首先在项目根文件夹中创建资源(不在Resources文件夹中)。 将其命名为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 

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文件等…

祝好运