Silverlight本地化的最佳实践?

时间:2010-01-20 15:18:26

标签: silverlight localization

有没有人在Silverlight中拥有本地化的最佳实践或经验。 MSDN recommends将资源绑定到XAML,但结果非常混乱:

<TextBlock Text="{Binding Path=Resource1.HelloText, Source={StaticResource LocalizedStrings }}"/>

这一页将使XAML无法读取!

任何捷径?

2 个答案:

答案 0 :(得分:2)

前一段时间我问了一个类似但更复杂的问题(silverlight paramterised resource values for internationalisation

MSDN上给出的示例实际上不足以进行严格的本地化,它假设每个字符串都完全存在且没有参数,实际情况是您将拥有要嵌入字符串中的值,但需要占位符来标记该位置字符串中的变量,因此翻译人员可以在翻译时移动标记。

你可以通过在Silverlight中实现多重绑定来实现更高级的机制--Colin Eberhardt做了一个很好的实现(silverlight multibindings how to attached mutiple bindings to a single property) - 调整了一下并结合MultiValue Converter你可以执行多个绑定,允许首先绑定到语言文件,然后绑定到要嵌入的参数。

这是一个非常痛苦但是本地化的故事只是显而易见的缺点 - 即使在PDC09上通过silverlight 3/4聊天,目前还没有一条很好的路线 - 如果WPF多重绑定使其达到SL4而使其略有下降更简单,但我还没有看到一个很好的替代实现,除了人们从ViewModel输出所有字符串 - 从'设计师'的角度来看似乎是错误的。

答案 1 :(得分:0)

我同意微软对Silverlight(以及WPF和Windows Phone)本地化的建议非常简陋。它有几个问题。最重要的是

  1. 很难编辑main维护两个单独的文件:XAML和RESX
  2. 当您将其从XAML移至RESX
  3. 时,您的大量字符串内容
  4. XAML变得更难以阅读和维护
  5. 原因是Visual Studio,等Microsoft工具不能提供本地化XAML的任何方法。一个简单的解决方案是本地化XAML,包括本地化的XAML以及本地化的RESX到附属程序集文件中。

    <TextBlock Text="Hello World"/>
    

    更容易查看,编辑和维护
    <TextBlock Text="{Binding Path=Resource1.HelloText, Source={StaticResource LocalizedString }}"/>
    
    +
    
      <data name="LocalizedString" xml:space="preserve">
        <value>Hello World</value>
      </data>
    

    您需要做的是将字符串硬编码到XAML中并本地化XAML本身。没有好的工具,这将变得非常困难。这就是为什么我建议您使用可以定位XAML的本地化工具。仅此一点并不存在,因为如果你有本地化的XAML,你仍然需要将它们编译成卫星装配文件,最后将卫星包含在你的XAP文件中。

    您需要一个可以本地化RESX和XAML的工具,还可以编译本地化的附属程序集文件。有一些工具可以做到这一点(例如Sisulizer)。

    如果您只想使用Visual Studio,那么您必须坚持使用Microsoft的最佳实践。