C#本地化Resources.resx不允许其他语言

时间:2018-12-07 14:46:15

标签: c# winforms

晚上好

我碰巧与Winforms和Resources.resx有关。

我正在使用的应用是通过可通过Visual Studio选择的“ Winforms应用”模板构建的。 我遇到的问题是Winforms本地化之外的一种-我认为很重要。

这是我的问题:  -我创建了一个'HistoryManager'类,该类只有一种方法和一个要执行的操作-将历史记录添加到SQL数据库中。  -我创建了Resource.resx文件,并在“ MsgTaskAdded”下输入了格式字符串,该格式字符串等于“已将任务{0}添加到{1}”。  -所述字符串完美地添加到数据库中。

Resources.resx效果很好-如果更改MsgTaskAdded资源字符串,它将更改将添加到数据库中的内容。

现在,我遇到的问题是。  -我创建了一个Resources.de-DE.resx文件,从Resources.resx复制了字符串并翻译成德语。  -将CurrentThread.CurrentCultureCurrentThread.CurrentUICulture更改为'de-DE'。 结果,添加到数据库的文本仍然是英语,就像找不到文件一样,并且使用默认的Resources.resx来回退。

3 个答案:

答案 0 :(得分:1)

请确保您的Resources.de-DE.resx文件包含在项目的Properties文件夹中,并且其构建操作为Embedded Resource,以便正确地与您的默认{{1} }。 Resources.resx上的区域性设置也需要在调用数据库之前进行,最好在CurrentThread调用之前在static void Main()函数中的某个位置进行。

这应该在您的Application.Run(…)文件夹中生成一个特定于文化的文件夹,其中包含名为bin\<build_configuration>的文件。如果需要,您可以使用ILSpy或Reflector之类的工具破解此漏洞,以验证翻译后的资源是否存在于程序集中的预期位置。

答案 1 :(得分:0)

也许是您如何更改线程区域性的原因。我明确地做了您所做的工作。这就是我改变文化的方式

static void Main(string[] args)
{
   Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");
   Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-DE");
   Console.WriteLine(Resources.Hello);
}

它显示“ Hallo”

答案 2 :(得分:0)

我找到了解决方法。

如果你们曾经遇到过Resources.resx的问题,请确保本地化文件不是:Resources.de-DE.resxResources.pl-PL.resx,而是-仅使用第一位(Resources.de。 resx),并确保打开文件并将访问器设置为“内部”,这样它就会为您生成带有正确代码的Designer文件。