Tutorial ini menunjukkan cara menambah sokongan pelbagai bahasa kepada aplikasi PHP menggunakan Twig dan GetText. Ia jauh lebih cepat daripada penyelesaian Userland seperti komponen terjemahan Symfony. Kami akan mengubahsuai aplikasi Inggeris sahaja (NOFW) yang sedia ada (NOFW) untuk menggambarkan ini.
Kelebihan utama:
xgettext
Persediaan dan Fundamental: .po
.mo
i18n
kami akan menggunakan Homestead bertambah baik (dengan asumsi getText sudah dipasang; arahan untuk pemasangan manual disediakan kemudian). Kerana NOFW menggunakan ranting, lanjutan (Nota: Klon ini versi NOFW yang lebih tua tanpa pengantarabangsaan terbina dalam untuk tujuan tutorial.)
i18n
Ikuti NOFW ReadMe untuk mengkonfigurasi pangkalan data. Permohonan sekarang harus berjalan.
git clone https://github.com/swader/nofw cd nofw git checkout tags/2.93 -b 2.93 composer require twig/extensions
GetText menggunakan atau aliasnya
Mari uji ini dengan fail PHP yang mudah (di luar Twig) untuk mengesahkan fungsi getText. Buat
:
Buat struktur direktori: gettext("string")
_("string")
Kod menetapkan bahasa, lokasi, dan domain untuk getText. Menjalankan ini akan echo "hello_world" kerana fail bahasa hilang. i18n.php
<?php $language = "en_US.UTF-8"; putenv("LANGUAGE=" . $language); setlocale(LC_ALL, $language); $domain = "messages"; bindtextdomain($domain, "Locale"); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); echo _("HELLO_WORLD");
Gunakan untuk mengekstrak rentetan dari fail anda:
Ini mencipta
(templat objek mudah alih). Menjana fail Bahasa Inggeris :
edit xgettext
, menterjemahkan "hello_world" (mis., Untuk "howdy"). Disusun untuk
xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php
messages.pot
.po
Menambah bahasa baru (mis., Croatian):
msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot
sudo locale-gen hr_HR hr_HR.UTF-8; sudo update-locale; sudo dpkg-reconfigure locales
.po
: mkdir -p Locale/hr_HR/LC_MESSAGES; msginit --locale=hr_HR --output-file=Locale/hr_HR/LC_MESSAGES/messages.po --input=Locale/messages.pot
messages.po
. .mo
: msgfmt -c -o Locale/hr_HR/LC_MESSAGES/messages.mo Locale/hr_HR/LC_MESSAGES/messages.po
i18n.php
lokasi ke hr_HR.UTF-8
dan ujian. Restart pelayan mungkin diperlukan. integrasi ranting:
tambahkan ini ke app/config/config_web.php
:
git clone https://github.com/swader/nofw cd nofw git checkout tags/2.93 -b 2.93 composer require twig/extensions
Dalam templat ranting anda, gunakan blok trans
:
<?php $language = "en_US.UTF-8"; putenv("LANGUAGE=" . $language); setlocale(LC_ALL, $language); $domain = "messages"; bindtextdomain($domain, "Locale"); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); echo _("HELLO_WORLD");
xgettext
tidak mengendalikan ranting secara langsung, jadi kami akan menggunakan mekanisme caching. Buat app/bin/twigcache.php
:
xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php
kemudian mengekstrak rentetan dari fail cache:
msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot
kemas kini .po
fail menggunakan msgmerge
dan recompile .mo
fail.
Tutorial menyediakan skrip bash (
,, addlang.sh
, update-pot.sh
) untuk mengautomasikan proses menambah bahasa, mengemas kini update-mo.sh
dan config.sh
fail. Skrip ini terperinci dalam teks asal. .pot
.mo
Pastikan getText dipasang dan tempatan dijana pada pelayan anda. Di Ubuntu:
fail
,msgfmt -c -o Locale/en_US/LC_MESSAGES/messages.mo Locale/en_US/LC_MESSAGES/messages.po
hendaklah menjadi sebahagian daripada kawalan versi anda. Menyesuaikan arahan pemasangan dan skrip untuk sistem bukan Ubuntu. Bahagian FAQS menyediakan maklumat lanjut dan maklumat penyelesaian masalah. .pot
Atas ialah kandungan terperinci Aplikasi ranting pelbagai bahasa yang mudah dengan gettext. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!