mprince/laravel-db-translator

Laravel 8 数据库翻译扩展

dev-main 2021-09-22 04:33 UTC

This package is auto-updated.

Last update: 2024-09-22 10:57:10 UTC


README

Total Downloads Latest Stable Version Latest Unstable Version License Build Status

此包允许您向数据库添加翻译,并为每个组生成本地化文件夹。

注意

  • 它不会通过使用另一个函数调用来构建键/值翻译来替换当前的 Laravel 翻译器。
  • 它与您的当前 Laravel 项目不冲突。
  • 它不会替换您当前的任何翻译,并且与您的语言文件无缝协作,因为此包生成它自己的语言文件和目录。
  • Dev Laravel 5.6

兼容性

Laravel 框架 5.6

安装

$ composer require bernardomacedo/laravel-db-translator

首先在您的应用程序中注册服务提供者和外观。

// config/app.php

'providers' => [
    ...
    bernardomacedo\DBTranslator\DBTranslatorServiceProvider::class,
];
'aliases' => [
    ...
    'DBTranslator' => bernardomacedo\DBTranslator\DBTranslatorFacade::class,
];

要发布所有设置...

php artisan vendor:publish --provider="bernardomacedo\DBTranslator\DBTranslatorServiceProvider"

...或单独

$ php artisan vendor:publish --provider="bernardomacedo\DBTranslator\DBTranslatorServiceProvider" --tag="config"
$ php artisan vendor:publish --provider="bernardomacedo\DBTranslator\DBTranslatorServiceProvider" --tag="migrations"
$ php artisan vendor:publish --provider="bernardomacedo\DBTranslator\DBTranslatorServiceProvider" --tag="lang"

并运行迁移

$ php artisan migrate

将磁盘添加到 filesystems.php 文件存储

如果您更改了默认磁盘名称,因为它可能与其他包或未来的潜在包冲突,请确保在已发布的 db-translator.php => storage_driver 参数下更改它。

    'disks' => [
        ...
        'translator' => [
            'driver'    => 'local',
            'root'      => base_path('resources/lang/vendor/dbtranslator')
        ],
        ...

用法

默认语言设置为 App::getLocale()

在 blade 模板中使用

function lang($text = false, $vars = null, $value = null, $group = null, $locale = null)
{{ lang('some text to translate') }}
{{ lang(':count apple named :name|:count apples named :name', ['name' => 'Bernardo'], 2) }}
{{ lang('{0} There are no apples (:count) named :name|[1,19] There are some (:count) apples named :name|[20,Inf] There are many (:count) apples named :name', ['name' => 'Bernardo'], 2) }}

此翻译方法更容易理解,因为即使翻译未找到,也会返回您输入的文本。

{{ lang('some text to translate') }} // returns 'algum texto para traduzir'
{{ lang('some text to translate', null, null, null, 'ru') }} // returns 'какой-нибудь текст' bypassing the current language forcing a locale.
{{ lang('this text does not exists on the database') }} // returns 'this text does not exists on the database' and will be added for future translation

组是什么?

有时您需要根据上下文情况生成特定的翻译。在您希望翻译的相同短语或文本在其他语言中意味着不同的情况下。因此,组参数允许您根据上下文区分相同的翻译。

{{ lang('participations') }}                /* general group assumed */
{{ lang('participations', null, null, 'some_group') }}  /* some_group group assumed */

动态组和变量

当使用动态变量进行翻译时,请确保强制一个名为 'dynamic_...' 的组。

{{ lang($language_name, null, null, 'dynamic_language') }} /* language group assumed with dynamic flag on database */
{{ lang($SomeDynamicVar, null, null, 'dynamic_some_group') }}      /* some_group group assumed with dynamic flag on database */

翻译文本

DBTranslator::doTranslation($variable_id, $text, $language_id, $group = 'general');

如果您只提供字符串,DBTranslator 将尝试为您找到 $variable_id$language_id

DBTranslator::doTranslation('This is cool', 'Isto é cool', 'pt');

有时您希望为翻译创建一个变量,直接在您选择的语言上添加翻译。因此,在 $variable_id 上提供不在 translations_variables 表上的字符串将生成一个新的变量,并将条目直接添加到 translations_translated 表中。

生成翻译文件

在控制器类中

use bernardomacedo\DBTranslator\DBTranslator;

class SomeControllerName extends BaseController
{
    public function generate_translations()
    {
        /**
         * This will generate the language translations for all
         * translated texts in the database, and will assume
         * the original language by default.
         * This will work on all languages active by default.
         */
        DBTranslator::generate(); /* will generate all translations */

        DBTranslator::generate('pt'); /* will generate the Portuguese translations */
        DBTranslator::generate(64); /* will generate the Portuguese translations based on ID */
        /**
         * Redirect or do whatever you wish after generation
         */
        return redirect()->route('home');
    }
}

这将在 filesystems.php 文件指定的目录下创建所有必需的文件。

resources/lang/vendor/dbtranslator/
    - en
        - general.php
        - some_group.php
    - pt
        - general.php
        - some_group.php

获取数据库中的所有变量

use bernardomacedo\DBTranslator\Models\Intl;

class SomeControllerName extends BaseController
{
    public function some_function()
    {
        $all = Intl::all();
        $group = Intl::group('general')->get();
    }
}

获取可用翻译

use bernardomacedo\DBTranslator\Models\Translated;

class SomeControllerName extends BaseController
{
    public function some_function()
    {
        /**
         * Gets all available translations
         */
        $all = Translated::all();

        /**
         * Gets all available translations
         */
         $portuguese = Translated::language('pt')->get(); // using string ISO
         $portuguese = Translated::language(64)->get(); // using ID for the language
    }
}

在不渲染浏览器视图的情况下将翻译插入/删除到/从数据库中

您可以在不渲染视图的情况下向数据库添加翻译。为此,您可以运行 artisan 命令,然后 Laravel 数据库翻译器 将检查配置在 config/view.php 配置文件 paths 下的视图文件夹,并将找到的任何 lang(*) 元素添加到数据库中。

插入翻译

$ php artisan dbtranslator:add

删除未使用的翻译

$ php artisan dbtranslator:remove

在运行这些命令时,将忽略 动态组 和 `$变量`。例如

lang($php_var) /* is not supported so they will be ignored */

生成翻译

为葡萄牙语生成

$ php artisan dbtranslator:generate pt

为西班牙语生成

$ php artisan dbtranslator:generate es

为所有语言生成

$ php artisan dbtranslator:generate --status=all

为活动语言生成

$ php artisan dbtranslator:generate --status=active

为非活动语言生成

$ php artisan dbtranslator:generate --status=inactive

许可证

Laravel 数据库翻译器是开源软件,许可协议为 MIT 许可证