JSON 格式的 Laravel 翻译文件
在 Laravel 项目中,我们收到很多希望能够为构建多语言 Web 应用提供更好支持的请求。但在构建多语言应用的过程中,想要管理翻译的 keys 是十分困难的。
在之前的 Laravel 版本中, 你可以通过 trans()
或者 trans_choice()
助手函数来插入翻译后的语句:
trans('auth.verification_number_instructions')
这样的话,你就必须为项目所支持的所有语言分别创建 key 对应的译文,假如支持英语,那么就需要创建一个 resources/lang/en/auth.php
文件:
<?php
return [
'auth.verification_number_instructions' => 'Please enter your 4-digit verification number:'
];
对于小项目来讲需要翻译的 keys 数量有限,并不难处理;然而,对于一个大型项目而言,拥有多语言的翻译固然很容易理解,但是同时也带来了一系列的问题,基于这个原因的考虑,Laravel 集成了多语言翻译的助手函数:
__("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 提出了一个新增的 Blade 指令 @trans
,你可以像下面这样做。
@trans(['name' => $user->name, 'unread' => $notifications->count])
Hello :name, you have :unread messages.
@endtrans
我们相信这种语法保证了长文本的翻译有着更好的可读性。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。