thiagocordeiro/laravel-translator

搜索翻译键并将其插入待翻译的JSON文件

v1.2.3 2023-01-31 11:25 UTC

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中,您可以更改languagesdefault_languageuse_keys_as_default_valuedirectoriesfunctionsoutput的默认值,或者如果您有不同的实现来保存/加载翻译,您可以创建自己的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