web-dev-qa-db-fra.com

Quand les fichiers .mo doivent-ils être générés?

Je crée un programme python GTK3. J'aimerai ajouter un support de traduction. Je sais comment créer un fichier .pot et .po. Cependant, afin de rendre l'application disponible dans plusieurs langues, je dois générer des fichiers .mo. J'ai lu ici que la manière de générer des fichiers .mo consiste à utiliser la commande msgfmt.make .

Ma question est de savoir si je (le développeur) dois générer les fichiers .mo manuellement sur mon ordinateur, puis demander au programme d'installation .deb de les déplacer dans le dossier usr/share/locale/en_GB/lors de son installation? Ou le programme d'installation .deb doit-il générer ces fichiers .mo pendant que l'utilisateur installe mon programme sur son système?

Cela pourrait se résumer ainsi: " Les fichiers .mo sont-ils dépendants de la machine? "

Ma structure de dossier est la suivante

nstrain-0.1
   /debian
   /data
   /help
   /nstrain_lib
   nstrain.desktop
   nstrain.py

où nstrain.py est le principal fichier exécutable exécuté par le fichier .desktop lorsque l'utilisateur clique sur mon programme.

6
nik90

Binaire fichiers MO doivent être générés au moment de la construction. Cela signifie que votre système de génération doit avoir une cible de génération pour lire le texte PO files utilisé comme source et les convertir en fichiers binaires MO qui seront installés sur le système de l'utilisateur. Comme vous le signalez à juste titre, la commande msgfmt (qui fait partie des outils gettext ) les créera.

Donc, pour répondre à la dernière partie de la question, oui, les fichiers MO dépendent de la machine.

Créer des fichiers MO à la dure

Maintenant sur la façon de les créer, dans la présentation standard de gettext, vous aurez généralement tous les fichiers PO dans le même répertoire, un par langue et nommés d'après le code ISO-639 de chaque langue, composé de 2 lettres ou de 3 lettres:

po/
po/ca.po
po/de.po
...

Si vous souhaitez les créer manuellement, vous devrez parcourir chaque fichier de ce répertoire et appeler msgfmt manuellement, par exemple.

$ msgfmt -c po/ca.po -o build/locale/LC_MESSAGES/ca/myapp.mo

Mais vous ne voulez pas faire cela alors qu’il existe déjà une méthode établie et que des outils automatisés ont été créés spécialement pour la création de fichiers MO.

En outre, ces outils prennent en charge d'autres tâches associées, telles que l'extraction des traductions du code et leur regroupement dans un fichier POT afin que les traducteurs puissent effectuer leur travail.

Créer des fichiers MO de manière intelligente

Si vous utilisez Python, je vous recommande vivement d'utiliser le package python-distutils-extra (install pde), qui automatise et masque la complexité en n'ayant à spécifier que ce qui suit dans le setup.py fichier que vous utiliserez pour créer, installer et distribuer votre application. Même exemple que @dobey indiquait déjà dans sa réponse:

DistUtilsExtra.auto.setup(
    name='myapp',
    version='0.1',
    #license='GPL-3',
    #author='Your Name',
    #author_email='[email protected]',
    #description='UI for managing …',
    #long_description='Here a longer description',
    #url='https://launchpad.net/myapp'
)

Cela prendra soin de tout pour vous.

Si vous souhaitez tester les traductions avant de les expédier, vous pouvez utiliser la commande pratique build_i18n de python-distutils-extra:

$ python setup.py build_i18n

Cela créera tous les fichiers PO de votre dossier /po et les placera sous build (il le créera s’il n’existe pas) dans la même présentation attendue par gettext lorsqu’ils sont installés sur un système.

Vous pouvez ensuite tester votre application avec les traductions en: * copiant le contenu de /build vers /usr/share/locale, ou * en pointant votre application vers le répertoire de construction à l'aide de la fonction gettext.bindtextdomain() :

gettext.bindtextdomain(domain='myapp', localedir='/home/me/dev/myapp/build')

Être encore plus intelligent

Tenez-vous sur l'épaule des géants. Créez simplement une application de test avec Rapidly et copiez la manière dont les traductions sont configurées dans setup.py, ce qui revient essentiellement à utiliser le module DistutilsExtra en mode auto, comme indiqué ci-dessus.

Vous pouvez également utiliser l'application de test pour générer des traductions et apprendre comment fonctionne la génération.

Emballage

L'archive tar que vous avez créée dans le cadre d'une version ne doit pas inclure les fichiers .mo. C'est-à-dire que vous n'avez pas à les construire manuellement. Cela doit se produire lorsque l'une ou l'autre des personnes crée le contenu de l'archive à installer manuellement ou par exemple. un paquet binaire Debian est en cours de création.

En examinant votre arborescence de sources, je suggérerais à nouveau d’utiliser un système de compilation tel que python-distutils-extra, qui facilitera également l’emballage. En gros, vous devrez:

  • Créez un fichier setup.py avec un contenu similaire à celui suggéré ci-dessus
  • Créez les fichiers de contrôle d’emballage sous debian /. En utilisant p-d-e, votre fichier debian/rules peut devenir très simple et ne comporter que quelques lignes.

En fait, vous voudrez peut-être simplement utiliser Quickly pour créer le harnais du système de construction et d’emballage de votre application, puis remplacer le code source généré par Quickly pour l’application de test par le code de votre application.

5
David Planella

Étant donné que vous utilisez Python, je présume que vous utilisez setuptools/distribution/distutils en tant que système de construction. Dans un tel cas, vous pouvez utiliser DistUtilsExtra.auto à la place:


from DistUtilsExtra.auto import setup

setup(
    name="Your Project",
    version="0.1",
    ...
)

Vous pouvez transmettre à setup () les mêmes arguments que vous le faites habituellement pour votre paquet. DistUtilsExtra.auto peut gérer automatiquement de nombreux éléments d'intégration système tels que les traductions, y compris la traduction de fichiers texte statiques tels que les fichiers .desktop.

2
dobey