Deprecated: Assigning the return value of new by reference is deprecated in /home/myriade/www/carnet/wp-settings.php on line 512

Deprecated: Assigning the return value of new by reference is deprecated in /home/myriade/www/carnet/wp-settings.php on line 527

Deprecated: Assigning the return value of new by reference is deprecated in /home/myriade/www/carnet/wp-settings.php on line 534

Deprecated: Assigning the return value of new by reference is deprecated in /home/myriade/www/carnet/wp-settings.php on line 570

Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1199

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1244

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1391

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/myriade/www/carnet/wp-includes/classes.php on line 1442

Strict Standards: Redefining already defined constructor for class wpdb in /home/myriade/www/carnet/wp-includes/wp-db.php on line 306

Deprecated: Assigning the return value of new by reference is deprecated in /home/myriade/www/carnet/wp-includes/cache.php on line 103

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /home/myriade/www/carnet/wp-includes/cache.php on line 431

Deprecated: Assigning the return value of new by reference is deprecated in /home/myriade/www/carnet/wp-includes/query.php on line 61

Deprecated: Assigning the return value of new by reference is deprecated in /home/myriade/www/carnet/wp-includes/theme.php on line 1109

Strict Standards: Declaration of Walker_Comment::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/myriade/www/carnet/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/myriade/www/carnet/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::start_el() should be compatible with Walker::start_el(&$output) in /home/myriade/www/carnet/wp-includes/comment-template.php on line 1266

Strict Standards: Declaration of Walker_Comment::end_el() should be compatible with Walker::end_el(&$output) in /home/myriade/www/carnet/wp-includes/comment-template.php on line 1266

Strict Standards: Redefining already defined constructor for class WP_Dependencies in /home/myriade/www/carnet/wp-includes/class.wp-dependencies.php on line 31

Strict Standards: Redefining already defined constructor for class WP_Http in /home/myriade/www/carnet/wp-includes/http.php on line 61

Tout traduire, vraiment?

23 juin 2009

Au Canada, les commerçants doivent offrir des produits dont l’étiquette est bilingue (français et anglais), et cela, partout au pays. Quelques-uns s’en fichent, la majorité s’en acquitte très bien et quelques-uns encore vont au-delà des exigences de bases!

Je m’explique, j’étais au supermarché à fouiner dans les fruits et légumes à la recherche d’épinards… J’aperçois du coin de l’œil une boîte portant l’inscription « mâche » en grosses lettres. Ce qui se passe de traduction, puisque les anglophones l’appellent aussi ainsi. Mais pour de pas dépayser ses clients s’exprimant dans la langue de Shakespeare, le producteur avait pris soin d’écrire dans le coin du paquet : « You say it like mosh ». Cette ambigüité levée, l’honneur était sauf et le client anglophone pouvait désormais s’informer de la fraîcheur de la « mosh » et être compris de tous.

Mais là où ça devient franchement rigolo, c’est que dans l’autre coin du paquet, le traducteur avait consciencieusement traduit le tout en français : « On le prononce comme mosh »!

Oui, ben là, on s’en doutait…

Bon appétit! tradlogomini
[boh nah-pay-TEE]


More localization tips

7 mai 2009

If you are a developer about to write an application, stop and read 10 localization tips. It will save you time and money down the road. If your program is already all coded, take a look at the tips as well; maybe you can correct some mistakes before embarking into the actual localization process.

When you are ready, it is best to conquer foreign markets one language at a time. You can iron out the localization bugs with the first translation and proceed to other languages with a solid base.

What follows will seem like extra work, but in the end, it will save time and resources and keep you in control until you send your app’s strings to the translator. So before the actual act of translation takes place you will want to take some time to go through “pseudo-translation”.

What is pseudo-translation? It is the pre-translation of strings into a fake but legible idiom that mimics a variety of languages.

For example, if you are aiming for the European markets, you alter the text using accented version of the English letters like this: “Chéçk bõx ïf yôu ñeed èxtrå mêmørÿ“, which obviously stand for “Check box if you need extra memory”. If you want to conquer Asia, choose Arabic and Chinese signs that look like English letters. When you run the pseudo-localized version of your application, you will still understand the messages. Ok, so… what’s the point of all this, right?

Going through the trouble of pseudo-translation will uncover many problems before they show up in all versions of your software. Once you have dealt with the main localization bugs, the remaining problems will be a lot quicker to solve and will most likely be language specific.

What problems will pseudo-translation expose?

