web-dev-qa-db-fra.com

Définition de la culture (en-IN) dans l'application WPF

J'ai une application basée en Inde et j'installe Culture comme:

Thread.CurrentThread.CurrentUICulture = new CultureInfo ("en-IN");

Le code ci-dessus est défini avant que la méthode Window - InitializeComponent soit appelée.

Cela montre quand même que $ en tant que CurrencySymbol dans toute la TextBox.

Si je lie la zone de texte comme suit, il affiche «Rs». comme devise:

Text="{Binding Salary,Mode=TwoWay,StringFormat=C,ConvertCulture=en-IN}".
23
Varun Jain

Je pense que vous devrez ajouter ce qui suit.

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-IN");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN");
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(
            XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

Lisez plus ici:

http://www.west-wind.com/weblog/posts/2009/Jun/14/WPF-Bindings-and-CurrentCulture-Formatting

Juste pour vous donner un exemple, voici comment initialiser la culture dans mon programme, en fonction du paramètre utilisateur, mais vous pouvez simplement remplacer UserSettings.DefaultCulture et UserSettings.Default.UICultrue par votre culture souhaitée.

private static void InitializeCultures()
{
    if (!String.IsNullOrEmpty(UserSettings.Default.Culture))
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo(UserSettings.Default.Culture);
    }
    if (!String.IsNullOrEmpty(UserSettings.Default.UICulture))
    {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserSettings.Default.UICulture);
    }

    FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(
        XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
}
36
eandersson

Pour moi, si je mets ce code dans la méthode surchargée OnStartup:

public partial class App : Application
{
      public App()
      {                
      }

      protected override void OnStartup(StartupEventArgs e)
      {
          var vCulture = new CultureInfo("de-DE");

          Thread.CurrentThread.CurrentCulture = vCulture;
          Thread.CurrentThread.CurrentUICulture = vCulture;
          CultureInfo.DefaultThreadCurrentCulture = vCulture;
          CultureInfo.DefaultThreadCurrentUICulture = vCulture;

          FrameworkElement.LanguageProperty.OverrideMetadata(
          typeof(FrameworkElement),
          new FrameworkPropertyMetadata(                 
       XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

          base.OnStartup(e);
      }
}
9
Bence Végert
Thread.CurrentThread.CurrentCulture = 
    System.Globalization.CultureInfo.GetCultureInfo("en-IN");

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
 new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

Cela changera la langue par défaut pour toute l'application. Vous souhaiterez utiliser ceci uniquement dans le code de démarrage car ce paramètre ne peut être appliqué qu'une seule fois par application. Vous pouvez toujours remplacer des formulaires individuels si nécessaire, comme indiqué ci-dessous.

this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);

Tous les éléments WPF incluent une propriété Language pouvant être affectée et détermine la culture utilisée pour le formatage.

Référence

5
CharithJ