menterjemah
"Pengantarabangsaan" (sering disingkat sebagai i18n) merujuk kepada mengekstrak rentetan dan serpihan lain dengan ciri serantau daripada program anda dan berdasarkan wilayah pengguna (seperti bahasa, negara) dan meletakkannya pada lapisan yang boleh diterjemahkan dan berubah. Untuk teks, ini bermakna menanggalkan setiap bahagian teks dengan fungsi yang menterjemahkannya (atau "maklumat") ke dalam bahasa yang pengguna mahu:
// 文本始终以英语输出echo 'Hello World'; // 文本将以用户指定语言或默认英语输出echo $translator->trans('Hello World');
locale bermaksud, secara ringkasnya, Bahasa dan negara pengguna. Ia boleh menjadi sebarang rentetan dalam program dan digunakan untuk mengurus terjemahan dan maklumat format lain (seperti mata wang). Adalah disyorkan untuk menggunakan kod bahasa ISO 639-1, tambah garis bawah (_
),再跟一个ISO 3166-1 alpha-2国家代码(比如fr_FR
这个locale是指“法国法语”French/France)。
在本章,你将学习如何使用Symfony框架中的translation组件。你可以阅读翻译组件来了解更多。整体上,翻译的过程有如下几步:
开启和配置Symfony的翻译服务;
将字符串抽象出来(如“xxxx”),这是通过调用Translator去剥离它们来实现的 ;(参考 翻译基础)
针对每个被支持的locale,创建翻译资源/文件,用于翻译程序中每一个待译字串;
针对request(请求)和可选的 基于用户整个session过程,来 确定、设置和管理用户的locale信息。
配置 ¶
翻译的过程是通过translator
Kod negara (contohnya, fr_FR
tempat ini merujuk kepada "Perancis Perancis" Perancis/Perancis).
- 🎜Buka Dan konfigurasikan 🎜perkhidmatan terjemahan Symfony; 🎜
- 🎜Rentetan abstrak (seperti "xxxx"), yang dicapai dengan memanggil Penterjemah untuk menanggalkannya (Rujukan Asas terjemahan🎜) 🎜
- 🎜Untuk setiap tempat yang disokong, cipta sumber/fail terjemahan🎜 untuk setiap rentetan untuk diterjemahkan dalam program terjemahan ;🎜
- 🎜Untuk permintaan (permintaan) dan pilihan berdasarkan keseluruhan proses sesi pengguna 🎜, datang ke tentukan, tetapkan dan urus maklumat tempat pengguna🎜. 🎜
Konfigurasi ¶🎜
🎜Proses terjemahan adalah melaluiPHP:// app/config/config.php$container->loadFromExtension('framework', array('translator' => array('fallbacks' => array('en')),));
XML:<!-- app/config/config.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:framework="http://symfony.com/schema/dic/symfony" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> <framework:config> <framework:translator> <framework:fallback>en</framework:fallback> </framework:translator> </framework:config></container>🎜
YAML:# app/config/config.ymlframework:translator: { fallbacks: [en] }🎜
Mengenai kata kunci fallbacks dan cara Symfony mengendalikan apabila bahasa terjemahan tidak ditemui, sila rujuk Locales rollback semasa terjemahan untuk mendapatkan butiran.
Maklumat tempat yang digunakan dalam terjemahan disimpan dalam objek permintaan. Ia biasanya ditetapkan kepada atribut _locale
dalam penghalaan. Sila rujuk Lokasi dan URL_locale
属性。请参考 The Locale and the URL。
翻译基础 ¶
translator
服务负责完成对文本的翻译。为了翻译一个文本块(被称为“message”,以下称作“信息”),使用trans()方法。例如,你要在controller中翻译一个简单的信息:
// ...use Symfony\Component\HttpFoundation\Response; public function indexAction(){$translated = $this->get('translator')->trans('Symfony is great'); return new Response($translated);}
上述代码被执行后,Symfony就尝试基于用户的 locale
.
Asas terjemahan ¶penterjemah🎜
bertanggungjawab untuk melengkapkan terjemahan teks. Untuk menterjemah blok teks (dipanggil "mesej", selepas ini dipanggil "maklumat"), gunakan kaedah trans(). Contohnya, anda ingin menterjemah mesej ringkas dalam pengawal: 🎜PHP:// messages.fr.phpreturn array('Symfony is great' => 'J\'aime Symfony',);
🎜Selepas kod di atas dilaksanakan, Symfony akan cuba menterjemah mesej "Symfony hebat" berdasarkan tempat pengguna. Agar proses ini berfungsi, anda perlu memberitahu Symfony cara melaksanakan terjemahan melalui "sumber terjemahan". Secara umumnya, sumber terjemahan ialah fail yang mengandungi kumpulan maklumat terjemahan yang sepadan dengan tempat yang ditentukan. Ia seperti "kamus" untuk terjemahan dan boleh dibuat dalam pelbagai format, tetapi disyorkan untuk menggunakanUntuk mendapatkan maklumat tentang lokasi penyimpanan fail sedemikian, sila rujuk Sumber terjemahan/nama fail dan lokasi
Sekarang, jika tempat pengguna adalah bahasa Perancis (seperti fr_FR
atau fr_BE< /code> ), maka maklumat sebelumnya akan diterjemahkan ke dalam J'aime Symfony
. Anda juga boleh melengkapkan terjemahan dalam templatfr_FR
或 fr_BE
),那么前面的信息将被翻译为 J'aime Symfony
。你也可以在 模板(templates) 中完成翻译。
翻译的处理过程 ¶
为了能翻译一条信息,Symfony执行以下简明流程:
先确定request对象中所存储的当前用户的 locale
信息;
某一目录(一大组message)的已经翻译好的信息,将从由 locale
(比如 fr_FR
. Proses Terjemahan ¶
- Untuk menterjemah mesej, Symfony melakukan proses ringkas berikut:
Tentukan dahulu minta Maklumat tempat pengguna semasa yang disimpan dalam objek
Maklumat terjemahan direktori tertentu (sekumpulan besar mesej) akan diambil daripada tempat ( Contohnya, sumber terjemahan yang ditentukan oleh fr_FR
dimuatkan. Jika setempat tidak wujud, maklumat terjemahan yang ditentukan oleh Apabila menggunakan kaedah trans(), Symfony mencari rentetan yang tepat daripada direktori mesej yang sepadan dan mengembalikannya (jika wujud).
Nota Terjemahan:
katalog mesej
Katalog di sini, teks asal ialah katalog, merujuk kepada koleksi maklumat terjemahan yang diekstrak daripada sumber terjemahan semasa proses "terjemahan" Symfony, iaitu, fail xliff mengandungi banyak mesej. Rujuk bahagian domain dalam "Sumber terjemahan/penamaan fail dan lokasi" kemudian) Kadangkala, mesej yang mengandungi pembolehubah perlu diterjemahkan: YAML:# messages.fr.ymlSymfony is great: J'aime Symfony
Namun, untuk ini, untuk ini , adalah mustahil untuk mencipta terjemahan yang sepadan, kerana penterjemah sentiasa cuba mencari "maklumat deterministik", termasuk nilai pembolehubah itu sendiri (contohnya, "Hello Ryan" dan "Hello Fabien" ialah dua mesej berbeza dalam pandangan penterjemah) .
Untuk kes ini, sila rujuk Pemegang Tempat Mesej/Pemegang Tempat Mesej
Untuk mendapatkan maklumat tentang lokasi penyimpanan fail sedemikian, sila rujuk Sumber terjemahan/nama fail dan lokasi
Sekarang, jika tempat pengguna adalah bahasa Perancis (seperti fr_FR
atau fr_BE< /code> ), maka maklumat sebelumnya akan diterjemahkan ke dalam
J'aime Symfony
. Anda juga boleh melengkapkan terjemahan dalam templatfr_FR
或 fr_BE
),那么前面的信息将被翻译为 J'aime Symfony
。你也可以在 模板(templates) 中完成翻译。
翻译的处理过程 ¶
为了能翻译一条信息,Symfony执行以下简明流程:
先确定request对象中所存储的当前用户的
locale
信息;某一目录(一大组message)的已经翻译好的信息,将从由
locale
(比如fr_FR
. Proses Terjemahan ¶- Untuk menterjemah mesej, Symfony melakukan proses ringkas berikut:
fr_FR
dimuatkan. Jika setempat tidak wujud, maklumat terjemahan yang ditentukan oleh Apabila menggunakan kaedah trans(), Symfony mencari rentetan yang tepat daripada direktori mesej yang sepadan dan mengembalikannya (jika wujud).
Nota Terjemahan:
katalog mesejKatalog di sini, teks asal ialah katalog, merujuk kepada koleksi maklumat terjemahan yang diekstrak daripada sumber terjemahan semasa proses "terjemahan" Symfony, iaitu, fail xliff mengandungi banyak mesej. Rujuk bahagian domain dalam "Sumber terjemahan/penamaan fail dan lokasi" kemudian)
Kadangkala, mesej yang mengandungi pembolehubah perlu diterjemahkan: YAML:# messages.fr.ymlSymfony is great: J'aime Symfony
Namun, untuk ini, untuk ini , adalah mustahil untuk mencipta terjemahan yang sepadan, kerana penterjemah sentiasa cuba mencari "maklumat deterministik", termasuk nilai pembolehubah itu sendiri (contohnya, "Hello Ryan" dan "Hello Fabien" ialah dua mesej berbeza dalam pandangan penterjemah) .