


Bagaimanakah saya melaksanakan pengantarabangsaan (I18N) dan penyetempatan (L10N) dalam ThinkPHP?
Mar 12, 2025 pm 05:48 PMMelaksanakan Pengantarabangsaan (I18N) dan Penyetempatan (L10N) dalam ThinkPHP
ThinkPHP tidak mempunyai sokongan I18N/L10N yang komprehensif seperti beberapa kerangka yang lebih besar. Walau bagaimanapun, anda boleh melaksanakannya dengan berkesan menggunakan gabungan teknik dan berpotensi memanfaatkan perpustakaan luaran. Strategi teras melibatkan memisahkan rentetan yang diterjemahkan dari kod anda dan menggunakan mekanisme untuk memilih terjemahan yang sesuai berdasarkan lokasi pengguna.
Inilah pendekatan yang sama:
- Buat fail bahasa: Buat fail bahasa yang berasingan (misalnya,
en.php
,es.php
,fr.php
) dalam direktori khusus (misalnya,application/lang
). Setiap fail akan mengandungi array bersekutu di mana kunci mewakili pengenal unik untuk rentetan dan nilai anda mewakili teks yang diterjemahkan. Sebagai contoh,en.php
:
<code class="php"><?php return [ 'hello' => 'Hello', 'welcome' => 'Welcome to our website!', 'login' => 'Login', ];</code>
-
Pengesanan bahasa: Tentukan bahasa pilihan pengguna. Ini boleh dilakukan melalui beberapa kaedah:
- Pelayar Locale: Gunakan
$_SERVER['HTTP_ACCEPT_LANGUAGE']
untuk mendapatkan bahasa pilihan penyemak imbas. Ini sering tidak boleh dipercayai, tetapi titik permulaan yang baik. - Keutamaan Pengguna: Simpan bahasa pilihan pengguna dalam pangkalan data atau sesi. Ini memberikan pengalaman yang lebih tepat dan konsisten.
- Parameter URL: Benarkan pengguna menentukan bahasa secara langsung dalam URL (misalnya,
/en
,/es
).
- Pelayar Locale: Gunakan
- Memuatkan Bahasa: Muatkan fail bahasa yang sesuai berdasarkan lokasi yang dikesan. Anda boleh menggunakan kelas
Lang
ThinkPhp (jika tersedia dalam versi anda) atau fungsi tersuai. Contoh menggunakan fungsi tersuai:
<code class="php">function loadLanguage($locale = 'en') { $langFile = APP_PATH . 'lang/' . $locale . '.php'; if (file_exists($langFile)) { return require $langFile; } return []; // Fallback to default language } $lang = loadLanguage(getLocale()); // getLocale() is a helper function to detect the locale</code>
- Menggunakan rentetan yang diterjemahkan: Akses rentetan yang diterjemahkan menggunakan kekunci yang ditakrifkan dalam fail bahasa anda. Contohnya:
<code class="php">echo $lang['hello']; // Outputs "Hello" (or the translation in the selected language)</code>
Ingatlah untuk mengendalikan kesilapan yang berpotensi dengan anggun jika kunci terjemahan hilang.
Amalan terbaik untuk menguruskan rentetan yang diterjemahkan dalam aplikasi ThinkPhp
- Gunakan konvensyen penamaan yang konsisten: Mengekalkan konvensyen penamaan yang jelas dan konsisten untuk kunci bahasa anda. Ini meningkatkan penyelenggaraan dan mengurangkan kesilapan.
- Fail bahasa berpusat: Simpan semua fail bahasa anda dalam direktori tunggal yang teratur.
- Kawalan Versi: Jejaki fail bahasa anda dalam Sistem Kawalan Versi anda (GIT) untuk menguruskan perubahan dan terjemahan dengan cekap.
- Alat Pengurusan Terjemahan: Pertimbangkan menggunakan alat pengurusan terjemahan (contohnya, PoEditor, Crowdin) untuk memudahkan kerjasama dengan penterjemah dan menguruskan projek yang lebih besar. Alat ini sering membolehkan anda mengeksport/mengimport fail bahasa dalam pelbagai format.
- Terjemahan kontekstual: Jika mungkin, berikan konteks dalam kekunci bahasa anda untuk mengelakkan kekaburan. Sebagai contoh, bukan hanya
'submit'
, gunakan'submit_form'
. - Kemas kini secara berkala: Pastikan fail bahasa anda dikemas kini untuk mencerminkan sebarang perubahan dalam teks aplikasi anda.
Mengendalikan format tarikh dan nombor yang berbeza dengan i18n dan l10n dalam thinkPhp
ThinkPhp tidak mempunyai i18n terbina dalam tarikh dan pemformatan nombor. Anda perlu menggunakan pelanjutan Intl
PHP. Pastikan ia didayakan dalam konfigurasi PHP anda.
Kelas IntlDateFormatter
dan NumberFormatter
dalam lanjutan Intl
adalah penting. Inilah contoh:
<code class="php">use IntlDateFormatter; use NumberFormatter; // ... (Language detection as before) ... $formatter = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE); echo $formatter->format(time()); // Formats the current date according to the locale $numberFormatter = new NumberFormatter($locale, NumberFormatter::DECIMAL); echo $numberFormatter->format(1234.56); // Formats the number according to the locale</code>
Ingatlah untuk menyesuaikan pemalar gaya IntlDateFormatter
(misalnya, IntlDateFormatter::SHORT
, IntlDateFormatter::MEDIUM
) untuk memadankan format tarikh/masa yang anda inginkan. Begitu juga, laraskan gaya NumberFormatter
seperti yang diperlukan.
Sambungan atau pakej yang sedia ada untuk memudahkan pelaksanaan i18n/l10n dalam thinkPhp
Tidak ada sambungan ThinkPHP yang khusus, khusus yang hanya tertumpu pada I18N/L10N. Pendekatan yang digariskan di atas biasanya mencukupi. Walau bagaimanapun, anda boleh memanfaatkan perpustakaan PHP yang ada seperti:
- GetText: Perpustakaan GNU Gettext yang digunakan secara meluas menyediakan rangka kerja yang mantap untuk pengantarabangsaan. Anda perlu mengintegrasikannya secara manual ke dalam projek ThinkPhp anda. Ini memerlukan lebih banyak persediaan tetapi menawarkan pendekatan yang kuat dan standard.
- Komponen Terjemahan Symfony: Walaupun tidak khusus untuk ThinkPhp, komponen terjemahan Symfony adalah perpustakaan yang dianggap baik yang boleh diintegrasikan ke dalam projek anda untuk mengendalikan aspek terjemahan. Ini memerlukan lebih banyak kerja untuk mengintegrasikannya dengan struktur aplikasi ThinkPHP anda.
Ingatlah bahawa untuk aplikasi yang lebih mudah, pendekatan manual yang diterangkan dalam bahagian pertama mungkin mencukupi. Untuk projek yang lebih besar dengan banyak terjemahan, pendekatan yang lebih berstruktur menggunakan gettext
atau perpustakaan yang sama mungkin lebih baik. Berhati -hati menimbang kerumitan integrasi terhadap manfaat sebelum memilih perpustakaan tertentu.
Atas ialah kandungan terperinci Bagaimanakah saya melaksanakan pengantarabangsaan (I18N) dan penyetempatan (L10N) dalam ThinkPHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
