Aller au contenu | Aller au menu | Aller à la recherche

Localisation de projets Ruby on Rails

Toujours la tête plongée dans mon projet Ruby On Rails actuel (stay tuned ! :mdr: ), j'imagine parfois l'avenir où mon application sera tellement connues qu'il faudra la localiser en angliche et en 日本語 (et puis pleins d'autres, au programme: Quenya, Vulcain, Klingon, ...) et pour gagner du temps, j'effectue la localisation en parallèle. Pour cela j'utilise Rails i18n qui est très simple à utiliser et à configurer. Rien que la fonction !! C'est tout simplement t. Donc à la taper, on ne perd pas de temps, c'est juste UNE lettre !!
Pour l'aspect fonctionnel, c'est simple, s'il ne trouve pas la chaîne correspondante dans le fichier de localisation, il railise sa chaîne de caractères (comprendre : il remplace les underscores par des espaces et il met une majuscule à la première ligne.
Prenons l'exemple de la fonction suivante : t(:je_fais_un_prout) dans un contexte de traduction anglaise.

  • Rails va chercher dans le fichier en.yml, la chaîne correspndante ; s'il la trouve, il affichera I make a prout
  • Sinon, il affichera Je fais un prout

C'est tellement simple que je place ces fonctions t un peu partout en me disant que je remplirais le fichier de localisation fr.yml plus tard... Sauf que voilà... Plus tard, en informatique signifie souvent, comme partout ailleurs, d'ailleurs,... à la saint glin-glin.
Pourquoi ?
Parce que, comme moi, tout bon développeur est une grosse feignasse qui a une flemme de maladie quand il s'agit de rechercher tous les chaines de localisation qu'il a éparpillé un peu partout dans tous ses fichiers (dans mon cas 110 fichiers et 6160 lignes de code :-( ) et que surtout : traduire, c'est pas du dév!
C'est là où le petit programme que je viens de développer vient à point nommé. En effet, ce script se charge de chercher dans une arborescence Ruby On Rails, les fichiers susceptibles d'accueillir des chaines de localisation de les extraire et de chercher un squelette de fichier de localisation avec. Dès lors que tous les chaînes ont été extraites, il ne reste plus qu'à traduire le fichier de la langue désirée. Pas mal, non ? :-)

#!/bin/sh
# by Jean-Baptiste LANGLOIS
# Tested under RoR 3.2.3

DIRECTORY=`pwd`
APPEND=0

usage()
{
  cat << _EOF_
Usage: `basename $0` [-a] [-d <directory>] <language>
  where:
    <language>      localized language on two digits (en, fr, etc.)

  Options:
    -d <directory>  RoR application directory (default: current directory)
    -a              appending localization file if exists
    -h              this help page

_EOF_
}

while getopts "d:ah" opt; do
  case $opt in
        d) DIRECTORY=$OPTARG;;
        a) APPEND=1;;
    h) usage && exit 1 ;;
  esac
done
shift $(($OPTIND - 1))

if [ $# -eq 0 ]; then
  usage
  exit 1
fi

LANGUAGE=$1
FICHIER=$DIRECTORY/config/locales/$LANGUAGE.yml

[ $APPEND -eq 0 ] && echo "$LANGUAGE:" > $FICHIER

find $DIRECTORY -name "*.rb" -o -name "*.erb" | \
  xargs grep -h "t(:" | \
  sed 's/^.*t(:\([^), ]*\).*$/  \1:/g' | \
  sort -u >> $FICHIER

Le programme prend en argument obligatoire la variable de langage (fr pour Français, par exemple ; cette variable créera aussi le fichier fr.yml) et en argument facultatif le répertoire où se trouve le projet Rails (par défaut, le répertoire en cours) et la possibilité d'écraser un fichier précédemment créé.

TODO
En plus d'extraire les chaînes de caractères, la prochaine évolution de ce script serait de railiser les chaines de localisation et d'initialiser les variables avec. Ainsi, si les chaines sont bien créés, il n'y aurait alors même pas besoin de modifier le fichier de localisation.

QR code
Jean-Baptiste Langlois

Auteur: Jean-Baptiste Langlois

Restez au courant de l'actualité et abonnez-vous au Flux RSS de cette catégorie

Commentaires (0)

Soyez le premier à réagir sur cet article

Ajouter un commentaire Fil des commentaires de ce billet

:-) ;-) :-/ :mdr: :-D :-( :-C 8-) :-O :-s :siffle: :-P :love: :oops: :money: :caca:


À voir également

Icinga avec LDAPS

Connexion en LDAPS avec Icinga

Authentification sur Icinga via un serveur LDAP nécessitant un certificat

Lire la suite

icinga-api-2.PNG

Remonter les checks Icinga grâce à Ruby

Classe Ruby permettant de remonter des informations grâce à l'interface REST de Icinga-Web

Lire la suite