Bonjour,
J'ai un petit problème concernant "le choix du multilanguage dans un logiciel", je vous explique ma situation.
Depuis quelques temps je programme un logiciel qui est capable de résoudre des problèmes à des formules d'électricité. Jusqu'à là pas de problèmes. J'ai commencé à codé mes classes unes par unes, commencé mon interface graphique, mes algo, ... Bref tout le bordel qui va avec
Ayant une démo "potable" de mon logiciel je souhaiterais le mettre sur le net pour avoir des avis, des réactions, du public. MAIS, grand mais, vu que je suis dans une néerlandophone(Belgique), j'ai mit TOUS mes labels, txtfields, menus, System.out.println(...) en néerlandais. Or sur le net, je ne pense pas avoir beaucoup de réactions en néerlandais(déjà je pensais le mettre ici, et cela m'étonnerait de voir des flamands ici).
Ma question est donc la suivante :
"Comment instaurer un système de multilanguage dans un logiciel ?"
Sachant que je code en java, auriez vous des idées du comment instaurer un tel système dans mon logiciel ? Ou bien des pattern que je pourrais utiliser(je suis occupé à étudier les design pattern, mais aucun que j'ai étudié ne correspond à mon problème)? La seule idée qui m'est venu dans ma tête est qu'à chaque ligne où il s'agit, d'une ligne à traduire, je mets un if, mais je ne pense pas du tout que ce soit la meilleure idée...
Je vous remercie d'avoir lu jusqu'à la fin,
cordialement,
MDA.
il faut intégrer un système de lockit, tu appellerais une fonction d'un manageur de localisation qui renverrait une chaîne de caractère à partir d'un identifiant qui lui serait le même pour toute les langues. ![]()
globalement caelacanthe a raison. Et ca resoudra probablement ton probleme.
Mais la localisation est un probleme plus complique que ca. La question des pluriel et accord est complique entre differente langues. La facon de representer des nombres est egalement differente: on ecrit 1 000 000,12 en francais mais on ecrit 1,000,000.12 en anglais. Je ne parles pas des formats de dates et cie...
Tu parles d'un des grands soucis de la plupart des logiciels : l'internationalisation.
Il y a pas mal de solutions, une des solutions que j'utilise, c'est de créer un fichier XML par langue ;)
Dans ton application, tu souhaites par exemple afficher le libellé (label) qui correspond au nom du pays.
Tu peux imaginer une classe UserLocale, qui dispose d'une méthode getLabel(String code, String language)
Cette méthode ira récupérer le mot ou a phrase qui correspond au code, et ce pour la langue de l'utilisateur.
Dans le cas où on souhaite afficher en anglais "Country", et en français "Pays", il faudrait appeler, selon la langue de l'utilisateur, la méthode getLabel de cette façon :
UserLocale.getLabel("country", "en");
UserLocale.getLabel("country", "fr");
tu pourrais avoir par exemple, dans UserLocale, instancier une map static contenant, pour chaque langue, la liste des codes et les libellés (label).
Si tu vois le principe, je n'aurai pas besoin d'en dire plus. Si tu as un doute, je peux t'expliquer davantage.
ah oui, les dates...
but international metric system is SO mainstream ![]()
Godrik a raison, il y a de nombreux autres soucis de localisation, reste à voir jusqu'où tu veux aller dans l'internationalisation de ton application.
Et j'oubliais de dire, UserLocale s'occuperait (soit initialisation static, soit en utilisant un constructeur, si tu décides de disposer d'une instance unique (singleton) de ta classe UserLocale dans ton application), au chargement de l'application, de lire les fichiers xml présents, et créer une map avec les traductions, pour chaque langue.
Ca peut etre utile de savior de internationalization et localization sont souvent abreger i10n et l8n
Oui, cela pourra aider pour les recherches de tutos sur le sujet.
"
Sachant que je code en java, auriez vous des idées du comment instaurer un tel système dans mon logiciel ? Ou bien des pattern que je pourrais utiliser(je suis occupé à étudier les design pattern, mais aucun que j'ai étudié ne correspond à mon problème)?"
Je dirais des design pattern qu'il ne faut pas absolument chercher à les utiliser, mais juste bien les connaître, maîtriser leur compréhension, afin d'aider à mieux structurer ses applications, et comprendre quelles sont les différentes façons d'implémenter une solution. Mais faut pas vouloir les employer partout.
Et ben dis donc ça se remplis vide ![]()
Je remercie déjà ceux qui ont répondu !
caelacanthe
Je ne cherche pas à aller très loin dans l'internationalisation, je voudrais juste avoir une petite option qui permet de choisir par exemple français/anglais/néerlandais. Et je crois que godrik a raison en donnant son exemple des nombres fr/anglais.
Silvermo
Parfait ! Ta réponse me semble vraiment approprié ! Je vois où tu veux en venir
Par contre je sens que j'aurais quelques problèmes avec la page XML, je ne suis pas très doué là dedans. Je pourrais t'envoyer un message au cas d'un problème ?
Et le Singleton comme tu le dis, me semble parfait dans ce problème, c'est même le dernier pattern que j'ai lu^^
godrik
Merci pour les abréviation, je sens qu'ils me seront utile.
Tu peux utiliser la classe Properties pour accéder aux valeurs dans un fichier xml
Exemple :
http://snippets.dzone.com/posts/show/3945
API Java SE 6
http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html
Tous les mécanismes nécessaires sont fournis dans le Java standard et ils le font très bien.
La doc officielle d'Oracle sur le sujet:
http://docs.oracle.com/jajavase/tutorial/i18n/index.htm
NoSoul_ :
We're sorry, the page you requested was not found.
:/
Woké, il manquait un l à la fin :
http://docs.oracle.com/jaavase/tutorial/i18n/index.html
Il faut copier/coller l'adresse, ils bloquent la provenance d'autres sites apparemment.
Double poste.
Je mets ma version "démo" en néerlandais pour ceux à qui ça intéresseraient, ceci est encore loin du but final, je précise ! Pour l'instant je n'ai que le courant, l'intensité, la résistance et la puissance, je compte rajouter au fur et à mesure. Mais je dois encore régler pas mal de choses. Quelques erreurs(NaN, infinity), on peut rentrer n'importe quoi comme donnée(ex = 230v, 5a, 6ohm ce qui est impossible), j'aimerais améliorer mon code, j'ai beaucoup baclé. J'ai commencé un UML que j'aimerais continué tout comme ajouter de la Javadoc pour avoir un code beau et claire
Le lien : https://rapidshare.com/fiiles/672920309/Elec_13-04_.jar
Merci pour la démo , je sais pas si je testerai ce soir par contre :p
Donc comme NoSoul_ le montrait, il y a des tutos officiels pour l'internationalisation. Ils utilisent des fichiers properties au lieu de fichiers xml, c'est bien aussi. A toi de voir.
Exemple : http://docs.oracle.com/javase/tutorial/i18n/intro/after.html
"Woké, il manquait un l à la fin : "
Ok, j'avais encore la bonne adresse en collant, c'est pour ça. Donc il manquait bien un "l" à la fin, merci pour la correction.
C'est très gentils pour vos lien, je regarderais tout ça demain !
J'ai passé plus de 3h devant Eclipse et ça m'a un peu fatigué^^
Je vous souhaite une bonne soirée les gars !