thiagocordeiro / laravel-translator
搜索翻译键并将其插入待翻译的JSON文件
Requires
- php: ^7.4|^8.0
- ext-json: *
- laravel/framework: >=5.4.0
Requires (Dev)
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^9.0
- slevomat/coding-standard: ^6.0
README
Laravel-translator会扫描项目的resources/view/和app/目录,查找@lang(...)、lang(...)和__(...)函数,然后根据第一个参数的值创建键,并将其插入JSON翻译文件。
安装
只需引入此包即可
composer require thiagocordeiro/laravel-translator
此包会自动注册提供者,请参阅laravel包发现。
Composer安装完成后,您可以通过运行以下命令更新项目翻译键
php artisan translator:update
如果由于任何原因Artisan找不到translator:update命令,您可以在config/app.php文件中手动注册提供者
return [ ... 'providers' => [ ... Translator\Framework\TranslatorServiceProvider::class, ... ] ]
用法
首先,您需要创建您的JSON翻译文件
app/
resources/
lang/
pt-br.json
es.json
fr.json
...
继续像往常一样工作,当Laravel内置的翻译函数找不到给定的键时,它将返回自身,因此如果您创建了英语键,您不需要创建英语翻译。
blade:
<html>
@lang('Hello World')
{{ lang('Hello World') }}
{{ __('Hello World') }}
</html>
controllers, models, etc.:
<?php
__('Hello World');
lang('Hello World');
您还可以在翻译键中使用参数
@lang('Welcome, :name', ['Arthur Dent'])
输出
translator:update命令将扫描您的代码以识别新的翻译键,然后将在app/resources/lang/目录中的所有JSON文件中追加这些键。
{
"Hello World": "Hola Mundo",
"Welcome, :name": "Bienvenido, :name",
"Just scanned key": ""
}
在Laravel 9中,'lang'目录向上移动了一级,因此您需要更改输出。
首先发布配置
php artisan vendor:publish --provider="Translator\Framework\TranslatorServiceProvider"
然后更改输出为
'output' => base_path('lang'),
自定义
您可以更改要扫描的视图的默认路径以及JSON翻译文件的输出。
首先,发布配置文件。
php artisan vendor:publish --provider="Translator\Framework\TranslatorServiceProvider"
在config/translator.php中,您可以更改languages、default_language、use_keys_as_default_value、directories、functions、output的默认值,或者如果您有不同的实现来保存/加载翻译,您可以创建自己的translation_repository并将其替换在container配置中。
use Translator\Framework\LaravelConfigLoader; use Translator\Infra\LaravelJsonTranslationRepository; return [ 'languages' => ['pt-br', 'es'], 'directories' => [ app_path(), resource_path('views'), ], 'functions' => ['lang', '__'], 'output' => resource_path('lang'), 'container' => [ 'config_loader' => LaravelConfigLoader::class, 'translation_repository' => LaravelJsonTranslationRepository::class, ], ];
使用键作为默认值
对于默认语言,您通常希望使用键值作为默认翻译值。您可以通过将配置选项use_keys_as_default_value设置为true并定义一个default_language来您的语言来实现此功能。默认配置为en,但可以通过在配置中设置default_language键来覆盖。
提示
- Laravel
trans(...)函数不使用JSON文件进行翻译,因此您最好在PHP文件中使用__(...)或其别名lang(...),在blade文件中使用@lang(...)或{{ lang(...) }}。 - 不要在翻译函数中使用变量,扫描器只会获取字符串键
待办事项
- 为翻译短语提供视图
- 与某些翻译API(如Google或deepl)集成以自动翻译
支持
如果您想支持更改,则可以向以下地址捐款。
比特币地址:bc1qfyudlcxqnvqzxxgpvsfmadwudg4znk2z3asj9h