Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Xử lý đa ngôn ngữ trong sifoni #11

Open
ngnamuit opened this issue Oct 27, 2015 · 0 comments
Open

Xử lý đa ngôn ngữ trong sifoni #11

ngnamuit opened this issue Oct 27, 2015 · 0 comments

Comments

@ngnamuit
Copy link

Vấn đề

  • Đặt routing và lấy $lang (ngôn ngữ) để index dữ liệu từ database.
  • Interface theo $lang.

Giả thuyết.

  • Giả thuyết 1 : http://vietuc.smo.vn/vi/,http://vietuc.smo.vn/en/. \vi \en là biến $lang dùng để phân biệt ngôn ngữ của người dùng mà render đúng với ngôn ngữ đó.
    Vậy giả sử site mình có 100 ngôn ngữ thì mình phải đặt 100 routing cho phần trang chủ à .
  • Giả thuyết 2 : interface là những thứ render mà nó dữ liệu không tồn tại trên database tìm kiếm của search kết nối với chúng tôi ở footer, ... .Thông thường chúng ta sẽ dùng if trong view để làm cho việc nài. Nhưng nếu site mình có 100 thì sao 😄 .

Để giải quyết vấn đề nài chúng ta chỉ cần......
Xem phần bên dưới ⬇️

Cách giải quyết

Trong /config/hook.php

Thêm vào đoạn code sau :

$app->before(function (Request $request, Application $app) {

    $request->setDefaultLocale($app['config.app.languages'][0]);
    $app['request_context']->setParameter('_locale', $request->getLocale());

}, 8); // 1 - 15

Trong /config/app.php

Thêm đoạn code sau :

return array(
    'languages' => array('vi', 'en', 'ja', 'zh')

Trong đó 'vi', 'en', 'ja', 'cn' là ngôn ngữ dùng trong site ,mặc định khi vào http://vietuc.smo.vn/ thì $lang = 'vi'.
Đến đây thì trong routing mình không cần quan tâm biến $lang nữa nhé . Mình sẽ đặt routing như site 1 ngôn ngữ.

Controller

Tạo CommonController.php

abstract class CommonController extends Base{
        public $data = [];
        public function __construct() {
            parent::__construct();
            $this->data = $this->Block();
            $this->data['lang'] = $this->lang = $this->request->getLocale();  // lấy $lang
            $this->app['translator']->setLocale($this->lang);             // dùng {{ |trans }} trong view

        }

Khi sử dụng các Controller khác thì extends CommonController để lấy data['lang']. Có data['lang'] rồi thì tự tin index trên database nhé.

/app/language

  • Tạo en.php để chứa từ cần dịch như Tìm kiếm, Liên lạc với chúng tôi, VĂN PHÒNG , ... sang tiếng anh. Sau đó cho đoạn code nài vào :
return [
    'messages' => [
        'search ' => 'Search',     // key dùng trong view 
        'contact_us' =>'Contact Us', // value hiển thị
        'office' => 'Office',


    ],
    'validators' => []
];
  • Khuyến cáo nên dùng key chữ thường , khoảng trống thay bằng _
  • Tương tự nếu có 100 ngôn ngữ thì bạn phải tạo 100 file .php với tên tương ứng trong array language trong /config/app.php

View

{{ 'office'| trans }}

Hãy test thử ngay để thấy sự tuyệt vời và tiện lợi của đa ngôn ngữ trong sifoni 😺

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant