我按照以下说明翻译我的字符串:
{% trans into lang %}hi{% endtrans %}
我的疑问是,是否有一种方法可以翻译块内的字符串?像这样:
{{ include('user/_form.html.twig', {'button_label': 'Update'}) }}
<button class="btn btn-primary submit-user"><i class="fa fa-edit"></i> {{ button_label|default('Save') }}</button>
我从外部Yaml加载文本。
谢谢
亲切的问候。
答案 0 :(得分:0)
您应该使用symfony语言环境和here之类的翻译处理来管理用户语言环境,然后像往常一样简单地在树枝中使用翻译。您还可以使用自己的用户语言变量在请求中进行设置。
答案 1 :(得分:0)
您可以尝试类似的方法。
我创建了一个 LocaleSubscriber ,在每个请求标头中侦听onkernelRequest的值为 Accept-language (接受语言),并自动更改区域设置。
这样,您可以依靠树枝中的|trans
来翻译为正确的语言环境
代码在这里:
class LocaleSubscriber implements EventSubscriberInterface
{
private $defaultLocale;
private $supportedLanguages;
public function __construct($defaultLocale = 'fr')
{
$this->defaultLocale = $defaultLocale;
$this->supportedLanguages = ['en', 'fr', 'es'];
}
public function onKernelRequest(GetResponseEvent $event): void
{
if (null !== $acceptLanguage = $event->getRequest()->headers->get('Accept-Language')) {
$locale = Locale::acceptFromHttp($acceptLanguage);
if (\strlen($locale) > 2) {
$locale = substr($locale, 0, 2);
}
if (\in_array($locale, $this->supportedLanguages, false)) {
$event->getRequest()->setLocale($locale);
} else {
$locale = $this->defaultLocale;
$event->getRequest()->setLocale($locale);
}
}
}
public static function getSubscribedEvents(): array
{
return [
// must be registered before (i.e. with a higher priority than) the default Locale listener
KernelEvents::REQUEST => [['onKernelRequest', 20]],
];
}
}
答案 2 :(得分:0)
正如@SilvioQ所建议的那样,您可以使用Name Score 0
0 A 19.0 Math
1 B 20.0 English
2 C 11.0 History
3 D 12.0 Science
过滤器,但带有trans
参数,其中包含locale
:
lang
...,其中{{ include('location/_form.html.twig', {'button_label': 'Zapisz'|trans([], null, lang)}) }}
<button class="btn btn-primary submit-user"><i class="fa fa-edit"></i> {{ button_label|default('Zapisz'|trans([], null, lang)) }}</button>
是字符串(看起来像lang
,'en'
或其他语言环境,由用户管理)或包含该字符串的变量。
在此处查看example。
当然,您认为您应该首先验证语言环境,因为它来自用户。