php - Symfony2 中翻译的高级定制

标签 php symfony translation

我有一个 Symfony2 项目,我正在使用 Translation 组件来翻译文本。我在 yml 文件中有所有的翻译,就像这样

translation-identifier: Translated text here

Twig 翻译文本看起来像这样

'translation-identifier'|trans({}, 'domain')

问题是,在某些情况下,我希望同一翻译有两个不同的文本(不是为了复数)。这是我希望它的工作方式:

  1. yml 文件中为需要不同文本的翻译定义两个文本。每个都有自己独特的后缀

    translation-identifier-suffix1
    
    translation-identifier-suffix2
    
  2. 定义一个全局规则来定义应该选择哪个后缀。下面的伪代码:

     public function getSuffix() {
       return rand(0, 10) < 5 ? '-suffix1' : '-suffix2';
     }
    
  3. Twig(和 PHP)看起来是一样的——我仍然会只指定没有后缀的标识符。翻译器然后将后缀附加到标识符并尝试找到匹配项。如果没有匹配项,它将尝试再次找到没有后缀的匹配项。

最佳答案

据我所知,翻译器组件不支持它。

但如果您想要相同类型的行为,您可以通过覆盖翻译服务来实现。

1) 覆盖服务

# app/config/config.yml
parameters:
    translator.class:      Acme\HelloBundle\Translation\Translator

首先,您可以通过在 app/config/config.yml 中设置将保存服务类名的参数设置为您自己的类。 仅供引用:https://github.com/symfony/FrameworkBundle/blob/master/Resources/config/translation.xml

2) 扩展提供的翻译器类symfony framework bundle。 仅供引用:https://github.com/symfony/FrameworkBundle/blob/master/Translation/Translator.php

3) 覆盖由翻译器组件提供的trans函数。 https://github.com/symfony/Translation/blob/master/Translator.php

希望这对您有所帮助!

关于php - Symfony2 中翻译的高级定制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15550002/

相关文章:

symfony - 我应该在 bool 学说字段上添加断言验证吗?

"lookthrough"相机的 OpenGL(简单)场景和对象导航基础知识

c++ - 在 qt C++ 中硬编码俄语翻译

php - 使用PHP在MVC View 中显示自定义错误消息

php - 如何从类型 = 1 和搜索词的列中进行选择?

php - 异常: The merge filter only works with arrays or hashes in "HerzultForumBundle:Topic:new.html.twig"

php - 如何使用 Doctrine QueryBuilder 选择所有列?

symfony - 如何从 Symfony4 中的数据库加载翻译?

PHP 不回显 + 和 - 符号前的文本

php - 使用 Imagick 在 JPG 上叠加 PNG