Symfony强制翻译成不同语言的翻译

时间:2017-06-29 05:32:53

标签: symfony twig translation

我将语言环境设置为一种语言。让我们说德语" de"我希望将整篇文章的一部分翻译成不同的语言(例如,这发生在100年前 - >这发生在100 Jahre )。为此我尝试以下代码:

//this returns 'site.dates.years'
{% set yearsText = yearsCount|displayTimeDivisions() %} 

( {{ yearsCount }} {% trans with {'%content%': yearsText } from "messages" into "en" %}%content%{% endtrans %}

使用trans方法后,我从yearsText(' site.dates.years')获取字符串,而不是翻译后的内容。这甚至可以翻译,还是我应该放弃它?

2 个答案:

答案 0 :(得分:1)

这可以按预期工作,您尝试翻译的内容是%content%,而不是site.dates.years。试试这个:

//this returns 'site.dates.years'
{% set yearsText = yearsCount|displayTimeDivisions() %} 

( {{ yearsCount }} {% trans from "messages" into "en" %}{{ yearsText }}{% endtrans %}

修改 之前的建议并不像使用trans一样,只能使用简单的文本,而不能使用变量。

这对我有用:

{{ yearsText | trans({}, 'messages', 'en') }}

答案 1 :(得分:0)

编辑:清除缓存

有时Symfony有一个太强大的缓存机制。如果您首先使用区域设置,然后将控制器和树枝修改为多区域设置,并且还添加了新的消息文件,Symfony将加载所有新的控制器/树枝,但不知何故错过了新的消息文件。一个简单的缓存清除,只在您添加消息文件后立即执行(!),解决了这个问题。从那以后,每次更改翻译时都不需要清除缓存。

尝试这是最后的手段。如果这没有帮助,我建议仔细阅读文档(在这个答案的最后一行链接):

app/console cache:clear --env=dev

你可以尝试其中的一个或全部(!),不可能分辨出出了什么问题。

{{ yearsCount|trans }}
{{ 'site.dates.years'|trans }}

看看这些翻译。如果是第二个,那么你设置变量是错误的。不知何故。

如果没有,请在路线中传递_locale

defaults: { _controller: Bundle:Controller:action, _locale: de }

或将其作为路线参数:

path: /a/path/{_locale}/whatever
  defaults: { _controller: Bundle:Controller:action }
  requirements:
      _locale: en|de

打印区域设置以确保它在树枝中正确设置:

{{ app.request.locale }}
{{ app.request.getLocale() }}

如果语言环境打印得很好但翻译仍然不起作用,那是因为Symfony找不到标识符。转到翻译文件并检查它是否正确写入:

site:
  dates:
    years: Jahre

如果您在messages.de.yml中找到它,那么可能是文件的放置错误。加载程序搜索这些文件:

  

Symfony在以下默认位置查找消息文件(即翻译):

     
      
  • app / Resources / translations目录;
  •   
  • app / Resources / MyAppBundle / translations目录;
  •   
  • 任何包内的Resources / translations /目录。
  •   

如果摆弄这些文件不会产生结果,那么config.yml中的配置错误,或许多重叠错误(以上所有?)对您不利。

以下是有关翻译的所有痛苦/信息的来源,但您现在可能已记住每个段落:Symfony translations