在Symfony 3中复用字符串

时间:2017-07-04 17:34:08

标签: symfony bundle translation pluralize

Symfony 3中是否有任何复制字符串的方法?例如:我有"对象"我想得到" Objects"。

1 个答案:

答案 0 :(得分:0)

多元化是一个非常复杂的主题,Symfony将其作为Translation Component的一部分:

  

消息多元化是一个棘手的话题,因为规则可能非常复杂。

因此,您基本上需要激活系统的翻译,并使用翻译服务的transChoice()方法或树枝模板中的“transchoice”标记/过滤器翻译所需的字符串。

  

要处理此问题,请在模板中使用transChoice()方法或transchoice标记/过滤器。

使用翻译服务

// the %count% placeholder is assigned to the second argument...
$translator->transChoice(
    'There is one apple|There are %count% apples',
    10
);


// ...but you can define more placeholders if needed
$translator->transChoice(
    'Hurry up %name%! There is one apple left.|There are %count% apples left.',
    10,
    // no need to include %count% here; Symfony does that for you
    array('%name%' => $user->getName())
);

树枝标签

{% trans %}Hello %name%{% endtrans %}

{% transchoice count %}
    {0} There are no apples|{1} There is one apple|]1,Inf[ There are %count% apples
{% endtranschoice %}

<强>更新

如果你事先不知道字符串,你可以使用内部Inflector Component,但要注意免责声明以及这只适用于英文字符串的事实:

  

此组件目前标记为内部。不要在自己的代码中使用它。可能会在Symfony的下一个次要版本中引入重大更改,或者甚至可以完全删除组件本身。

另一种方法是创建自己的变形器类,例如something like this并从中创建服务。