代码之家  ›  专栏  ›  技术社区  ›  Andrew

Silverlight-国际化的参数化资源价值

  •  1
  • Andrew  · 技术社区  · 15 年前

    我遇到了一个问题,似乎没有我满意的合理/可处理的解决方案。Silverlight和国际化-一个正在形成的泥潭。

    我有一组包含翻译字符串的资源文件。

    一个不太简单的情况是字符串可以有一个参数,所以我需要在字符串中注入一个值来显示它,它本身可以是一个数据绑定。

    更复杂的场景是包含多个参数的字符串。

    你可以说VM应该提供这种功能,但是我对此不满意,因为它打破了UX设计器和开发人员之间的鸿沟,要求开发人员在VM上实现一个属性/方法来支持UI所需的每个字符串。

    例如:设计者在用户反馈后决定添加一个包含更多信息的自定义工具提示。工具提示以声明方式完成,并将更好的解释与datacontext中的值结合起来。解释存储在资源中,使用的值来自现有的数据上下文或元素到元素的绑定。

    如果我必须在VM中运行每一个字符串,那么添加这样的内容需要对VM进行更改。同样,如果参数的源将来自其他元素,那么VM不一定位于提供格式化字符串的位置。

    A。

    2 回复  |  直到 15 年前
        1
  •  0
  •   James Cadd    15 年前

    这个问题比我能完全回答的要复杂,但是如果您希望绑定考虑特定的本地化,您应该设置UI容器(可能是顶级UserControl类)的Language属性。之后,所有绑定都应该使用您请求的本地化。请查看本文,它关注WPF,但使用了似乎适用于Silverlight的技术: http://www.west-wind.com/weblog/posts/796725.aspx

        2
  •  0
  •   R4cOOn    15 年前

    • 在你的虚拟机中创建一个新的字符串,并使它成为可更改的属性

      public string MyTranslatedString 
      { 
         get 
           { 
              return string.Format("{0} Someone", LocalizedResource.Hello;
           }
       };
      

    • 创建多个文本块并绑定本地化项:

      <TextBlock HorizontalAlignment="Stretch" Foreground="Black" Text="{Binding Path=Resource.CurrentlyLoggedInAs, Source={StaticResource LocalizedStrings }}" VerticalAlignment="Center" Margin="0,0,5,0" />
      <TextBlock HorizontalAlignment="Stretch" Foreground="Black" Text="{Binding Path=Username}" VerticalAlignment="Center" Margin="0,0,5,0" />
      <Button Commands:Click.Command="{Binding Path=LogOutCommand}" Commands:Click.CommandParameter="" Content="{Binding Path=Resource.LogOut, Source={StaticResource LocalizedStrings }}" />
      

    您需要在主应用程序中添加:

    <Application.Resources>
        <local:LocalizedStrings 
            xmlns:local="clr-namespace:Localization.Silverlight;assembly=Localization.Silverlight"
            x:Key="LocalizedStrings" />
    </Application.Resources>
    

    这些都是我想出的最简单的方法,但我很高兴有一些方法能为我提供更简单的方法。