Estoy tratando de usar Moustache junto con i18n (php, en Wordpress). Tengo el __ funcionalidad básica de trabajo muy bien, algo como estobigote i18n con los parámetros
class my_i18n {
public function __trans($string) {
return __($string, 'theme-name');
}
}
class mytache {
public function __()
{
return array('my_i18n', '__trans');
}
}
A continuación, a la salida de una plantilla con una cadena i18n, que pueda hacer simplemente esto
$context = new mytache;
$template = "<div>{{#__}}String to translate{{/__}}</div>";
$m = new Mustache;
echo $m->render($template, $context);
Hasta ahora todo está bien. Sin embargo, quiero poder traducir cadenas con parámetros. es decir, el equivalente de sprint_f(__('Account Balance: %s'), $balance);
.
Parece que si hago algo como {{#__}}Account Balance: {{balance}}{{/__}}
no funciona. Supongo que porque la etiqueta interna se convierte primero y, por lo tanto, no se puede encontrar la traducción para la frase.
¿Alguna idea de cómo lograr esto limpiamente con Moustache?
ACTUALIZACIÓN: aquí está el fragmento de resultado final (con la ayuda masiva de bobthecow):
class I18nMapper {
public static function translate($str) {
$matches = array();
// searching for all {{tags}} in the string
if (preg_match_all('/{{\s*.*?\s*}}/',$str, &$matches)) {
// first we remove ALL tags and replace with %s and retrieve the translated version
$result = __(preg_replace('/{{\s*.*?\s*}}/','%s', $str), 'theme-name');
// then replace %s back to {{tag}} with the matches
return vsprintf($result, $matches[0]);
}
else
return __($str, 'theme-name');
}
}
class mytache {
public function __()
{
return array('I18nMapper', 'trans');
}
}
"no funciona">. < –
¿Qué palabra clave usó para extraer las cadenas de la plantilla de bigote? –