Как использовать Poedit с умными шаблонами?

Я использую PoEdit для умных шаблонов (файлы phtml и tpl) со следующей конфигурацией Poedit для парсера PHP:

Расширения:

*.php;*.phtml;*.tpl

Команда парсера:

xgettext --language=PHP --force-po -o %o %C %K %F

Если я использую gettext внутри тегов PHP, <?php _('test'); ?> Poedit обнаруживает этот перевод, как и ожидалось. Но я использую Smarty {_('test')} для отображения перевода, Poedit его не обнаруживает.

Есть ли способ заставить Smarty обнаруживать символы {и} как теги PHP?


person vard    schedule 26.08.2014    source источник


Ответы (3)


Недавно мне пришлось поработать с Yii, используемым со Smarty и gettext. но поедить не поддерживает синтаксис смартов.

https://github.com/Garefild/PoeditSmarty

И вот использование PoeditSmarty позволяет Poedit распознавать синтаксис Smarty.

{t}Text to be localized{/t}
{"Text to be localized"|_} 
{_("Text to be localized")}

PoeditSmarty очень прост в использовании и создает "горшок", который Poedit умеет читать.

Например, у меня есть файл Header.tpl.

        <form class="login" method="post" id="login">
        <h2>{__('login')}</h2>
        <div class="wrap">
            <input type="text" autofocus="" placeholder="{__('Username')}" class="form-control" name="username">
            <br>
            <input type="password" placeholder="{__('Password')}" class="form-control" name="password">
            <div class="captcha">
                <img alt="" src="" id="codeImage">
                <label class="checkbox">
                    <span class="pull-right">
                        <a href="#" id="code" class="forgot">{__('Get a new code')}</a>
                    </span>
                </label>
                <input type="text" placeholder="{__('verify Code')}" class="form-control" name="verifyCode">
            </div>
            <button type="submit" class="btn login-btn" name="submitLogin">
                <i class="fa fa-lock"></i>
                {__('Log me in')}
            </button>
            <hr>
            <div class="password">
                <p>{__('Do you not remember your password')} ?</p>
                <a data-toggle="modal" class="forgot">{__('Password Recovery')}</a>
            </div>
            <hr>
            <h3 class="logo">{__('siteName')}</h3>
        </div>
    </form> 

Запущу PoeditSmarty через cmd

java -jar "C:\Program Files\Poedit\GettextTools\bin\PoeditSmarty.jar" -o C:\Users\Mike\Desktop\xxx\tempPot.pot -c UTF-8 -k __ -f header.tpl

Результат пот-файла

    # [email protected].
    # Garefild <[email protected]>, 2015-2020.
    #

    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "Report-Msgid-Bugs-To: \n"
    "POT-Creation-Date: 2015-12-29 16:47\n"
    "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    "Last-Translator: FULL NAME <[email protected]>\n"
    "Language-Team: LANGUAGE <[email protected]>\n"
    "Language: \n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=CHARSET\n"
    "Content-Transfer-Encoding: 8bit\n"

    #: header.tpl:48
    msgid "Password Recovery"
    msgstr ""

    #: header.tpl:36
    msgid "Get a new code"
    msgstr ""

    #: header.tpl:29
    msgid "Username"
    msgstr ""

    #: header.tpl:39
    msgid "verify Code"
    msgstr ""

    #: header.tpl:51
    msgid "siteName"
    msgstr ""

    #: header.tpl:27
    msgid "login"
    msgstr ""

    #: header.tpl:47
    msgid "Do you not remember your password"
    msgstr ""

    #: header.tpl:31
    msgid "Password"
    msgstr ""

    #: header.tpl:43
    msgid "Log me in"
    msgstr ""

через Poedit

введите здесь описание изображения

person Mike    schedule 28.12.2015
comment
При чем здесь PHP? - person Nathan Tuggy; 28.12.2015
comment
Он ничего не делает на уровне ph, он позволяет Poedit знать синтаксис Smarty. А так возможность работы в связке со смартом php и Poedit. - person Mike; 29.12.2015
comment
Это действительно правильный ответ, спасибо, что поделились. Я не понимаю, почему он был отклонен ... - person vard; 26.01.2016
comment
Рад, что смог помочь :) Вы им пользовались? Хорошо ли работает? И версия java || EXE? - person Mike; 29.01.2016

Насколько я знаю, это невозможно. Вы можете изменить разделители Smarty, но вы не можете заставить Smarty обрабатывать разделители Smarty по умолчанию как код PHP.

person Marcin Nabiałek    schedule 26.08.2014

Решение, к которому я пришел, - использовать скомпилированные файлы Smarty в папке templates_c в качестве источника для PoEdit. Я просто сделал этот небольшой скрипт, чтобы скомпилировать все мои представления перед обновлением файлов Po:

// ... smarty config here ...

$i = 0;
if ($handle = opendir('./views/')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && is_file('./views/'.$file) {
            $smarty->fetch('./views/'.$file);
            $i++;
        }
    }
}
die('<h2>' . $i . ' templates compiled</h2>');
person vard    schedule 04.09.2014
comment
Или вы можете использовать $smarty->compileAllTemplates() - person Omer Sabic; 08.02.2016