我写了一个小应用程序,它将以英语或德语自动启动。英语是默认的,德语将在德语Windows上使用。
问题:
德语字符串未加载到德语Windows上,尽管程序将客户端识别为德语。 然而,将当前文化(在代码中)明确地设置为德语将导致德语UI。
我做了什么:
我遵循了这个指南:http://www.codeproject.com/Articles/299436/WPF-Localization-for-Dummies
代码:
private void InitLocalization() // Executed on startup
{
if (CultureInfo.CurrentCulture.Name != "de-DE") // only use german on german systems. Otherwise use english
{
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
}
else
{
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("de-DE");
}
rm = new ResourceManager("SaveEye.Properties.Resources", Assembly.GetExecutingAssembly());
// Manually assign the correct text to XAML-elements
_SettingsTextBlock.Text = rm.GetString("Settings");
_StartWithWindowsCheckBox.Content = rm.GetString("Startup");
_SaveButton.Content = rm.GetString("SaveAndClose");
}
基本上,我只想确保从ResourceManager加载Resources.en-US.resx或Resources.de-DE.resx。
在其余代码中,我使用rm.GetString(“”)获取我需要的字符串。
这适用于英语。我甚至可以在InitLocalization-Method开始时手动将CurrentCulture设置为de-DE,然后加载所有德语字符串。但正如我所说,在默认情况下de-DE的其他系统上,未加载德语字符串。
我做错了什么?
此致
答案 0 :(得分:3)
CurrentUICulture将影响加载的资源,以及影响日期和数字格式的CurrentCulture。很多人都把这两个搞糊涂了。
如果您尝试设置或确定要检索的字符串资源,则应该测试CurrentUICulture。使用德语日期和数字格式运行的计算机(CurrentCulture)与运行完整德语语言包的计算机(CurrentUICulture)之间存在很大差异。
您的示例代码正在使用CultureInfo.DefaultThread(UI)CurrentCulture,它将控制所有新线程的行为,但这将默认为主线程正在使用的任何内容,因此如果它已经在德语,你不应该明确地设置它。
您可以通过更新InitLocalization()方法并将Thread.CurrentThread.CurrentUICulture明确设置为“de-DE”来测试资源加载行为,以查看德语资源是否开始加载。然后验证CurrentUICulture是否真的设置为“de-DE”而不仅仅是CurrentCulture。德国机器可能具有德语日期/数字格式(CurrentCulture),但未使用德语语言包(CurrentUICulture)。
编辑:在回复您的评论时,如果您已经正确使用CurrentUICulture并且该机器确实具有完整的德语UI但德国资源仍然没有出现,您应该检查德国卫星资源文件是否实际存在展开。德语资源包含在名为de-DE \ MyApp.resources.dll的单独程序集中,并且必须与可执行文件位于同一文件夹中并保留在de-DE文件夹中(因此您有\ Folder \ MyApp.exe和\ Folder \ de-DE \ MyApp.resources.dll)。默认资源(Resources.resx中的资源保留在主可执行文件中,如果找不到更合适的资源,则是ResourceManager回退的资源)。
您没有指定部署应用程序的方式,但如果您运行,可以使用任务管理器中的“在资源管理器中打开”(或德国机器上的DateipfadÖffnen)功能将您带到已运行的部署文件夹应用程序,所以你可以检查de-DE文件夹是否存在(我只提这样做,因为如果你单击ClickOnce部署应用程序,很难找到安装文件夹。)
如果您使用ClickOnce并使用Visual Studio发布,则可以通过右键单击项目并选择属性然后导航到“发布”选项卡来控制发布期间包含的文件。 “应用程序文件”按钮将显示发布时包含的所有文件的列表。您的de-DE卫星资源文件应设置为“包含”。