使用 .resx 文件对 Winforms VSTO 进行本地化

Localization of Winforms VSTO with .resx files

我想本地化我的 VSTO winform,但我无法让它工作。未应用本地化。为了测试,我创建了一个非常简单的 Winform,它只有一个带有一些文本的按钮。

以下是我如何尝试本地化表单上的文本:

  1. 将表单的.Localizable属性设置为True
  2. 使用流行的 ResX 管理器 (https://dotnetfoundation.org/projects/resx-resource-manager)) 翻译我的表单字符串。
  3. 我还添加了一个 Strings.resx(带有英文和德文字符串)文件,我尝试通过 Me.Text = My.Resources.Strings.SomeRandomName
  4. 以表单名称访问该文件

因此,我现在有了一个名为 frmTest 的表单。它的默认字符串是英文的,但我可以看到创建了一个 frmTest.de.resx,其中包含我的德语翻译。

不幸的是,表格仍然以英文显示,而且我对 My.Resources.Strings.SomeRandomName 的调用也导致了英文字符串。

文化设置为 de-DE 但我也尝试通过以下方式手动更改它:

System.Threading.Thread.CurrentThread.CurrentUICulture = New CultureInfo("de")

我也试过将办公语言设置为德语,但也没有用。

我发现了几个旧指令(例如 localisation in vsto add-in),但其中 none 似乎有效。

一切正常,设置Thread.CurrentThread.CurrentUICulture应该足够了,但请确保以下几点:

  1. 您在打开表格之前调用 Thread.CurrentThread.CurrentUICulture = New CultureInfo(...)(我认为这很明显,但无论如何)

  2. 资源和 CultureInfo 构造函数中的区域性名称相同。我的意思是,“de”和“de-DE”不是一回事(很可能就是这个问题)。我会尝试 new CultureInfo("de-DE"),甚至 new CultureInfo(1031)

请注意办公语言可能与系统语言不同。您可以使用 Application.LanguageSettings.LanguageID 使用办公室语言。该值应与 CultureInfo 接受的参数兼容。