最佳实践翻译CakePHP 3.x __功能

时间:2016-07-03 12:11:34

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

使用__('')功能非常好。但我想知道如何用链接翻译整个段落并在其中突出显示。例如:

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

来自链接的公寓(我知道我应该使用Cake HTML Helper,如何使用它?对于不同语言的翻译,它很难翻译这些块,因为翻译有时不知道上下文。

这是我要找的吗? http://book.cakephp.org/3.0/en/orm/behaviors/translate.html我正在开发视图 - 所以我不是在添加等内容的情况下向DB写内容。也许这是我的第一个问题?

1 个答案:

答案 0 :(得分:3)

Context是__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值,翻译人员应该没有问题来弄清楚他们正在翻译什么,以及消息是如何相关的。

另见