【问题标题】:Best practice translate CakePHP 3.x __ Function最佳实践翻译 CakePHP 3.x __ 函数
【发布时间】:2016-11-05 07:21:55
【问题描述】:

使用 __('') 函数非常好。但我想知道如何翻译带有链接和突出显示的整个段落。例如:

<p><?= __('Bla bla text in german bla bla ')?> <a href="/user">Account</a> text bla bla <b>bla</b>.</p>

Appart from the link(我知道我应该使用 Cake HTML Helper,如何使用它?对于不同语言的翻译,围绕这些块进行翻译很糟糕,因为翻译器有时不知道上下文。

这就是我要找的吗? http://book.cakephp.org/3.0/en/orm/behaviors/translate.html 我正在视图中开发 - 所以我没有使用 add 等将内容写入数据库。也许这是我的第一个问题?

【问题讨论】:

    标签: html cakephp internationalization translation cakephp-3.x


    【解决方案1】:

    上下文是__x() 函数的用途,它采用任意上下文字符串作为第一个参数,在使用I18n shell 时将提取为msgctxt。这样您就可以向翻译人员提供有关他们正在翻译的内容的正确信息。

    对于 HTML,嗯,这取决于个人喜好。就我个人而言,如果它是复杂的 HTML,或者当我需要使用代码来生成它时,我通常会将其拆分。如果它只是非常基本的 HTML,或者可能需要在不同语言中以不同方式放置标签,那么我会将其保留在一条消息中。

    在您的示例中,我会按照以下方式做一些事情:

    <?php
    $link = $this->Html->link(
        __x('Paragraph XYZ link text', 'Account'),
        ['controller' => 'Users']
    );
    ?>
    <p><?= __x('Paragraph XYZ', 'Bla text in german {0} text bla <b>bla</b>.', $link)?></p>
    

    当提取翻译时,这最终会是这样的

    #: Template/Foo/bar.ctp:3
    msgctxt "Paragraph XYZ link text"
    msgid "Account"
    msgstr ""
    
    #: Template/Foo/bar.ctp:7
    msgctxt "Paragraph XYZ"
    msgid "Bla text in german {0} text bla bla <b>bla</b>."
    msgstr ""
    

    如果消息本身已经提供了文本上下文,并且具有补充它的 msgctxt 值,翻译人员应该可以轻松地确定他们正在翻译的内容以及消息之间的关系。

    另见

    【讨论】:

    • 谢谢!我最终会从 DB 进行翻译,但使用变量将帮助我覆盖那个时间。
    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 2016-05-10
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多