Đa ngôn ngữ trong Yii2

0
747

Đa ngôn ngữ là 1 vấn đề phổ biến đối với mọi người làm web nhằm phục vụ người dùng từ nhiều quốc gia và có hệ ngôn ngữ khác nhau.Bạn để ý thấy facebook,twitter hay các web phổ biến trên thế giới đều có phần lựa chọn ngôn ngữ .Vậy tại sao bạn không dùng đa ngôn ngữ cho website của mình chứ nhỉ .Dưới đây mình xin giới thiệu đến với các bạn cách tạo đa ngôn ngữ trong yii2 với i18n 1 cách đơn giản và dễ hiểu nhất .

Dưới đây mình làm đa ngôn ngữ trong yii2 advanced vì mình dùng bản này mà .

Đầu tiên chúng ta phải tạo 1 file i18n.php trong mục common/config bằng câu lệnh sau trong folder chính nhé

yii message/config @common/config/i18n.php

Tiếp theo chúng ta vào file i18n này chỉnh sửa các thông số mặc định

<?php
/**
 * Configuration file for 'yii message/extract' command.
 *
 * This file is automatically generated by 'yii message/config' command.
 * It contains parameters for source code messages extraction.
 * You may modify this file to suit your needs.
 *
 * You can use 'yii message/config-template' command to create
 * template configuration file with detaild description for each parameter.
 */
return [
    'color' => null,
    'interactive' => true,
    'sourcePath' => '@yii',
    'messagePath' => '@yii/messages',
    'languages' => [],
    'translator' => 'Yii::t',
    'sort' => false,
    'overwrite' => true,
    'removeUnused' => false,
    'markUnused' => true,
    'except' => [
        '.svn',
        '.git',
        '.gitignore',
        '.gitkeep',
        '.hgignore',
        '.hgkeep',
        '/messages',
        '/BaseYii.php',
    ],
    'only' => [
        '*.php',
    ],
    'format' => 'php',
    'db' => 'db',
    'sourceMessageTable' => '{{%source_message}}',
    'messageTable' => '{{%message}}',
    'catalog' => 'messages',
    'ignoreCategories' => [],
];

Sau đó tạo folder messages trong common và chỉnh sửa file i8n.php thành các thông số sau

<?php
/**
 * Configuration file for 'yii message/extract' command.
 *
 * This file is automatically generated by 'yii message/config' command.
 * It contains parameters for source code messages extraction.
 * You may modify this file to suit your needs.
 *
 * You can use 'yii message/config-template' command to create
 * template configuration file with detaild description for each parameter.
 */
return [
    'color' => null,
    'interactive' => true,
    'sourcePath' => __DIR__. '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR,
    'messagePath' => __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'messages',
    'languages' => ['en-EN','ru-RU'], //Add các ngôn ngữ mà bạn muốn dịch
    'translator' => 'Yii::t',
    'sort' => false,
    'overwrite' => true,
    'removeUnused' => false,
    'markUnused' => true,
    'except' => [
        '.svn',
        '.git',
        '.gitignore',
        '.gitkeep',
        '.hgignore',
        '.hgkeep',
        '/messages',
        '/BaseYii.php',
    ],
    'only' => [
        '*.php',
    ],
    'format' => 'php',
    'db' => 'db',
    'sourceMessageTable' => '{{%source_message}}',
    'messageTable' => '{{%message}}',
    'catalog' => 'messages',
    'ignoreCategories' => [],
];

Như vậy là xong bước 1 rồi đó

Bước tiếp theo thêm i18n vào common/config

'components' => [
    ...
    'i18n' => [
        'translations' => [
            'frontend*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@common/messages',
            ],
            'backend*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@common/messages',
            ],
        ],
    ],
    ...
],

ok vậy là xong giờ đến bước chạy lệnh khởi tạo các thông số

yii message/extract @common/config/i18n.php

Chúng ta để ý sau khi chạy lênh đó xong thư mục messages có thêm các phần sau

yii2_i18n

file frontend là mình tạo thêm để chỉnh sửa các phần liên quan đến frontend .Các bạn nên tách biệt từng file kiểu này để bận sau dễ chỉnh sửa và update 1 cách dễ dàng hơn nhé .frontend.php chuyên cho phần frontend và tạo thêm file backend.php chuyên cho phần backend .File frontend của mình như sau các bạn có thể tham khảo

return [
    'company'=>'Hien It',
    'Are you sure you want to delete this item?' => '',
    'Create' => 'Tạo',
    'Create Status' => 'Tạo trạng thái',
    'Delete' => 'Xóa',
    'Reset' => 'Làm lại',
    'Search' => 'Tìm kiếm',
    'Statuses' => 'Status danh sách',
    'Update' => 'Cập nhật',
    'Update {modelClass}: ' => 'Update',
    'home' =>'Trang chủ'
];

file này bạn có thể thêm bớt các dòng vào .

Cách dùng đa ngôn ngữ trong yii2 thì bạn cần 2 thứ đó chính là vào file common/config thêm dòng language= ‘ngôn ngữ’;

return [
    'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
    'language' => 'en-EN',
    'components' => [
        'i18n' => [
            'translations' => [
                'frontend*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@common/messages',
                ],
                'backend*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@common/messages',
                ],
            ],
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
    ],
];

Mình ở đây sài ngôn ngữ tiếng anh nhé .

Cách dùng thì dùng ở file view với cấu trúc

Yii::t($category, $message),
Yii::t('frontend','status'),

frontend chính là tên file frontend trong messages còn status là từ cần dịch tên

Ở các bài viết tiếp theo mình sẽ hướng dẫn cách bạn tao translate bằng database chứ ko phải bằng file nữa