Laravel 5.4:基于 JSON 的语言文件
发布于 作者 Mohamed Said
在 Laravel 中,我们收到最多的请求之一是引入对多语言 Web 应用程序的更好支持。现在已经有一些包为 Laravel 添加了一些不错的功能,以更好地处理 多语言项目 的需求,但在构建此类应用程序时,最痛苦的问题之一是管理翻译键。
在之前的 Laravel 版本中,您可以使用 trans()
或 trans_choice()
辅助函数插入翻译后的行
trans('auth.verification_number_instructions')
然后,您必须在项目支持的每种语言中包含该键的翻译。因此,对于英语,您需要一个名为 resources/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
文件,方法的输出也将类似于
您好 Mohamed,您有 23 条消息。
Blade 中的翻译行
在 5.4 版本中,Laravel 对 @trans blade 指令引入了一个新的增强功能,您可以执行以下操作。
@trans(['name' => $user->name, 'unread' => $notifications->count]) Hello :name, you have :unread messages.@endtrans
我们相信这种语法可以确保更长的翻译行的可读性更好。