Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 4


|
Menu Snippets (navigation): |
Détails du snippet : Application multilangues |
Informations sur l'auteur de ce snippet : | |

Hors ligne
| cfdev (Membre)
Lieu: Alpes de Haut Provence
Inscrit le : 08-11-2007
Messages: 127
Snippets: 4
Tutoriels: 0
|
Introduction / Description : | |
Ce snippe montre l'utilisation de la class wxLocale, elle permet de gérer les catalogues de langues pour traduire une application.
Prérequis : - Gestion des catalogues (*.mo) avec Poedit
Avant toutes choses, pour que Poedit sache quelles chaines sont à traduire, il faut les distinguer dans le code : _() chaine à traduire. wxT() chaine standard. Aprés avoir généré un catalogue et placer par exemple dans un dossier "locale/<lang>/", il faut déclarer un wxLocale dans la class de construction de l'application .
Code wxWidgets: #include <wx/intl.h> // Gestion de la localisation class myApp : public wxApp { private: // Gestion de la localisation wxLocale *m_Locale; public: virtual bool OnInit(); }; Puis dans le OnInit de celle-ci avant la construction de frame, on charge le langage par défaut du système :
Code wxWidgets: bool myApp::OnInit() { /// Gestion du multilangages // Ajout du chemin wxLocale::AddCatalogLookupPathPrefix(wxT("locale")); // Création de la class avec le langage par défaut m_Locale = new wxLocale( wxLANGUAGE_DEFAULT ); // Ajout du catalogue correspondant (*.mo) m_Locale->AddCatalog(wxT("myApp")); ///Construction des frames ... return true; }
Au lancement le catalogue correspondant sera chargé à l'aide de wxLocale et l'application sera traduite. Bonne Prog  ++
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Tip top 
C'est vrai que c'est tout bête à utiliser. Il y a juste un petit point que tu as oublié de préciser : la façon d'écrire les chaines de caractères dans le code de l'application, de façon à ce qu'elles soient automatiquement reconnues par poEdit, et surtout qu'elles soient différenciées des chaines à ne pas traduire...
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
cfdev (Membre)
Lieu: Alpes de Haut Provence
Inscrit le : 08-11-2007
Messages: 127
Snippets: 4
Tutoriels: 0
Site web
Hors ligne |
En effet, c'est ajouté ! La prochaine étape sera le changement de langue en dynamique (plus chaud)
|
GNU Linux Power ! Slacker
|
gbdivers (Membre)
Inscrit le : 05-03-2008
Messages: 92
Snippets: 2
Tutoriels: 0
Hors ligne |
Pour le changement de langue en dynamique, pas de difficulté particulière. La seule chose est que cela s'applique aux nouveaux controls créés... Il faut donc mettre à jour les fenêtres (barre de titre, menus..)
Code wxWidgets:void MyApp::SetUILanguage(wxLanguage language, bool init) // "init" indique si la fonction est appelée depuis OnInit (initialisation) ou d'ailleur (changement de langue) { if(!init) delete m_Locale; wxLocale::AddCatalogLookupPathPrefix(wxT("locale")); m_Locale = new wxLocale( language ); m_Locale->AddCatalog(GetAppName()); if(!init) m_MainFrame->RefreshUI(); } bool MyApp::OnInit() { ... // On peut ici ouvrir une config (wxConfig) et la langue selectionnée par l'utilisateur SetUILanguage(wxLANGUAGE_FRENCH, true); ... }
Code wxWidgets:void MyFrame::RefreshUI() { wxMenuBar* oldMenuBar = GetMenuBar(); SetMenuBar(CreateMenuBar()); delete oldMenuBar; SetStatusText(_("Thanks to use MyApp"),0); SetTitle(_("MyApp"); } void MyFrame::SelectEnglish(wxCommandEvent &event) { wxGetApp().SetUILanguage(wxLANGUAGE_ENGLISH, false); } void MyFrame::SelectFrench(wxCommandEvent &event) { wxGetApp().SetUILanguage(wxLANGUAGE_FRENCH, false); } wxMenuBar* MyFrame::CreateMenuBar() { ... }
Remarques : 1. Je ne suis pas sur qu'il soit nécessaire conserver un pointeur vers wxLocale (m_Locale ici) 2. Si quelqu'un a un moyen de connaitre la liste des langues disponibles (à part en passant par une recherche des fichiers dans le repertoire /locale/)
Dernière modification par gbdivers (18-11-2008 10:56:17)
|
|
maspero (Membre)
Inscrit le : 19-05-2009
Messages: 81
Snippets: 0
Tutoriels: 0
Hors ligne |
Je rajouterai une chose :
C'est peut etre trivial, mais j'ai été confronté au probleme...
LE FICHIER .MO GENERE PAR POEDIT DOIT POSSEDER LE MEME NOM QUE L'APPLICATION...
Sinon ca marche nickel merci.
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Pas obligatoirement ! L'explication se trouve ici
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
Menu Snippets (navigation): |
|