哪些是在Laravel 5.x中为trans()组织本地化文件的好策略?

时间:2015-08-03 10:56:18

标签: php laravel laravel-5 translation laravel-localization

  

这是关于方法和建议实践的问题。我知道它不是严格依赖于框架,甚至不是PHP,答案可能是"它取决于你"。但我关注的是最佳实践和方法,因为通常存在针对特定环境的最佳方法。

我想知道 Laravel 5.1的trans()功能键命名的最佳做法是什么?

考虑到内置的Laravel翻译存储在一个数组中,我关心的是哪个雇佣组织允许我实现以下目标:

一致性:因此,我最大限度地减少了为相同含义使用不同单词的可能性,或创建了许多不同的键,这些键最终具有相同的翻译(如常用词)。

可重用性:因此,我尽量减少整体翻译文件的大小,尽可能少地翻译,并保持灵活性。

可读性:即使在缺乏翻译价值的情况下,翻译人员也可以识别密钥的用途。

组织:因此,开发人员可以轻松记住完整的密钥路径,并最大限度地减少每次检查转换文件。

举一个例子,假设我想为管理配置文件命名用户模型更新的成功警报。可能的方法是:

trans('manager.user.update.alert.sucess')

trans('alerts.success.manager.user.update')

trans('manager.user.alert.update.success')

trans('alert.the_user_was_updated_successfully')

更新

到2016年11月,它看起来像Laravel 5.4 is introducing a JSON based translation mechanism,可能会简化翻译文件。仍然,关心智能文件结构和组织良好的文本是一个优势。

1 个答案:

答案 0 :(得分:1)

我的建议是在Laravel中使用参数化翻译选项。

我建议有这样的结构:

对于通用且可重复使用的内容:

trans('messages.alerts.update.success', ['item' => 'User']);   // results in: 'User has successfully been updated'
trans('messages.alerts.update.success.default');               // results in: 'Updated was successfull.'

对于严格连接到特定区域/问题的内容...(在这种情况下是经理):

trans('manager.alerts.update.user.success');   // results in: 'User has successfully been updated'

trans('manager.alerts.update.success', ['item' => 'User']);   // results in: 'User has successfully been updated'
trans('manager.alerts.update.success.default');               // results in: 'Updated was successfull.'

我们的想法是,对于经理特定的某些内容,例如更新成功的消息可能与其他更新成功的消息不同,您应该从特定的内容开始:manager.alerts...。 在一般情况下(可以在多个用例中使用相同的消息)您应该从像messages.alerts.update...这样的通用开头。

我认为应该避免使用trans('alert.the_user_was_updated_successfully')之类的命名,因为当您想要更改消息时可能会遇到大问题。密钥仍将反映旧值,而值将是新值。

关于你的目标:

一致性可重用性:将复制一定数量的内容。这无法避免。然而,通过构造内容并且通过具有具有共同单词和短语的文件,可以最小化该问题。 commons.words commons.phrases或2个文件(单词和短语),包含几个类别。示例:commons.time.day , commons.hello_world ...

可读性:这将是一个问题,除非您为翻译者提供一个已经包含其所有值的文件(以他/她可以翻译的默认语言或起始语言)。我真的不明白为什么你不会有初步的翻译/内容。

组织:您必须尝试和开发人员一样思考。如果你试图找到具体的东西,你会发现并尝试在该特定主题下找到某些东西(在这种情况下为manager.alerts....) 但如果您正在搜索更通用的内容,则更有可能搜索通用内容(在这种情况下为messages.alerts....

我遇到了类似的问题并发布了question 关于它。 不幸的是,对这个问题也没有多大兴趣。