Multi Language API Response In Laravel
This post hasn't been updated for 5 years
Giới thiệu
Trong bất kỳ một dự án lớn nhỏ hiện nay thì, một website đã ngôn ngữ không còn xa lạ gì đối với tất cả các lập trình viên. Để tạo 1 website đa ngôn ngữ thì có nhiều cách nhưng làm thế nào để nó tối ưu và dễ dàng bảo trì cũng như phát triển thì đó vẫn là câu hỏi của nhiều bạn. Trong thời đại mà RESTful API trở thành xương sống của các ứng dụng đa nền tảng thì hôm nay mình xin giới thiệu với các bạn cách làm một ứng dụng cơ bản đa ngôn ngữ sử dụng API Response.
Language Setup
Laravel cung cấp và hỗ trợ sẵn chúng ta multi language (Localozation). Ở đây mình sử dụng một cách đơn giản đó là chúng ta có thể làm đó là sử dụng request header.
Chúng ta sẽ sử dụng truyền lên Header X-localization request để xác định sẽ sử dụng ngôn ngữ nào trong ứng dụng.
Các bước thực hiện
1. Create project Laravel
Run comman: composer create-project --prefer-dist laravel/laravel multi-language
Sau khi create xong, mở project chúng ta thấy Laravel đã cung cấp sẵn cho chúng ta thư mục resources/lang chứa các ngôn ngữ trong ứng dụng của bạn. Tại đây bạn có thể thêm bất cứ ngôn ngữ nào bạn muốn. VD ứng dụng của mình sẽ có 2 ngôn ngữ là English (en) và Japanese (ja).
Sau đó ta tạo thêm các thư mục con nameFile.php cho nó, lưu ý là các thư mục con này phải có tên giống nhau và các keys trong các thư mục cũng trùng tên với nhau. VD trong multi-language project của mình:
- File resources/lang/en/messages.php
<? php
return [
'hello' => 'Hello. This is using English. '
];
- File resources/lang/ja/messages.php
<? php
return [
'hello' => 'こんにちは。 これは英語を使用しています。'
];
Chúng ta đã xong bước thiết lập cơ bản đa ngôn ngữ cho ứng dụng. Bước tiếp theo chúng ta sẽ đi Create Language Middleware
2. Create Language Middleware
Run comman: php artisan make:middleware LocalizationMiddleware
Tiếp theo chúng ta sẽ đi cấu hình LocalizationMiddleware nhé:
<?php
namespace App\Http\Middleware;
use Closure;
class LocalizationMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
//Check header request and set language defaut
$lang = ($request->hasHeader('X-localization')) ? $request->header('X-localization') : 'ja';
//Set laravel localization
app()->setLocale($lang);
//Continue request
return $next($request);
}
}
Ở đây mình sẽ thực hiện kiểm tra header request truyền lên. Và nếu k có sẽ set mặc định cho ứng dụng sử dụng ngôn ngữ tiếng Nhật
3. Registered Middleware
- Mình sẽ k đi sâu về Middleware, để hiểu hơn về nó các bạn xem ở đây nhé!
- Bạn đăng ký middleware trong app/Http/Kernel.php tại thuộc tính $routeMiddleware để gán middleware đó cho một route cụ thể.
protected $routeMiddleware = [
/**
* other middlewares
* ...
*/
'language' => \App\Http\Middleware\LocalizationMiddleware::class,
];
4. Call Middleware
Bước cuối cùng sau khi đăng ký middleware => bây giờ chúng ta sẽ tạo một Controller để gọi tới middleware multi language:
Run comman php artisan make:controller MultiLanguageController --resource
Sau khi tạo xong controller, mình sẽ demo một VD đơn giản như sau:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class MultiLanguageController extends Controller
{
/**
* Show greetings
*
* @param Request $request [description]
* @return [type] [description]
*/
public function index(Request $request)
{
$data = [
'message' => trans('messages.hello'),
];
return response()->json($data, 200);
}
}
Tạo một api cho function index()
// Routes/api.php
Route::get(‘multi-language’, ‘MultiLanguageController@index’)
->middleware(‘language’);
Run comman: php artisan service
Ting ting vậy là chúng ta đã tạo xong một ứng dụng đơn giản Laravel đa ngôn ngữ rồi nè. Để kiểm tra api này mình sử postman nhé
- Use X-localization=ja
- Use X-localization=en
Trên đây là ví dụ đơn giản về đa ngôn ngữ trong Laravel, cảm ơn mn đã đọc
All Rights Reserved