.net 本地化 : coexistence of old-school . resx 和新派 wpf .baml

标签 .net wpf localization

我了解所有关于老式方法的知识:使用扩展名为 .resx 的资源文件,提供 NeutralResourcesLanguage 属性,中性资源在程序集中编译,并且您可以从其他本地化资源(blahblah.h)编译卫星程序集。去-DE.resx)。 Visual Studio 还从资源生成强类型 .cs,因此可以轻松地从代码中使用它 (Properties.Resources.Default.WhateverStringResource)。

我刚刚学习了新的 WPF 方式:将资源放入 .xaml 文件中,在 .csproj 中使用 UICulture 标记将 .baml 资源放入卫星程序集中,或者不将 .baml 资源放入主要装配。这些资源很容易在 .xaml 中使用,但据我所知,不是从代码中使用,因为没有自动生成 .cs 文件。

所以也许我错了,但我有几个问题。 “说真的,现在到底是什么情况?”是第一。为了使我的咆哮有效,只需在 Visual Studio 2010 中创建一个新的 WPF 应用程序:您将获得 .xaml 文件,并且还会在其中放置一个空的 Properties\Resources.resx。现在你已经明白了,所以它们确实需要共存。

首先,我是否需要新派和旧派?我看不到从代码隐藏中使用强类型 .xaml 资源的简单方法。为什么不?也许有一种方法可以将它们生成为 .cs 文件,但我只是不知道。

现在更大的问题是我也无法使用 .xaml 中的 .resx 资源。为什么?! Visual Studio 2010 的设计者肯定看不到它们,但同样,这可能是我的错。

MSDN 建议使用 UICulture 标签。它确实将 .baml 资源放入附属程序集中,因此该程序集甚至不包含中性资源。但它不适用于老式的中立资源,据我所知,非本地化的 .resx 需要进入主程序集。因此,如果我想在同一个项目中使用新派和旧派,我不能使用 UICulture 标签,我需要主程序集中的所有中性资源。我是唯一一个为此烦恼的人吗?

所以问题:

  • 我可以像使用 .resx 文件一样以强命名方式在代码中使用 .xaml 中的资源吗?
  • 有没有一种方法可以在 .xaml 中使用 .resx 资源,并且不会与 SilverLight 发生冲突?
  • 只有我这么认为还是 .baml 本地化比 .resx 本地化复杂得多? (dll 解析、重新编译、csv 编辑,与仅编辑 .resx 文件)
  • 我可以将中性 .resx 编译为附属程序集,就像在 wpf 中使用 UICulture 一样吗?

最佳答案

实际上,您可以在 WPF 中相当轻松地使用 RESX 文件,对于本地化来说,这是最佳选择。

看: http://www.codeproject.com/KB/WPF/WPF_Resx_Localization.aspxGet values from *.resx files in XAML

关于.net 本地化 : coexistence of old-school . resx 和新派 wpf .baml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5523863/

相关文章:

.net - 在 native C++ 应用程序中使用 .NET 程序集

c# - 向 COM 公开 .NET 类(具有事件)

.net - 我怎样才能模拟大会?

javascript - 客户端本地化

c# - 直接在 XAML 中使用 .resw 文件中的字符串

使用Visual Studio 2008的.NET安装项目

wpf - 触发 ContextMenu 可见性?

c# - UI 不更新 ExpandoObject 列表

c# - 在 View 模型中访问密码框内容以验证登录

c# - 使用 resx 文件时,可以用常量值替换变量吗