YII menawarkan sokongan yang mantap untuk pengantarabangsaan (I18N) dan penyetempatan (L10N) melalui mekanisme terjemahan mesej terbina dalam dan integrasinya dengan pelbagai perpustakaan pemformatan tarikh/nombor. Inti fungsi I18N YII bergantung pada kaedah Yii::t()
. Kaedah ini mengambil tiga argumen: kategori (rentetan yang mengenal pasti sumber mesej), mesej itu sendiri, dan pelbagai pilihan parameter untuk digantikan ke dalam mesej. Mesej disimpan dalam fail terjemahan mesej, biasanya dianjurkan oleh bahasa dan kategori.
Sebagai contoh, untuk menterjemahkan mesej "Hello, World!" ke dalam bahasa yang berbeza, anda terlebih dahulu membuat fail terjemahan mesej (misalnya, messages/en/app.php
, messages/es/app.php
) yang mengandungi array seperti ini:
<code class="php">// messages/en/app.php return [ 'Hello, world!' => 'Hello, world!', ]; // messages/es/app.php return [ 'Hello, world!' => '¡Hola, mundo!', ];</code>
Kemudian, dalam kod anda, anda akan menggunakan Yii::t()
seperti demikian:
<code class="php">echo Yii::t('app', 'Hello, world!');</code>
YII secara automatik akan mengesan bahasa aplikasi (biasanya berdasarkan tetapan pengguna atau keutamaan penyemak imbas) dan mengambil terjemahan yang sesuai. Anda boleh mengkonfigurasi bahasa aplikasi menggunakan harta language
dalam konfigurasi aplikasi anda. Selanjutnya, anda boleh menggunakan harta Yii::$app->language
untuk mengakses dan menukar bahasa semasa dalam permohonan anda. Ini membolehkan pendekatan yang fleksibel dan dinamik untuk menguruskan bahasa beralih dalam pengalaman pengguna. Ingatlah untuk mengendalikan pengecualian yang berpotensi di mana terjemahan mungkin hilang. Pertimbangkan untuk menyediakan mekanisme sandaran atau nilai lalai.
Pengurusan terjemahan yang berkesan di YII memerlukan pendekatan berstruktur:
{name}
) dalam rentetan mesej anda untuk membolehkan penggantian nilai dinamik. Ini meningkatkan fleksibiliti dan mengurangkan keperluan untuk pelbagai terjemahan untuk mesej yang sama. YII memanfaatkan kelas IntlDateFormatter
dan NumberFormatter
dari lanjutan PHP INTL untuk mengendalikan format tarikh dan nombor yang berbeza untuk pelbagai tempat. Pastikan pelanjutan INTL didayakan dalam konfigurasi PHP anda.
Untuk pemformatan tarikh, anda akan menggunakan Yii::$app->formatter->asDate()
atau Yii::$app->formatter->asDatetime()
, menyatakan format dan locale. Contohnya:
<code class="php">echo Yii::$app->formatter->asDate('2024-03-08', 'long', 'fr-FR'); // French (France) long date format echo Yii::$app->formatter->asDateTime('2024-03-08 10:30:00', 'medium', 'de-DE'); // German (Germany) medium date and time format</code>
Begitu juga, untuk pemformatan nombor, gunakan Yii::$app->formatter->asDecimal()
, Yii::$app->formatter->asInteger()
, Yii::$app->formatter->asCurrency()
, dan sebagainya, menyediakan nombor, format, dan locala:
<code class="php">echo Yii::$app->formatter->asDecimal(1234.56, ['locale' => 'en-US']); // US English decimal format echo Yii::$app->formatter->asCurrency(1234.56, ['currencyCode' => 'EUR', 'locale' => 'de-DE']); // Euro currency in German (Germany) format</code>
Ingatlah untuk mengkonfigurasi komponen formatter
dalam konfigurasi aplikasi anda untuk menentukan pilihan pemformatan lalai dan tempatan. Ini membolehkan pengurusan pusat keutamaan pemformatan. Anda boleh menimpa lalai ini pada dasar per-panggilan seperti yang ditunjukkan dalam contoh di atas.
Melaksanakan I18N dan L10N dalam YII dapat mengemukakan beberapa cabaran:
Yii::t()
, tetapi mengendalikan perjanjian jantina mungkin memerlukan lebih banyak logik tersuai. Gunakan ciri pluralisasi terbina dalam rangka kerja di mana mungkin.Mengatasi cabaran ini memerlukan perancangan yang teliti, pendekatan berstruktur untuk pengurusan terjemahan, dan penggunaan alat dan teknik yang sesuai. Ujian menyeluruh di pelbagai bahasa dan pelayar adalah penting untuk memastikan pengalaman pengguna yang konsisten dan berkualiti tinggi.
Atas ialah kandungan terperinci Bagaimanakah saya melaksanakan pengantarabangsaan (I18N) dan penyetempatan (L10N) dalam YII?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!