晚上好
我碰巧与Winforms和Resources.resx有关。
我正在使用的应用是通过可通过Visual Studio选择的“ Winforms应用”模板构建的。 我遇到的问题是Winforms本地化之外的一种-我认为很重要。
这是我的问题: -我创建了一个'HistoryManager'类,该类只有一种方法和一个要执行的操作-将历史记录添加到SQL数据库中。 -我创建了Resource.resx文件,并在“ MsgTaskAdded”下输入了格式字符串,该格式字符串等于“已将任务{0}添加到{1}”。 -所述字符串完美地添加到数据库中。
Resources.resx
效果很好-如果更改MsgTaskAdded
资源字符串,它将更改将添加到数据库中的内容。
现在,我遇到的问题是。
-我创建了一个Resources.de-DE.resx
文件,从Resources.resx
复制了字符串并翻译成德语。
-将CurrentThread.CurrentCulture
和CurrentThread.CurrentUICulture
更改为'de-DE'。
结果,添加到数据库的文本仍然是英语,就像找不到文件一样,并且使用默认的Resources.resx
来回退。
答案 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.resx
或Resources.pl-PL.resx
,而是-仅使用第一位(Resources.de。 resx),并确保打开文件并将访问器设置为“内部”,这样它就会为您生成带有正确代码的Designer文件。