简体   繁体   English

如何将 Poedit 与 smarty 模板一起使用?

[英]How to use Poedit with smarty templates?

I'm using PoEdit on smarty templates (phtml and tpl files) with the following Poedit configuration for PHP parser :我在 smarty 模板(phtml 和 tpl 文件)上使用 PoEdit,并为 PHP 解析器使用以下 Poedit 配置:

Extensions:扩展:

*.php;*.phtml;*.tpl

Parser command :解析器命令:

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

If i'm using gettext inside PHP tags <?php _('test'); ?>如果我在 PHP 标签中使用 gettext <?php _('test'); ?> <?php _('test'); ?> Poedit detect that translation as expected. <?php _('test'); ?> Poedit 按预期检测该翻译。 But i'm using Smarty {_('test')} for displaying the translation, Poedit don't detect it.但是我使用 Smarty {_('test')}来显示翻译,Poedit 没有检测到它。

Is there a way to make Smarty detect { and } characters as PHP tags ?有没有办法让 Smarty 将 { 和 } 字符检测为 PHP 标签?

As far as I know it's not possible to do that.据我所知,这是不可能的。 You can change Smarty delimiters but you cannot force Smarty to treat default Smarty delimiters as PHP code.您可以更改 Smarty 分隔符,但不能强制 Smarty 将默认 Smarty 分隔符视为 PHP 代码。

The solution I come to is to use Smarty compiled files in the templates_c folder as a source for PoEdit.我来的解决方案是使用模板_c文件夹中的Smarty编译文件作为PoEdit的源。 I just made this little script in order to compile all my views before updating Po files :我只是制作了这个小脚本,以便在更新 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>');

Recently I got to work with Yii used with Smarty and gettext.最近我开始使用与 Smarty 和 gettext 一起使用的 Yii。 but poedit not support the syntax of smarty.但 poedit 不支持 smarty 的语法。

https://github.com/Garefild/PoeditSmarty https://github.com/Garefild/PoeditSmarty

And here comes the use of PoeditSmarty allowed Poedit recognize the syntax of Smarty.而这里来了使用 PoeditSmarty 允许 Poedit 识别 Smarty 的语法。

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

Very simple to use, PoeditSmarty creates a "pot" file which Poedit know to read.使用起来非常简单,PoeditSmarty 创建了一个 Poedit 知道可以读取的“pot”文件。

For example, I have a file "Header.tpl"例如,我有一个文件“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> 

I'll run the PoeditSmarty via cmd我将通过 cmd 运行 PoeditSmarty

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

The result of pot file pot文件的结果

    # Garefild2@gmail.com.
    # Garefild <Garefild2@gmail.com>, 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 <Garefild2@gmail.com>\n"
    "Language-Team: LANGUAGE <Garefild2@gmail.com>\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 ""

via Poedit通过 Poedit

enter image description here在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM