AlpineLab blog technique

Installer git-flow dans une box Nitrous.IO

La première chose qu'on fait quand on crée une box sur Nitrous.IO, c'est un git clone. La seconde, quand on utilise git-flow (comme nous), c'est de créer une nouvelle branche pour commencer à travailler. Mais là, c'est l'accident : Nitrous n'embarque pas git-flow par défaut !

Pas de panique ! En fait, c'est assez simple d'y remédier : il faut juste l'installer manuellement, et pour un seul utilisateur (parce que, évidemment, on n'est pas sudoer sur une telle box, donc pas d'accès à apt-get).

On commence donc par récupérer le code de git-flow :

$ git clone --recursive git://github.com/nvie/gitflow.git

Puis, dans le répertoire ainsi créé, on execute, à l'ancienne :

$ make install prefix=$HOME

Git-flow va alors être installé dans ~/bin. Il ne reste plus qu'à s'assurer que ce répertoire est dans le $PATH en ajoutant la ligne suivante au fichier ~/.bashrc :

PATH=$PATH:$HOME/bin

Il faut simplement penser à relancer son terminal, ou à executer la ligne suivante pour que les modifications soient prises en compte immédiatement :

$ . ~/.bashrc

Et voilà, à vous le workflow comme à la maison !

Sources

Git en couleurs

Parfois - avec des années de retard - on découvre un truc tout bête mais génial. C'est ce qui vient de m'arriver.

