基于 JSON 的语言文件(Laravel 5.4 的新变化系列)

file

在 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 资讯站 查看

参考链接:https://laravel-news.com/json-based-transl...

本作品采用《CC 协议》,转载必须注明作者和本文链接
Stay Hungry, Stay Foolish.
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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