Silverlight: как обеспечить одинаковую локализацию для всех стран - PullRequest
0 голосов
/ 23 декабря 2010

Мне нужно знать, как форматировать заданное число (или дату, или что-то еще) всегда на итальянском языке, независимо от того, в какой стране находится клиент ...

Пример:

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

должны вернуть «€ 1,520,45» в каждой стране исполнения.даже если на этой машине не установлен итальянский язык.

Как мне этого добиться?(возможно, лучше, если я смогу сделать это в рамках всего приложения)

Заранее спасибо.

1 Ответ

0 голосов
/ 23 декабря 2010

Вы можете установить UICulture и Culture приложения Silverlight в явном виде, чтобы гарантировать, что независимо от языкового стандарта пользователя, UICulture и Culture будут исправлены.

Этого можно достичь двумя способами

1- Установите в теге объекта в браузере

<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();
    }
  }
}
...