5

这是一个关于方法和建议实践的问题。我知道它并没有严格地附加到框架甚至 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 似乎正在引入一种基于 JSON 的翻译机制,可以简化翻译文件。尽管如此,关心智能文件结构和组织良好的文本是一个加分项。

4

1 回答 1

3

我的建议是使用 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')在我看来,应该避免命名为like ,因为当你想更改消息时,你可能会遇到很大的问题。键将仍然反映旧值,而值将是新值。

关于你的目标:

一致性可重用性:一定量的内容会被复制。这是无法避免的。然而,这个问题可以通过结构化内容和拥有一个包含常见单词和短语的文件来最小化,例如。commons.words commons.phrases 或 2 个包含几个类别的文件(单词和短语)。例子:commons.time.day , commons.hello_world ...

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

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

我有一个类似的问题,并发布了一个关于它的问题 。不幸的是,人们对该主题也没有太大兴趣。

于 2015-11-11T12:00:56.410 回答