我有一个类库项目(c#、.net 4.0)。它有一些 WPF 用户控件,根据数据库中配置的区域性以英语或西类牙语显示内容。
为此,在主窗口构造函数中,我收到一个 CultureInfo 参数,我用它来设置要在本地化命名空间中使用的区域性,如下所示:
public MainWindow(Entities.TransactionContext transactionContext, CultureInfo culture)
{
Localization.Resources.Culture = culture;
InitializeComponent();
//Some other unrelated code here
}
这是从调用我的 dll 的主程序中使用的。在那里,进行查询以获取默认区域性。它可以是“en-US”或“es-MX”,然后作为第二个参数发送。第一个现在并不重要。
正如我所说,我有一个名为 MyProject.Localization 的命名空间(您知道,由于内部政策,我正在更改我的项目名称)。在该文件夹中,我有三个资源文件:
- 资源.resx
- Resources.en-US.resx
- Resources.es-MX.resx
Resources.resx 中的默认条目具有西类牙语值,因为我是墨西哥人。
此外,在我的代码中,当我需要显示消息或设置标签文本时,我使用如下内容:
this.lblStatusMessage.Content = Localization.Resources.OperationCancelled;
在此示例中:“OperationCancelled”是所有资源文件中都存在的条目。在西类牙语中,其值为“Operación Cancelada”,在英语中,其值为“Operation Cancelled”。
毕竟这个故事,这在我的开发环境中非常有效。我运行我的测试项目,我看到它是英文的,然后我更改数据库中的语言,再次运行它,然后繁荣!西类牙语。
但是。
当我通过 SVN 向该项目提交更改时,它会通过一些自动化流程部署到 QA 环境(这很棒)。然后我在那里进行测试,我总是看到西类牙语的内容(作为默认内容)。即使我更改 QA 数据库上的语言,它也始终以西类牙语显示标签和消息。
我尝试了一些选项:
将资源 dll 的构建操作更改为资源而不是嵌入式资源。没成功。
右键单击->属性,资源选项卡显示没有资源,因此我在那里创建了三个 resx 文件并将自定义命名空间设置为 MyProject.Localization。接下来,我排除了原始文件,因为现在存在一些不明确的错误。它再次在我的开发机器中工作,但在 QA 中却不起作用。
对此有什么想法吗?我的假设是,它与 resx 文件有关,也许它们没有包含在最终构建的文件中或类似的文件中,这就是应用程序无法获取本地化文本的原因。
提前谢谢您。
最佳答案
这是我根据个人经验给出的答案:构建操作“嵌入式资源”应该有效。所有资源都将包含在内。
Localization.Resources.Culture = culture;
// "Overrides's the current thread's CurrentUICulture property for all
// resources lookups using this this strongly typed resource class."
我个人没有使用过这个方法,但这也意味着它可以改回Localization.Resources.Culture = null;
在你不知道的情况下。相反,请考虑使用 System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
。如果您打算拥有一个具有多种语言的应用程序,这里有一个调用建议:
public void SetUICulture(CultureInfo culture)
{
CultureInfo savedUICultureInfo = System.Threading.Thread.CurrentThread.CurrentUICulture;
try
{
System.Threading.Thread.CurrentThread.CurrentUICulture = uiCultureInfo;
// Do culture-specific stuff...
this.lblStatusMessage.Content = Localization.Resources.OperationCancelled;
}
finally
{
System.Threading.Thread.CurrentThread.CurrentUICulture = savedUICultureInfo
}
}
如果您以后有多个不同的资源文件,这也很有用。一般来说,我建议看看CultureInfo
你实际上已经通过了。
关于c# - 其他环境下的类库中未加载语言资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28632763/