Traduire `` Linux avec gettext
29 gennaio 2008, 15:54 Lieu, Shell, trucs & astuces janvier 29 2008, 15:54La fonction `` gettext est conçu pour permettre la traduction du système d'exploitation GNU / Linux. C'est précisément pour cette raison est 100% compatible avec un large éventail de langages de programmation et de script: C, C + +, C #, Bash, Python, GNU clsip, Emacs Lisp, GNU Smalltalk, Java, GNU awk, Pascal, wxWidgets, YCP , Tcl, PHP, Pike, et d'autres.
Tout d'abord, nous allons voir comment vous utilisez `` gettext dans le code source. Les méthodes d'exécution varient selon le langage de programmation utilisé pour le projet, mais la syntaxe est presque toujours la même, au moins pour les langages de programmation le plus répandu: la fonction simplement entoure la chaîne de message à traduire. Il convient de noter que presque toujours utiliser la forme abrégée, qui est simplement un trait de soulignement. De cette façon, le code suivant dans C:
printf(gettext("My name is %s\n"), mio_nome);
devient:
printf(_("My name is %s\n"), mio_nome);
Ensuite, la commande xgettext code pour filtrer la fonction de recherche gettext vient de fournir, pour créer le fichier de modèle. Pot sur la base de chaînes de caractères extraites de la source. Un exemple de fichier. Pot d'un code contenant les lignes ci-dessus est:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr ""
Pour commencer la traduction est utilisée dans le logiciel `` msginit. Abordant le fichier. Msginit à «po», vous pouvez créer un nouveau fichier contenant le squelette de la nouvelle. Po dans la langue cible. Par exemple, pour traduire le fichier en italien en_EN.po est suffisant pour exécuter la commande suivante:
msginit-locale = fr_FR-input = en_EN.po
Le logiciel crée le fichier it_IT.po, dont le contenu sera similaire à la suivante:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr "My name is %s\n"
À ce moment, le traducteur ne doit pas faire est de traduire la chaîne msgstr ci-dessous. La traduction peut être fait avec un éditeur de la ligne de commande, ou en utilisant des programs poEdit. Le résultat ressemble à ce qui suit:
#: include/myname.php:36
msgid "My name is %s\n"
msgstr "Mi chiamo %s\n"
Une fois la traduction des fichiers. Po devraient être compilées dans le fichier binaire. Mo par l'intermédiaire du `` msgfmt:
msgfmt it_IT.po

















