pa-de-solminihac / clementine-framework-module-core

Core module for Clementine Framework (PHP MVC Framework)
0 stars 1 forks source link

internationalisation i18n et localisation l10n #11

Open pa-de-solminihac opened 9 years ago

pa-de-solminihac commented 9 years ago

Ticket importé depuis : http://bugtracker.clementine.quai13.com/index.php?do=details&task_id=2

Obligatoire :

Doit permettre les évolutions suivantes :

pa-de-solminihac commented 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');
pa-de-solminihac commented 8 years ago

sources d'inspiration : gettext, ICU, Mozilla L20N (attention, pas de version PHP pour ce dernier)