Hướng dẫn làm đa ngôn ngữ trong Laravel

 

Trong tất cả ứng dụng của mình thì mình không thích thêm vào URI một segment để phân biệt web của mình đang dùng ngôn ngữ gì kiểu URI của mình có tên ngôn ngữ như http://giaphiep.com/vi/ thì là tiếng việt, http://giaphiep.com/en/ thì là tiếng anh ... bla la ...  vì mình thấy nó làm mất đi vẻ đẹp quyến rũ của URI :D. vì vậy trong bài này mình sử dụng session để lưu biến đó.

Ở đây mình chỉ demo ví dụ cơ bản về làm thế nào để sử dụng được đa ngôn ngữ trong ứng dụng laravel phiên bản hiện tại là 5.3. Bạn có thể chọn các kiểu chuyển đổi ngôn ngữ tùy thích theo ý bạn, ở đây mình làm đơn giản chỉ là link :D

Giả sử mình có một file template: resources/views/welcome.blade  như sau

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Giáp Hiệp</title>
        <!-- Latest compiled and minified CSS & JS -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
        <script src="//code.jquery.com/jquery.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>

    </head>
    <body>
        <nav class="navbar navbar-default" role="navigation">
            <div class="container-fluid">
                <!-- Brand and toggle get grouped for better mobile display -->
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="{{URL::asset('')}}">Giáp Hiệp</a>
                </div>
        
                <!-- Collect the nav links, forms, and other content for toggling -->
                <div class="collapse navbar-collapse navbar-ex1-collapse">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="#">{{ trans('home.home') }}</a></li>
                        <li><a href="#">{{ trans('home.about') }}</a></li>
                    </ul>

                    <ul class="nav navbar-nav navbar-right">
                        <li><a href="{{URL::asset('')}}language/vi">Tiếng Việt</a></li>
                        <li><a href="{{URL::asset('')}}language/en">Tiếng Anh</a></li>
                        <li><a href="{{URL::asset('')}}language/ja">Tiếng Nhật</a></li>
                    </ul>
                </div><!-- /.navbar-collapse -->
            </div>
        </nav>
    </body>
</html>

 

Ở đây mình ví dụ dịch ba ngôn ngữ tiếng việt, tiếng anh, tiếng nhật của cái chữ  {{ trans('home.home') }} và {{ trans('home.about') }}. 

Trong file routes/web.php của mình có hai phương thức như sau

 

Route::get('', function () {
	if (Session::has('locale')) {
		App::setLocale(Session::get('locale'));
	}
	return view('welcome');
});

Route::get('language/{locale}', function ($locale) {
	Session::put('locale', $locale);
	return redirect()->back();
});

 

tiếp theo trong folder resources/lang mình tạo 3 folder con như sau

 

/lang
    /en
        /home.php
    /vi
        /home.php
    /ja
        /home.php 
       

 

trong file resources/lang/en/home.php

 

<?php

return [
	'home' => 'Home',
	'about' => 'About'
];

 

trong file resources/lang/vi/home.php


 
<?php

return [
	'home' => 'Trang chủ',
	'about' => 'Giới thiệu'
];

 

và file resources/lang/ja/home.php


 
<?php

return [
	'home' => 'ホーム',
	'about' => '約'
];

 

Chúc các bạn thành công! 

Chi tiết hơn thì các bạn có thể vào page của mình để xem: https://www.facebook.com/hiepgv/

Còn phần đa ngôn ngữ về cơ sở dữ liệu mình sẽ nói ở bài sau.