【发布时间】:2015-02-20 15:40:23
【问题描述】:
我有一个类库项目(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 的命名空间(我正在更改我的项目名称,因为内部政策,你明白)。在那个文件夹中,我有三个资源文件:
- Resources.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 文件有关,也许它们没有包含在最终构建的文件中或类似的东西中,这就是应用程序无法获取本地化文本的原因。
提前谢谢你。
【问题讨论】:
标签: c# .net wpf localization resx