1. It will detect problems with encoding across all languages. Instead of seeing “Chéçk bõx ïf yôu ñeed èxtrå mêmørÿ”, you will see something like “Ch€€k b€x €f y€u €eed €xtr€ m€m€r€”, or a variation thereof. You will know right away that your encoding is wrong, and still be able to see where these strings are coming from.

2. It will detect problems with string length/height. If you followed tip #2a (previous blog entry), you will have allowed extra room on buttons, text fields, labels, etc. But to make sure they are big enough, your pseudo-translation should include begin and end tags that will easily show any real estate problems. Adding underscores to each end of the pseudo-translation string (_Chéçk bõx ïf yôu ñeed èxtrå mêmørÿ_) will immediately show clipped strings. If you know the actual maximum string length, it is always a good idea to mention it to your translators.

Moreover, depending on languages and captions, add extra characters (”%”, for example) within the pseudo string to account for expansion: “_%%Chéçk bõx ïf yôu ñeed èxtrå mêmørÿ%%_”. How much should you add? It depends on the language. Here is a very approximate guide for translating English into:

Up to 60%

As a general rule, the shorter the word or sentence the higher the expansion coefficient. For example “low memory” will translate into “mémoire insuffisante” in French: a 100% expansion! For German, it can go up to 400% for single words.

Be careful with font size too. Roman font sizes do not necessarily correspond to Chinese, Arabic or Cyrillic font sizes. Choose replacement letters that have descenders or ascenders, include capital letters as well to see if there is sufficient room in the vertical.

3. It will detect hard coded strings. If you extracted all of your strings, pseudo-translated them and put them back into the resource files, you will see which strings were left behind, hidden in code, as they will appear in plain English.

One final advantage of pseudo-translation is that it can be done automatically with a script that does string replacement. And if no resource is available to carry this out in-house, some localizers will be able to do it, regardless of language.

Of course, taking that extra translating step will seem to create more work - and it does, for that first localized software version - but once it’s done, adding more languages will be less time-consuming, which will make up for that extra step. tradlogomini


La grippe porcine en quelques mots

30 avril 2009

Il arrive à la « grippe porcine » ce qui était arrivé au « SRAS » : mauvaise appellation! Dans le tourbillon du moment, un nom est lancé pour simplifier la communication et hop… les médias s’en emparent et le propagent faute de mieux.

C’est arrivé au SRAS : syndrome respiratoire aigu sévère. « Aigu sévère »! Bon, on a compris dès la première épithète que ça n’avait rien de jojo. Et en plus, c’est à peine si « sévère » est accepté en français dans le sens de « grave ». Mais le mal est fait. 

porcinetPour « grippe porcine », on s’est réveillé un peu plus tôt (pour ne pas perturber la vente de porc, vraisemblablement). Il faut avouer que « grippe porcine », c’est plus rigolo que virus H1N1 souche XYZ, qui nous prive de joyeux jeux de mots ou de caricatures désopilantes où figurent de jolis petits cochons. Ça ne réduit pas la gravité très réelle de la situation, mais ça nous permet de relâcher un peu de stress.

Voici ce que dit l’OIE (Organisation mondiale de la santé animale) de tout ceci : « Les informations à disposition de l’OIE n’indiquent pas pour le moment que l’épidémie de grippe sévissant au Mexique et aux États-Unis ait été précédée par un foyer de grippe porcine. » Elle ajoute : « Il n’est pas approprié d’appeler la maladie actuelle “grippe porcine” car le virus circulant comporte dans son patrimoine génétique des composantes d’origine humaine, aviaire et porcine à la fois. L’OIE a proposé de l’appeler “grippe Nord-Américaine” [sic] par homologie à la grippe asiatique et à la grippe espagnole survenues au siècle dernier. »

Ce cher Barack a compris la leçon, il utilise maintenant le terme H1N1 pour parler de la maladie… et vu son influence, le reste de la population ne tardera pas à suivre son exemple! « Grippe nord-américaine »? Gageons que ça ne décollera pas. Pas en Amérique!

Ce qu’il faut retenir de tout ça, c’est que la hâte nous fait dire et écrire des choses plus ou moins justes. Ce qui est vrai aussi pour la traduction… La meilleure façon d’obtenir un texte totalement inadéquat est de presser votre traducteur à produire 5000 mots pour midi!

Ah, si les mots justes se répandaient à la vitesse du H1N1… tradlogomini


Ten software localization tips

22 mars 2009

You are about to write the best application ever with a fancy interface and sell it through your web site, and then you pause and ponder… How can I make it even more profitable right from the start? Drapeaux The answer is: localization!

Localization is adapting your software for a specific region or language by translating text elements and adding locale-specific formats. It is often abbreviated L10N (10 letters between “L” and “N”). Localization needs to be worked into the code right from the start. You can always translate an application later, but it will require more work.

