我使用以下指令来翻译我的字符串:
{% 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加载文本。
谢谢
致以亲切的问候。
发布于 2019-03-06 01:00:16
你可以试试这样的东西。
我创建了一个侦听每个请求头中Accept-language值的LocaleSubscriber onkernelRequest,并自动更改区域设置。
这样,您就可以依靠twig中的|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]],
];
}
} 发布于 2020-02-21 23:04:58
正如@SilvioQ建议您的那样,您可以使用trans过滤器,但要使用包含lang的locale参数
{{ 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。
当然,根据你的说法,你应该首先验证区域设置,因为它来自用户。
https://stackoverflow.com/questions/54963076
复制相似问题