Система перевода Kostache и Kohana - PullRequest
1 голос
/ 09 марта 2012

Как использовать kohana i18n __('translation') в шаблонах kostache?

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Создайте собственный метод расширения для Kostache и используйте его вот так.

Я использую что-то подобное в modules / kostache / classes / kohana / kostache.php файле:

public function i18n(){
    return array('I18n', 'get');
}

Возможно, вы могли бы сделать это немного лучше с PHP 5.3, но это работает на всех версиях PHP

И в шаблонах вы будете делать что-то вроде:

{{#i18n}}Some translatable text{{/i18n}}

Хорошая особенность усов в том, что вы можете использовать их практически на любом языке (включая js, поэтому вы можете использовать одинаковые шаблоны для клиентской и серверной части).Расширение с помощью пользовательских методов добавляет немного сложности, поэтому вам придется реализовывать их на всех языках, где вы используете усы.К счастью, сделать это в js довольно просто, поскольку все является объектом.Например, что-то вроде этого будет работать:

var i18n= function(s){
    var someText = ""; // GET THE TRANSLATE TEXT (HOWEVER YOU LIKE)
    return someText;
}

Теперь вы можете использовать свой метод расширения как на клиенте, так и на сервере.
Хорошо, не правда ли:)

0 голосов
/ 29 мая 2013

Принятое решение не сработало для меня (возможно, некоторые проблемы совместимости версий), поэтому я пишу свое решение здесь, может, оно кому-нибудь поможет.

Моя проблема заключалась в том, что усы проходили мимоMustache_LambdaHelper объект как второй параметр, где I18n :: get () ожидал язык и выдавал исключение.

Решение:

public function i18n() {
    return function($value, $helper) {
        return I18n::get($value);
    };
}

Вы также можете использовать метод массива,если анонимные функции представляют собой проблему, но вам необходимо создать дополнительный класс или функцию для обработки этого, например, так:

class i18nFilter {
    public function get($value, $helper) {
        return I18n::get($value);
    }
}

В этом случае функция станет:

public function i18n() {
    return array('I18nFilter', 'get');
}

Кроме того, вам не нужно изменять класс Kohana_Kostache, чтобы заставить это работать.Вы также можете создать функцию в классе представления.

...