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
Passage » Blog Archive » More localization tips
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/myriade/www/carnet/wp-includes/kses.php on line 1002

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/myriade/www/carnet/wp-includes/kses.php on line 1003

More localization tips

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:

French:  
Spanish:
Italian:
German:
20%  
25%
15%
20%
Chinese:  
Japonese:
Arabic:
 
Varies  
Up to 60%
25%

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

Julie

Les commentaires sont fermés.