Aller au contenu principal
Version: 4.x

🎎 i18n

Introduction

Dans tout application, il y a le besoin de rendre l'application multi-languge. Bow implement un système simple de tranduction.

Configuration

Pour utiliser le système de traduction. Il faut d'abort considérer la confirguration qui se trouve dans le dossier config/trans.php, dans ce fichier, la langue par defaut c'est le français, donc le 'lang' => 'fr'.

Dans le dossier frontend/lang sont ranger les traductions de votre application. Ce sont des fichier php qui retournent un array et si vous remarquez il y a un dossier fr et en. Ce sont les dossiers pour chaque langue, ici fr pour le français et en pour l'anglais et s'il y avait une autre langage par exemple l'espagnol, se serait es le nom du dossier.

/frontend
/lang
/en
messages.php
/fr
messages.php

Tous les fichiers de langue renvoient un tableau de chaînes à clé.

Par exemple:

// frontend/lang/en/messages.php
return [
'welcome' => 'Welcome to our application'
];

Configuration de la locale

La langue par défaut de votre application est stockée dans le fichier de configuration config/trans.php. Bien entendu, vous pouvez modifier cette valeur pour répondre aux besoins de votre application. Vous pouvez également modifier la langue active au moment de l'exécution à l'aide de la méthode setLocale sur la classe Bow\Translate\Translator:

use Bow\Translate\Translator;

$app->get('docs/:locale', function ($locale) {
Translator::setLocale($locale);
//
});

Vous pouvez configurer une lang, qui sera utilisée lorsque la langue active ne contient pas une chaîne de traduction donnée. Comme la langue par défaut, la langue de secours est également configurée dans le fichier de configuration config/trans.php:

'lang' => 'en',

Récupération de chaînes de traduction

Vous pouvez extraire des lignes de fichiers de langue à l'aide de la fonction du helper trans ou t. La méthode t accepte le fichier et la clé de la chaîne de traduction comme premier argument. Par exemple, récupérons la chaîne de traduction de bienvenue dans le fichier de langue frontend/lang/messages.php:

echo t('messages.welcome');

// Ou bien
echo trans('messages.welcome');

// Ou bien
use Bow\Translate\Translator;

echo Translator::translate('messages.welcome');

Détermination de la locale actuelle

Vous pouvez utiliser les méthodes getLocale et isLocale sur la classe Translator ou par le helper trans pour déterminer les paramètres régionaux actuels ou vérifier si les paramètres régionaux correspondent à une valeur donnée:

use Bow\Translate\Translator;

$locale = Translator::getLocale();

if (Translator::isLocale('en')) {
//
}

Via le helper trans

$locale = trans()->getLocale();

if (trans()->isLocale('en')) {
//
}

Si la chaîne de traduction spécifiée n'existe pas, la fonction t renverra la clé de la chaîne de traduction. Ainsi, à l'aide de l'exemple ci-dessus, la fonction t renverrait messages.welcome si la chaîne de traduction n'existe pas.

Remplacement de paramètres dans les chaînes de traduction

Si vous le souhaitez, vous pouvez définir des espaces réservés dans vos chaînes de traduction. Tous les espaces réservés sont encadrés par {}. Par exemple, vous pouvez définir un message de bienvenue avec un nom d’espace réservé:

'welcome' => 'Welcome, {name}',

Pour remplacer les espaces réservés lors de l'extraction d'une chaîne de traduction, transmettez un tableau de remplacements en tant que deuxième argument de la fonction t ou trans:

echo t('messages.welcome', ['name' => 'Galy']);

La pluralisation

La pluralisation est un problème complexe, car différentes langues ont une variété de règles complexes pour la pluralisation. En utilisant un caractère "pipe" (|), vous pouvez distinguer les formes singulière et plurielle d'une chaîne:

"names" => "C'est un utilisateur|Ce sont des utilisateurs",

Après avoir défini une chaîne de traduction comportant des options de pluralisation, vous pouvez utiliser la fonction t ou trans. Dans cet exemple, puisque le nombre est supérieur à un, la forme au pluriel de la chaîne de traduction est renvoyée:

echo t("messages.names", count($names) > 1);

Avec les données remplacées

"names" => "Bonjour {name}|Bonjour à tous",
echo t("messages.names", ["name" => "Newt"], count($names) == 1);
// => Bonjour Mewt

Il manque quelque chose ?

Si vous rencontrez des problèmes avec la documentation ou si vous avez des suggestions pour améliorer la documentation ou le projet en général, veuillez déposer une issue pour nous, ou envoyer un tweet mentionnant le compte Twitter @bowframework ou sur directement sur le github.