IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Changement de langue


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Par défaut Changement de langue
    Bonjour,

    Je travaille en c# avec une interface WPF et j'aimerai savoir si il est possible de paramétrer un changement de langue ou je dois le faire moi même avec un if()?
    Le choix de langue ce ferait à l'aide d'une comboBox.
    Pour permettre à mon application d'avoir les textblock et autre label en français, anglais ou allemand.

    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut Idem
    Bonjour,
    Je vais avoir la même question dans peu de temps, bien que je n'y sois pas encore, je vais suivre ce qu'il va se dire ici.

    Merci NicoVolley pour ta question, je vais gagner du temps

  3. #3
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 204
    Par défaut
    Bonjour,

    Je pense qu'il est possible d'utiliser un Dictionary et un peu de Binding ?

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Par défaut
    D'accord ypelissier, j'espère que l'on arrivera à résoudre ce problème

    WDKyle Je pense que c'est possible mais je ne sais pas trop comment m'y prendre.
    Je pense utiliser des fichier de ressources que je vais renommer.
    Par exemple "GlobalString.resx" pour la langue par défaut (francais) puis "GlobalString.en.resx" pour le passage à la langue anglaise.

    Ensuite je paramètre tout mes contenue avec ma ressource "button.Content = GlobalStrings.Button;" mais je ne peux le faire que dans le code, j'aimerais bien le passer directement sur XAML mais je ne sais pas comment utiliser le binding pour le faire.

    Puis pour changer la langue je modifie Thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void changelang_Click(object sender, RoutedEventArgs e)
            {
                Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es");
                Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("es");
                button.Content = GlobalStrings.Button;
                changelang.Content = GlobalStrings.Change;
            }
    A la fin je redéfinie le content pour l'actualiser sinon il ne ce change pas. ça me fait beaucoup de code du coup parce que j'ai une ligne pour chaque texte différent.
    Si je pouvais passer par un binding en XAML Je pense que ce serait plus propre.
    As tu une idée?

  5. #5
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Il y a justement un tutoriel de Thomas Levesque sur les MarkupExtension Xaml dont la dernière partie concerne leur utilisation afin de réaliser de la localisation.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut
    Le tutoriel a l'air intéressant, je l'ai parcouru vite fait mais sera étudier convenablement ultérieurement.

    Par contre, j'ai une solution simple d'implémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Application x:Class="WpfApp1.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="MultiLangages.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>
    </Application>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Window x:Class="WpfApp1.MainWindow"
            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"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <Grid>
            <Button Name="Test" Content="{DynamicResource localizedMessage}" Click="Test_Click"/>
        </Grid>
    </Window>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
        public partial class MainWindow : Window
        {
            public MainWindow() => InitializeComponent();
     
            private void Test_Click(object sender, RoutedEventArgs e) => SelectCulture("fr-FR");
     
            public static void SelectCulture(string culture = null)
            {
                ResourceDictionary dict = new ResourceDictionary
                {
                    Source = new Uri(@"MultiLangages" + (string.IsNullOrWhiteSpace(culture) ? string.Empty : "." + culture) + ".xaml", UriKind.Relative)
                };
     
                Application.Current.Resources.MergedDictionaries.Clear();
                Application.Current.Resources.MergedDictionaries.Add(dict);
            }
     
        }
    Fichier MultiLangages.xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:system="clr-namespace:System;assembly=mscorlib">
        <system:String x:Key="localizedMessage">en-US Message DEFAULT</system:String>
    </ResourceDictionary>
    Fichier MultiLangages.fr-FR.xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:system="clr-namespace:System;assembly=mscorlib">
      <system:String x:Key="localizedMessage">fr-FR Message</system:String>
    </ResourceDictionary>
    Je fais abstraction de la non utilisation du ICommand réglementaire pour l'événement Click du bouton...

    CQFD

    P.S. : Qu'en penses les experts ?

Discussions similaires

  1. Changement de langue FR or US
    Par Funraill.net dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 20h57
  2. changement de langue
    Par Malk-Om dans le forum Windows XP
    Réponses: 4
    Dernier message: 05/10/2005, 09h24
  3. [JSP] Changement de langue
    Par sg-40 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 07/06/2005, 12h15
  4. Réponses: 2
    Dernier message: 03/03/2004, 10h44
  5. Changement de langue dynamique (D6 et outils de traduction)
    Par agon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2002, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo