Symfony 4 翻译资源最佳实践

3
根据symfony文档,为了使翻译服务正常工作,你需要创建一个资源,并使用已知的有效扩展名来生成格式为domain.locale.extension的文件。Symfony代码会默认寻找'messages'域,如果你想更好地组织这些翻译内容,可以在函数trans()的第三个参数中指定新的域。 这里我有点困惑。我在某处(记不清在哪了)读到最好将翻译目录分成多个文件。
  • labels.en.xlf
  • labels.ro.xlf
  • options.en.xlf
  • options.ro.xlf
  • messages.en.xlf
  • messages.ro.xlf
我正在为每个目的创建一个文件以便进行组织,但问题在于...目前我只有两种语言,但我计划添加所有语言。此外,目前我只有3个域名,但我肯定会再添加更多。
这将导致大量的文件,但对于性能来说不是有点恶心吗?我的意思是,把它组织成多个文件可能是个更好的做法,但Symfony将需要加载所有这些文件,这肯定会影响性能。但如果我只保留“消息”域并在其中添加每个翻译,是否会更好?
另一件事是trans()函数的语法。像这样调用它会更好:
$translator->trans('translation.id');

比这更好:

$translator->trans('translation.id', array(), 'theNewDomain');

你对这个有什么想法?

1个回答

1
文件只会通过缓存预热一次加载,详见 var/cache/{env}/translations/。
然后每个语言环境只有一个目录。

因此,从性能的角度来看,多文件方法没有任何缺点...尽管每次想要翻译某些内容时我必须指定3个参数而不是一个,这真的让我很困扰。 - Petru Lebada
1
根据你使用翻译的位置不同,你可以定义翻译域。例如,如果你使用Twig模板引擎,你可以在整个模板中一次性定义翻译域 {% trans_default_domain 'whatever' %};在表单中,你可以在默认设置中设置它 'translation_domain' => 'whatever';在服务/控制器中,你可以使用一个包装器自动设置域... - Rufinus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接