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-translatorThis 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:updateif 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.
- Laravel
trans(...)function doesn't use json files for translation, so you'd better using__(...)or it's aliaslang(...)on php files and@lang(...)or{{ lang(...) }}on blade files. - Do not use variables on translation functions, the scanner just get the key if it's a string
- View for translate phrases;
- Integration with some translation api (google or deepl) for automatic translations
If you feel like supporting changes then you can send donations to the address below.
Bitcoin Address: bc1qfyudlcxqnvqzxxgpvsfmadwudg4znk2z3asj9h