1

我在我的 WPF 应用程序中使用 MarkupExtension 继承,我想在 Silverlight 下移植。

我制作了一个“区域设置”标记扩展,可以在 xaml 中像这样使用

<TextBlock Text="{ui:Locale aRandomId,'My default translation'}" />

事实上,这个 MarkupExtension 将其应用到的属性绑定到字符串“我的默认翻译”,或者,如果找到的话,绑定到存储在名为“aRandomId”的数据库中的句子。

这个 MarkupExtension 允许我动态更改我的 UI 的语言环境(markupextension 正在注册到一个弱事件“LocaleChanged”,它会触发与它绑定的每个属性的更新)

由于我们不能从 Silverlight 中的 MarkupExtension 继承,我想知道是否有某种机制可以替代它。

谢谢。

PS:如果需要,我可以提供这个 MarkupExtension 的来源。

4

2 回答 2

0

我知道这会得到很多传统的答案,但我也想提出一些完全原创的东西,我们尝试(并成功)使用附加属性而不是绑定来更有效地本地化 Silverlight:

链接:Silverlight项目完成后的本地化

我们发现资源和绑定解决方案乏味且不灵活,因为它们都需要在项目中设置翻译(因此需要在应用程序更改时重新部署)。

此外,选定的语言哈迪会发生变化,当它发生变化时,它同时是所有字符串。如果语言发生变化,您可以重新生成当前页面,为此目的承担绑定开销似乎很疯狂。

传统上,翻译是分批发送的,并按语言管理(使用唯一键、翻译注释等),所以我们发现这也更适合那里。

我们的解决方案意味着我们在中央服务器数据库中管理本地化,但也可以在应用程序本身内提供本地化编辑器,供翻译人员在使用应用程序时使用。

  • 任意数量语言的中央存储库
  • 通过下载新数据更改语言(大型应用程序中每种语言最多 200kb)
  • 只需下载所需的语言并即时更改
  • 支持翻译人员在应用内编辑资源(确实需要额外的 UI 表单)。
于 2011-09-12T12:19:42.220 回答
0

为此,我正在使用 Converter 和 ConverterParam:

MSDN Binding.Converter

这很容易做到,但是当你开始在你的应用程序中有很多它们时,它会感觉非常样板。

更新: 也许我让您的需求过于复杂......在我的应用程序中,我有两种使用模式,一种带有转换器,一种没有。在最简单的情况下,我只想为本地化字典提取一个字符串,它看起来像:

Text="{Binding Localization[my_string_key], Source={StaticResource ViewModelLocator}}"
于 2011-09-12T12:05:31.347 回答