本地化工作不正常

Localization not properly working

我写了一个小应用程序,它会以英语或德语自动启动。英语是默认的,德语将用于德语 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 的其他系统上,不会加载德语字符串。

我做错了什么?

此致

CurrentUICulture 会影响加载的资源,CurrentCulture 会影响日期和数字格式。很多人把这两个搞混了。

如果您尝试设置或确定要检索的字符串资源,您可能应该测试 CurrentUICulture。机器 运行 德语日期和数字格式 (CurrentCulture) 与机器 运行 安装并激活了完整的德语语言包 (CurrentUICulture) 之间存在很大差异。

您的示例代码使用 CultureInfo.DefaultThread(UI)CurrentCulture,它将控制创建的所有 new 线程的行为,但这将默认为主线程无论如何都在使用,所以如果它已经是德语,你不需要明确地设置它。

您可以通过更新 InitLocalization() 方法并将 Thread.CurrentThread.CurrentUICulture 显式设置为 "de-DE" 来测试资源加载行为,以查看德语资源是否开始加载。然后验证 CurrentUICulture 是否真的设置为 "de-DE" 而不仅仅是 CurrentCulture。德国机器可能有德语 date/number 格式 (CurrentCulture) 但没有使用德语语言包 (CurrentUICulture)。

编辑:针对您的评论,如果您已经正确使用 CurrentUICulture 并且机器确实具有完整的德语 UI 但德语资源仍未出现,您应该检查是否确实部署了德国卫星资源文件。

德语资源包含在一个名为 de-DE\MyApp.resources.dll 的单独程序集中,并且必须与可执行文件位于同一文件夹中并保留在 de-DE 文件夹中(因此您有 \Folder\MyApp.exe 和 \Folder\de-DE\MyApp.resources.dll)。默认资源(Resources.resx 中的资源保留在主可执行文件中,如果找不到更合适的资源,ResourceManager 会回退到这些资源)。

您没有指定您是如何部署应用程序的,但是如果您 运行 您可以使用任务管理器的 'Open in Explorer'(或德国机器上的 Dateipfad Öffnen)功能来带您到 运行ning 应用程序的部署文件夹,这样你就可以检查 de-DE 文件夹是否在那里(我只提到这样做是因为如果你 ClickOnce 部署应用程序,很难找到安装文件夹)。

如果您使用 ClickOnce 并使用 Visual Studio 发布,您可以通过右键单击项目并选择属性然后导航到 'Publishing' 选项卡来控制发布过程中包含的文件。 'Application Files' 按钮将显示发布时包含的所有文件的列表。您的 de-DE 卫星资源文件应设置为 'Include'.