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": ""
}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, directories, output
or if you have a different implementation to save/load translations, you can create your own translation_repository
and replace on container config
use Translator\Framework\LaravelConfigLoader;
use Translator\Infra\LaravelJsonTranslationRepository;
return [
'languages' => ['pt-br', 'es'],
'directories' => [
app_path(),
resource_path('views'),
],
'output' => resource_path('lang'),
'container' => [
'config_loader' => LaravelConfigLoader::class,
'translation_repository' => LaravelJsonTranslationRepository::class,
],
];
- 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