Skip to content

Latest commit

 

History

History
115 lines (94 loc) · 3.2 KB

README.md

File metadata and controls

115 lines (94 loc) · 3.2 KB

Laravel-Translator

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": ""
}

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, 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,
    ],
];

Tips

  • Laravel 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.
  • 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