代码之家  ›  专栏  ›  技术社区  ›  James Bloomer

Silverlight本地化的最佳实践?

  •  2
  • James Bloomer  · 技术社区  · 15 年前

    是否有人在Silverlight中有任何本地化的最佳实践或经验? MSDN recommends 将资源绑定到XAML,但结果相当混乱:

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

    其中的一页将使XAML不可读!

    有捷径吗?

    2 回复  |  直到 12 年前
        1
  •  2
  •   Community CDub    8 年前

    不久前我问了一个类似但更复杂的问题( silverlight paramterised resource values for internationalisation )

    在msdn上给出的示例确实不足以进行严格的本地化,它假定每个字符串都完全存在并且没有参数,实际情况是您希望在字符串中嵌入值,但需要占位符在字符串中标记该变量的位置,以便转换器在转换时移动标记。

    通过将自己实现到Silverlight中,您可以实现更高级的机制-Colin Eberhardt实现得很好( silverlight multibindings how to attached mutiple bindings to a single property )-调整一个位并与多值转换器结合,您可以执行多个绑定,允许第一个绑定到语言文件,随后的绑定到要嵌入的参数。

    这是相当痛苦的,但本地化的故事只是明显缺乏-甚至在pdc09上通过Silverlight 3/4聊天-目前确实没有一个很好的路径-如果wpf多绑定使它跨越到sl4,这使它稍微容易些,但我还没有看到一个好的替代实现,除了人们输出所有来自ViewModel的字符串-从“设计器”的角度来看似乎是错误的。

        2
  •  0
  •   Jaska    12 年前

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

    1. 很难编辑主维护两个单独的文件:xaml和resx
    2. 当您将字符串内容从xaml移动到resx时,它的大部分内容都是松散的。
    3. XAML变得更难读取和维护

    原因是微软的工具,如Visual Studio, 提供本地化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,您仍然需要将它们编译成Satellite assembly文件,并最终将Satellite包含在XAP文件中。

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

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