ManuceTraduire un fichierTraduire un fichier PO (gettext) en arabe

Traduire un fichier PO (gettext) en arabe

Manuce traduit les msgstr de votre fichier PO en arabe et vous rend le même fichier, avec les six formes plurielles que l'arabe exige et un en-tête Plural-Forms correct. Les msgctxt, commentaires et variables printf sont conservés et contrôlés. Un rapport indique chaque chaîne laissée telle quelle et pourquoi.

Déposer mon fichier Voir les tarifs

Combien ça coûte

Pour un fichier PO (gettext) d'environ 2 500 mots de valeurs, vers l’arabe :

Essentiel
24 €

Comprendre, usage interne.

Professionnel
72 €

Prêt à transmettre, par le spécialiste technique.

Premium
140 €

Relecture croisée. Pour ce qui engage.

Prix pour une langue, mise en page d'origine comprise. TVA non applicable, article 293 B du CGI. Le devis exact, calculé sur le nombre de mots de votre fichier, s'affiche avant paiement.

Les six formes plurielles de l'arabe dans un fichier PO

C'est ce qui distingue un .po arabe de tous les autres. Là où le français se contente de msgstr[0] et msgstr[1], l'arabe en demande six, et l'en-tête doit les déclarer. La formule couramment utilisée pour l'arabe est :

Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5);

Chaque indice correspond à une catégorie CLDR : 0 = zero, 1 = one, 2 = two, 3 = few (3 à 10, 103 à 110…), 4 = many (11 à 99, 111…), 5 = other (100, 101, 102…). Pour msgid "%d file" / msgid_plural "%d files", les formes 3 à 5 donnent par exemple :

  • msgstr[3] "%d ملفات" : pluriel, pour 3 à 10 ;
  • msgstr[4] "%d ملفًا" : singulier à l'accusatif, pour 11 à 99 ;
  • msgstr[5] "%d ملف" : singulier au génitif, pour 100 et au-delà.

Pour 1 et 2, l'arabe dit naturellement « ملف واحد » et « ملفان » (le duel) sans chiffre. Gettext tolère qu'une forme ne couvrant qu'une seule valeur de n omette %d, mais Manuce compare les variables de chaque valeur à la source : les valeurs livrées gardent la variable. Si vous préférez la tournure sans chiffre, c'est une retouche à faire de votre côté.

Piège fréquent : une chaîne écrite avec gettext() sous la forme « %d file(s) » n'a qu'un msgstr et ne pourra jamais être juste en arabe. Elle doit passer par ngettext() dans le code avant extraction.

Droite à gauche, ponctuation, chiffres et registre

Le fichier PO ne contient que des chaînes : le sens d'affichage de l'interface (dir="rtl", mise en page en miroir) se règle dans l'application, pas dans le .po. En revanche, plusieurs choses changent dans les valeurs elles-mêmes :

  • Ponctuation arabe : virgule « ، », point-virgule « ؛ », point d'interrogation « ؟ ». « Are you sure? » devient « هل أنت متأكد؟ ».
  • Ordre des mots : « %s was deleted » devient « تم حذف %s », la variable passe en fin de phrase. Avec deux variables, les formes positionnelles %1$s et %2$s permettent de les déplacer sans casser le formatage.
  • Texte bidirectionnel : quand %s reçoit un nom de fichier latin comme « report.pdf », ou qu'une chaîne commence par une variable, l'affichage peut placer la ponctuation au mauvais endroit. Cela se vérifie à l'écran, avec de vraies valeurs.
  • Chiffres : selon les pays, on écrit 3 ou ٣. Les nombres présents dans les chaînes ne sont pas traduits ; le choix des chiffres affichés relève de la locale à l'exécution (ar-EG, ar-MA…).
  • Registre : arabe standard moderne. Les boutons prennent souvent le nom d'action plutôt que l'impératif : « Save » donne « حفظ », « Cancel » donne « إلغاء ». L'extrait gratuit permet de vérifier ce choix.

Ce que Manuce rend exactement

Vous récupérez le même fichier, prêt à remettre dans locale/ar/LC_MESSAGES/ :

  • les msgid, msgid_plural et msgctxt intacts ; seuls les msgstr changent ;
  • six msgstr[n] pour chaque entrée plurielle, puisque leur nombre suit la langue cible ;
  • un .pot rendu sous forme de .po arabe, avec l'en-tête Language: ar et Plural-Forms posés ;
  • les commentaires #., #: et #, conservés, ainsi que l'ordre des entrées, les guillemets, les fins de ligne, l'encodage et le BOM ;
  • les variables printf (%s, %d, %1$s) et les balises vérifiées : si une valeur arabe s'en écarte durablement, la valeur source est gardée et le rapport le signale ;
  • non traduits : valeurs vides, URL, adresses email, nombres, couleurs, formats de date, identifiants et tout ce qui est marqué non traduisible.

Ce que Manuce ne fait pas : il ne compile pas le .mo, ne modifie pas votre code ni vos feuilles de style pour le sens droite à gauche, et ne choisit pas le système de chiffres affiché. Le rapport liste les chaînes traduites et celles laissées telles quelles, avec la raison.

Préparer le fichier avant de le déposer

  • Encodage : l'en-tête doit indiquer Content-Type: text/plain; charset=UTF-8. Manuce conserve l'encodage du fichier ; un .po déclaré en ISO-8859-1 ne peut pas contenir de lettres arabes. Convertissez-le avant le dépôt.
  • Drapeaux fuzzy : les #, fuzzy sont conservés, et msgfmt ignore par défaut les entrées marquées ainsi. Retirez ceux qui ne doivent plus l'être, sinon des chaînes traduites n'apparaîtront pas.
  • Contexte : Manuce s'appuie sur msgctxt et sur les commentaires #.. Un « Open » de menu et un « Open » d'état (ouvert) n'ont pas la même traduction en arabe (« فتح » contre « مفتوح ») ; un msgctxt suffit à les distinguer.
  • Noms à garder : pour un nom de produit qui doit rester en caractères latins, vérifiez son traitement dans l'extrait gratuit, puis dans le fichier livré.

Vérifier le .po arabe après livraison

  • Compilez avec msgfmt -c --statistics ar.po -o ar.mo : l'option -c contrôle l'en-tête, les formats et la cohérence des six formes.
  • Testez une chaîne plurielle avec n = 0, 1, 2, 5, 11 et 100 : vous parcourez ainsi les six indices.
  • Affichez les écrans où une variable latine côtoie le texte arabe, et ceux où la chaîne commence par une variable.
  • Relisez le rapport : une valeur restée en source signale souvent une variable mal placée dans le msgid d'origine.

L'arabe porte un coefficient de ×1,6 sur le prix au mot, appliqué aux seuls mots des valeurs, hors clés et balises.

En pratique

  1. Vérifiez que l'en-tête déclare charset=UTF-8 et retirez les drapeaux fuzzy devenus inutiles.
  2. Déposez le .po ou le .pot : le devis s'affiche, calculé sur les mots à traduire.
  3. Lisez l'extrait gratuit en arabe pour juger le registre et les termes, puis payez.
  4. Récupérez le .po arabe et le rapport, compilez-le avec msgfmt -c.
  5. Testez l'interface avec n = 0, 1, 2, 5, 11 et 100 et des variables latines.

Questions fréquentes

Mon .pot n'a pas de Plural-Forms pour l'arabe : dois-je l'ajouter moi-même ?

Non. Un .pot revient sous forme de .po pour l'arabe, avec les en-têtes Language et Plural-Forms posés. Chaque entrée plurielle reçoit les six msgstr[n] correspondants.

Pourquoi certaines chaînes traduites n'apparaissent-elles pas après compilation ?

Le plus souvent, l'entrée porte encore un drapeau #, fuzzy, conservé comme tous les commentaires, et msgfmt l'ignore. Vérifiez aussi que le .mo a bien été régénéré et placé dans le dossier de la locale ar.

Les chiffres seront-ils écrits en ٠١٢ ou en 012 ?

Les nombres présents dans les chaînes ne sont pas traduits, et %d est rempli par votre application. Le choix entre chiffres arabes occidentaux et orientaux dépend de la locale et du formatage utilisés à l'exécution.

Manuce inverse-t-il l'interface de droite à gauche ?

Non. Manuce traduit les valeurs du fichier PO et ne touche ni au code ni aux styles. L'attribut dir="rtl" et la mise en miroir de la mise en page restent à régler dans l'application.

Combien de mots sont facturés dans un fichier PO ?

Seuls les mots des valeurs à traduire comptent, hors clés et balises. Le devis s'affiche au dépôt, avec le coefficient ×1,6 propre à l'arabe. Si vous traduisez le même fichier en plusieurs langues, une remise s'applique à toute la commande dès deux langues.

Le spécialiste qui s’en charge

Ce sujet est confié à Dédale, le spécialiste technique. Voir comment il travaille.

Testez sur votre fichier, gratuitement

Un extrait de votre fichier traduit au niveau choisi, avant tout paiement. Vous jugez, puis vous décidez.

Déposer mon fichier