首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >翻译Symfony 4/ twig

翻译Symfony 4/ twig
EN

Stack Overflow用户
提问于 2019-03-03 05:16:26
回答 2查看 367关注 0票数 0

我使用以下指令来翻译我的字符串:

代码语言:javascript
复制
{% trans into lang %}hi{% endtrans %}

我的疑问是,有没有一种方法可以翻译块中的字符串?如下所示:

代码语言:javascript
复制
{{ 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加载文本。

谢谢

致以亲切的问候。

EN

回答 2

Stack Overflow用户

发布于 2019-03-06 01:00:16

你可以试试这样的东西。

我创建了一个侦听每个请求头中Accept-language值的LocaleSubscriber onkernelRequest,并自动更改区域设置。

这样,您就可以依靠twig中的|trans将其转换为正确的语言环境

代码如下:

代码语言:javascript
复制
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]],
    ];
}
} 
票数 0
EN

Stack Overflow用户

发布于 2020-02-21 23:04:58

正如@SilvioQ建议您的那样,您可以使用trans过滤器,但要使用包含langlocale参数

代码语言:javascript
复制
{{ 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''fr'或其他语言环境,由用户管理)或包含该字符串的变量。

请在此处查看example

当然,根据你的说法,你应该首先验证区域设置,因为它来自用户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54963076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档