10 ways to get a head start on localization:

1. Try to team up with a translator as soon as possible. He may have good tips for your particular application: game, text editor, back up software. If he is familiar with the language or the devkit you are using, he may even point to classes that will make things easier.

2. Identify all data that will require localization. Some of these are:

a) Buttons/labels/text fields/message boxes: Make them bigger (up to 50%) or leave room for resizing. English is compact; expect expansion with German and French. Also, the word “EXIT” on a round button may look spiffy, but the longer translated word may not. Design GUI accordingly.

Exit button example

b) Times/dates/numbers/currencies: Use only classes that are locale-sensitive. They will detect the regional settings of the user and write dates and numbers in the right order and with the right punctuation. Otherwise errors will creep in.

Original : January 5th, 2009
Right language. Wrong format : Janvier 5, 2009
Much better : 5 janvier 2009
An alternative (ISO 8601) : 2009-01-05 (YYYY-MM-DD)

c) Addresses/phone numbers: Do not hard code. Their formats are not only governed by languages, but also by countries.

Canada (French): 123, StreetName / France: StreetName, 123

d) Graphics/video clips: Make sure you have the uncompressed, layered files at hand so that added text can be translated with minimal manipulation. But it is easier to avoid graphic texts altogether.

e) Icons/colours/sounds: They can mean different things to different cultures, so be ready to make some changes there.

3. Punctuation/spacing: Punctuation and spacing rules differ according to language and region. For example, “34.8%” in English is localized to “34,8 %” in French. When this string is constructed at runtime, the translator cannot change the point to a comma. If a sentence needs a semi-colon, adding it at runtime may be a problem. In France, a space is required before the semi-colon or question mark; in Canada (French), there is no space before these two signs.

4. Compound messages/string concatenation: Avoid string concatenation such as this:

days_left = "3";
points_left = "15";
alert_message("You have " + days_left + " days to use the remaining " + points_left + " points from your account");

It will take a few more lines, but use something that includes stuff like:

GoodString = "new" String("You have %n days to use the remaining %m points from your account");

However, it may just as well be better to avoid compound messages and use a less language dependant format such as “Days left: %n”, if possible.

Plurals can be formed by adding an “s” but also an “x” or replacing an “o” with an “i”, or using a completely different spelling such as in “mouse” and “mice”, so beware of hard coding an “s” as a plural form. Moreover, in some languages, the plural form for two objects can be different from the one used for three or more objects.

5. Use UTF-16. As a side note, when using XCode, make sure the IDE is set to UTF-16. I believe it defaults to UTF-8, but the string extractor uses UTF-16. It may not show in the emulator, but on a real device, some weird characters may show up.

6. Unicode collation: Make sure your string comparison methods use the right algorithm for sorting Unicode values. The sorting weight of characters is not determined by their position in the Unicode code charts. Moreover, the same accented character will sort differently from one language to the next.

7. Thinking of machine translation? Think again: How will the machine know, for example, which meaning of “Clear” to use? Clair, évident, limpide, transparent, degagé, tranquille… there are just too many! Actually, without context, even the translator may not know which one to choose. Put the description tag to good use. You’ll see why in this rather extreme example.

<Description> No comment provided by engineer. </Description>
<Position>%1 of %2 on %3, for %4.</Position>
<base loc=”en”>%1 of %2 on %3, for %4.</base>
<tran loc=”fr_CA” origin=”"> ARRRRRGH :-( </tran>

To avoid mistranslations, have the help files ready for the translator, screenshots, technical notes or any other documents that will provide context.

8. Terminology: Make up your mind and stick to it. These error messages all mean the same thing, but will raise your localization cost needlessly.

Not enough disk space / There is not enough disk space left  / Insufficient disk space / No space left on the disk

9. New versions/updates: Once your application is up and running in many languages, keep track of changes you make to your next version, so that only those changes will be translated.

10. Web site: And of course, present your customers with a well translated web site. Some tips on that in a future entry of “Passage: A bridge between two worlds”.

Happy coding! tradlogomini

PS: See also more localization tips!

Un Antidote à tous vos mots

23 février 2009

Antidote RX

Antidote RX

Ma pharmacopée de traductrice comprend des remèdes pour bloquer les anglicismes, atténuer les difficultés de la langue et soigner la grammaire. Mais l’élixir qui fait chaque fois mouche, dans sa fiole incassable, ravitaillée régulièrement par un Druide bienveillant, c’est Antidote.

