Я пытаюсь использовать Усы вместе с i18n (php, в Wordpress). У меня есть базовые функции __ работает хорошо, что-то вроде этогоусы i18n с параметрами
class my_i18n {
public function __trans($string) {
return __($string, 'theme-name');
}
}
class mytache {
public function __()
{
return array('my_i18n', '__trans');
}
}
Затем вывести шаблон со строкой i18n, я могу просто сделать это
$context = new mytache;
$template = "<div>{{#__}}String to translate{{/__}}</div>";
$m = new Mustache;
echo $m->render($template, $context);
До сих пор все нормально. Тем не менее, я хочу иметь возможность переводить строки с параметрами. т.е. эквивалент sprint_f(__('Account Balance: %s'), $balance);
.
Кажется, что если что-то вроде {{#__}}Account Balance: {{balance}}{{/__}}
не работает. Я предполагаю, потому что внутренний тег сначала преобразуется, поэтому перевод не может быть найден для этой фразы.
Любые идеи, как достичь этого с Усы?
UPDATE: вот конечный результат фрагмент кода (с массивным помощью 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');
}
}
«это не работает». < –
Какое ключевое слово вы использовали для извлечения строк из шаблона усов? –