La façon la plus facile de générer des fichiers de localisation

j'écris actuellement une application en Python et j'ai besoin de la localiser.

je peux utiliser gettext et les utilitaires livrés avec elle à générer .et po .mo fichiers. Mais la modification de l' .les fichiers po pour chaque langue, un par un, semble un peu fastidieux. Ensuite, créer des répertoires pour chaque langue et générer le .mo files, one-by-one, semble comme overkill. Le résultat final est quelque chose comme:

/en_US/LC_MESSAGES/en_US.mo
/en_CA/LC_MESSAGES/en_CA.mo
etc.

je peux me tromper, mais il semble comme il faut une meilleure façon de le faire. Quelqu'un aurait-il des outils, des astuces ou des connaissances générales que je n'ai pas encore trouvé?

Merci d'avance!

EDIT: pour être un peu plus clair, je cherche quelque chose qui accélère le processus. car c'est déjà assez facile. Par exemple, dans .NET, je peux générer toutes les chaînes qui doivent être traduits dans un fichier excel. Ensuite, les traducteurs peuvent remplir le fichier excel et ajouter des colonnes pour chaque langue. Ensuite, je peux utiliser xls2resx pour générer les fichiers de ressources linguistiques. Il y a quelque chose comme ça pour gettext? Je réalise que je pourrais écrire un script pour créer et lire à partir d'un csv et générer les fichiers -- j'espérais juste qu'il y ait quelque chose de déjà fait.

21
demandé sur landyman 2009-04-11 05:16:14

7 réponses

je viens de faire ça pour un projet sur lequel je travaille, pour nous, le processus est comme ceci:

tout d'abord, j'ai un POTFILES.dans un fichier qui contient une liste de fichiers sources à traduire. Nous avons en fait deux fichiers (par exemple admin.in and user.in), car l'interface d'administration n'a pas toujours besoin d'être traduite. Nous ne pouvons donc envoyer aux traducteurs que le fichier contenant les chaînes que les utilisateurs voient.

L'exécution de la commande suivante créera un .modèle de pot de la POTFILES.in:

xgettext --files-from=POTFILES.in --directory=.. --output=messages.pot

exécutez la commande ci-dessus à partir du répertoire po/, qui devrait être un sous-répertoire de votre projet et contenir les fichiers POT.in file. Le. fichier pot a exactement le même format qu'un .fichier po, mais il s'agit d'un modèle ne contenant aucune traduction. Vous créez un nouveau modèle chaque fois que de nouvelles chaînes traduisibles ont été ajoutés à votre fichiers sources.

pour mettre à jour la version déjà traduite .les fichiers po et d'ajouter de nouvelles cordes à eux, exécuter:

msgmerge --update --no-fuzzy-matching --backup=off da.po messages.pot

Dans le au-dessus de l'exemple je désactive la correspondance floue, car nos cordes sont un désordre et il a fait plus de mal que de bien. J'ai aussi désactivé les fichiers de sauvegarde, car tout est dans subversion ici. Exécutez la commande ci-dessus pour chaque langue, dans ce cas j'ai mis à jour la traduction en Danois.

enfin lancer msgfmt pour créer le .mo files from the .les fichiers po:

msgfmt nl.po --output-file nl.mo

bien sûr, vous ne voudriez pas exécuter cela manuellement à chaque fois, alors créez quelques scripts (ou de préférence un ou plusieurs Makefiles) pour faire ceci pour vous.

notez que la disposition de votre répertoire est légèrement différente de Ma situation, vous devrez donc ajuster un peu les noms de fichiers/chemins de sortie, mais les étapes devraient être les mêmes.

28
répondu warp 2009-07-03 13:55:24

Vous pouvez utiliser Transifex, utilisé par plusieurs projets Python (Django, Mercurial). Il dispose d'un éditeur web et d'un client en ligne de commande pour l'automatisation et prend également en charge .NET, si cela peut être utile.

avertissement: je suis le responsable du projet Transifex.

6
répondu glezos 2012-02-25 07:34:13

il m'échappe comment vous voulez obtenir une vraie traduction sans éditer le .les fichiers po pour chaque langue? De la magie?

Modifier (après le commentaire) - comment faire pour automatiser la génération de l' .po fichiers:

Je n'utilise pas Gettext, mais de la wiki page il semble que vous n'avez qu'à appeler

msginit --locale=xx-entrée=nom.pot

pour chaque langue que vous voulez soutenir. Je générerais un script cela génère tous les fichiers de langue, donnez-les aux traducteurs, et quand vous les récupérez, Lancez msgfmt sur eux.

4
répondu lothar 2009-04-11 16:34:37

utilisez des scripts. Supposons que votre code source est dans le répertoire $ SRC, alors créez le répertoire $SRC / po pour les fichiers i18n (pot, po, mo etc). Ensuite, créez le fichier $ SRC/po / POTFILES.dans où spécifier le chemin vers les fichiers de code source avec les appels de la fonction gettext. Il peut ressembler à:

[encoding: UTF-8]
./main.cpp
./plugins/list.cpp

vous pouvez maintenant utiliser les commandes suivantes (dans le répertoire $ SRC):

pour la mise à jour des messages du fichier maître.pot:

intltool-update --pot --gettext-package=messages --verbose

pour la fusion des modifications des messages.pot à fr.fichier po, pour exemple:

msgmerge -U fr.po messages.pot

Pour générer mo fichier, utilisez la commande:

msgmerge -o - fr.po messages.pot | msgfmt -c -o fr/LC_MESSAGES/programname.mo -

bien sûr annuaire fr/LC_MESSAGES/ doit être créé avant que l'appel, vous pouvez également supprimer fr/LC_MESSAGES/nom_du_programme.mo avant d'exécution

afin d'accélérer le processus, placez toutes ces commandes dans la commande correspondante .SH-files par exemple.

3
répondu Sergey Stolyarov 2009-04-11 17:01:27

Vous pouvez essayer Traduire Toolkit pour diverses conversions de fichiers po (po2csv par exemple). Enfant de projets Canotle permet de gérer les traductions sur le web.

3
répondu maciejka 2013-04-27 17:24:58

j'utilise poEdit pour les traductions.

2
répondu raspi 2009-04-11 04:28:23

ma suggestion est django-rosetta, qui vous donne une interface web pour éditer vos traductions. Django n'a pas besoin d'être impliqué du tout avec votre application, vous l'utilisez juste pour un en ligne .PO de modifier des installations.

un autre site de traduction intéressant, qui je crois a été construit en utilisant Django / Pinax est Transifex, bien que je ne suis pas sûr si elle permet l'édition directe de la .Les fichiers PO.

2
répondu Van Gale 2009-05-31 04:43:41