1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| class Translation extends ArrayObject {
public function __construct (array $translations, $lang) {
if (!isset($translations[$lang]))
throw new OutOfBoundsException("Undefined offset {$lang} for translation dictionnary");
parent::__construct($translations[$lang], self::ARRAY_AS_PROPS);
}
public function format ($key) {
if (!$msg = $this->$key)
return false;
if (func_num_args() == 1)
return $msg;
$args = func_get_args();
array_shift($args);
switch (count($args)) {
case 0: return $msg; break;
case 1: return sprintf((string)$msg, $args[0]); break;
case 2: return sprintf((string)$msg, $args[0], $args[1]); break;
case 3: return sprintf((string)$msg, $args[0], $args[1], $args[2]); break;
case 4: return sprintf((string)$msg, $args[0], $args[1], $args[2], $args[3]); break;
case 5: return sprintf((string)$msg, $args[0], $args[1], $args[2], $args[3], $args[4]); break;
default:
array_unshift($msg, $args);
return call_user_func_array('sprintf', $args);
break;
}
}
}
// Mettre ce contenu dans un fichier .ini
$ini = <<< INI
; French
[fr_FR]
welcome = Bienvenue %s
goodbye = Au revoir
; English GB
[en_GB]
welcome = Welcome %s
goodbye = Goodbye
; English US
[en_US]
welcome = Welcome %s
goodbye = See ya
INI;
// Utiliser parse_ini_file pour parser un fichier
// (parse_ini_string n'est disponible qu'avec PHP > 5.3)
$langs = parse_ini_string($ini, true);
// Mettre ici la langue désirée
// (cette langue doit correspondre à une section du fichier ini)
$trans = new Translation($langs, 'fr_FR');
// Charger un index de traduction avec formattage
$user = "Peter";
echo $trans->format('welcome', $user);
// Charger un index de traduction sans formattage
echo $trans->goodbye; |
Partager