ixudra / translation
为Laravel框架开发的定制PHP翻译库 - 由Ixudra开发
Requires
- php: ^7.2|^8.0
- illuminate/support: >=6.0
- illuminate/translation: >=6.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^8.5
README
为Laravel框架开发的定制PHP翻译库 - 由Ixudra开发。
此包可由任何人随时使用,但请注意,它针对我的个人定制工作流程进行了优化。它可能不完全适合您的项目,可能需要进行修改。
发布问题前请注意:在发布关于包的问题时,请务必尽可能提供有关问题的信息。
为什么使用这个包?
Laravel国际化系统是一个惊人的特性,使得在不同语言中翻译消息变得非常容易。不幸的是,我发现它有一个很大的缺点:由于许多错误消息(尤其是与模型验证有关)非常相似,它鼓励语言文件的重复。当向您的应用程序添加新语言时,这尤其令人沮丧。此包通过应用一个众所周知的编程结构来解决该问题:递归。
此包提供在翻译消息中包含占位符值的功能,这些值将在运行时识别、翻译和替换。这使得Laravel翻译系统更加动态,并减少了语言文件中的总体重复。
安装
通过Composer拉取此包。
{ "require": { "ixudra/translation": "5.*" } }
或在终端运行:composer require ixudra/translation
如果您想使用Laravel 4,将上述行更改为
"ixudra/translation": "1.*"
。
Laravel 5.5+集成
Laravel的包发现将为您处理集成。
Laravel 5.*集成
将服务提供程序添加到您的config/app.php
文件中
'providers' => array( //... Ixudra\Translation\TranslationServiceProvider::class, ),
将外观添加到您的app.php文件中
'facades' => array( //... 'Translate' => Ixudra\Translation\Facades\Translation::class, ),
Laravel 4.*集成
将服务提供程序添加到您的app/config/app.php
文件中
'providers' => array( //... 'Ixudra\Translation\TranslationServiceProvider', ),
将外观添加到您的app/config/app.php
文件中
'facades' => array( //... 'Translation' => 'Ixudra\Translation\Facades\Translation', ),
使用方法
一旦包含,该包就可以轻松地用于任何Laravel应用程序。为了翻译一条消息,只需使用外观并传递存储在语言文件中的翻译值的关键字即可
// Translate the message in the app default locale Translate::message('your.key.goes.here'); // Translate the message in a given locale Translate::message('your.key.goes.here', $locale);
该包将自动扫描您的应用程序和包本身的语言文件,以查找与此关键字匹配的内容。重要的是要知道,该包将优先考虑应用程序关键字,以便用户可以指定自定义消息而不是包提供的那些消息。如果找不到提供的键的值,该包将简单地返回键本身,就像Laravel Lang
外观一样。
翻译模型
由于翻译消息通常用于模型,因此此包提供了一种特定方法来使这更加容易
// Translate the message in the app default locale Translate::model('user.create.success'); // Translate the message in a given locale Translate::model('user.create.success', $locale);
当调用此方法时,该包将
- 在
lang/models.php
文件中查找user
模型的翻译 - 在
lang/model.php
文件中查找create.success
键的翻译 - 使用翻译的
user
模型值作为参数来翻译create.success
消息。
此交互的结果是(默认情况下):用户已成功创建。
递归翻译
递归翻译工作方式与上述提到的方法类似。在找到翻译键后,该包将扫描需要翻译的递归标识符的值。这些标识符通过在翻译键前后添加 ##
来突出显示(例如,##common.submit##
)。
例如,您可以在包中找到的 lang/admin.php
文件中看到以下值
<?php return array( 'menu.title.index' => '##models.:model.plural##', 'menu.title.new' => 'New ##models.:model.singular##', 'menu.title.edit' => 'Edit ##models.:model.singular##', );
您可以使用 recursive
方法翻译这些值,将 model
参数传入,就像使用 Laravel 的 Lang
门面一样
// Translate the message in the app default locale Translate::recursive('admin.menu.title.new', array('model' => 'user')); // Translate the message and keep the first character as lowercase (changed to uppercase by default) Translate::recursive('admin.menu.title.new', array('model' => 'user'), false); // Translate the message in a given locale Translate::recursive('admin.menu.title.new', array('model' => 'user'), true, $locale);
当调用此方法时,该包将
- 在
lang/admin.php
文件中查找menu.title.new
键的翻译 - 替换翻译值中的所有参数
- 扫描消息以查找递归键并找到
##models.user.singular##
- 在
lang/models.php
文件中查找user.singular
键的翻译 - 将递归键替换为正确的翻译
- 将翻译结果返回到应用程序
此交互的结果将是(默认情况下):新用户
。
您可以在一个翻译值中包含任意数量的递归标识符。然而,需要注意的是,递归目前限制在一级。该功能将在不久的将来添加。
发布语言文件
该包包含多个语言文件,其中包含可以用于您代码中的翻译。这些翻译可以直接使用,也可以根据需要修改。为了修改这些文件,您必须使用 artisan 发布配置文件
// Publish all resources from all packages php artisan vendor:publish // Publish only the resources of the package php artisan vendor:publish --provider="Ixudra\\Translation\\TranslationServiceProvider"
这就是全部内容!祝您玩得开心!
支持
通过 Patreon 支持我进一步开发和维护此包!
许可协议
此包是开源软件,许可协议为 MIT 许可协议
联系
有关包的问题、错误、建议和/或功能请求,请使用 Github 问题系统并/或提交一个拉取请求。提交问题时,请始终提供详细的错误解释、任何响应或反馈、可能相关的日志消息以及演示问题的源代码示例。如果不这样做,我可能无法帮助您解决问题。请在提交问题或拉取请求之前查看 贡献指南。
对于任何其他问题,请随时使用以下凭证
Jan Oris(开发者)
- 电子邮件: jan.oris@ixudra.be
- 电话:+32 496 94 20 57