juniora / laravel-translation-loader

将语言行存储在数据库、yaml或其他来源

v2.8.2 2024-05-23 14:24 UTC

This package is not auto-updated.

Last update: 2024-09-27 14:36:37 UTC


README

Latest Version on Packagist Software License GitHub Workflow Status Total Downloads

在纯Laravel或Lumen安装中,您可以使用 语言文件 来本地化应用程序。此包将使翻译存储在数据库中。您仍然可以使用您熟悉和喜爱的 `__` 辅助函数 的所有功能。

__('messages.welcome', ['name' => 'dayle']);

您甚至可以混合使用语言文件和数据库。如果一个翻译同时存在于文件和数据库中,则返回数据库版本。

想要使用不同的翻译来源?没问题!此包可以 轻松扩展

Spatie 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里

支持我们

我们投入了大量资源来创建 一流的开放式源代码包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感谢您从您家乡给我们寄来明信片,并说明您正在使用我们的哪个包。您可以在 我们的联系页面 上找到我们的地址。我们将发布收到的所有明信片 在我们的虚拟明信片墙上

安装

您可以通过 composer 安装此包

composer require juniora/laravel-translation-loader

config/app.php(Laravel)或 bootstrap/app.php(Lumen)中,您应该用此包中包含的替换 Laravel 的翻译服务提供程序

Illuminate\Translation\TranslationServiceProvider::class,

(请参考下一节)

Spatie\TranslationLoader\TranslationServiceProvider::class,

您必须发布并运行迁移以创建 language_lines

php artisan vendor:publish --provider="Spatie\TranslationLoader\TranslationServiceProvider" --tag="migrations"
php artisan migrate

可选:您可以使用以下命令发布配置文件。

php artisan vendor:publish --provider="Spatie\TranslationLoader\TranslationServiceProvider" --tag="config"

这是已发布配置文件的内容

return [

    /*
     * Language lines will be fetched by these loaders. You can put any class here that implements
     * the Spatie\TranslationLoader\TranslationLoaders\TranslationLoader-interface.
     */
    'translation_loaders' => [
        Spatie\TranslationLoader\TranslationLoaders\Db::class,
    ],

    /*
     * This is the model used by the Db Translation loader. You can put any model here
     * that extends Spatie\TranslationLoader\LanguageLine.
     */
    'model' => Spatie\TranslationLoader\LanguageLine::class,

    /*
     * This is the translation manager which overrides the default Laravel `translation.loader`
     */
    'translation_manager' => Spatie\TranslationLoader\TranslationLoaderManager::class,

];

注意:在 Lumen 中,默认情况下无法正常工作发布资源。相反,您必须从存储库中复制文件。

用法

您可以通过创建并保存 Spatie\TranslationLoader\LanguageLine-模型的实例来在数据库中创建翻译

use Spatie\TranslationLoader\LanguageLine;

LanguageLine::create([
   'group' => 'validation',
   'key' => 'required',
   'text' => ['en' => 'This is a required field', 'nl' => 'Dit is een verplicht veld'],
]);

您可以使用 Laravel 的默认 __ 函数 来获取翻译

__('validation.required'); // returns 'This is a required field'

app()->setLocale('nl');

__('validation.required'); // returns 'Dit is een verplicht veld'

您仍然可以使用默认的语言文件。如果请求的翻译同时存在于数据库和语言文件中,则返回数据库版本。

如果您需要存储/覆盖 JSON 翻译行,只需创建具有 group => '*' 的普通 LanguageLine 即可。

创建您自己的翻译提供程序

此包附带了可以从数据库中获取翻译的翻译提供程序。如果您将翻译存储在 yaml 文件、csv 文件中,或者更多,您可以通过创建自己的翻译提供程序轻松扩展此包。

翻译提供程序可以是任何实现了 Spatie\TranslationLoader\TranslationLoaders\TranslationLoader-接口的类。它只包含一个方法

namespace Spatie\TranslationLoader\TranslationLoaders;

interface TranslationLoader
{
    /*
     * Returns all translations for the given locale and group.
     */
    public function loadTranslations(string $locale, string $group): array;
}

翻译提供程序可以在配置文件的 translation_loaders 键中进行注册。

变更日志

请参阅变更日志获取有关最近更改的更多信息。

测试

composer test

贡献

请参阅贡献指南获取详细信息。

安全

如果您发现与安全相关的错误,请通过电子邮件security@spatie.be联系,而不是使用问题跟踪器。

鸣谢

许可协议

MIT许可协议(MIT)。请参阅许可文件获取更多信息。