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 (_), diikuti dengan ISO 3166-1 alpha-2_),再跟一个ISO 3166-1 alpha-2国家代码(比如fr_FR这个locale是指“法国法语”French/France)。

在本章,你将学习如何使用Symfony框架中的translation组件。你可以阅读翻译组件来了解更多。整体上,翻译的过程有如下几步:

  1. 开启和配置Symfony的翻译服务;

  2. 将字符串抽象出来(如“xxxx”),这是通过调用Translator去剥离它们来实现的 ;(参考 翻译基础)

  3. 针对每个被支持的locale,创建翻译资源/文件,用于翻译程序中每一个待译字串;

  4. 针对request(请求)和可选的 基于用户整个session过程,来 确定、设置和管理用户的locale信息

配置 

翻译的过程是通过translatorKod negara (contohnya, fr_FR tempat ini merujuk kepada "Perancis Perancis" Perancis/Perancis).

🎜Dalam bab ini, anda akan belajar cara menggunakan komponen terjemahan dalam rangka kerja Symfony. Anda boleh membaca Komponen Terjemahan🎜 untuk mengetahui lebih lanjut. Secara keseluruhannya, proses terjemahan mempunyai langkah-langkah berikut: 🎜
  1. 🎜Buka Dan konfigurasikan 🎜perkhidmatan terjemahan Symfony; 🎜
  2. 🎜Rentetan abstrak (seperti "xxxx"), yang dicapai dengan memanggil Penterjemah untuk menanggalkannya (Rujukan Asas terjemahan🎜) 🎜
  3. 🎜Untuk setiap tempat yang disokong, cipta sumber/fail terjemahan🎜 untuk setiap rentetan untuk diterjemahkan dalam program terjemahan ;🎜
  4. 🎜Untuk permintaan (permintaan) dan pilihan berdasarkan keseluruhan proses sesi pengguna 🎜, datang ke tentukan, tetapkan dan urus maklumat tempat pengguna🎜. 🎜

Konfigurasi ¶🎜

🎜Proses terjemahan adalah melalui penterjemah perkhidmatan, yang menggunakan tempat yang ditentukan pengguna untuk mencari dan mengembalikan maklumat yang diterjemahkan. Sebelum menggunakan penterjemah, dayakannya dalam fail konfigurasi: 🎜
PHP:// 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 menggunakan

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_FRfr_BE ),那么前面的信息将被翻译为 J'aime Symfony。你也可以在 模板(templates) 中完成翻译。

翻译的处理过程 

为了能翻译一条信息,Symfony执行以下简明流程: