Tôi đang cố gắng sử dụng Mustache cùng với i18n (php, trong Wordpress). Tôi đã có các chức năng cơ bản __ làm việc độc đáo, một cái gì đó như thế nàymustache i18n với tham số
class my_i18n {
public function __trans($string) {
return __($string, 'theme-name');
}
}
class mytache {
public function __()
{
return array('my_i18n', '__trans');
}
}
Sau đó, để ra một mẫu với một chuỗi i18n, tôi có thể chỉ đơn giản là thực hiện điều này
$context = new mytache;
$template = "<div>{{#__}}String to translate{{/__}}</div>";
$m = new Mustache;
echo $m->render($template, $context);
Cho đến nay mọi thứ đều tốt. Tuy nhiên, tôi muốn có thể dịch các chuỗi với các tham số. tức là tương đương với sprint_f(__('Account Balance: %s'), $balance);
.
Dường như nếu tôi làm điều gì đó như {{#__}}Account Balance: {{balance}}{{/__}}
thì nó không hoạt động. Tôi đoán vì thẻ bên trong được chuyển đổi đầu tiên và do đó không thể tìm thấy bản dịch cho cụm từ.
Bất kỳ ý tưởng nào để đạt được điều này một cách rõ ràng với Mustache?
UPDATE: đây là đoạn kết quả cuối cùng (với sự giúp đỡ lớn từ 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');
}
}
"nó không hoạt động">. < –
Bạn đã sử dụng từ khóa nào để trích xuất các chuỗi từ mẫu ria mép? –