Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs...
-
Upload
bayard-arnaud -
Category
Documents
-
view
103 -
download
0
Transcript of Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs...
symfony
i18n
terminologie
• internationalization = i18n – Un même contenu traduit en plusieurs
langue, éventuellement converti en différents formats
• localization = l10n – Contient un contenu différent selon le pays
à partir duquel le site est consulté
Culture utilisateur
• La culture est une combinaison du pays et de la langue de l’utilisateur– Persistante en session
• Culture par défaut myapp/config/i18n.yml all:
default_culture: fr_FR • Pour que les changements prennent effet
– Réinitialiser la session (supprimer les cookies, « effacer mes traces »)
• La langue est codée sur 2 caractères minuscules (ISO 639-1 standard)
• Le pays est codé sur 2 caractères majuscules (ISO 3166-1 standard)
Changer de culture
• // Culture setter
$this->getUser()->setCulture('en_US');
• // Culture getter
$culture = $this->getUser()->getCulture(); • en_US
• La culture étant stockée dans la session les Moteur de recherche ne peuvent indexer qu’une langue
Culture dans url
• routing.ymlpage: url: /:sf_culture/:page requirements: { sf_culture: (?:fr|en|de) } params: ... article: url: /:sf_culture/:year/:month/:day/:slug requirements: { sf_culture: (?:fr|en|de) } params: ... • La culture sera accolé dans chaque url générée par
link_to• Si le paramètre sf_culture change dans l’url
symfony changera automatiquement la culture de l’utilisateur
Déterminer la culture
$languages = $this->getRequest()->getLanguages();
• Permet de déterminer automatiquement la culture• le Accept-Language HTTP n’est pas très fiable
– Rarement modifié par les utilisateurs– La plupart du temps le langage est celui de l’interface– Les browsers ne sont pas disponibles dans toutes les
langues – L’utilisateur doit pouvoir choisir une autre langue
Affichage des données fonction de la culture
<?php use_helper('Number') ?> <?php $sf_user->setCulture('en_US') ?> <?php echo format_number(12000.10) ?> '12,000.10'
<?php $sf_user->setCulture('fr_FR') ?><?php echo format_number(12000.10) ?>'12 000,10' Pas de passage explicite de la culture
Affichage des données fonction de la culture II
<?php use_helper('Date') ?>
<?php echo format_date(time()) ?> '9/14/06'
<?php echo format_datetime(time()) ?>'September 14, 2006 6:11:07 PM CEST'
Affichage des données fonction de la culture III
<?php use_helper('I18N') ?>
<?php echo format_country('US') ?> 'United States'
<?php format_language('en') ?> 'English'
Affichage des données fonction de la culture IV
<?php use_helper('Form') ?> <?php echo input_date_tag('birth_date', mktime(0, 0, 0, 9, 14, 2006)) ?> <input type="text" name="birth_date" id="birth_date" value="9/14/06"
size="11" /> <?php echo select_country_tag('country', 'US') ?> <select name="country" id="country">
<option value="AF">Afghanistan</option>...
<option value="GB">United Kingdom</option> <option value="US" selected="selected">United States</option> <option value="UM">United States Minor Outlying Islands</option><option value="UY">Uruguay</option> ... </select>
Les helpers date acceptent un paramètre spécifique pour forcer la culture déconseillé
Récupérer des données localisées
$date= $this->getRequestParameter('birth_date');
$user_culture = $this->getUser()->getCulture();
// Getting a timestamp
$timestamp = sfI18N::getTimestampForCulture($date, $user_culture);
// Getting a structured date
list($d, $m, $y) = sfI18N::getDateForCulture($date, $user_culture);
Schéma localisé
my_product: _attributes: { phpName: Product, isI18N: true, i18nTable: my_product_i18n } id: { type: integer, required: true, primaryKey: true, autoincrement: true } price: { type: float } my_product_i18n: _attributes: { phpName: ProductI18n } id: type: integer required: true primaryKey: true foreignTable: my_product foreignReference: id culture: { isCulture: true, type: varchar, size: 7, required: true, primaryKey: true } name: { type: varchar, size: 50 }
Schéma localisé – version courte
my_product:
_attributes: { phpName: Product }
id:
price: float
my_product_i18n:
_attributes: { phpName: ProductI18n }
name: varchar(50)
Utilisation d’un objet localisé
$product = ProductPeer::retrieveByPk(1);$product->setCulture('fr'); $product->setName('Nom du produit');$product->save();$product->setCulture('en'); $product->setName('Product name'); $product->save(); echo $product->getName(); 'Product name' $product->setCulture('fr'); echo $product->getName(); 'Nom du produit'
Automatiser la localisation d’un objet
• Ajouter cette méthode au modèle
public function hydrate(ResultSet $rs, $startcol = 1) {
$user = sfContext::getInstance()->getUser();
$culture = $user->getCulture();
$this->setCulture($culture);
return parent::hydrate($rs, $startcol);
}