Pengantarabangsaan PHP (i18n): Panduan Praktikal untuk Pembangun

more

Yee

Aug 03, 2024

cover-img

Bawa Laman Web PHP Anda ke Peringkat Global: Penyelesaian Pengantarabangsaan yang Lebih Efisien

Jika anda seperti saya dan menyelenggara projek PHP "vanilla" yang tidak bergantung pada rangka kerja besar (seperti Laravel atau Symfony), maka sokongan berbilang bahasa (i18n) mungkin telah menjadi isu kecil yang berterusan.

Penyelesaian tradisional, gettext, walaupun berkuasa, agak rumit untuk dikonfigurasi. Terutamanya dalam projek kecil, ia terasa seperti "menggunakan tukul besar untuk memecahkan kacang." Apa yang sebenarnya kita perlukan ialah kaedah yang boleh dilaksanakan dengan cepat tanpa menambah terlalu banyak kerumitan.

Selepas banyak percubaan dan kesilapan dalam beberapa projek, kami telah membangunkan penyelesaian pengantarabangsaan yang ringan berasaskan fail array PHP dan alat terjemahan dalam talian. Pendekatan ini bukan sahaja mudah untuk digunakan, malah kos penyelenggaraannya juga sangat rendah. Hari ini, saya ingin berkongsi keseluruhan penyelesaian ini dengan anda, tanpa sebarang syarat tersembunyi.

Panduan Praktikal: Bagaimana Saya Berjaya Mendapatkan Sokongan Berbilang Bahasa PHP dengan O.Translator

Idea utama kami sangat mudah: Setiap bahasa diwakili oleh satu fail PHP, yang mengandungi pernyataan return yang memulangkan array asosiatif. Kaedah ini ringkas, intuitif, dan mempunyai impak prestasi yang sangat minimum.

Langkah 1: Rancang Struktur Direktori Anda

Struktur direktori yang jelas adalah separuh daripada kejayaan. Untuk memastikan semuanya teratur, kita akan meletakkan semua fail bahasa dalam satu direktori yang sama dan menamakannya menggunakan kod bahasa, seperti berikut:

project_root/
├── index.php         // Your main logic file
├── i18n/             // Folder for all language files
│   ├── lang.cn.php   // Chinese language pack
│   ├── lang.en.php   // English language pack
│   └── lang.fr.php   // French language pack

Langkah 2: Cipta "Senjata Bahasa" Anda

Seterusnya, kita akan cipta fail bahasa asas. Mari gunakan bahasa Cina sebagai contoh dan cipta fail lang.cn.php. Kandungan fail ini ialah array PHP ringkas, di mana kunci adalah pengecam unik dan nilainya ialah rentetan teks yang sepadan.

Contoh lang.cn.php: Kunci kekal konsisten, nilai berubah mengikut bahasa

Langkah 3: Masuki Dunia Penterjemahan, O.Translator

Menterjemah secara manual berpuluh atau beratus entri? Itulah kerja berulang yang paling tidak digemari oleh pembangun. Di sinilah senjata rahsia kita, O.Translator, memainkan peranan.

Ia adalah platform penterjemahan dokumen dalam talian profesional yang menyokong fail PHP dengan sempurna, membolehkan anda membaca array anda secara terus dan menterjemahkannya ke lebih 70 bahasa.

Prosesnya amat mudah:

  1. Layari laman utama O.Translator dan muat naik fail bahasa asas anda (contohnya, lang.cn.php).
  2. Pilih bahasa sasaran anda, seperti Inggeris dan Perancis.
  3. Klik terjemah, tunggu sebentar, dan fail terjemahan lang.en.php serta lang.fr.php anda akan tersedia untuk dimuat turun.

Apa yang paling menarik perhatian saya ialah O.Translator membolehkan anda pratonton sebahagian terjemahan secara percuma. Jika anda berpuas hati dengan hasilnya, anda boleh membuat keputusan sama ada ingin membayar untuk terjemahan penuh. Menurut kata mereka sendiri: "Jangan pernah bayar untuk produk yang anda tidak puas hati."

Langkah 4: Hidupkan Kod Anda

Semuanya sudah sedia; kita hanya perlukan sentuhan terakhir. Sekarang, mari kita ubah suai fail utama index.php supaya ia boleh memuatkan pek bahasa yang sesuai secara dinamik berdasarkan pilihan pengguna.

<?php

// 1. Determine the current language (using a GET parameter for demonstration)
$supported_langs = ['en', 'cn', 'fr'];
$default_lang = 'en';
$lang = isset($_GET['lang']) && in_array($_GET['lang'], $supported_langs) ? $_GET['lang'] : $default_lang;

// 2. Load the corresponding language file
// Use a global variable like $_ or a specific variable like $TEXTS to store the strings
$_ = require_once __DIR__ . "/i18n/lang.{$lang}.php";

?>

Dalam templat HTML anda, anda boleh memanggil rentetan teks dengan mudah seperti berikut:

<!DOCTYPE html>
<html lang="<?php echo htmlspecialchars($lang); ?>">
<head>
    <meta charset="UTF-8">
    <title><?php echo htmlspecialchars($_['heading_home']); ?></title>
</head>
<body>
    <header>
      <h1><?php echo htmlspecialchars($_['heading_home']); ?></h1>
      <nav>
        <ul>
          <li><?php echo htmlspecialchars($_['heading_about']); ?></li>
          <li><?php echo htmlspecialchars($_['button_read_more']); ?></li>
        </ul>
      </nav>
    </header>
</body>
</html>

Dan kini anda telah berjaya—laman web berbilang bahasa yang ringkas telah terhasil!

Pertimbangan dan Pemikiran Lanjutan

Walaupun penyelesaian ini ringan, terdapat beberapa perkara yang perlu dipertimbangkan sebelum digunakan dalam produksi:

  • Bagaimana untuk mengesan bahasa pengguna? Contoh ini menggunakan parameter GET seperti ?lang=en. Dalam aplikasi sebenar, anda juga boleh menggunakan $_SESSION, $_COOKIE, atau mengurai header permintaan Accept-Language daripada pelayar untuk pengesanan automatik.
  • Pertimbangan Prestasi: Untuk laman web bersaiz kecil hingga sederhana, beban prestasi require_once bagi satu fail PHP pada setiap permintaan adalah sangat kecil. Jika laman anda mempunyai trafik yang tinggi, pertimbangkan untuk menggunakan teknologi caching bytecode seperti APC atau OPcache untuk pengoptimuman lanjut.
  • Kebolehskalaan: Apabila bilangan bahasa atau rentetan teks bertambah, pengurusan fail secara manual boleh menjadi rumit. Pada ketika itu, anda mungkin perlu meneroka penyelesaian i18n yang lebih profesional, seperti sambungan gettext PHP atau komponen penyetempatan yang disediakan oleh rangka kerja.
  • Konsistensi Terjemahan: Untuk memastikan konsistensi nama jenama dan istilah di semua versi bahasa, sangat disarankan untuk menggunakan ciri Glosari O.Translator.
  • Strategi Tahap Tinggi: Artikel ini memfokuskan kepada pelaksanaan teknikal. Jika anda ingin mengetahui lebih lanjut tentang strategi keseluruhan untuk pengantarabangsaan laman web, anda boleh membaca artikel mendalam kami yang lain.

Tema

Senario

Senario

Artikel yang diterbitkan11

Bacaan yang disyorkan