Translator

Mautic 利用一个装饰后的 Symfony Translator 服务来进行翻译。

访问 Translating Mautic 以获取有关如何翻译核心组件的信息。插件必须包含自己的翻译

翻译文件和目录结构

对于核心模块和插件,翻译是 INI 文件,它们按照以下目录结构组织:

Translations/
{locale}/

{domain}.ini

Note

所有核心模块和插件都必须包含针对美国英语 (en_US) 的翻译。

Mautic 通过 \Mautic\CoreBundle\Loader\TranslationLoader 加载翻译,它按照以下顺序加载翻译。请注意,最后加载的键的值是 Mautic 使用的值。

  1. {bundle}/Translations/{locale}/

  2. themes/{default_theme}/translations/

  3. translations/{locale}/

  4. translations/overrides/{locale}/

Note

加载器会找到并加载这些目录及其子目录中的所有 INI 文件。

翻译域

翻译域将翻译组织到文件中。以下是由 Mautic 定义的,但插件可以定义和使用自己的域,方法是将域传递给 trans 方法。

Domain

Description

messages

默认的翻译域。

flashes

默认的翻译域,用于 \Mautic\CoreBundle\Service\FlashBag 服务。

validators

默认的翻译域,用于在 Symfony 表单字段类型 中的验证约束消息。

翻译字符串

翻译是 INI 格式中的键/值对。虽然没有严格的规则,但通常 Mautic 使用句点 (.) 来分隔翻译键中的域,并使用下划线 (_) 来分隔单词。您还可以使用占位符,供 Translator 服务替换为由调用代码提供的值。占位符通常用百分号 (%) 括起来。

helloworld.greeting="Welcome %name%!"
helloworld.form.world_select="Select the world you want to visit."
helloworld.form.world_select.tooltip="Note that most are visit at your own risk!"
helloworld.moons.number_of_moons="{0}%world% has no moons|{1}%world% has one moon|]1,Inf[ %world% has %count% moons"

使用 Translator 服务

插件可以通过将 translator 作为 服务依赖项 传递来访问该服务。在服务的构造函数中,使用 Symfony\Component\Translation\TranslatorInterface 对参数进行类型提示。

在 PHP 模板中,使用 $view['translator'] 访问 Translator 服务。

class Mautic\CoreBundle\Translation\Translator
Mautic\CoreBundle\Translation\Translator::trans(string $id[, array $parameters = [], ?string $domain = null, ?string $locale = null])

返回给定键的翻译。

param array $parameters:

参数,以键/值对的形式填充翻译中的占位符。请注意,Symfony 已经弃用 transChoice() 方法,建议使用此方法并定义 $parameters 中的 %count% 键。例如,echo $translator->trans(‘helloworld.number_of_moons’, [‘%count%’ => 1, ‘%world% => ‘Earth’]);,以及对应的翻译字符串:”helloworld.number_of_moons=”{0}%world% has no moons|{1}%world% has one moon|]1,Inf[ %world% has %count% moons”

param string|null $domain:

用于查找翻译键的特定域。如果为 NULL,则默认为 messages

param string|null $locale:

用于查找翻译键的特定区域设置。默认为系统或用户配置的区域设置。

returns:

如果找到该键,则返回翻译后的字符串。否则,返回一个空字符串。

returntype:

string

Mautic\CoreBundle\Translation\Translator::transConditional(string $preferred, string $alternative[, array $parameters = [], ?string $domain = null, ?string $locale = null])

如果首选键存在,则翻译该键;否则,翻译备用键。

Parameters:
  • $preferred (string) – 首选的翻译键。

  • $alternative (string) – 如果首选键不存在,则使用的备用翻译键。

  • $parameters (array) – 参数,以键/值对的形式填充翻译中的占位符。

  • $domain (string|null) – 用于查找翻译键的特定域。如果为 NULL,则默认为 messages

  • $locale (string|null) – 用于查找翻译键的特定区域设置。默认为系统或用户配置的区域设置。

Returns:

如果找到该键,则返回翻译后的字符串。否则,返回一个空字符串。

Return type:

string

Mautic\CoreBundle\Translation\Translator::hasId(string $id[, ?string $domain = null, ?string $local = null])

检查是否存在某个翻译键。

Parameters:
  • $id (string) – 翻译键。例如,mautic.core.empty

  • $domain (string|null) – 用于搜索的特定域。如果为 NULL,则默认为 messages

  • $locale (string|null) – 用于搜索的特定区域设置。默认为系统或用户配置的区域设置。

Returns:

如果找到该翻译键,则返回 TRUE;否则,返回 FALSE

Return type:

boolean