Giới Thiệu

GP247 sử dụng hàm gp247_language_render() để render ngôn ngữ. Cú pháp tương tự với helper trans() mặc định của Laravel, nhưng có thêm tính năng quản lý ngôn ngữ thông qua database.

1. Logic Xử Lý Ngôn Ngữ

Cách hoạt động của gp247_language_render()

Khi bạn gọi hàm gp247_language_render('abc.xyz'), hệ thống sẽ xử lý theo thứ tự sau:

Bước 1: Tìm kiếm trong Database

  • Truy vấn bảng gp247_languages
  • Tìm giá trị cột text với điều kiện:
    • Cột code = 'abc.xyz'
    • Cột location = ngôn ngữ hiện tại (ví dụ: envija...)

Bước 2: Fallback sang Laravel Translation

  • Nếu không tìm thấy trong database, hệ thống sẽ sử dụng helper trans() của Laravel
  • Tìm trong thư mục lang/{locale}/
  • Trong ví dụ trên: tìm key xyz trong file lang/{locale}/abc.php

Ví dụ minh họa

// Gọi hàm render
echo gp247_language_render('product.add_to_cart');

// Bước 1: Tìm trong database
// SELECT text FROM gp247_languages 
// WHERE code = 'product.add_to_cart' 
// AND location = 'vi'

// Nếu tìm thấy: trả về giá trị từ database (ví dụ: "Thêm vào giỏ")
// Nếu không tìm thấy: chuyển sang Bước 2

// Bước 2: Sử dụng trans()
// Tìm trong file lang/vi/product.php
// return [
//     'add_to_cart' => 'Thêm vào giỏ hàng',
// ];

Thứ tự ưu tiên

Database (gp247_languages) > Laravel Translation Files (lang/)

2. Cập Nhật Ngôn Ngữ Trong GP247

Bạn có 2 cách để nạp ngôn ngữ cho hệ thống GP247:


Cách 1: Thêm Dữ Liệu Vào Database

A. Cập Nhật Cho Cộng Đồng (GitHub Repositories)

Nếu bạn muốn đóng góp cho cộng đồng GP247, hãy cập nhật tại các repository sau:

1. GP247 Core

File: DataLocaleSeeder.php
Link: https://github.com/gp247net/core/blob/master/src/DB/seeders/DataLocaleSeeder.php#L275

// Ví dụ thêm ngôn ngữ mới
[
    'code' => 'product.name',
    'text' => 'Product Name',
    'location' => 'en',
    'sort' => 0,
],
[
    'code' => 'product.name',
    'text' => 'Tên sản phẩm',
    'location' => 'vi',
    'sort' => 0,
],

2. GP247 Front

File: DataFrontDefaultSeeder.php
Link: https://github.com/gp247net/front/blob/master/src/DB/seeders/DataFrontDefaultSeeder.php#L85

3. GP247 Shop

File: DataShopInitializeSeeder.php
Link: https://github.com/gp247net/shop/blob/master/src/DB/seeders/DataShopInitializeSeeder.php#L200

Thêm Ngôn Ngữ Mới (Ví dụ: Tiếng Nhật)

Bước 1: Thêm loại ngôn ngữ vào bảng gp247_admin_language

File: DataDefaultSeeder.php
Link: https://github.com/gp247net/core/blob/master/src/DB/seeders/DataDefaultSeeder.php#L219

[
    'code' => 'ja',
    'name' => 'Japanese',
    'icon' => 'flag-icon-jp',
    'sort' => 30,
    'status' => 1,
],

Bước 2: Thêm các giá trị ngôn ngữ vào bảng gp247_languages

[
    'code' => 'product.add_to_cart',
    'text' => 'カートに追加',
    'location' => 'ja',
    'sort' => 0,
],

Lưu ý: Mặc định, GP247 chỉ hỗ trợ tiếng Anh (en) và tiếng Việt (vi).


