【发布时间】: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:如果没有明确设置,默认文化将应用于新线程。您可能想要覆盖默认文化(我猜)。 -
是否有任何工具可用于检查应用程序使用的所有线程中的文化?