Rumah > rangka kerja php > ThinkPHP > Bagaimanakah saya melaksanakan pengantarabangsaan (I18N) dan penyetempatan (L10N) dalam ThinkPHP?

Bagaimanakah saya melaksanakan pengantarabangsaan (I18N) dan penyetempatan (L10N) dalam ThinkPHP?

James Robert Taylor
Lepaskan: 2025-03-12 17:48:43
asal
974 orang telah melayarinya

Melaksanakan 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:

  1. 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 [ &#39;hello&#39; => 'Hello', 'welcome' => 'Welcome to our website!', 'login' => 'Login', ];</code>
Salin selepas log masuk
  1. 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 ).
  2. 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>
Salin selepas log masuk
  1. 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>
Salin selepas log masuk

Ingatlah untuk mengendalikan kesilapan yang berpotensi dengan anggun jika kunci terjemahan hilang.

Amalan terbaik untuk menguruskan rentetan yang diterjemahkan dalam aplikasi ThinkPhp

  1. Gunakan konvensyen penamaan yang konsisten: Mengekalkan konvensyen penamaan yang jelas dan konsisten untuk kunci bahasa anda. Ini meningkatkan penyelenggaraan dan mengurangkan kesilapan.
  2. Fail bahasa berpusat: Simpan semua fail bahasa anda dalam direktori tunggal yang teratur.
  3. Kawalan Versi: Jejaki fail bahasa anda dalam Sistem Kawalan Versi anda (GIT) untuk menguruskan perubahan dan terjemahan dengan cekap.
  4. 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.
  5. Terjemahan kontekstual: Jika mungkin, berikan konteks dalam kekunci bahasa anda untuk mengelakkan kekaburan. Sebagai contoh, bukan hanya 'submit' , gunakan 'submit_form' .
  6. 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>
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan