我写了一个小应用程序,它将自动以英语或德语开始。英语是默认的,德语将在德语窗口上使用。
问题是:
虽然程序将客户端识别为德语,但德文字符串并没有加载到德文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");
}基本上,我只想确保Resources.en-US.resx或Resources.de-DE.resx都是从ResourceManager加载的。
在剩下的代码中,我使用rm.GetString("")获取我需要的字符串。
这对英语来说很好。我甚至可以在InitLocalization的开头手动将CurrentCulture设置为DE,然后加载所有德文字符串。但正如我所说,在默认情况下是DE的其他系统上,德国字符串不会被加载。
我做错了什么?
问候
发布于 2015-04-15 08:01:42
将影响加载的资源的是CurrentUICulture,而影响日期和数字格式的是CurrentCulture。很多人把这两件事搞混了。
如果您试图设置或确定要检索的字符串资源,则可能需要测试CurrentUICulture。使用德语日期和数字格式(CurrentCulture)运行的机器与安装和激活完整德语包(CurrentUICulture)的机器有很大的不同。
示例代码使用的是CultureInfo.DefaultThread(UI)CurrentCulture,它将控制创建的所有新线程的行为,但这将默认为主线程使用的任何内容,因此如果它已经是德语版本,则不需要将其明确设置为这样。
您可以通过更新InitLocalization()方法并将Thread.CurrentThread.CurrentUICulture显式设置为"de-DE“来测试资源加载行为,以查看德国资源是否开始加载。然后验证CurrentUICulture是否真的被设置为“DE”,而不仅仅是CurrentCulture。德国机器可能有德语日期/数字格式(CurrentCulture),但不使用德语语言包(CurrentUICulture)。
编辑:对于您的评论,如果您已经正确地使用了CurrentUICulture,并且机器确实有完整的德语UI,但德国资源仍然没有出现,您应该检查德国卫星资源文件是否正在实际部署。
德国资源包含在一个名为de-DE \MyApp.Resoures.dll的单独程序集中,必须驻留在与可执行文件相同的文件夹中,并停留在DE文件夹中(因此,您有\Folder\MyApp.exe和\ folder \MyApp.Resoures.dll)。默认资源( Resources.resx中的资源保留在主可执行文件中,如果找不到更合适的资源,则ResourceManager返回)。
您没有指定如何部署应用程序,但如果运行,则可以使用任务管理器的“Open”(或德国机器上的Dateipfad )功能将您带到正在运行的应用程序的已部署文件夹,以便检查didn文件夹是否存在(我只提到这样做,因为如果ClickOnce部署应用程序,很难找到安装文件夹)。
如果使用的是ClickOnce,并且使用Visual发布,则可以通过右键单击项目并选择属性,然后导航到“发布”选项卡来控制发布过程中包含的文件。“应用程序文件”按钮将显示发布时包含的所有文件的列表。您的DE卫星资源文件应设置为“包括”。
https://stackoverflow.com/questions/29644019
复制相似问题