Commons est un Drupal à vocation sociales et communautaires très intéressant, pouvant devenir un intranet d'entreprises pour dynamiser les échanges.
La vrai difficulté est d'avoir commons en Français (ou d'y intégrer d'autres bundle mais ce sera pour un autre billet...) sachant que le profile d'installation lui même ne permet pas de choisir sa langue !
Mais voici le processus mis en place pour arriver à quelque chose de concluant avec un commons-7.x-3.9.
1 ère étape : Installation du profile commons
Rien de spécial, suivez les instructions d'installation...
2 ème étape : Activer les modules de langue
Tous les modules nécessaires sont compris dans le profile commons :
drush en i18n variable i18nviews translation_helpers variable_realm variable_store i18n_variable l10n_update
l10n_update est un module très pratique qui s'occupera de télécharger tous les fichiers de traductions pour le français à l'étape suivante.
3 ème étape : Ajout de la langue
Ajout de la langue :
- Configuration > REGIONAL AND LANGUAGE > Languages > Add language > French
Ou avec le module drush_language :
drush language-add fr && drush language-enable fr && drush language-default fr
4 ème étape : Configuration des langues et paramètres régionaux
Si vous souhaitez un site multilangue ou que vous allez utiliser des feature sur votre site, mieux vaut laisser l'anglais par défaut et travailler avec un compte admin anglais. Sous peine, à chaque mise à jour d'une vue ou d'une feature d'avoir vos chaînes sources française alors qu'elles doivent être en Anglais.
Vous pouvez donc ensuite régler la négociation des langues en conséquence :
- Configuration > REGIONAL AND LANGUAGE > Languages > Detection and selection
Le mieux est d'activer et placer User en premier, suivi de Browser puis Default. Pour chaque utilisateur créé, il faudra bien indiquer "Français".
Vous pouvez ensuite localiser les dates :
- Configuration > Regional and language > Date and time > Localize > "Edit" en face de "Français"
Et régler les paramètres :
- Configuration > Regional and language > Regional settings
5 ème étape : Corriger les lacunes ! (avec du code)
Un autre problème va également apparaître avec panel, les titres des pages et des panneaux ne seront pas traduisibles ! nous allons pour cela devoir créer un module (commons_i18n) et utiliser les fonctions suivantes :
Attention cependant, si vous utilisez des titres dynamiques avec variables, une traduction sera crée à chaque affichage de terme, c'est donc à éviter.
/**
* hook_ctools_render_alter
* Let panel page title be translatable.
*/
function commons_i18n_ctools_render_alter(&$info, &$page, &$context) {
$handler = $context['handler'];
if (isset($handler->handler) && ($handler->handler == 'panel_context')) {
$display = $handler->conf['display'];
if (($display->hide_title == PANELS_TITLE_FIXED) && (!empty($info['title']))) {
$info['title'] = t($info['title']);
}
}
}
/**
* hook_preprocess_panels_pane
* Let panel pane title be translatable.
*/
function commons_i18n_preprocess_panels_pane(&$vars) {
if ($vars['title'] != '') {
$vars['title'] = t($vars['title']);
}
}
6 ème étape : Corriger les bugs ! (avec des patches et des fichiers !)
Nous auront ensuite encore quelques problèmes, avec par exemple la traduction des dates du module timeago, celui-ci utilise la librairie Jquery timeago qui aura besoin d'un fichier de traduction jquery.timeago.fr.js pour le français à ajouter dans profiles\commons\libraries\timeago
// French
jQuery.timeago.settings.strings = {
// environ ~= about, it's optional
prefixAgo: "il y a",
prefixFromNow: "d'ici",
seconds: "moins d'une minute",
minute: "environ une minute",
minutes: "environ %d minutes",
hour: "environ une heure",
hours: "environ %d heures",
day: "environ un jour",
days: "environ %d jours",
month: "environ un mois",
months: "environ %d mois",
year: "un an",
years: "%d ans"
};
Malheureusement une fois votre commons en Français vous constaterez que les messages "Activity stream" n'apparaissent plus, il ne reste que la date !
Il faudra un patch pour le module entity : https://www.drupal.org/node/1932530#comment-8931849
Un commentaire semble indiquer que le problème est résolu depuis commons-7.x-3.9, mais mes derniers tests montrent le contraire ! Attention le patch n'est plus à jour, la modification se fait sur profiles\commons\modules\contrib\entity\modules\callbacks.inc, ligne 550.
7 éme étape : Traduire !
Traduire les messages
Il vous faudra traduire tous les messages, mais dans un premier temps on peut faciliter la localisation depuis
- Configuration > Message settings> Copy messages...
Le texte anglais est attribué à "Language neutral" par défaut, vous pouvez donc le copier vers l'anglais et vers le Français.
Le reste
Vous pouvez maintenant traduire ce qui reste, adapter les titres des panels et des vues mais attention, si vous le faites en utilisateur anglais la chaîne d'origine doit être de l'anglais. Si vous souhaitez un site multilangue ou des mise à jours de features c'est indispensable pour éviter les problèmes. Vous devrez également éditer un peu les types de contenus.
Bonus : Gagner du temps
Presque tout ça va pouvoir être fait directement par un module sandbox commons_i18n. Ce module inclus donc les hooks l'activation des modules, les réglages et de la traduction, la traduction des messages. Attention les traductions ne sont pas complètes, ce n'est qu'une base de départ et il faudra les importer manuellement, il faudra également appliquer le patch de l'étape 6, voir le README.txt.
git clone http://git.drupal.org/sandbox/mogtofu33/commons_i18n.git
Il faut activer commons_i18n et commons_i18n_fr, puis suivre la doc. Evidemment si vous voulez aider dans la mise à jour des termes manquant, n'hésitez pas à utiliser les tickets du projet sur drupal.org !