Search translation keys and insert into json to be translated
thiagocordeiro/laravel-translator is a Laravel package for search translation keys and insert into json to be translated.
It currently has 85 GitHub stars and 219.504 downloads on Packagist (latest version v1.2.3).
Install it with composer require thiagocordeiro/laravel-translator.
Discover more Laravel packages by thiagocordeiro
or browse all Laravel packages to compare alternatives.
Last updated
Laravel-translator scans your project resources/view/ and app/ folder to find @lang(...), lang(...) and __(...)
functions, then it create keys based on first parameter value and insert into json translation files.
You just have to require the package
composer require thiagocordeiro/laravel-translator
This package register the provider automatically, See laravel package discover.
After composer finish installing, you'll be able to update your project translation keys running the following command:
php artisan translator:update
if for any reason artisan can't find translator:update command, you can register the provider manually on your config/app.php file:
return [
...
'providers' => [
...
Translator\Framework\TranslatorServiceProvider::class,
...
]
]
First you have to create your json translation files:
app/
resources/
lang/
pt-br.json
es.json
fr.json
...
Keep working as you are used to, when laravel built-in translation funcion can't find given key, it'll return itself, so if you create english keys, you don't need to create an english translation.
blade:
<html>
@lang('Hello World')
{{ lang('Hello World') }}
{{ __('Hello World') }}
</html>
controllers, models, etc.:
<?php
__('Hello World');
lang('Hello World');
also you can use params on translation keys
@lang('Welcome, :name', ['Arthur Dent'])
translator:update command will scan your code to identify new translation keys, then it'll update all json files on app/resources/lang/ folder appending this keys.
{
"Hello World": "Hola Mundo",
"Welcome, :name": "Bienvenido, :name",
"Just scanned key": ""
}
In Laravel 9 the 'lang' directory is moved up one level so u need to change the output.
First publish config:
php artisan vendor:publish --provider="Translator\Framework\TranslatorServiceProvider"
And change output to:
'output' => base_path('lang'),
You can change the default path of views to scan and the output of the json translation files.
First, publish the configuration file.
php artisan vendor:publish --provider="Translator\Framework\TranslatorServiceProvider"
On config/translator.php you can change the default values of languages, default_language, use_keys_as_default_value, directories, functions, output or if you have a different implementation to save/load translations, you can create your owntranslation_repositoryand replace oncontainer config
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,
],
];
For the default language, most of the time you wish to use the key values as the default translation value. You can enable this by settingd the config option use_keys_as_default_value to true, and defining a default_language to your language. This is by default configured to en, but can be overruled by setting the default_language key in your config.
trans(...) function doesn't use json files for translation, so you'd better using __(...) or it's alias lang(...) on php files and @lang(...) or {{ lang(...) }} on blade files.If you feel like supporting changes then you can send donations to the address below.
Bitcoin Address: bc1qfyudlcxqnvqzxxgpvsfmadwudg4znk2z3asj9h