Skip to content

Search translation keys and insert into json to be translated

License

Notifications You must be signed in to change notification settings

leetdev/laravel-translator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Search translation keys and insert into json to be translated

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 96.6%
  • HTML 3.4%