Pour faire court : un correcteur, dix dictionnaires et dix guides; mais aussi des filtres (philtres?) de révision et d’inspection, qui exercent leur magie sur les verbes ternes, les phrases passives, les répétitions. Pour le reste, le site de Druide informatique regorge de renseignements que je ne répéterai pas ici.

Mais surtout, en cinq années d’utilisation, il n’a JAMAIS PLANTÉ. Il s’installe sur un Mac et la version OS X n’est JAMAIS à la traîne de la version Windows; et que dire de la licence sans chichis : installation permise sur trois ordinateurs familiaux (Mac et PC) avec numéro d’enregistrement livré en quelques secondes par Internet. On peut rayer, casser, perdre la galette, on récupère le logiciel en ligne. Mises à jour (pas si) mineures gratuites fréquentes et mises à jour majeures payantes à prix réduit, par Internet ou sur cédérom.

Quoi d’autre? Lorsque l’article d’un dictionnaire ou d’un guide est long, le moteur de recherche (cmd-F) nous conduit directement à la « posologie » désirée. On peut aussi copier-coller à qui mieux mieux. Pourquoi j’insiste sur des fonctions qui semblent aller de soi? Parce qu’un certain dictionnaire vénérable, dont le contenu est formidable, n’est pas fichu de faire fonctionner son interface comme il se doit et exige qu’on ait le CD sur soi à toute heure du jour… J’y reviendrai d’ailleurs dans un prochain billet.

Mes « antidotes  » préférés?

  • Les cooccurrences, pour trouver le mot juste;
  • Les synonymes, pour rendre les répétitions, qui en anglais passent mieux qu’en français;
  • Les locutions, pour vraiment mettre le doigt sur la signification réelle d’une expression;
  • Les citations, pour bien comprendre comment on utilise un mot, lorsque le doute s’installe.

Ce qui manque à cette trousse de premiers soins? Un baume nommé « étymologie » : pas une véritable lacune, plutôt un placébo administré pour apaiser une curiosité naturelle pour les langues.


Gazan, Gazaoui, Gazaouite et compagnie…

3 février 2009

Les habitants de Gaza font la manchette depuis les événements que l’on sait. On a donc appris illico leur gentilé. Mais quel est-il? Gazan semble être la solution en anglais, mais c’est en français que ça se complique!

La banque terminologique du Bureau de la traduction (Termium) donne «Gazan» et «Gazane» comme gentilé français des habitants de la fameuse bande, mais reste muette quant à l’utilisation du terme comme adjectif. Le Grand dictionnaire terminologique (GDT) ne répertorie pas ce gentilé, ni «Gazaoui» ou «Gazaouite», d’ailleurs; ces derniers étant issus de la méthode habituelle de formation des gentilés en arabe : Irak et Iraki, Pakistan et Pakistani; ainsi donc, Gaza et Gazaoui. Notons aussi la formation au féminin en «ite», qu’on retrouve dans divers contextes (et par forcément féminins) en français (Yémémite, israélite).




Pour traduire un texte sur l’aide apportée par l’ONU aux sinistrés de la bande de Gaza, j’ai rendu Gazan houses par «les maisons de Gaza». D’autres solutions ?

Une recherche pas du tout scientifique sur Google jette une lueur d’espoir sur le sujet :

Gazan(s) : Surtout utilisé en anglais.
Gazane(s) : Nom d’un groupe de musique ou nom de famille. Peu révélateur.
Gazaoui : Plus de 28000 résultats, surtout des sites en français, dont celui du Monde, de TFI, du Figaro, de La Presse, etc. C’est pas rien! désolée Termium.
Gazaouis : 88000, incluant les sites du Devoir et d’Amnesty. Ça se précise.
Gazaouie+s : 7300 + 7500, dont Le Point, Le Figaro, RFI, Radio-Canada, La Presse.
Gazaouite+s : 6700 + 2500, dont Le Figaro et L’Express, mais ni Radio-Canada, ni La Presse.

Et pour faire bonne mesure, «gazaoui» est invariable pour certains. Conclusion : usage flottant! mais qui tend vers «gazaoui[e][s]». Ah, ça oui!  


Alea jacta est!

27 janvier 2009

Et voici que je franchis le Rubicon, comme ce Jules… pour relier les deux solitudes de MacLennan.

Pont de Québec

Un pont (ou deux!) entre deux mondes

Je plonge donc dans ces eaux glacées pour vous entretenir de science et de traduction, ou pour gloser sur le français, l’anglais et les mots en général. Je coupe court aujourd’hui, trop pressée de publier quelque chose dans ce nouvel environnement.

Au plaisir de vous revoir au prochain passage!