B. Cập Nhật Cho Website Cá Nhân (Cách Nhanh Nhất)

Nếu bạn chỉ muốn cập nhật cho website của mình, không cần fork repository:

Bước 1: Thêm loại ngôn ngữ mới (nếu cần)

  • Truy cập Admin Panel: {domain}/gp247_admin/language
  • Thêm ngôn ngữ mới (ví dụ: Tiếng Nhật - code: ja)

Bước 2: Quản lý các giá trị ngôn ngữ

  • Truy cập: {domain}/gp247_admin/language_manager
  • Thêm mới hoặc chỉnh sửa từng giá trị ngôn ngữ

Ví dụ thêm ngôn ngữ qua Admin:

Code: product.add_to_cart
Location: vi
Text: Thêm vào giỏ hàng

Cách 2: Cập Nhật Qua File Laravel

Cập nhật dữ liệu trong các file ngôn ngữ theo cú pháp mặc định của Laravel.

Cấu trúc thư mục

lang/
├── en/
│   ├── product.php
│   ├── cart.php
│   └── ...
├── vi/
│   ├── product.php
│   ├── cart.php
│   └── ...
├── en.json
└── vi.json

Ví dụ: File lang/vi/product.php

 'Tên sản phẩm',
    'price' => 'Giá',
    'add_to_cart' => 'Thêm vào giỏ hàng',
    'description' => 'Mô tả',
    'in_stock' => 'Còn hàng',
    'out_of_stock' => 'Hết hàng',
];

Ví dụ: File lang/vi.json

{
    "Welcome": "Chào mừng",
    "Login": "Đăng nhập",
    "Register": "Đăng ký"
}

Sử dụng trong code

// Cách 1: Sử dụng gp247_language_render()
echo gp247_language_render('product.add_to_cart');

// Cách 2: Sử dụng helper trans() (fallback)
echo trans('product.add_to_cart');

// Cách 3: Sử dụng __() helper
echo __('product.add_to_cart');

Tài liệu tham khảo Laravel

Chi tiết về localization trong Laravel:
https://laravel.com/docs/12.x/localization#introduction


3. Lưu Ý Quan Trọng

Thứ tự ưu tiên

Cách 1 (Database) > Cách 2 (Laravel Files)

Hệ thống sẽ ưu tiên tìm kiếm trong database trước. Chỉ khi không tìm thấy mới fallback sang file Laravel.

Khuyến nghị

  1. Cho dự án lớn: Sử dụng Cách 1 (Database) để dễ quản lý qua Admin Panel
  2. Cho dự án nhỏ: Sử dụng Cách 2 (Laravel Files) để đơn giản hóa
  3. Cho đóng góp cộng đồng: Cập nhật vào GitHub repositories (Cách 1A)

Performance

  • Database queries được cache tự động
  • Laravel translation files được cache bởi Laravel framework
  • Không có sự khác biệt đáng kể về performance giữa 2 cách

4. Ví Dụ Thực Tế

Kịch bản: Thêm ngôn ngữ cho trang sản phẩm

Sử dụng Cách 1 (Database - Admin Panel)

  1. Truy cập {domain}/gp247_admin/language_manager
  2. Click "Add New"
  3. Điền thông tin:
    • Code: product.view_detail
    • Location: vi
    • Text: Xem chi tiết
  4. Click "Save"

Sử dụng Cách 2 (Laravel File)

  1. Mở file lang/vi/product.php
  2. Thêm dòng:
'view_detail' => 'Xem chi tiết',
  1. Save file

Sử dụng trong Blade Template



    {{ gp247_language_render('product.view_detail') }}



@lang('product.view_detail')

Kết Luận

Hệ thống ngôn ngữ của GP247 kết hợp ưu điểm của cả database management và Laravel translation files, mang lại sự linh hoạt cao cho developers và editors. Hãy chọn cách phù hợp với nhu cầu dự án của bạn!

Liên hệ & Đóng góp: