Sign in Join
Wiki copytemporary

Getting translation strings right/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Cette page contient quelques notes sur la manière d'avoir dès le début les chaînes à traduire correctes, à l'usage de leurs auteurs originaux (le plus souvent des programmeurs).
22
33Dans ce contexte, cela signifie que les chaînes à traduire ont été prévues pour une traduction facile. et que la version originale est adaptée aux exigences de base pour leur usage.
44
55Bien que cette page essaie d'être neutre par rapport au langage initial, elle est en fait légèrement orientée vers l'anglais. Vous êtes libre de compléter, ou d'ignorer ce qui ne s'applique pas à votre situation, et éventuellement de mettre à jour la page.
66
77### Généralités
88
99Pour éviter des problèmes, assurez-vous en premier lieu que **les chaînes originales sont correctes**. Il y a plusieurs raisons de les vérifier :
1010
1111- Les chaînes originales sont habituellement employées comme traduction par défaut, et cela peut donner une mauvaise impression à l'utilisateur final s'il lui arrive de tomber sur des chaînes fautives.
1212- Au pire, cela rendra inutilement difficile le travail du traducteur. Se rappeler le principe "Garbage in, garbage out", qui s'applique parfaitement ici.
1313
1414Essayez donc de vous assurer que votre **orthographe est correcte**. Consultez un dictionnaire si vous n'êtes pas sûr de vos compétences en la matière.
1515
1616Utilisez des expressions compréhensibles, d'utilisation courante et de manière **cohérente**. Si vous avez des doutes, essayez de mettre d'autres programmes dans la même situation et d'examiner leurs réponses. Les fichiers de documentation et d'aide sont souvent un bon modèle pour les expressions ou termes particuliers. Essayez d'être cohérent dans le choix des expressions. Par exemple, les questions :
1717
1818`Supprimer le dossier ?`\
1919`Effacer le dossier ?`\
2020`Enlever le dossier ?`\
2121`Retirer le dossier ?`
2222
2323ont toutes une signification semblable, mais si elles sont échangées sans raison apparente, le lecteur peut en faire des interprétations étranges. Les traducteurs sont particulièrement enclins à cette erreur, puisqu'ils ne connaissent souvent pas le contexte exact d'un message : ils peuvent interpréter de simples variations de vocabulaire comme l'indication de différences importantes, et par conséquent être tentés de choisir une mauvaise traduction.
2424
2525Particulièrement pour des messages d'erreur destinés à l'utilisateur, essayez de **décrire le problème** avec les mots appropriés. Ce n'est jamais l'état du programme qui a mené au message d'erreur (ceci est seulement utile au programmeur, mais pas à l'utilisateur). Sinon, les utilisateurs vont soit hausser les épaules en ignorant les messages (dans le meilleur cas), soit choisir un autre programme (dans le pire des cas) : l'utilisateur ne pourra pas résoudre le problème et continuer son travail, et tout cela parce que le programme n'en aura pas donné une description appropriée.
2626
2727Donnez une **description compréhensible**. N'essayez pas d'impressionner vos utilisateurs avec des mots étrangers ou très techniques, juste pour dire que le travail en cours n'a pas encore été enregistré.
2828
2929Essayez particulièrement d'éviter des négations multiples dans un message : elles sont presque toujours plus difficiles à lire que leurs équivalents positifs. Exemple :
3030
3131`Ce composant ne peut pas être déposé sur des contrôles non visuels.`
3232
3333Sous sa forme non-niée :
3434
3535`Ce composant peut seulement être déposé sur des contrôles visuels.`
3636
3737La dernière formulation est sans doute plus facile à lire et à comprendre.
3838
3939### Questions techniques
4040
4141Dans cette section, nous donnons une vue d'ensemble des questions techniques, tout particulièrement des possibilités existantes. Celles-ci incluent la construction de *resourcestring*, *GNU gettext()* et la fonction *format()*.
4242
4343#### Resourcestrings, et GNU gettext
4444
4545Free Pascal dispose de quelques fonctions de langue intégrées de manière à manipuler les chaînes. Il y a une section spéciale d'une unité appelée "resourcestring" qui a été spécifiquement étudiée pour cette raison. Voir la section appropriée du manuel de FPC (prog.pdf, pg. 89ff ou [ici](http://www.freepascal.org/docs-html/prog/progch9.html#x184-1870009)) pour les détails.
4646
4747*GNU gettext* est un ensemble spécial d'utilitaires pour fournir des traductions de vos programmes : voir le manuel de FPC une fois de plus (prog.pdf, pg. 91ff ou [ici](http://www.freepascal.org/docs-html/prog/progse41.html#x210-2130009.4)).
4848
49-<u>Note:</u> *GNU gettext* a une faille conceptuelle qui ne permet pas de faire correspondre une chaîne originale simple à de multiples chaînes traduites.
49+Note: *GNU gettext* a une faille conceptuelle qui ne permet pas de faire correspondre une chaîne originale simple à de multiples chaînes traduites.
5050
5151#### ResourceStrings dans l'IDE
5252
5353- Lazarus a un outil pour créer facilement des chaînes de ressources. Voir [[IDE Window: Make ResourceString/fr|Faire des ResourceStrings]]
5454
5555- Pour chaque section *resourcestring*, FPC crée un fichier *.rst*, mais il n'y a aucun éditeur pour ces fichiers. Lazarus peut automatiquement créer un fichier *.po* du fichier *.rst*. Il y a beaucoup d'outils d'édition de fichier *.po* (par exemples: kbabel et poEdit).
5656
5757Pour créer les fichiers *.po* pour un paquet, opérez ainsi :
5858
5959` * Créez un sous-répertoire `*`languages`*` (ou `*`locale`*`, ou autre chose) ;`\
6060` * Ouvrez le composant. Puis Options -> Intégration de l'EDI -> Répertoire des fichiers `*`.po`*` que vous fixerez à `*`languages`*` (ou tout répertoire adapté).`
6161
6262La prochaine fois que vous compilerez le paquet, l'EDI créera les fichiers *.po*. Note: Les fichiers *.rst* doivent appartenir aux unités de paquet. Sinon, l'EDI ignore les autres fichiers .rst.
6363
6464Le même fonctionnement pour des projets. Le répertoire est placé dans projet -\> Options du Projet -\> i18n -\> Répertoire des fichiers .po.
6565
6666- Pour créer une traduction allemande : copier le fichier unit1.po vers unit1.de.po. Employer alors un éditeur de texte ou un éditeur de fichier .po pour traduire toutes les chaînes.
6767
6868- L'IDE chargera automatiquement des fichiers .po pour les composants installés, s'ils existe. Par exemple voir lazarus/components/projecttemplates/languages/.
6969
7070- ToDo: Implémenter et documenter la mise à jour du fichier .po traduit quand de nouvelle resourcestrings sont ajoutés .
7171
7272- ToDo: Implémenter et documenter rassemblement de tous les fichiers .po des paquets statiquement liés .
7373
7474#### ResourceStrings dans votre application
7575
7676Vous pouvez charger les fichiers .po à l'initialisation pour traduire les resourcestrings. Ajoutez ceci à votre fichier .lpr:
7777
7878``` pascal
7979...
8080uses
8181 ...
8282 Translations, gettext;
8383
8484procedure TranslateLCL;
8585var
8686 PODirectory, Lang, FallbackLang: String;
8787begin
8888 PODirectory:='/path/to/lazarus/lcl/languages/';
8989 Lang:='';
9090 FallbackLang:='';
9191 GetLanguageIDs(Lang,FallbackLang); // in unit gettext
9292 Translations.TranslateUnitResourceStrings('LCLStrConsts',
9393 PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
9494 // ... add here a TranslateUnitResourceStrings call for every po file ...
9595end;
9696
9797begin
9898 TranslateLCL;
9999 Application.Initialize;
100100 Application.CreateForm(TForm1, Form1);
101101 Application.Run;
102102end.
103103```
104104
105105#### La fonction format()
106106
107107Pour ne pas utiliser des chaînes complètement statiques dans les traductions, vous pouvez employer la méthode [[doc:rtl/sysutils/format.html|format()]] dans l'unité sysutils. Il peut remplacer des paramètres donnés dans un texte par leur valeur réelle donnée comme paramètre secondaire dans un ensemble. Exemple:
108108
109109``` pascal
110110 format('Demain %0:s il y aura du %1:s.', ['dimanche', 'soleil']);
111111```
112112
113113restituant Demain dimanche il y aura du soleil. Dans ce cas-ci %0:s est un paramètre pour le premier (index 0) argument dans l'ensemble de valeurs réelles (Soleil), et de même %1:s. Pour une définition exacte des paramètres permis et leur syntaxe voir le manuel de référence de FPC.
114114
115115Quelques directives pour l'utilisation de la fonction format()
116116
117117- Essayer d'employer des paramètres classés dans les chaînes originales, même si ils sont facultatifs. Une fois utilisé, ils permettent au traducteur de déplacer les paramètres facilement dans la phrase lui permettant des expressions plus normales(en déplaçant réellement les paramètres dans la phrase vous pouvez créer des phrases appropriées dans cette langue).
118118
119119- Ne jamais composer une phrase de plus d'une chaine. Employer toujours la méthode format() à partir de l'unité sysutils pour construire la chaine correcte en utilisant des paramètres pendant le temps d'exécution. Les traducteurs ne pourront habituellement pas reconstruire la phrase entière, donc incapable de donner une bonne traduction; considérer seulement qu'il y a souvent des centaines de chaînes dans une base de données de traduction...
120120
121121- Ne pas composer en utilisant des espaces. Déplacer simplement votre Label à la position appropriée en premier lieu. Il peut y avoir des problèmes avec des changements de police, et les espaces apparemment superflus seront difficile à équilibré par le traducteur.
122122
123-~~<u>Note:</u> Puisque format() n'interprète pas les caractères d'échappements (par exemple C's "\n", "\t", etc) et GNU gettext pour toute ses raisons étant le système de traduction de choix (et ses outils ne pouvant pas interpréter non plus les caractères d'échappements), on exige aux programmeurs d'insérer les coupures de ligne.~~Dans la version courante de Lazarus, "\n" et "\t" dans les chaines traduites sont remplacés par le caractère nouvelle ligne et tabulation.
123+~~Note: Puisque format() n'interprète pas les caractères d'échappements (par exemple C's "\n", "\t", etc) et GNU gettext pour toute ses raisons étant le système de traduction de choix (et ses outils ne pouvant pas interpréter non plus les caractères d'échappements), on exige aux programmeurs d'insérer les coupures de ligne.~~Dans la version courante de Lazarus, "\n" et "\t" dans les chaines traduites sont remplacés par le caractère nouvelle ligne et tabulation.
124124
125125#### Convertir le jeu de caractères d'une traduction
126126
127127Par exemple : convertir un fichier de ISO-8859-1 à UTF-8:
128128
129129` iconv --from-code=ISO-8859-1 --to-code=UTF-8 ancienfichier.po > nouveaufichier.po`
130130
131131Ne pas oublier de changer la ligne
132132
133133` "Content-Type: text/plain; charset=ISO-8859-1\n"`
134134
135135par
136136
137137` "Content-Type: text/plain; charset=UTF8\n"`
138138
139139### Particularités liées à l'anglais
140140
141141Cette section contient les notes qui s'appliquent en particulier quand l'anglais est la langue originale :
142142
143143- Veillez à réserver assez d'espace pour les textes : en anglais les textes sont presque toujours plus courts (en caractères) que leurs traductions. Prévoyez donc assez d'espace. L'expérience prouve que les chaînes très courtes (quelques caractères) doublent souvent de taille; ce rapport diminue pour les chaînes plus longues.
144144
145145- Évitez les abréviations en anglais; en plus du fait que ceci raccourcit encore des chaînes déjà courtes, il y a des problèmes graves avec, par exemple, les langues qui emploient les caractères idéographiques, où ces abréviations n'existent pas.
146146
147147- Puisque c'est souvent une question : Dans les signes de ponctuation anglaise (point, virgule, ...) font partie des mots précédents. Particulièrement après un point-virgule il devrait toujours y avoir un espace. La lecture est plus difficile quand la ponctuation est erronée.
148148
149149`There was an error!Please check file settings,compiler settings,...to fix this issue.`
150150
151151Considérez aussi que les algorithmes prévus pour couper les lignes trop longue provoqueront probablement une coupure arbitraire s'il n'y a pas d'espaces.
152152
153153`There was an error! Please check file settings, compiler settings, ... to fix this issue.`
154154
155155Avec des espaces le résultat sera meilleur.
156156
157157---
158158*From the Free Pascal wiki, page "Getting translation strings right/fr", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history