Creating multilingual website using Localization in Laravel 5.4

Creating multilingual website using Localization in Laravel 5.4

In this post we will give you information about Creating multilingual website using Localization in Laravel 5.4. Hear we will give you detail about Creating multilingual website using Localization in Laravel 5.4And how to use it also give you demo for it if it is necessary.

Creating multilingual website using Localization in Laravel 5.4

In this tutorial, I will tell you how to create multilingual website in Laravel 5.4

Suppose you had developed phase-1 task and you are going to develop phase-2 task but in mean while, client wants multilingual website so in that case what will you do ? what step you will take ?

You will have to put all string in common string file from where you can get as per selected language.
So this should be in practise before developing your application.

Laravel’s localization features provide a convenient way to get strings in different languages, allowing you to easily support multiple languages within your application.

Language strings are stored in files within the resources/lang directory. Within this directory there should be a subdirectory for each language supported by the application:

/resources
    /lang
        /en
            alert.php
        /zh
            alert.php

Above directory structure tell us that there is a language file alert.php you can put all alert message in this file.

This file will return array in key value pair.

  1. <?php
  2. return[
  3. 'success'=>'Success message',
  4. 'failure'=>'Failure message'
  5. ];
<?php

return [
    'success' => 'Success message',
    'failure' => 'Failure message'
];

Kindly follow below step to see how localization work in Laravel 5, In below example i am creating application for two language : English and Chinese

Step 1 : Create Language File

In this step, i will create 2 same language file in different language directory. When you setup your project first time then you will see there will be default language directory for english language in following path resources/lang/en. Now i will create a file alert.php in en diretory.

resources/lang/en/alert.php

  1. <?php
  2. return[
  3. 'success'=>'Success message',
  4. 'failure'=>'Failure message',
  5. ];
<?php

return [

    'success' => 'Success message',
    'failure' => 'Failure message',

];

Now create a Chinese file at resources/lang/zh/alert.php.

  1. <?php
  2. return[
  3. 'success'=>'????',
  4. 'failure'=>'????',
  5. ];
<?php

return [

    'success' => '????',
    'failure' => '????',

];

Step 2 : Create Language Localization Controller File

Now create a controller LanguageLocalizationController.php in following path app/Http/Controllers and copy the following line of code to file.

  1. <?php
  2. namespace AppHttpControllers;
  3. use IlluminateHttpRequest;
  4. class LanguageLocalizationController extends Controller
  5. {
  6.     public functionindex(Request $request){
  7.         if($request->lang <>''){
  8.             app()->setLocale($request->lang);
  9.         }
  10.         echotrans('alert.success');
  11.     }
  12. }
<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

class LanguageLocalizationController extends Controller
{

	public function index(Request $request){
		if($request->lang <> ''){
			app()->setLocale($request->lang);
		}
		echo trans('alert.success');

	}
}

You can see in above code, If language parameter is not null then i change the active language at runtime using app()->setLocale() method and if language parameter is null then default language will be active which you have defined in config/app.php file.

You can also get the translation strings by using __ helper function.

  1. <?php
  2. namespace AppHttpControllers;
  3. use IlluminateHttpRequest;
  4. class LanguageLocalizationController extends Controller
  5. {
  6.     public functionindex(Request $request){
  7.         if($request->lang <>''){
  8.             app()->setLocale($request->lang);
  9.         }
  10.         echo__('alert.success');
  11.     }
  12. }
<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

class LanguageLocalizationController extends Controller
{
	public function index(Request $request){
		if($request->lang <> ''){
			app()->setLocale($request->lang);
		}
		echo __('alert.success');
	}
}

When you need to display translation string in your blade template then you can also use blade syntax {{ }} to echo language based translated string or you can go with @lang directive:.

Step 3 : Add route for LanguageLocalizationController

In this step, i will add route in routes/web.php file.

  1. Route::get('localization/{lang?}','LanguageLocalizationController@index');
Route::get('localization/{lang?}','LanguageLocalizationController@index');

You will see lang parameter is optional that means if we will not pass language argument then default language will be active.

Now you can visit URLs with different language code in following way :

http://localhost:8000/localization/en

This will give you following output :

Success message

Now change language code in URL and see output :

http://localhost:8000/localization/zh

????

How to use localization in Blade tag templates?

If you need to use translations in your blade view template then you can use @lang command.

For example :

@lang('alert.success')

In above example, There is a key ‘success’ in the file alert.php for the current locale.

As i have defined success message in key success then it would return the translated message accordingly, but if there is no any messages defined then output will be alert.success.

Sometime, you create sub-directories in your language file then you will have to use file path instead of using dot notation for file paths.

Suppose, you have a file in sub-directories at following path resources/lang/en/admin/alert.php and you are facing issue with sub-directories then you can get translated string by following way :

@lang('admin/alert.success')

If you need to set value in translated strings dynamically then you can easily replace parameters in translated strings.

'success' => 'Success message - :your_message',

As you can see above, a place-holder is prefixed with a :. Now you need to remove place-holders when reading a translation strings then you can pass array of replacements as second argument by following way :

@lang('admin/alert.success',['your_message'=>'This is test message'])

You can also replace parameters in translation string.

Hope this code and post will helped you for implement Creating multilingual website using Localization in Laravel 5.4. if you need any help or any feedback give it in comment section or you have good idea about this post you can give it comment section. Your comment will help us for help you more and improve us. we will give you this type of more interesting post in featured also so, For more interesting post and code Keep reading our blogs

For More Info See :: laravel And github

Leave a Comment

Your email address will not be published. Required fields are marked *

2  +  2  =  

We're accepting well-written guest posts and this is a great opportunity to collaborate : Contact US