Firefox OS : Localiser son application
Actuellement, le Marketplace Firefox gère trois langues : anglais (US), espagnol et portugais (Brésil).
Mais comment avec un code unique localiser son application ?
Localiser le fichier manifest.webapp de votre application Firefox OS
Afin de définir la locale par défaut de l’application, il faut définir la clé « default_locale » :
{ "name": "NomApp", "developer": { "name": "Mon organisation", "url": "http://url.organisation.org" }, "description": "Mon application", "default_locale": "fr" }
Pour localiser le nom de l’organisation ou la description, il faut ajouter une clé « locales » :
{ "name": "NomApp", "developer": { "name": "Mon organisation", "url": "http://url.organisation.org" }, "description": "Mon application", "default_locale": "fr", "locales": { "es": { "description": "Mi aplicación", "developer": { "name": "Mi organización", "url": "http://es.url.organisation.org" } }, "it": { "description": "La mia applicazione", "developer": { "name": "La mia organizzazione", "url": "http://it.url.organisation.org" } } } }
Localiser le contenu de votre application Firefox OS
Initialisation
Pour l’application, c’est différent. Il faut tout d’abord inclure soit la librairie webL10n (fichier) – créé par Fabien Cazenave (@fabi1cazenave), hébergé sur GitHub (fabi1cazenave\webL10n) et compatible IE -, soit la version de Firefox OS(fichier) et un fichier de type ressources qui contient les liens vers les différentes langues:
<html> <head> <script src="shared/js/l10n.js"></script> <link rel="resource" type="application/l10n" href="l10n_app.ini" /> </head> </html>
Fichiers de langue
Ce fichier INI a une architecture simple. Tout d’abord on importe la langue par défaut, puis pour chaque langue, on crée une section avec les différents imports pour chaque fichier de langue. Mais un exemple vaut mieux que quelques mots :
@import url(app.en-US.properties) [fr] @import url(app.fr-FR.properties)
Ces fichiers properties ont la même architecture : une clé avec une chaine.
# Pour le fichier app.fr-FR.properties about=A propos author=Auteur
# Pour le fichier app.en-US.properties about=About author=Author
Localisation du code HTML
Désormais, il reste à l’intégrer au code HTML. Pour cela, dans du code HTML5, il faut créer un attribut data-l10n-id qui contiendra la clé. Par exemple :
<header data-l10n-id="about"></header> <span data-l10n-id="author"></span>
Afin d’éviter un effet de clignotement, je conseille de remplir la balise avec la langue par défaut. Ainsi le précédent exemple ressemblerait à cela :
<header data-l10n-id="about">About</header> <span data-l10n-id="author">Author</span>
Localisation des attributs HTML
Mais la puissance de la librairie webL10N ne s’arrête pas là car cette librairie permet aussi de localiser les attributs.
Imaginez ce code avec un élément HTML qui contient un attribut localisable :
<button data-l10n-id="btnSend" title="Titre du Bouton">Message du bouton</button>
Et avec le fichier de langue suivant, vous traduisez les attributs de votre élément HTML.
[en-US] btnSend = Button Message btnSend.title = Button Title [fr] btnSend = Message du bouton btnSend.title = Titre du Bouton
Gestion d’arguments dans la localisation
Continuons à imaginer que vous souhaitiez traduire une phrase avec une variable à l’intérieur. Par exemple, ma phrase sera « Bienvenue, Progi1984 ! Vous utilisez le projet webL10N. » avec mon pseudo et le nom du projet comme variables.
Pour le code HTML, on utilise un nouvel attribut HTML5 data-l10n-args qui contient les arguments sous forme d’un JSON.
<p data-l10n-id="welcomeuse" data-l10n-args='{"user": "Progi1984", "project": "webL10N" }'></p>
Pour le fichier de langue, les arguments se trouvent entre accolades.
[en-US] welcomeuse = Welcome, {{user}}! You use the project {{project}}. [fr] welcomeuse = Bienvenue, {{user}} ! Vous utilisez le projet {{project}}.
Gestion du Pluriel
Maintenant que vous savez les arguments sans problème, nous allons les utiliser pour gérer le pluriel.
Prenons la phrase « x Articles en attente », elle est variable en fonction du nombre d’articles :
- 0 : « Aucun article en attente »
- 1 : « 1 article en attente »
- 2 et + : « x articles en attente »
Au niveau du code HTML, on va utiliser l’argument « num » qui contiendra le nombre d’articles :
<p data-l10n-id="articlespending" data-l10n-args='{"num": "0" }'></p>
Au niveau du fichier de langues, on va utiliser la macro plural() :
[en-US] articlespending= {[ plural(num) ]} articlespending[zero] = No pending article articlespending[one] = One pending article articlespending[other] = {{num}} pending articles [fr] articlespending= {[ plural(num) ]} articlespending[zero] = Aucun article en attente articlespending[one] = 1 article en attente articlespending[other] = {{num}} articles en attente
Ainsi, en fonction du nombre d’articles (« num« ), webL10N prendra la phrase correcte pour traduire.
Conclusion
Pour conclure, voici les étapes pour localiser son application Firefox OS :
- Inclure dans l’entête HTML le fichier javascript l10n.js
- Inclure dans l’entête HTML le fichier INI des langues
- Créer les fichiers de langues (au format PROPERTIES)
- Modifier le fichier HTML pour inclure les attributs personnalisés data-l10n-id
Aide :
- webL10N (GitHub) : https://github.com/fabi1cazenave/webL10n
- webL10N (Wiki) : https://github.com/fabi1cazenave/webL10n/wiki
- webL10N (Markup HTML) : https://github.com/fabi1cazenave/webL10n/wiki/Language-Selection
- webL10N (Auteur) : Twitter (https://twitter.com/fabi1cazenave) – Site (http://kazhack.org/)
- webL10N : Version à jour sur le Repository de Firefox OS
- Article sur Mozilla Hacks : Localizing Firefox OS Apps
[EDIT 16/04/2013 08h20] : Correction de la syntaxe de certains attributs suite à une erreur de syntaxe. Merci à @jwajsberg
[EDIT 17/04/2013 14h00] : Ajout du lien vers la librairie webL10N suite au tweet de @nhoizey
[EDIT 17/04/2013 16h30] : Rectification du lien vers le fichier l10n.js du projet B2G suite au tweet de @nhoizey
[EDIT 17/04/2013 22h30] : Mise à jour sur la localisation des attributs suite au tweet de @jwajsberg
[EDIT 17/04/2013 23h20] : Mise à jour sur la gestion des arguments et du pluriel suite au tweet de @fabi1cazenave
[EDIT 22/08/2013 10h30] : Mise à jour des liens avec un article de Mozilla Hacks
[EDIT 08/12/2013 21h00] : Grâce à likpi, Mise à jour du lien vers la version à jour de webL10N
Commentaires
Bonjour, merci pour tout vos article sur Firefox os, les ressources française sur le sujet sont rare.
Petite correction, le lien directe vers le fichier webL10n n’est plus a jour.
@likpi : Peux tu m’indiquer quel lien n’est pas à jour ? Je suis désolé, j’ai vérifié tous les fichiers, j’arrive à accéder à toutes les pages.
Pour l’application, c’est différent. Il faut tout d’abord inclure soit la librairie webL10n (fichier) <–
Celui-ci, le lien fonctionne, mais il ne correspond pas au fichier et au wiki du github : fabi1cazenave\webL10n
La première ligne du commentaire si-dessus et la première ligne de la partie « Initialisation »
Excuse-moi mais je ne vois pas tes liens… Peux tu me les envoyer soit par commentaire soit par mail (Page Contact) ? Merci.
Je ne comprends pas tout.
Je reprend :
Le lien : https://github.com/mozilla-b2g/gaia/blob/master/shared/js/l10n.js
Fonctionne très bien, mais …
Il ne correspond pas à la version de l10n.js qui est disponible en suivant le lien github suivant :
https://github.com/fabi1cazenave/webL10n
Je pense pas pouvoir faire mieux 😀
Coucou…
Je pense que la version du repo de Mozilla est la plus à jour, car c’est la version utilisée par Firefox OS. webL10N de Fabien CAZENAVE semblle être la version initiale de développement.
PS : Je vais en profiter pour mettre à jour l’article. Merci @likpi.
Ajouter un commentaire