问题描述
在 Laravel 中分离语言文件的最佳逻辑是什么?
我将要从两个选择中做出决定。
首先收集buttons.php中所有的应用按钮本地化字符串,links.php中的链接本地化字符串,placeholders.php中的占位符本地化字符串。
像这样:
/resources
/lang
/en
buttons.php
links.php
placeholders.php
/es
buttons.php
links.php
placeholders.php
其次是在单独的文件中为每个视图收集本地化字符串。
像这样:
/resources
/lang
/en
login_page.php
sign_up.php
home.php
/es
login_page.php
sign_up.php
home.php
在第一选择中,我最终会得到较少数量的语言文件,因为我将有大约 10 个文件。
在第二个选择中,我最终会得到大量语言文件,因为我将为项目中的每个视图都有一个 lang 文件。
哪个选择会更好?
解决方法
根据我的经验,为所有 ui 设置一个翻译文件效果最好,按字母顺序排列列表,这样您就不会有多个文件具有相同的翻译(例如:提交,可能会在多个屏幕中使用) )
,所以,问题是:“哪种方法更好地分离翻译/本地化文件:按视图名称还是按元素名称?”
在我看来,按视图名称分隔是没有意义的。如果我创建 3 个视图(view_a、view_b、view_c),每个视图都有一个提交按钮,那么我 en
(英文)的本地化将不得不定义“提交”翻译 3 次。例如:
/resources
/lang
/en
view_a.php // contains ["submit"=>"Submit form"]
view_b.php // contains ["submit"=>"Submit form"]
view_c.php // contains ["submit"=>"Submit form"]
这不是很干
我们通过对比一下github上的一些开源laravel项目是如何分离本地化文件的:
- https://github.com/Attendize/Attendize/tree/develop/resources/lang/en
- https://github.com/monicahq/monica/tree/master/resources/lang/en
- https://github.com/CachetHQ/Cachet/tree/2.4/resources/lang/en
- https://github.com/CodepadME/laravel-tricks/tree/master/app/lang/en
在Attendize/Attendize 中,每个模型都有本地化文件。他们还对常见/可重用元素进行了一些本地化,例如 basic
例如这个文件:https://github.com/Attendize/Attendize/blob/develop/resources/lang/en/Order.php
定义谈论“订单”模型的事物的翻译。因此,如果我显示的消息表明没有最近的订单,我将调用 en.Order.no_recent_orders
转换为 Looks like there are no recent orders.
;无论我从哪里调用它(从任何视图或任何控制器)