thiagocordeiro / laravel-translator
Search translation keys and insert into json to be translated
Installs: 157 343
Dependents: 1
Suggesters: 0
Security: 0
Stars: 84
Watchers: 4
Forks: 22
Open Issues: 8
Type:project
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 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.
Installation
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, ... ] ]
Usage
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'])
Output
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'),
Customization
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_repository
and 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, ], ];
Using your keys as the default value
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.
Tips
- 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
Todo
- View for translate phrases;
- Integration with some translation api (google or deepl) for automatic translations
Supporting
If you feel like supporting changes then you can send donations to the address below.
Bitcoin Address: bc1qfyudlcxqnvqzxxgpvsfmadwudg4znk2z3asj9h