Silverlight:如何为所有国家/地区保持相同的本地化

时间:2010-12-23 15:30:38

标签: silverlight localization culture string-formatting

我需要知道如何格式化给定的数字(或日期,或其他) 总是意大利语,无论客户在哪个国家......

示例:

<TextBlock Text={Binding Price, StringFormat=C2} />

每个国家/地区必须返回“€1.520,45”才能执行。 即使该机器上没有安装意大利语。

我怎样才能实现这一目标? (如果我可以在应用程序范围内进行,可能会更好)

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以明确设置Silverlight应用程序的UICulture和Culture,以确保无论用户区域设置如何,都将修复UICulture和Culture。

这可以通过两种方式实现

1-设置浏览器上的object标签

<param name="uiculture" value="it-IT" />
<param name="culture" value="it-IT" />

2-在Application_Startup

中设置线程文化
Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("it-IT");

更新:使用StringFormat时,上述操作似乎没有生效。鉴于此,我将恢复使用自定义值转换器。以下是样本

MainPage.xaml中

<UserControl x:Class="SLLocalizationTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SLLocalizationTest" 
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
  <UserControl.Resources>
    <local:DoubleToStringConverter x:Key="DoubleToStringConverter" />
  </UserControl.Resources>
  <Grid x:Name="LayoutRoot" Background="White">
    <StackPanel>
      <TextBlock Text="{Binding Price, Converter={StaticResource DoubleToStringConverter}, ConverterParameter=C2 }"/>
      <TextBlock Text="{Binding Price, Converter={StaticResource DoubleToStringConverter} }"/>
    </StackPanel>
  </Grid>
</UserControl>

MainPage.xaml.cs中

using System;
using System.Windows;
using System.Windows.Controls;
using System.Globalization;
using System.Windows.Data;

namespace SLLocalizationTest
{
  public partial class MainPage : UserControl
  {
    public MainPage()
    {
      InitializeComponent();
      DataContext = this;
    }

    public double Price
    {
      get { return 12353.23; }
    }
  }

  public class DoubleToStringConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, 
      object parameter, CultureInfo culture)
    {
      if (value is double)
      {
        return ((double)value).ToString((string)parameter);
      }      
      return value.ToString();    
    }

    public object ConvertBack(object value, Type targetType, 
      object parameter, CultureInfo culture)
    {
      throw new NotImplementedException();
    }
  }
}