Symfony - Quốc tế hóa

Internationalization (i18n)Localization (l10n)giúp tăng phạm vi khách hàng của ứng dụng web. Symfony cung cấp một thành phần Dịch tuyệt vời cho mục đích này. Hãy để chúng tôi tìm hiểu cách sử dụng thành phần Dịch trong chương này.

Bật dịch

Theo mặc định, khung công tác web Symfony vô hiệu hóa thành phần Dịch. Để kích hoạt nó, hãy thêm phần phiên dịch trong tệp cấu hình, app / config / config.yml.

framework: translator: { fallbacks: [en] }

Tệp dịch

Thành phần dịch thuật dịch văn bản bằng cách sử dụng tệp tài nguyên dịch. Tệp tài nguyên có thể được viết bằng PHP, XML và YAML. Vị trí mặc định của tệp tài nguyên làapp/Resources/translations. Nó cần một tệp tài nguyên cho mỗi ngôn ngữ. Hãy để chúng tôi viết một tệp tài nguyên,messages.fr.yml cho ngôn ngữ Pháp.

I love Symfony: J'aime Symfony 
I love %name%: J'aime %name%

Văn bản bên trái bằng tiếng Anh và văn bản bên phải bằng tiếng Pháp. Dòng thứ hai hiển thị việc sử dụng trình giữ chỗ. Thông tin giữ chỗ có thể được thêm động trong khi sử dụng bản dịch.

Sử dụng

Theo mặc định, ngôn ngữ mặc định của hệ thống của người dùng sẽ được đặt bởi khung công tác web Symfony. Nếu ngôn ngữ mặc định không được định cấu hình trong ứng dụng web, ngôn ngữ đó sẽ trở về tiếng Anh. Ngôn ngữ cũng có thể được đặt trong URL của trang web.

http://www.somedomain.com/en/index 
http://www.somedomain.com/fr/index

Hãy để chúng tôi sử dụng ngôn ngữ dựa trên URL trong ví dụ của chúng tôi để dễ dàng hiểu khái niệm dịch. Tạo một chức năng mới,translationSample với tuyến đường /{_locale}/translation/sampletrong DefaultController (src / AppBundle / Controller / DefaultController.php). {_locale} là một từ khóa đặc biệt trong Symfony để chỉ định ngôn ngữ mặc định.

/** 
   * @Route("/{_locale}/translation/sample", name="translation_sample") 
*/ 
public function translationSample() { 
   $translated = $this->get('translator')->trans('I love Symfony'); 
   return new Response($translated); 
}

Ở đây, chúng tôi đã sử dụng phương pháp dịch, trans, dịch nội dung sang ngôn ngữ hiện tại. Trong trường hợp này, ngôn ngữ hiện tại là phần đầu tiên của URL. Bây giờ, hãy chạy ứng dụng và tải trang,http://localhost:8000/en/translation/sample trong trình duyệt.

Kết quả sẽ là "I love Symfony" bằng ngôn ngữ tiếng Anh. Bây giờ, tải tranghttp://localhost:8000/fr/translation/sampletrong trình duyệt. Bây giờ, văn bản sẽ được dịch sang tiếng Pháp như sau.

Tương tự, mẫu cành cây có {% trans %}để bật tính năng dịch trong các chế độ xem. Để kiểm tra nó, hãy thêm một chức năng mới,translationTwigSample và chế độ xem tương ứng tại app/Resources/views/translate/index.html.twig.

/** 
   * @Route("/{_locale}/translation/twigsample", name="translation_twig_sample") 
*/ 
public function translationTwigSample() { 
   return $this->render('translate/index.html.twig'); 
}

Lượt xem

{% extends 'base.html.twig' %}  
{% block body %} 
   {% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %} 
{% endblock %}

Ở đây, khối chuyển đổi cũng chỉ định trình giữ chỗ. Kết quả trang như sau.