【问题标题】:c# localization assembly (*.resources)c# 本地化程序集 (*.resources)
【发布时间】:2017-05-10 10:57:18
【问题描述】:

我在一家公司工作,我们的应用可以本地化,但我们遇到了问题。

原始语言是 PL,我们在附属程序集中进行 EN 翻译(*.resource 文件使用 Sisulizer 翻译)。

当我们在英文操作系统上运行我们的应用程序而不更改语言时,我们的应用程序在某些地方被翻译成 EN,我找不到原因。

当我们拥有“原始”PL 语言时,它应该保持 PL,而不是寻找任何附属程序集来将其自身翻译为 OS 语言。我们将 CurrentUICulture 设置为 pl-PL,但是当我运行 Assembly Binding Log Viewer 时,它显示其中一个 dll 正在寻找具有文化 = en 的 *.resources 文件。

多说,这个dll是Base class dll。 BaseForms 是包含所有基本表单的子项目,它构建为 dll。此 dll 正在日志中查找 *.resources。 ourAppName 是另一个构建为 exe 的子项目,它有一些从 BaseForms 派生的表单,f.e.主窗体。

有什么建议吗?

【问题讨论】:

  • 对不起,我不得不编辑。我发现很难阅读所有这些文字
  • 据我记得,用于确定从资源中提取哪些字符串的语言取决于线程的文化,默认情况下等于操作系统的文化。可能在您的程序中,您覆盖了文化以匹配所选语言,但有人忘记在您应用程序的某些地方设置它。这可以解释为什么在 EN 操作系统上,您的应用程序的某些地方会显示英语,而其他地方则不会。
  • 看起来 BaseForms 类有翻译问题,但在 Program.cs Main() 我看到有人添加了 System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("pl") ;
  • @grahoo 但BaseForms 是从与Main() 相同的线程访问的吗? Read here:如果没有明确设置,默认文化将应用于新线程。您可能想要覆盖默认文化(我猜)。
  • 是否有任何工具可用于检查应用程序使用的所有线程中的文化?

标签: c# .net dll


【解决方案1】:

有几个地方可以设置文化。对于 WPF 应用程序,您可以使用:

[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
private static extern ushort SetThreadUILanguage(ushort _languageId);

public static void SetLanguage(string uiLanguage)
{
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(uiLanguage);
    CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo(uiLanguage);
    SetThreadUILanguage((ushort) Thread.CurrentThread.CurrentUICulture.LCID);
    FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag)));
}

请注意,最后一行仅适用于 WPF,DefaultThreadCurrentUICulture 需要 C#5(如果您使用较早版本的框架,则必须为每个线程单独设置区域性)。

【讨论】:

    【解决方案2】:

    您的应用程序的某些其他部分(甚至可能是您使用的库)似乎在运行时将 CurrentUICulture 设置为 Enhlish。我已经看到这种情况发生了几次。每次某些库代码都更改了 CurrentUICulture。尝试通过调试或从英文出现的字符串中找出发生这种情况的时刻。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2012-09-05
      • 2017-06-22
      相关资源
      最近更新 更多