Open pa-de-solminihac opened 9 years ago
Solution envisagée : utiliser gettext
Avec un peu d'astuce on peut utiliser le systeme des surcharges. Dans cet exemple (un peu brut de décoffrage), on affichera la traduction de la surcharge si elle existe, et sinon on demandera la traduction a la classe parente.
Tout l'intérêt réside dans le fait que la classe parente cherchera la traduction dans son propre fichier de traductions. Ainsi, les modules peuvent surcharger les traductions.
bindtextdomain('traductions', './locale');
bindtextdomain('traductions_inter', './locale');
bindtextdomain('traductions_outer', './locale');
class core
{
public static $domain = 'traductions';
public function traduire($src)
{
echo "0: ";
$trad = dgettext(self::$domain, $src) . '<br />';
if ($trad == $src . '<br />') {
return "pas de traduction dans le domaine " . self::$domain;
}
return $trad;
}
}
class inter extends core
{
public static $domain = 'traductions_inter';
public function traduire($src)
{
echo "1: ";
$trad = dgettext(self::$domain, $src) . '<br />';
if ($trad == $src . '<br />') {
return parent::traduire($src);
}
return $trad;
}
}
class outer extends inter
{
public static $domain = 'traductions_outer';
}
$obj = new outer();
echo $obj->traduire('test5432incore');
sources d'inspiration : gettext, ICU, Mozilla L20N (attention, pas de version PHP pour ce dernier)
Ticket importé depuis : http://bugtracker.clementine.quai13.com/index.php?do=details&task_id=2
Obligatoire :
Doit permettre les évolutions suivantes :