


Menguruskan terjemahan gettext pada hosting bersama
mata teras
- GetText adalah kaedah yang popular untuk pengurusan terjemahan laman web PHP, tetapi ia mempunyai kelemahan yang signifikan: Terjemahan Caches Apache, yang bermaksud bahawa melainkan jika enjin dimulakan semula, kemas kini ke fail yang diterjemahkan tidak akan dapat dilihat. Ini amat bermasalah pada hosting bersama, kerana keistimewaan pentadbir sering tidak tersedia.
- Audero Shared GetText adalah perpustakaan PHP yang membolehkan pemaju memintas cache Apache yang dimuatkan melalui fungsi gettext (). Perpustakaan menggunakan helah mudah untuk membuat salinan cermin fail terjemahan, menipu Apache untuk memikirkannya sebagai terjemahan yang baru, tidak relevan, dengan itu mengelakkan masalah caching.
- Audero Shared GetText boleh dipasang melalui komposer, git, atau memuat turun arkib dari repositori. Selepas pemasangan, pemaju boleh menggunakan autoloader komposer untuk memuat kelas secara dinamik dan membuat contoh SharedGette.
- Perpustakaan ini memerlukan PHP 5.3 atau lebih tinggi kerana ia menggunakan ruang nama dan dikeluarkan di bawah lesen CC BY-NC 4.0 dan boleh didapati secara percuma. Dua kaedah utamanya ialah updateTranslation (), yang mencipta salinan cermin fail terjemahan, dan DeleteoldTranslations (), yang memadamkan semua salinan dalam folder terjemahan yang dipilih kecuali salinan cermin terkini.
NOTA: Jika anda tidak biasa dengan konsep i18n, terjemahan dan getText, saya sangat mengesyorkan agar anda membaca siri ini sebelum meneroka artikel ini lebih lanjut. Ia akan memberi anda maklumat yang lebih terperinci daripada gambaran ringkas yang anda dapati di sini dan membantu anda memahami topik -topik ini dengan lebih baik.
Tetapan Alam Sekitar
Terdapat banyak cara untuk menggunakan terjemahan dalam PHP. Cara paling mudah yang saya dapat ingat adalah untuk mempunyai array bersekutu yang mengandungi semua rentetan yang diterjemahkan dan kemudian gunakan kunci untuk mengambil rentetan yang betul. Seperti yang anda fikirkan, penyelesaian ini tidak berskala dan anda harus mengelakkan menggunakan penyelesaian ini melainkan anda bekerja pada projek yang sangat kecil (mungkin tidak lebih daripada 5 baris kod). Untuk terjemahan yang serius, kita boleh menggunakan gettext. Pendekatan ini membolehkan kita mempunyai fail yang berbeza untuk setiap bahasa sasaran, yang membantu mengekalkan pemisahan antara logik perniagaan, lapisan persembahan, dan terjemahan (yang boleh kita fikirkan sebagai tambahan kepada lapisan persembahan). Dengan GetText, kita dapat selaras dengan proses ini kerana apabila kita memproses ciri -ciri tertentu laman web, penterjemah masih boleh menggunakan perisian seperti poedit untuk diterjemahkan.
terjemahan hendaklah disimpan dalam laluan dengan struktur tetap. Pertama, kami akan mempunyai folder root yang dinamakan mengikut keutamaan anda (mis. "Bahasa"). Di dalamnya, kita mesti membuat folder untuk setiap bahasa sasaran, yang namanya mesti mematuhi piawaian ISO 3166. Oleh itu, nama -nama yang sah untuk terjemahan Itali boleh menjadi "it_it" (Itali Itali), "it_ch" (Itali Swiss), "en_us" (Amerika Inggeris), dan sebagainya. Dalam folder dengan kod bahasa, kita mesti mempunyai folder yang dipanggil "lc_messages", di mana kita akan menyimpan fail terjemahan.
PoEdit menganalisis kod sumber laman web dan mengekstrak rentetan yang akan diterjemahkan berdasarkan satu atau lebih corak yang kami tetapkan dalam perisian. Ia menjimatkan rentetan dalam satu fail dengan sambungan .po (objek mudah alih), yang perisian (atau setaraf) disusun ke dalam fail .mo binari. Yang terakhir adalah format yang kami berminat dengan fungsi GetText () PHP. Fail .Mo adalah fail yang perlu kita letakkan dalam direktori "lc_messages" yang kami buat sebelum ini.
kod sampel menggunakan getText () adalah seperti berikut (kod telah dikomentari supaya anda dapat dengan cepat memahami fungsinya):
<?php // 包含翻译文件的根文件夹的名称 $translationsPath = 'languages'; // 要翻译到的语言 $language = 'it_IT'; // 翻译文件的名称(在gettext中称为域) $domain = 'audero'; // 指示此会话将使用哪种语言 putenv("LANG=" . $language); setlocale(LC_ALL, $language); // 设置当前域的路径 bindtextdomain($domain, $translationsPath); // 指定字符编码 bind_textdomain_codeset($domain, 'UTF-8'); // 选择域 textdomain($domain); // 调用gettext()函数(它有一个名为_()的别名) echo gettext("HELLO_WORLD"); // 等效于echo _("HELLO_WORLD"); ?>
Selepas menyimpan kod sebelumnya di halaman dan memuatkannya dalam penyemak imbas, jika getText () dapat mencari fail terjemahan, anda akan melihat terjemahan yang anda buat pada skrin.
Setakat ini, semuanya berjalan lancar. Berita buruk ialah apabila terjemahan dimuatkan, Apache cache itu. Oleh itu, melainkan jika kita boleh memulakan semula enjin, sebarang kemas kini ke fail terjemahan tidak akan dipaparkan. Ini amat menjengkelkan jika kita bekerja di hosting bersama dan tidak mempunyai keistimewaan pentadbir. Bagaimana menyelesaikan masalah ini? Audero dikongsi getText datang untuk menyelamatkan!
Apa itu Audero Shared GetText
Audero Shared GetText adalah perpustakaan PHP (sebenarnya hanya kelas, tetapi biarkan saya bermimpi mengenainya) yang membolehkan anda memintas isu terjemahan yang dimuatkan melalui fungsi gettex () yang di -cache oleh Apache. Perpustakaan ini mengambil pendekatan yang mudah dan berkesan, jadi anda akan sentiasa menggunakan terjemahan terkini. Audero dikongsi getText memerlukan Php 5.3 atau lebih tinggi kerana ia menggunakan ruang nama dan terdapat struktur yang diterangkan dalam bahagian sebelumnya. Ia mempunyai dua kaedah utama: updateTranslation () dan DeleteoldTranslations (). Yang pertama adalah teras perpustakaan dan juga cara untuk melaksanakan teknik ini. Tetapi apakah teknik ini? Mari kita lihat kodnya untuk mengetahui lebih lanjut. Untuk memahaminya sepenuhnya, perlu menekankan bahawa pembina kelas menerima jalan untuk menyimpan terjemahan, bahasa yang akan diterjemahkan ke, dan nama (domain) fail yang diterjemahkan.
<?php // 包含翻译文件的根文件夹的名称 $translationsPath = 'languages'; // 要翻译到的语言 $language = 'it_IT'; // 翻译文件的名称(在gettext中称为域) $domain = 'audero'; // 指示此会话将使用哪种语言 putenv("LANG=" . $language); setlocale(LC_ALL, $language); // 设置当前域的路径 bindtextdomain($domain, $translationsPath); // 指定字符编码 bind_textdomain_codeset($domain, 'UTF-8'); // 选择域 textdomain($domain); // 调用gettext()函数(它有一个名为_()的别名) echo gettext("HELLO_WORLD"); // 等效于echo _("HELLO_WORLD"); ?>
Perkara pertama yang perlu dilakukan oleh kaedah ini adalah untuk menguji sama ada fail terjemahan binari asal (.mo fail) wujud. Jika ia tidak wujud, kaedah melemparkan pengecualian. Ia kemudian mengira laluan penuh ke fail yang diterjemahkan berdasarkan parameter yang diberikan kepada pembina dan timestamp yang diubah suai terakhir fail. Selepas itu, ia mewujudkan rentetan baru yang menggabungkan domain asal dengan cap waktu yang dikira sebelumnya. Setelah selesai, inilah helah, yang membuat salinan cermin fail terjemahan. Jika fail dengan nama sedemikian sudah ada, kelas cukup pintar untuk mengelakkan penyalinan ini. Akhirnya, ia mengembalikan nama baru yang akan digunakan dalam bindTextDomain (), bind_textdomain_codeset (), dan textDomain (). Melakukannya, Apache akan melihat bahawa terjemahan itu seperti tidak ada kaitan dengan terjemahan asal, dengan itu mengelakkan masalah caching. Seperti yang saya katakan, mudah dan berkesan!
"Aurelio hebat!", Anda berfikir, "tetapi kemudian folder saya akan kembung dengan salinan ini." Inilah sebabnya saya mencipta DeleteoldTranslations (). Ia memadam semua salinan cermin folder terjemahan yang dipilih kecuali yang terakhir.
Sekarang anda telah mempelajari apa yang dikongsi GetText Audero dan apa yang boleh dilakukan untuk anda, mari kita lihat bagaimana untuk mendapatkannya.
Memasang Audero Shared GetText
anda boleh mendapatkan "Audero Shared GetText" melalui komposer, menambah baris berikut ke komposer.json anda:
/** * 创建翻译文件的镜像副本 * * @return string 创建的翻译文件的名称(在gettext中称为域) * * @throws \Exception 如果找不到翻译文件 */ public function updateTranslation() { if (!self::translationExists()) { throw new \Exception('在给定路径中找不到翻译文件。'); } $originalTranslationPath = $this->getTranslationPath(); $lastAccess = filemtime($originalTranslationPath); $newTranslationPath = str_replace(self::FILE_EXTENSION, $lastAccess . self::FILE_EXTENSION, $originalTranslationPath); if(!file_exists($newTranslationPath)) { copy($originalTranslationPath, $newTranslationPath); } return $this->domain . $lastAccess; }
kemudian jalankan arahan pemasangan untuk menghuraikan dan memuat turun kebergantungan:
"require": { "audero/audero-shared-gettext": "1.0.*" }
Komposer akan memasang perpustakaan ke direktori vendor/audero projek anda.
Jika anda tidak mahu menggunakan komposer (anda sepatutnya), anda boleh mendapatkan getText berkongsi Audero melalui Git dengan menjalankan arahan berikut:
php composer.phar install
Pilihan terakhir yang anda miliki ialah mengakses repositori dan memuat turunnya sebagai arkib.
Cara menggunakan Audero Shared GetText
Katakan anda mendapat Audero berkongsi getText menggunakan komposer, yang anda boleh bergantung pada autoloadernya untuk memuatkan kelas secara dinamik. Kemudian anda perlu membuat contoh SharedGetTex dan hubungi kaedah yang anda perlukan. Anda boleh menggunakan salah satu kaedah yang disebutkan di atas seperti yang ditunjukkan dalam contoh berikut.
git clone https://github.com/AurelioDeRosa/Audero-Shared-Gettext.git
Kesimpulan
Artikel ini memperkenalkan anda kepada Audero yang dikongsi GetText, perpustakaan mudah (baik ... kelas) yang membolehkan anda memintas isu terjemahan yang dimuatkan melalui fungsi gettext () yang di -cache oleh Apache. Audero berkongsi Gettext mempunyai keserasian yang luas kerana ia memerlukan anda mempunyai sekurang -kurangnya Php 5.3 (ia telah dikeluarkan untuk seketika) kerana ia menggunakan ruang nama. Jangan ragu untuk menggunakan demo dan fail yang terkandung dalam repositori, dan jika anda menemui masalah, serahkan permintaan dan soalan tarik. Saya telah mengeluarkan Audero Shared GetText di bawah lesen CC BY-NC 4.0 supaya ia bebas untuk digunakan.
Adakah anda menghadapi masalah ini? Bagaimana anda menyelesaikannya? Jangan malu dan hantarkan penyelesaian anda dalam komen!
(Berikut adalah bahagian FAQ, yang telah pseudo-asal berdasarkan teks asal dan teks asal disimpan dalam fikiran)
FAQS (FAQ) Mengenai Menguruskan terjemahan GetText pada hosting dikongsi
bagaimana memasang getText pada hosting saya yang dikongsi?
Memasang getText pada hosting bersama boleh menjadi agak rumit, kerana anda mungkin tidak mempunyai akses root. Walau bagaimanapun, anda masih boleh memasangnya melalui CPanel atau Plesk. Dalam cPanel, anda boleh mencari pilihan untuk membolehkan GetText di bawah bahagian PILIH PHP Versi. Di Plesk, anda boleh mengaktifkannya di bawah bahagian "Tetapan PHP". Jika anda tidak dapat mencari pilihan ini, anda mungkin perlu menghubungi penyedia hosting anda untuk mendapatkan bantuan.
Mengapa terjemahan gettext saya tidak berfungsi?
Terjemahan GetText anda tidak berfungsi untuk beberapa sebab. Masalah biasa ialah fail .mo tidak disusun dengan betul atau laluan fail tidak betul. Pastikan fail .mo berada dalam direktori yang betul dan laluan fail dalam kod adalah betul. Satu lagi masalah mungkin bahawa lokasi yang anda gunakan tidak disokong oleh pelayan. Anda boleh menyemak ini dengan perintah locale -a.
bagaimana untuk debug terjemahan gettext?
Debugging GetText Translation boleh dilakukan dengan memeriksa kesilapan dalam fail .po dan .mo. Anda boleh membuka fail ini menggunakan alat seperti poEdit dan periksa sebarang kesilapan sintaks. Di samping itu, anda boleh menggunakan fungsi gettext dalam kod anda untuk memeriksa sama ada terjemahan yang diambil dengan betul. Jika fungsi mengembalikan rentetan asal, terjemahan tidak dapat dijumpai.
Bolehkah saya menggunakan getText di WordPress?
Ya, anda boleh menggunakan getText dalam WordPress. WordPress menggunakan GetText sebagai rangka kerja penyetempatannya. Anda boleh menggunakan fungsi __ () dan _e () dalam WordPress untuk mendapatkan terjemahan. Fungsi ini menggunakan getText di latar belakang.
Bagaimana untuk mengemas kini terjemahan getText saya?
anda boleh mengemas kini terjemahan getText anda dengan mengemas kini fail .po dan kemudian menyusunnya ke dalam fail .mo. Fail .po adalah fail teks biasa yang boleh anda buka dengan mana -mana editor teks. Sebaik sahaja perubahan dilakukan, anda boleh menggunakan alat seperti poEdit untuk menyusun fail .po ke dalam fail .mo.
Kenapa saya mendapat ralat "Pakej PHP-GETTEXT tidak dapat dijumpai"?
Ralat ini biasanya berlaku apabila pakej tidak tersedia di repositori pelayan anda menggunakan. Anda boleh cuba mengemas kini senarai pakej anda menggunakan arahan kemas kini SUDO Apt-GET. Jika ralat berterusan, anda mungkin perlu menambah repositori lain atau memasang pakej secara manual.
bagaimana menggunakan getText dalam php?
Anda boleh menggunakan getText dalam PHP dengan menggunakan fungsi getText. Fungsi ini mengambil rentetan sebagai hujah dan mengembalikan rentetan yang diterjemahkan. Sebelum anda boleh menggunakan fungsi ini, anda perlu menetapkan fungsi locale menggunakan fungsi setLocale dan tentukan laluan ke fail .mo menggunakan fungsi bindTextDomain.
Bolehkah saya menggunakan gettext di ubuntu?
Ya, anda boleh menggunakan getText di Ubuntu. Anda boleh memasangnya menggunakan perintah GetText pemasangan Sudo Apt-Get. Selepas pemasangan, anda boleh menggunakan arahan gettext di terminal untuk mengendalikan fail .po dan .mo.
bagaimana membuat fail .po dan .mo?
anda boleh membuat fail .po dan .mo menggunakan alat seperti poEdit. Alat ini membolehkan anda membuat dan mengedit fail .po dan secara automatik menyusunnya ke dalam fail .mo. Anda juga boleh membuat fail .po secara manual menggunakan editor teks, tetapi anda memerlukan alat seperti poEdit atau MSGFMT untuk menyusunnya ke dalam fail .mo.
Apakah perbezaan antara.po dan .mo fail?
.po Fail adalah fail teks biasa yang mengandungi rentetan asal dan terjemahannya. Mereka boleh dibuka dan diedit menggunakan mana -mana editor teks. Sebaliknya, fail .mo adalah fail binari yang dihasilkan dari fail .po. Mereka digunakan oleh gettext untuk mendapatkan terjemahan semasa runtime.
Atas ialah kandungan terperinci Menguruskan terjemahan gettext pada hosting bersama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

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)

Topik panas

Alipay Php ...

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Fungsi penghitungan dalam Php8.1 meningkatkan kejelasan dan jenis keselamatan kod dengan menentukan pemalar yang dinamakan. 1) Penghitungan boleh menjadi bilangan bulat, rentetan atau objek, meningkatkan kebolehbacaan kod dan keselamatan jenis. 2) Penghitungan adalah berdasarkan kelas dan menyokong ciri-ciri berorientasikan objek seperti traversal dan refleksi. 3) Penghitungan boleh digunakan untuk perbandingan dan tugasan untuk memastikan keselamatan jenis. 4) Penghitungan menyokong penambahan kaedah untuk melaksanakan logik kompleks. 5) Pemeriksaan jenis dan pengendalian ralat yang ketat boleh mengelakkan kesilapan biasa. 6) Penghitungan mengurangkan nilai sihir dan meningkatkan keupayaan, tetapi memberi perhatian kepada pengoptimuman prestasi.

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.
