ixudra/translation

为Laravel框架开发的定制PHP翻译库 - 由Ixudra开发

5.7.0 2021-12-09 22:43 UTC

This package is auto-updated.

Last update: 2024-09-10 04:40:27 UTC


README

Latest Version on Packagist license Total Downloads

为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(开发者)