webkid/js-translator

Laravel JS translator
2,366
Install
composer require webkid/js-translator
Latest Version:1.4
PHP:~5.5|~7.0
License:MIT
Last Updated:Jun 10, 2017
Links: GitHub  ·  Packagist
Maintainer: _webkid

Laravel JS-translator

Install

Via Composer

$ composer require webkid/js-translator

Add service provider: Webkid\JsTranslator\JsTranslatorServiceProvider::class,

Usage. Angular JS example:

Publish lang.js library file. to your-public-folder/jstranslator/lang.js

$ php artisan vendor:publish

Add deferred bootstrap library to load translations before everything was loaded.

bower install angular-deferred-bootstrap --save

Add assets to your html or blade page

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.5/angular.js"></script>
<script src="/vendor/angular-deferred-bootstrap/angular-deferred-bootstrap.min.js"></script>
<script src="/jstranslator/lang.js"></script>

Run deferred bootstrap:

deferredBootstrapper.bootstrap({
	element: document.documentElement,
	module: 'app',
	resolve: {
		TRANS: ['$http', function ($http) {
			return $http.get('/trans');
		}]
	}
});

Set up route for /trans url:

Route::get('/trans', function () {
	$a = app()->make('jstranslator');
	return response()->json($a->get());
});

Finnaly add your angular script file. Example:

(function() {

	'use strict';

	angular
		.module('app', [])
		.controller('langController', langController)
		.filter('trans', trans)
		.filter('trans_plural', trans_plural)
		.filter('trans_as_array', trans_as_array)
		.run(runBlock)
	;


	runBlock.$inject = ['TRANS'];
	function runBlock(TRANS)
	{
		Lang.setMessages(TRANS); //set messages object
	}

	function langController() {
		console.log(Lang.get('pagination.next'));
	}

	/**
	 * Get translation from resources, empty.
	 * Example:
	 * 'pagination.next' | trans => 'Next'
	 */
	function trans() {
		return function (input, replaces) {
			// Set symbol
			return Lang.get(input, replaces);
		};
	}

	/**
	 * Get translation from resources.
	 * Example:
	 * 'subscription.month' | trans_plural:1 => 'month'
	 * 'subscription.month' | trans_plural:2 => 'months'
	 */
	function trans_plural() {
		return function (input, number) {
			return Lang.choice(input, number);
		};
	}

	/**
	 * Convert translation object to array from resources.
	 * Example:
	 * 'property.property_types' | trans_as_array
	 */
	function trans_as_array() {
		return function (input) {
			if(typeof Lang.get(input) !== 'object') {
				console.error('Error, ' + input + 'not a object.');
				return [];
			}
			var newOptions = [];
			angular.forEach(Lang.get(input), function(val, key){
				newOptions.push({key: key, value: val});
			});

			return newOptions;
		};
	}

})();

Example of usage in html:

<div class="title" ng-controller="langController">Laravel 5 @{{ 'pagination.next' | trans }}</div>

Change log

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING and CONDUCT for details.

Security

If you discover any security related issues, please email kolodiy@ukietech.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Related Packages

tightenco/ziggy

Use your Laravel named routes in JavaScript.

50,069,678 4,314
spatie/shiki-php

Highlight code using Shiki in PHP

20,898,238 311
spatie/laravel-web-tinker

Artisan Tinker in your browser

4,169,378 1,217
malzariey/filament-daterangepicker-filter

This package uses daterangepciker library to filter date by a range or predefine...

2,454,624 177
jlapp/swaggervel

A great way to integrate Swagger into Laravel

956,211 484