Artikel ini menyelidiki teknik canggih untuk menggunakan perpustakaan GetText di PHP, yang memberi tumpuan kepada kawasan sandaran, penukaran locale, dan domain mesej yang mengatasi.
Konsep Utama:
msgids
dalam domain lain menyelaraskan terjemahan dan meningkatkan prestasi. Elakkan menterjemahkan bahasa lalai kepada dirinya sendiri. dgettext()
untuk menukar antara domain terjemahan berganda. Ingat bahawa gettext()
hanya menggunakan satu domain lalai, ditetapkan melalui textdomain()
, manakala dgettext()
memerlukan domain untuk menjadi pra-terikat menggunakan bindtextdomain()
. Struktur direktori dan sandaran sandaran:
Struktur direktori optimum mengelakkan terjemahan yang tidak perlu dari locale lalai (mis., En_us). Daripada menggunakan pengenal seperti "hello_world", gunakan rentetan bahasa lalai sebenar secara langsung sebagai. Pendekatan ini meminimumkan overhead pemprosesan. msgid
Contoh Fail Terjemahan (
): .po
.mo
French (
fr_FR
Bahasa Sepanyol (
<code>#Test token 1 msgid "Hello World!" msgstr "Bonjour tout le monde!" #Test token 2 msgid "Testing Translation..." msgstr "Test de traduction..."</code>
arabic (es_ES
):
<code>#Test token 1 msgid "Hello World!" msgstr "¡Hola mundo!" #Test token 2 msgid "Testing Translation..." msgstr "Prueba de traducción..."</code>
ar_EG
Switching locales:
<code>#Test token 1 msgid "Hello World!" msgstr "!أهلا بالعالم" #Test token 2 msgid "Testing Translation..." msgstr "...اختبار الترجمة"</code>
Fail menguruskan pemilihan locale menggunakan parameter atau sesi:
penggunaan sampel dalam locale.php
:
<?php session_start(); $language = isset($_GET["lang"]) ? $_GET["lang"] : (isset($_SESSION["lang"]) ? $_SESSION["lang"] : "en_US"); $_SESSION["Language"] = $language; $folder = "Locale"; $domain = "messages"; $encoding = "UTF-8"; putenv("LANG=" . $language); setlocale(LC_ALL, $language); bindtextdomain($domain, $folder); bind_textdomain_codeset($domain, $encoding); textdomain($domain); ?>
mengakses test-locale.php
akan mengeluarkan terjemahan Perancis.
<?php require_once "locale.php"; echo _("Hello World!"), "<br></br>"; echo _("Testing Translation..."); ?>
Mengatasi domain semasa: test-locale.php?lang=fr_FR
Gunakan untuk mengakses terjemahan dari domain yang berbeza (mis., "Kesilapan"). Secara penting, ingat untuk mengikat domain ini menggunakan dalam
:
dgettext()
bindtextdomain()
dalam locale.php
:
<?php // ... (locale.php code) ... bindtextdomain("errors", "Locale"); bind_textdomain_codeset("errors", "UTF-8"); // ... (rest of locale.php code) ... ?>
Ini akan menterjemahkan "ralat mendapatkan kandungan" dengan betul dan "data penjimatan ralat" jika terjemahan wujud dalam domain "ralat" untuk lokasi yang dipilih. test-locale.php
<?php // ... (include locale.php) ... echo "<br></br>"; echo dgettext("errors", "Error getting content"), "<br></br>"; echo dgettext("errors", "Error saving data"); ?>
Bahagian ini meringkaskan pembelajaran utama dan memberikan jawapan kepada soalan-soalan yang sering ditanya mengenai penyetempatan PHP, yang meliputi topik seperti amalan terbaik, mengendalikan plural, bahasa kanan ke kiri, dan menguruskan terjemahan. Bahagian FAQ adalah luas dan memberikan maklumat mendalam mengenai pelbagai aspek penyetempatan PHP. Bahagian FAQ asal telah dikekalkan secara keseluruhannya.
Atas ialah kandungan terperinci phpmaster | Lokalisasi Aplikasi PHP Bahagian 3: Nov 2011 - SitePoint. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!