Sign in Join
Wiki copytemporary

Getting translation strings right/fr: what changed

Revision 2 to 3. 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
18-`Supprimer le dossier ?`\
19-`Effacer le dossier ?`\
20-`Enlever le dossier ?`\
21-`Retirer le dossier ?`
18+```text
19+Supprimer le dossier ?
20+Effacer le dossier ?
21+Enlever le dossier ?
22+Retirer le dossier ?
23+```
2224
2325ont 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.
2426
2527Particuliè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.
2628
2729Donnez 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é.
2830
2931Essayez particulièrement d'éviter des négations multiples dans un message : elles sont presque toujours plus difficiles à lire que leurs équivalents positifs. Exemple :
3032
31-`Ce composant ne peut pas être déposé sur des contrôles non visuels.`
33+```text
34+Ce composant ne peut pas être déposé sur des contrôles non visuels.
35+```
3236
3337Sous sa forme non-niée :
3438
35-`Ce composant peut seulement être déposé sur des contrôles visuels.`
39+```text
40+Ce composant peut seulement être déposé sur des contrôles visuels.
41+```
3642
3743La dernière formulation est sans doute plus facile à lire et à comprendre.
3844
3945### Questions techniques
4046
4147Dans 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()*.
4248
4349#### Resourcestrings, et GNU gettext
4450
4551Free 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.
4652
4753*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)).
4854
4955Note: *GNU gettext* a une faille conceptuelle qui ne permet pas de faire correspondre une chaîne originale simple à de multiples chaînes traduites.
5056
5157#### ResourceStrings dans l'IDE
5258
5359- Lazarus a un outil pour créer facilement des chaînes de ressources. Voir [[IDE Window: Make ResourceString/fr|Faire des ResourceStrings]]
5460
5561- 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).
5662
5763Pour créer les fichiers *.po* pour un paquet, opérez ainsi :
5864
59-` * Créez un sous-répertoire `*`languages`*` (ou `*`locale`*`, ou autre chose) ;`\
60-` * Ouvrez le composant. Puis Options -> Intégration de l'EDI -> Répertoire des fichiers `*`.po`*` que vous fixerez à `*`languages`*` (ou tout répertoire adapté).`
65+```text
66+ * Créez un sous-répertoire languages (ou locale, ou autre chose) ;
67+ * Ouvrez le composant. Puis Options -> Intégration de l'EDI -> Répertoire des fichiers .po que vous fixerez à languages (ou tout répertoire adapté).
68+```
6169
6270La 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.
6371
6472Le même fonctionnement pour des projets. Le répertoire est placé dans projet -\> Options du Projet -\> i18n -\> Répertoire des fichiers .po.
6573
6674- 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.
6775
6876- L'IDE chargera automatiquement des fichiers .po pour les composants installés, s'ils existe. Par exemple voir lazarus/components/projecttemplates/languages/.
6977
7078- ToDo: Implémenter et documenter la mise à jour du fichier .po traduit quand de nouvelle resourcestrings sont ajoutés .
7179
7280- ToDo: Implémenter et documenter rassemblement de tous les fichiers .po des paquets statiquement liés .
7381
7482#### ResourceStrings dans votre application
7583
7684Vous pouvez charger les fichiers .po à l'initialisation pour traduire les resourcestrings. Ajoutez ceci à votre fichier .lpr:
7785
7886``` pascal
7987...
8088uses
8189 ...
8290 Translations, gettext;
8391
8492procedure TranslateLCL;
8593var
8694 PODirectory, Lang, FallbackLang: String;
8795begin
8896 PODirectory:='/path/to/lazarus/lcl/languages/';
8997 Lang:='';
9098 FallbackLang:='';
9199 GetLanguageIDs(Lang,FallbackLang); // in unit gettext
92100 Translations.TranslateUnitResourceStrings('LCLStrConsts',
93101 PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
94102 // ... add here a TranslateUnitResourceStrings call for every po file ...
95103end;
96104
97105begin
98106 TranslateLCL;
99107 Application.Initialize;
100108 Application.CreateForm(TForm1, Form1);
101109 Application.Run;
102110end.
103111```
104112
105113#### La fonction format()
106114
107115Pour 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:
108116
109117``` pascal
110118 format('Demain %0:s il y aura du %1:s.', ['dimanche', 'soleil']);
111119```
112120
113121restituant 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.
114122
115123Quelques directives pour l'utilisation de la fonction format()
116124
117125- 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).
118126
119127- 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...
120128
121129- 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.
122130
123131~~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.
124132
125133#### Convertir le jeu de caractères d'une traduction
126134
127135Par exemple : convertir un fichier de ISO-8859-1 à UTF-8:
128136
129-` iconv --from-code=ISO-8859-1 --to-code=UTF-8 ancienfichier.po > nouveaufichier.po`
137+```text
138+ iconv --from-code=ISO-8859-1 --to-code=UTF-8 ancienfichier.po > nouveaufichier.po
139+```
130140
131141Ne pas oublier de changer la ligne
132142
133-` "Content-Type: text/plain; charset=ISO-8859-1\n"`
143+``` pascal
144+ "Content-Type: text/plain; charset=ISO-8859-1\n"
145+```
134146
135147par
136148
137-` "Content-Type: text/plain; charset=UTF8\n"`
149+``` pascal
150+ "Content-Type: text/plain; charset=UTF8\n"
151+```
138152
139153### Particularités liées à l'anglais
140154
141155Cette section contient les notes qui s'appliquent en particulier quand l'anglais est la langue originale :
142156
143157- 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.
144158
145159- É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.
146160
147161- 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.
148162
149-`There was an error!Please check file settings,compiler settings,...to fix this issue.`
163+```text
164+There was an error!Please check file settings,compiler settings,...to fix this issue.
165+```
150166
151167Considé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.
152168
153-`There was an error! Please check file settings, compiler settings, ... to fix this issue.`
169+```text
170+There was an error! Please check file settings, compiler settings, ... to fix this issue.
171+```
154172
155173Avec des espaces le résultat sera meilleur.
156174
157175---
158176*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