我将语言环境设置为一种语言。让我们说德语" 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')获取字符串,而不是翻译后的内容。这甚至可以翻译,还是我应该放弃它?
答案 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。