Salut
Quel est la meilleur solution pour realiser une application multilangue ?
Je pense avec les fichiers ressources ...
thx @+
Version imprimable
Salut
Quel est la meilleur solution pour realiser une application multilangue ?
Je pense avec les fichiers ressources ...
thx @+
Bingo!! met ta form avec la propriété localizable!Citation:
Envoyé par Seth77
Regarde aussi ici: http://morpheus.developpez.com/localisationdotnet/ ;)
+1, un très bon tuto, clair et concis.Citation:
Envoyé par Morpheus
J'ai fait ma première application localisée grâce à lui. Au passage merci Morpheus :P
++
Merci tlm ! ;)
J'ai regarde le tuto... il y a un truc que je ne comprends pas ....
on a donc un fichier ressource pour chaque langue et pour chaque form...
on doit donc avoir un ResourceManager par form ?
et comment faire un fichier ressource qui n'est pas rattache a une form ?
up
Personne pour eclairer ma lanterne ? :aie:
Ben en fait mon application (de test) n'avait qu'une seule form...
Morpheus pourra peut-être te renseigner (et moi aussi par la même occasion :mouarf: )
++
J'arrive pas a voir le code qui est derriere le fichier resx du tuto ....:cry:
Attention, ce tuto est valable pour du .NET 1.0 / 1.1 ;)
En .NET 2, vous pouvez passer directement par les ressources ;)
ah d'accord...Citation:
Envoyé par Morpheus
si j'ai bien compris il faut tout de meme mettre a jour tout les labels de tout les composants manuellement ?
et comment gerer le fait de passer d'un fichier ressource a l'autre en fonction de la langue choisie ?
8-)
up
Il me semble que c'est
Code:System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
8OCitation:
Envoyé par LaNat
Ben alors comment faire le lien entre mon fichier ressource et System.Threading.Thread.CurrentThread.CurrentCulture ?
Je pense que c'est le RessourceManager qui se débrouille comme un grand (arrêtez moi si je dis des conneries!!)
Ben chepa ca doit etre moi ...
Si je cree 2 fichiers ressources
fichier1.resx
fichier2.resx
Comment sait il quel fichier ressouce prendre si je lui dit :
Code:
1
2
3 CultureInfo FrenchCulture = new CultureInfo("fr-FR"); System.Threading.Thread.CurrentThread.CurrentUICulture = FrenchCulture;
Là je crois qu'il vaut mieux que je laisse la parole aux autres lol
Et si tu nommes tes fichiers comme ceci :
#NomDuForm#.en.resx
#NomDuForm#.fr.resx
Oui, mais si je ne veux pas rattache mes fichiers ressources a une form ...Citation:
Envoyé par Kelpan
Moi j'ai une autre question, dans la même veine.
Quand on compile un projet avec 2 langues (disons US & FR), il y a génération d'une dll par langue, pour contenir les ressources. Arretez-moi si je me trompe. Hors un jour je voudrais rajouter une autre langue comme le Japonais et donc il me faudra générer cette dll à partir du fichier ressource version japonaise (donc un xml avec du texte traduit). Est-il possible de générer la dll pour la langue Japonaise sans réouvrir le projet ?
En d'autres mots, quels outils permettent de prendre un fichier "Form1.jap.resx" pour en faire une dll genre App.resources.dll ???
Le but est de fournir un moyen à un client d'ajouter des langues à son application facilement.
tu n'es pas obligé, moi j'ai 7-8 forms et 1 seul fichier resx par langue.Citation:
Envoyé par Seth77
Il suffit de ne pas utiliser la propriété Localizable de la form.
Perso, je n'utilise pas les langue sur 4 lettres mais sur 2. Ca évite de faire un fichier US et un GB.
AhhhCitation:
Envoyé par fregolo52
Tu n'aurais pas un exemple parce que la je suis perdu ! :(
Tu peux définir des traductions pour l'ensemble d'un projet :
tu crée un fichier message.resx
puis par langue, tu crée un autre fichier auquel tu ajoute le préfix de la langue :
message.en.resx
il faut juste garder le même nom de fichier
Ensuite dans chacun de ces fichiers, tu déclare une variable erreur (par exemple)
Dans message.resx :
erreur : erreur du système
Dans message.en.resx :
erreur : system error
Ensuite pour utiliser le message tu appel message.erreur
Et selon la localization du PC, le message s'affichera soit en français (par default), soit en anglais
Assez clair ?
Je vais essaye ... Merci ... 8OCitation:
Envoyé par LeGars
Slu
Comment je fais pour passer d'une langue a l'autre ?
Avant ou après (je ne sais plus) la fonction initcomponent() :
Code:
1
2
3
4
5
6
7 CultureInfo FrenchCulture = new CultureInfo("fr"); CultureInfo EnglishCulture = new CultureInfo("en"); System.Threading.Thread.CurrentThread.CurrentUICulture = EnglishCulture; // ou System.Threading.Thread.CurrentThread.CurrentUICulture = FrenchCulture;
Ok merci...
Donc je cree mes fichiers ressources, je peux faire le changement de langue, mais est ce que je dois , lors d'un changement de langue, reafficher tous les controles avec les nouveaux textes ?
par exemple faire un
button.text = message.buttonmsg;
pour les differents controles de la form ?
non, en fait t'as deux choses pour le multilingue :
La partie messages d'erreur, ou autre (avec les fichiers messages.fr.resx, messages.de.resx...)
La partie interface graphique.
Pour cette dernière, il faut mettre la propriété Localization à true.
Tu dessine ta form avec tous les composants et les labels qui vont bien dans la langue par defaut.
Ensuite pour chaque langue à inclure, tu as la propriété "Language". La valeur par defaut est "defaut". Tu peux la changer pour n'importe quelle langue (par exemple "English". Une fois cela fait, rien ne change en apparance...
Tu peux alors éditer tous les labels et textes dans la langue des Beatles, tu peux aussi changer la position des composants. Re-sélectionne "defaut" dans language et tous les contrôle seront alors à la langue d'origine. Tu pourra remarque qu'un nouveau fichier .resx est créé pour ta form.
Ok merci , je vais essaye ...
Citation:
Envoyé par LeGars
Salut
Donc, j'ai essaye 8-)
Mais cela ne marche pas ..
J'ai bien mis les form en localizable (langue par defaut le francais et j'ai rajoute l'anglais : il a bien rajoute un fichier ressource) et j'ai change les label ; j'ai mis egalement des fichiers ressources avec mes messages d'erreur...
Quand je change la langue il reste toujours sur les memes labels et le meme message du fichier resource ... :aie:
cf mon code
@+
Plusieurs points :
1- Pour l'anglais le fichier resources c'est mymessage.en.resx et no .eng.resx
2- Il faut différencier le fr-FR du fr de même pour en et en-US, se sont des définitions différentes : fr != fr-FR != fr-CA
3- Le fait d'assigner une culture se fait avant le InitializeComponent()
Je sais pas comment changer à la volée de culture.
Comme dit LeGars je pense que tu t'es planté dans tes cultures : tu as défini une culture eng et une culture par défaut et dans tes radio tu appelles la culture française de France et la culture anglaise des US donc à mon avis c'est là que ça merde (ta culture par défaut pourrait très bien être du chinois!), et idem que LeGars : la culture 'anglais des US' est différente de la culture 'anglais tout court'
C bon j'ai change le "eng" en "en" ...cela marche maintenant ...
par contre j'ai pas compris le truc de langue par defaut, si je fais mon app en francais ; c'est le francais la langue par defaut non ?
Donc si j'ai bien compris il faut "redemarrer" mon app (en enregistrant les prefs de l'utilisateur) si je veux qu'il prenne en compte le changement de langue pour les "labels"
Donc ci qqn sait comment faire ce changement directement, cela m'interesse ! :mouarf:
Lorsque ton application va démarrer, elle va demander au système d'exploitation qu'elle est la langue utilisée.
Exemple :
Dans application tu as défini les langue suivante :
Français (par defaut)
Anglais "en"
Si le système renvoi :
- "en" : l'appli utilisera toute seul sa définition en "en"
- "en-US" : l'appli utilisera la définition en "en" car le prefix est le même
- "de" : Comme celle ci n'est pas défini, la définition par defaut est utilisée
Sinon si tu veux qu'un utilisateur anglais travaillant sur un pc réglé en français, puisse avoir l'application dans sa langue préférée, alors oui il faudra redemarrer l'application pour que les changements soit pris en compte (enfin je suppose)
Ok merci
Est il possible de specifier la langue par defaut ?
parce que la finalement l'application ne sait pas vraiment la langue par defaut..... :? :?
C'est bien ce que je te disais tout à l'heure : tu as beau mettre tes libellés en français ta langue par défaut est peut-être du chinois, l'application ne connaît pas la langue par défaut.
Il s'agit juste de pouvoir afficher les libellés si l'utilisateur demande de l'allemand par exemple alors que pour ce label tu n'as pas renseigné de traduction allemande.
Ce qu'il faut faire (je pense) c'est créer une culture française, les cultures des langues que tu désires et en langue par défaut tu mets les mêmes libellés que pr le français.
pas besoin alors de créer une locale en français si tu met par defaut tout en francais...
Citation:
Envoyé par LaNat
Salut
c'est bien ce que je pensais, Merci !
Mais s'il a une appli où l'utilisateur peut choisir entre français et anglais par exemple, et que l'utilisateur choisit anglais mais au cas où un label n'a pas de traduction anglaise, il faut bien se rabattre sur une langue par défaut (français par exemple) donc dans ce cas les libellés par défaut seront les mêmes que les libellés français.Citation:
Envoyé par LeGars
D'un autre côté s'il ne crée pas de culture française il ne pourra pas faire choisir à l'utilisateur la langue française.
Je me trompe peut-être.