2012-02-22 2 views
2

Je voudrais utiliser des paramètres dans une chaîne passée à MessageFormater, comme cellearguments nommés pour INTL MessageFormatter avec PHP

$fmt = new MessageFormatter("en_US", "My name id {my_name}"); 
$fmt->format(array('my_name' => 'John')); 

Quand j'exécuter ce code, j'obtiens le message d'erreur:

$fmt->getErrorMessage() returns 

Nombre formatage a échoué: U_ILLEGAL_ARGUMENT_ERROR

Wh ereas

$fmt = new MessageFormatter("en_US", "My name id {0}"); 
$fmt->format(array(0 => 'John')); 

fonctionne bien.

rapport d'un site ICU-projet nommé arguments sont pris en charge depuis ICU 3.8 (Seen here), et j'utiliser le 4.2.1

Où est la licorne? PHP ne supporte pas les arguments nommés pour MessageFormatter? Peut-être qu'il existe une alternative?

Répondre

0

Oui, il semble que oui. Que voulez vous entendre?

Mise à jour: Après l'OP modifié sa question

echo vsprintf('My name id %s', array('John')); 

Voir sprintf()

Bien sûr, il ne les choses en fonction locales.

+0

Bonjour, J'ai modifié mon sujet pour demander une alternative. – Tristan

+0

Je sais de cette façon. Mes textes sont envoyés aussi des traducteurs. Je veux éviter% d,% s. Il est plus simple de traduire "Mon nom est {mon_nom}" que "Mon nom est% s". C'est un mauvais exemple car il est facile de comprendre le sens de cette phrase, mais parfois ce n'est pas le cas. – Tristan

Questions connexes