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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/json-based-tran...

译文地址:https://learnku.com/laravel/t/26375

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!