10 Octobre 2008 à 15h48
Bonjour, le temps que j'ai faite il ya quelques servicemenus pour KDE3.
Maintenant, je suis de les traduire en KDE4 et je voulais ajouter le support pour les langues barbares
Dans la pratique, le menu 'appelle un script bash et avait initialement entré toutes les chaînes gia "traduit dans le même script:
par exemple
-----------------
en_msg_savefile = "Enregistrer le fichier ..."
it_msg_savefile = "Enregistrer le fichier ..."
etc ..
msg_SaveFile eval = \ $ $ (echo $ lang) (_msg_SaveFile)
et puis echo "$ () msg_SaveFile"
----------------
Maintenant, je vous demande, à votre avis, vous ne pouvez prendre les étapes que vous avez décrites ci-dessus pour localiser le scriptino en bash?
Merci
10 Octobre 2008 à 21h25
J'ai trouvé ce que je cherchais à travers.
une chose que je voudrais demander encore, il ya certains mots que vous écrivez en anglais, d'une certaine façon, mais en italien ou en d'autres langues ne le font pas.
par exemple: Fait
J'écris en italien finis ou finis, selon précédemment effectué.
Si, par exemple pivoter une photo sera «une fenêtre avec écrit" rotation casa.jpg "" Terminé "
Toujours écrire en anglais et "Fait!"
Vous savez comment je peux faire pour résoudre ce truc?
Merci d'avance.
Nombreux sont ceux qui commencent à utiliser KDE4 et j'ai écrit plusieurs mail espère que le portage de scripts. Seulement que, jusqu'à présent, il existe en 8 langues, mais plus «en avant pourrait augmenter.
Salutations Pippo
13 Octobre 2008 à 10:05 heures
Bonjour Joseph,
excuser le retard, sont prises. La première réponse à votre deuxième question: si vous décidez d'utiliser gettext correspondance entre la langue de base et les diverses traductions doivent être unique dans tous les mots et, si la langue de la traduction est plus que celui de départ doit être biunivoca dans la mesure du possible. Dans le cas dont parle biunivocità est impossible, alors vous n'avez pas besoin de traduire des blocs de phrases au lieu de simples mots. Ou, comme tout bon traducteur, il suffit de prendre un peu de ruse. Dans votre cas, je tradurrei "Done" par "Fait ..." au lieu de "Plus de / a». Mais je suis sûr que vous avez des exemples plus compliqués où cette solution simple ne suffit pas, ici girameli discuter ensemble.
En ce qui concerne votre première question, même savoir que vous avez trouvé la solution seul, je vous dis que l'aide de gettext est le plus simple et immédiate et vous fait économiser de remettre en question ou d'une autre évaluation "tromperie"
Trouvez-moi un exemple très significatif à cette adresse:
http://tldp.org/LDP/abs/html/localization.html
... Mais je suis sûr que vous avez déjà vu, alors vous appeler à publier ici un bref exemple de la façon dont vous avez ce que vous avez mis en œuvre au bénéfice de tous
Au revoir! Ivan
13 Octobre 2008 à 10:24 heures
Ivan bonjour, je vous remercie pour votre réponse.
Donnez-moi le temps de faire un bon nom pour les variables et de fixer d'autres Cosina et puis un peu plus complexe.
CMQ leur juste fini leur public sur kde-look.org, comme je l'ai fait avec ceux de KDE3 ici: http://www.kde-look.org/content/show.php/konq-pdf?content=37321
A presto
13 Octobre 2008 à 23h55
Parlant de trucs dont je parle ... de maintenir une traduction complète avec tous les dettaggli d'une langue, il suffit d'utiliser une fonction de hachage de clé coma clé créé par vous, et non pas la traduction elle-même. Par exemple:
le fichier source "gettext (msg_saveFile_title)"
et puis aller de l'avant pour créer le fichier en.po, etc ca.po
De cette façon, et le message 'unique et plus "me permet d'utiliser masculin, féminin ou neutre, et d'autres caractéristiques.
Que pensez-vous?
bonjour
15 Octobre 2008 à 0h31
Comme pour le script que vous publiez sur kde-look.org, notifier lorsque vous le faites, sont curieux. Le deuxième message (utilisez la touche dièse avec gettext) sont certains qu'il serait presque impossible à réaliser: les langues sont très différents entre eux est un point de vue morphologique que syntaxique, la seule solution est de produire toutes les phrases dans la langue d'origine et de générer les phrases correspondantes dans les langues traduites. Il est une source sans fin de licenciements, mais nous pensons qu'il n'ya pas d'alternative au moyen d'une solution simple mais très efficace comme gettext. Mais vous pouvez toujours parler, peut-être que c'est moi que je n'ai pas ramassé au bas de la signification de votre poste.
au revoir
Ivan
15 Octobre 2008 à 15h40
S'agissant de certaines chaînes de développeurs se sont en i18nc conscient que internationalization serait contexte. Dans la pratique, vous permet de spécifier un message en fonction du contexte. Je n'ai pas de profondeur parce que «moi et a dit qu'il serait mieux que n'importe quel logiciel a la source soo fr_FR messages en anglais et ensuite, par l'intermédiaire de lacoalizzazione, d'autres langues. Puis, à la lumière de cela, je ne peux pas utiliser la technique mentionnée ci-dessus.
En tout cas je l'ai également dit que nous ne devons pas utiliser gettext directement, donc je ne peux pas bash de l'utiliser.
Après cela, j'ai décidé de le faire avec ces techniques d'évaluation "et" comment utiliser les pointeurs en bash
Je viens de terminer aujourd'hui servicemenus et une mer de fonctions pour travailler avec les pdf. J'ai ajouté certains de ceux de la version précédente. Je manque encore de traduction, nous devons donc «attendre pour les différents traducteurs-moi riconsegnino sources avec des phrases traduites, et je sais que si elles andra 'un certain temps (nous sommes tous en 8 langues).
J'ai promis un peu plus comme un «complexe, et puis prendre" l'un des servicemenus j'ai écrit, supprimer "toutes les fonctions, sauf un, et un commentaire" que brièvement sur la mondialisation.
Objet:
A Servicemenu extraire des images d'un document PDF. (le fait que c'est ce qu'on appelle pdfimages et "contenu dans Poppler-utils).
Servir "d'un fichier. Desktop à mettre dans ~ / .kde/share/kde4/services/ServiceMenus ou en l'équivalent du système (tous les utilisateurs).
Barbatrucco: J'ai remarqué que vous pouvez également créer un sous-dossier, de sorte que de plus' en ordre.
L'appel pdfimages.desktop le fichier (nom arbitraire) et contient:
Lorsque vous cliquez sur un des articles, kde en cours d'exécution ce qu'il ya 'exec dans la ligne [lang], où lang et «la langue mis à KDE lui-même.
Comme vous pouvez le voir, est appelé un scriptino sm_pdfimages.sh et nommé certains des paramètres sont passés: le langage, l'action, le fichier de travail.
Laissez les scriptino, qui contiendra:
Maintenant nous voyons ce qui se passe lorsque le script mis en cause:
Tout d'abord, je dois dire que je utiliser le contenu de la variable d'action, directement comme un appel de fonction
De cette façon, les économies réalisées sur les maisons et si ... 

