基于 JSON 的语言文件(Laravel 5.4 的新变化系列)
在 Laravel 收到的最多的请求之一是为多语言 Web 应用程序提供更好的支持,虽然已经存在为 Laravel 添加一些不错的功能的包去更好地处理 多语言项目 需求,但是构建这样的应用程序时还是会有些令人头疼的问题,例如管理翻译的键值对格式的 PHP 文件。
在以前的 Laravel 版本中,你可以使用 trans()
或 trans_choice()
辅助函数去插入翻译行:
trans('auth.verification_number_instructions')
然后在项目支持的每种语言中包含该键的翻译。因此对于英语,需要有一个 /lang/en/auth.php
文件,如下所示:
<?php
return [
'auth.verification_number_instructions' => 'Please enter your 4-digit verification number:'
];
对于小项目,翻译键值对的数量是有限的,所以它不是很难管理它。然而对于大型项目,提供易于理解和记住的翻译键值对是非常痛苦的。因此,Laravel 5.4 提供了一个新的翻译助手功能:
__("Please enter your 4-digit verification number:")
这个新函数将查找 resources/lang/en.json
文件,对其进行解码,并根据应用程序的当前语言提供相应的翻译值。 JSON 文件如下所示:
{"Please enter your 4-digit verification number:": "men fadlak adkhel raqam al tareef"}
这个新功能将允许开发人员在编写应用程序时使用清晰的语言,并将需要管理翻译的功能推迟到后续阶段。
至于为什么我们使用 JSON 文件,这个决定是基于这样的事实:JSON 容易被人和计算机软件读取,我们相信将翻译存储在 JSON 中为包开发人员创建更好的工具来处理应用程序翻译。
将参数传递给翻译器
使用 __()
方法,能够将参数传递给翻译器,就像以前在 laravel 版本中所做的那样:
__(
"Hello :name, you have :unread messages",
['name' => $user->name, 'unread' => $notifications->count]
)
而这里新的改变是,即使没有找到语言行,也将发生参数替换,这意味着甚至不必为应用程序主语言构建翻译文件。所以在上面的例子中,即使没有 en.json
文件,方法的输出也会是这样:
Hello Mohamed, you have 23 messages.
在 Blade 模板引擎中翻译行
在 5.4 的版本中,Laravel 引入了 @trans
blade ,以便能够执行以下操作。
@trans(['name' => $user->name, 'unread' => $notifications->count])
Hello :name, you have :unread messages.
@endtrans
我们相信这种语法能够确保更长的翻译行的可读性。
更多的更新可以前往 Laravel 资讯站 查看
本作品采用《CC 协议》,转载必须注明作者和本文链接