翻译Symfony 4 /树枝

时间:2019-03-02 21:16:26

标签: symfony symfony4

我按照以下说明翻译我的字符串:

{% 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加载文本。

谢谢

亲切的问候。

3 个答案:

答案 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

当然,您认为您应该首先验证语言环境,因为它来自用户。