Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs...

15
symfony i18n

Transcript of Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs...

Page 1: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

symfony

i18n

Page 2: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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é

Page 3: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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)

Page 4: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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

Page 5: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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

Page 6: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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

Page 7: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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

Page 8: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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'

Page 9: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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'  

Page 10: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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é

Page 11: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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);

Page 12: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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 }

Page 13: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

Schéma localisé – version courte

my_product:

_attributes: { phpName: Product }

id:

price: float

my_product_i18n:

_attributes: { phpName: ProductI18n }

name: varchar(50)

Page 14: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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'

Page 15: Symfony i18n. terminologie internationalization = i18n –Un même contenu traduit en plusieurs langue, éventuellement converti en différents formats localization.

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);

}