Translator
Mautic 利用一个装饰后的 Symfony Translator 服务来进行翻译。
访问 Translating Mautic 以获取有关如何翻译核心组件的信息。插件必须包含自己的翻译。
翻译文件和目录结构
对于核心模块和插件,翻译是 INI 文件,它们按照以下目录结构组织:
- Translations/
- {locale}/
{domain}.ini
Note
所有核心模块和插件都必须包含针对美国英语 (en_US) 的翻译。
Mautic 通过 \Mautic\CoreBundle\Loader\TranslationLoader 加载翻译,它按照以下顺序加载翻译。请注意,最后加载的键的值是 Mautic 使用的值。
{bundle}/Translations/{locale}/themes/{default_theme}/translations/translations/{locale}/translations/overrides/{locale}/
Note
加载器会找到并加载这些目录及其子目录中的所有 INI 文件。
翻译域
翻译域将翻译组织到文件中。以下是由 Mautic 定义的,但插件可以定义和使用自己的域,方法是将域传递给 trans 方法。
Domain |
Description |
|---|---|
|
默认的翻译域。 |
|
默认的翻译域,用于 |
|
默认的翻译域,用于在 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