micheleangioni / laravel-js-lang-converter

Laravel lang files conversion to Javacript
MIT License
25 stars 8 forks source link
internationalization javascript laravel localization php

Laravel JS Lang Converter

Laravel Localization in JavaScript.

Latest Stable Version License Build Status SensioLabsInsight

Laravel JS Lang Converter converts all your localization messages of your Laravel app to JavaScript, providing a small JavaScript library to interact with those messages in the fron end.

Most of the work has been developed in Mariuzzo's package

Laravel 5.5+ is supported. PHP 7.0 is required. For Laravel 5.1 - 5-4 versions, use the v2.x branch.

Installation

Add the following line to you composer.json file under require.

"michele-angioni/laravel-js-lang-converter": "~3.0"

and run composer update or composer install.

Then you need to add the Laravel JS Lang Converter service provider in your app/config/app.php file

'providers' => [
    // ...
    'MicheleAngioni\LaravelJsLangConverter\LaravelJsLangConverterServiceProvider',
    // ...
],

In order to use some package features, you need to publish the config file through the artisan command php artisan vendor:publish. It will create the laravel_js_lang.php file in your config directory.

Now you are done!

Usage

This project comes with a command that generate the JavaScript version of all your messages found in resources/lang directory. The resulting JavaScript file will have the whole bunch of messages and a thin library similar to Laravel's Lang class.

Generating JS messages

php artisan lang:js

Specifying a custom target

php artisan lang:js public/assets/dist/lang.dist.js

Converting only some files

If you don't want to convert ALL your lang files, you can specify the files you want to be converted into your laravel_js_lang.php conf file. Under the files array, just add the list of your source files, like so:

'files' => [
    'pagination',
    'validation'
]

Compressing the JS file

php artisan lang:js -c

Use gulp to publish (optional):

  1. Install gulp-shell from https://github.com/sun-zheng-an/gulp-shell with npm install --save-dev gulp-shell .

  2. Create an extension for elixir in your gulpfile.js:

    var shell = require('gulp-shell');
    
    //......
    
    var Task = elixir.Task;
    
    elixir.extend('langjs', function(path, minimize) {
        new Task('langjs', function() {
            var command = "php artisan lang:js " + (path || "public/js/messages.js");
                if (minimize) {
                    command += " -c";
                }
            return gulp.src("").pipe(shell(command));
        });
    });
    
    gulp.task('langJs', shell.task('php artisan lang:js -c public/js/messages.js'));
  3. Use the new elixir task:

elixir(function(mix) {
    var path = "public/js";
    var minimize = true;
    mix.langjs(path, minimize);
});

Documentation

This is the documentation regarding the thin JavaScript library. The library is highly inspired on Laravel's Lang class.

Getting a message

Lang.get('messages.home');

Getting a message with replacements

Lang.get('messages.welcome', { name: 'Joe' });

Changing the locale

Lang.setLocale('es');

Checking if a message key exists

Lang.has('messages.foo');

Support for singular and plural message based on a count

Lang.choice('messages.apples', 10);

Calling the choice method with replacements

Lang.choice('messages.apples', 10, { name: 'Joe' });

For more detailed information, take a look at the source: Lang.js.

How to contribute

Pull requests are welcome.

  1. Fork this repository and clone it.
  2. Create a branch from develop: git checkout -b feature-foo.
  3. Push your commits and create a pull request.

Setting up development environment

Prerequisites:

You need to have installed the following softwares.

After getting all the required software you may run the following commands to get everything ready:

  1. Install PHP dependencies:
composer install
  1. Install NPM dependences:
npm install -g jasmine-node

npm install

Now you are good to go! Happy coding!

Unit testing

This project use Jasmine-Node and PHPUnit. All tests are stored at tests directory.

To run all JS tests type in you terminal:

npm test

To run all PHP tests type in your terminal:

vendor/bin/phpunit tests/