En créant une box sur Nitrous.IO (on vous en reparlera dans un autre article, c'est génial), je me loggue dans la console, je git clone un projet, et là, le choc : git est coloré !

git pull sur Nitrous.IO

En fait, c'est super simple à configurer. Tout ce qu'il suffit de faire, c'est entrer cette ligne dans une console :

$ git config --global --add color.ui true

Voilà. Vous pouvez maintenant kiffer vos git pull en couleurs, ou encore vos git diff, vos git status ou vos git log, comme sur les screenshots ci-dessous.

git diff, status et log sur Nitrous.IO

On se sent idiot, des fois…

PS : si vous voulez aller sur Nitrous.IO de ma part, voilà mon lien partenaire

Sources

Traduire son site Middleman avec Locale

Pour traduire nos sites en Rails, on utilise pratiquement tout le temps le SaaS de localisation Locale. On va voir comment s'en servir dans un projet Middleman, pour une fois.

Pour ceux qui ne connaissent pas, on en profite pour faire un peu de pub, parce que c'est notre pote Chris qui le développe et que, nous même, on bosse de temps en temps sur ce projet. Sachez donc que c'est un service qui permet de ne plus se galérer avec les fichiers de traduction Yaml de Rails, mais plutôt d'utiliser cette superbe interface de traduction, directement depuis votre navigateur :

Locale

Il y a plein d'autres fonctionnalités (commande de traductions, workflows, synchronisation, …) que je vous laisse découvrir en essayant par vous même.

Bref, c'est bien beau tout ça, mais comment on s'en sert avec Middleman ?

Installation de la gem

Locale s'installe par une gem. Comme Middleman fonctionne à base de fichier Gemfile, il suffit d'y ajouter :

gem 'localeapp'

Puis d'éxecuter le classique :

$ bundle install

Splendide.

Création d'un projet Locale et liaison avec le projet Middleman

Une fois loggé(e) sur le site de Locale, cliquez sur le bouton “+” pour créer un projet.

Locale - Add project

Après avoir renseigné quelques menues informations (nom du projet, langue par défaut, …), le projet est créé et vous êtes redirigé(e) vers une modale qui vous explique quoi faire maintenant, c'est à dire l'ajout de la gem au Gemfile et le bundle install qu'on vient de faire juste avant, mais surtout, ça nous propose d'executer l'instruction suivante qui sert à lier notre projet Locale à notre projet Middleman :

$ bundle exec localeapp install --standalone <YOUR_API_KEY>

Je vous laisse évidemment renseigner votre propre clef d'API.

Vous remarquez le switch --standalone ? Oui, c'est parce qu'on n'utilise pas Rails, on n'a donc pas besoin de tout un tas de trucs qui nous seraient inutiles des toutes façons. Donc économisons.

Configuration de Middleman

Voilà, donc la gem est maintenant configurée pour fonctionner avec notre projet Locale. En fait, ce qu'il s'est passé, c'est que ça a créé un fichier .localeapp/config.rb à la racine de notre projet Middleman, avec dedans :

Localeapp.configure do |config|
  config.api_key                    = '<YOUR_API_KEY>'
  config.translation_data_directory = 'locales'
  config.synchronization_data_file  = '.localeapp/log.yml'
  config.daemon_pid_file            = '.localeapp/localeapp.pid'
end

Il reste donc à dire 2 choses à Middleman : activer son module i18n et configurer la gem localeapp au démarrage. Il suffit pour ça d'ajouter les lignes suivantes au fichier config.rb :

activate :i18n, mount_at_root: :fr
require '.localeapp/config'

Ceux d'entre vous qui sont déjà allé jeter un coup d'oeil à la doc i18n de Middleman, auront remarqué que mount_as_root: :fr sert à définir le français comme langue par défaut. Vous faites comme vous voulez, ici, ça n'a absolument pas besoin d'être la même langue que celle définie comme langue par défaut dans Locale.

La version française du site sera donc disponible, comme d'habitude sur http://localhost:4567 et la version anglaise sera, elle, disponible sur http://localhost:4567/en (notez le /en à la fin).

Organisation des templates Middleman et utilisation de I18n

Middleman sait quand générer des versions localisées des pages quand elles sont placées dans le dossier source/localizable, il suffit donc de déplacer, par exemple, votre source/index.html.haml dans source/localized/index.html.haml.

Bien, maintenant, on peut utiliser, dans ce fichier, la classe Ruby I18n et notamment sa fonction t (ou translate), comme on le fait sous Rails (ici, en Haml) :

%h1= I18n.t('index.title')

Ce qui devrait afficher “Missing translation”. Qu'à celà ne tienne, on va aller la créer.

Création d'une traduction dans Locale

Sur la page de son projet, il suffit de cliquer sur une des langues, pour tomber sur la liste (vide, au début) des traductions.

Cliquez donc sur le bouton “+” en haut pour en créer une nouvelle :

Locale - Create translation

Une modale vous permettra alors de renseigner le chemin de la traduction :

Locale - Name new translation

Les chemins utilisent les points comme séparateurs, on crée donc, dans cet exemple, une traduction qui s'appelle title dans le le noeud index, ce qui correspond à la clef que l'on a précédemment passée à la fonction t du module Ruby I18n (faut suivre, hein…).

Voilà, on peut maintenant remplir très intuitivement le contenu de cette traduction dans toutes les langues :

Locale - Fill in a translation

Il ne reste alors plus qu'à ordonner à la gem de rappatrier les fichiers Yaml qui vont bien, et que Middleman saura lire en tapant dans la console :

$ localeapp pull

Dans notre exemple, les fichiers locales/fr.yml et locales/en.yml seront alors créés et prêts à être utilisés par Middleman (c'est en fait eux qui sont appelés par la fonction Ruby I18n.t()).

Bonus: pusher des traductions

Vous vous doutez bien, si il y a un localeapp pull, c'est qu'il y a aussi un localeapp push. C'est utile quand on a fait une modification directement dans un fichier Yaml (genre, lors d'une résolution de conflit Git, et ça arrive souvent sur les fichiers Yaml) et que l'on veut envoyer cette modification à Locale. On fait alors :

$ localeapp push locales/fr.yml

Oui, il faut spécifier quel fichier on pushe, c'est pas la fête du slip, non plus.

Bonus 2 : I18n.locale

Pour savoir quelle est la langue courante dynamiquement, tout comme sous Rails, on peut utiliser la variable Ruby I18n.locale, ce qui permet, par exemple de changer son Haml qui ressemblait à ça :

%html{lang: 'fr'}

En ça, qui sera donc différent selon que la requête est pour la version française ou anglaise :

%html{lang: I18n.locale}

Sources

Alpine Lab