ozdemir / laravel-translation-loader
将语言行存储在数据库、yaml或其他源中
Requires
- php: ^7.2|^8.0
- illuminate/translation: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0|^6.0|^7.0|^8.0|^9.0
- phpunit/phpunit: ^8.0|^9.0|^10.5
This package is auto-updated.
Last update: 2024-09-24 08:33:01 UTC
README
在纯净的Laravel或Lumen安装中,您可以使用语言文件来本地化应用程序。此包将启用将翻译存储在数据库中。您仍然可以使用您所熟悉的__
辅助函数的所有功能。
__('messages.welcome', ['name' => 'dayle']);
您甚至可以混合使用语言文件和数据库。如果翻译在文件和数据库中都存在,则将返回数据库版本。
想要使用不同的翻译源?没问题!该包很容易扩展。
Spatie是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述。
支持我们
我们投入了大量资源来创建一流的开放式源代码包。您可以通过购买我们的付费产品之一来支持我们。
我们非常感谢您从您的家乡给我们寄来明信片,说明您正在使用我们的哪个包。您可以在我们的联系我们页面上找到我们的地址。我们将发布所有收到的明信片在我们的虚拟明信片墙上。
安装
您可以通过composer安装此包
composer require spatie/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)。请参阅许可证文件获取更多信息。