Quand une fonction est exercée (par exemple tous), bash remplace les variables avec la valeur. Analizziamone seulement: "$ () msg_imagesRootName_title"
Cette variable contient le titre d'un dialogue, mais ne précise pas la langue
L'expression correcte est obtenue par une astuce qui m'a intrigué au début, rester forte! un pointeur élémentaire (très élémentaire)
Allons à la commande, en premier lieu définir les variables des messages dans n'importe quelle langue intérêts que moi et eux-mêmes appeler les variables dont le nom contient la chaîne de caractères de la langue utilisée.
Ainsi, pour le titre:
Comme vous pouvez voir la différence dans le nom se compose seulement au début.
Plus tard, définir une variable dont le nom et «égal à celui de la ci-dessus, mais sans le" lang ", de cette façon:
Si nous supposons que la langue en usage est-il de cette procédure, qui raconte la coque msg_imagesRootName_title à assumer la valeur en dollars it_msg_imagesRootName_title et jouer et 'a fait.
Dans la pratique, la variable msg_imagesRootName_title contenir "le bon message sur la langue utilisée.
Terminé.
Après avoir évalué différentes solutions, cela semblait la meilleure façon "facile à internationaliser le script. Bien sûr, si quelqu'un a une autre idée serait la bienvenue.
Fiuu .. plus "facile à mettre en œuvre expliquer.
Comme mentionné ci-dessus, il faudra un certain temps encore avant de publier, même si je pouvais le faire immédiatement et les traductions seront ajoutées ultérieurement.
PS si vous allez à mettre le tag pour le code pour le rendre plus «lisible, vous faites bien.
Bonne journée à tous
Joseph
15 Octobre 2008 à 16h13
Cazzarola, ce n'est pas un simple commentaire, mais un poste avec controfiocchi! Félicitations
Je dois avouer que je n'ai pas eu le temps de tester votre code, mais il est logique et l'explication est claire. Vous êtes le premier à gagner l'entrée dans mon blogroll! 
Ivan
15 Octobre 2008 à 21h42
Bonjour Ivan, par le biais de la blogroll.
Le commentaire semble long à cause de code :-).
Je n'ai pas encore de comprendre pourquoi «nous ne devons pas utiliser gettext directement, il semble très simple et facilement modifiables.
Dans tous les cas, ces menus services sont une chose pas fini, avec peu de contrôle sur le flux de commandes.
Maintenant que j'ai mis tout dans un script je ne peux plus de temps pour inclure beaucoup plus de contrôle. Si vous regardez le menu que je l'avais fait, le débit de chaque commande est donnée dans les fichiers séquentiels. Desktop ne peut pas prendre avantage de si ou variable. En effet je me souviens d'sauts mortels plutôt que de recourir à des fichiers externes
J'espère que l'exemple Ajoutés certains stimuli de personnes à créer menu contextuel. Après tout ce que nous avons nous-mêmes permettra d'améliorer notre KDE4, ou du moins je l'ai fait avec moi et je trouve cela très bien.
Si nous pouvons essayer de mettre ce travail sur kde.org personne pour que vous puissiez travailler sur pdf facilement sans avoir à installer quoi que ce soit.
Pour tous:
Conseils pratiques pour de nouvelles fonctionnalités sont les bienvenus.
Je ne suis pas un programmeur et que vous ne devraient même pas être de votre participation. Malgré ce grand nombre de personnes à travers le monde ont remercié pour moi quelque chose qui n'a même pas cru possible.
Je souhaite à tous bon travail avec KDE4 ou leur façon. (toujours sur des systèmes ouverts).
Joseph
24 Novembre 2008 à 1h03
Même si avec un peu de retard, j'ai publié hier, le Servicemenu où j'ai travaillé.
J'ai mis l'annonce sur kde-look.org que http://www.egregorion.net
Il y a le tar.gz et deb pour Intrepid.
Amusez-vous
Joseph