PHP nemzetköziesítés (i18n): Gyakorlati útmutató fejlesztőknek

more

Yee

Aug 03, 2024

cover-img

Vidd ki a PHP weboldalad a világba: Egy hatékonyabb nemzetköziesítési megoldás

Ha olyan vagy, mint én, és „vanilla” PHP projekteket tartasz karban, amik nem támaszkodnak nagyobb keretrendszerekre (mint a Laravel vagy a Symfony), akkor a többnyelvűség (i18n) valószínűleg egy állandó, bár nem túl nagy fejfájás számodra.

A hagyományos megoldás, a gettext, bár erős, elég körülményes beállítani. Főleg kisebb projektekben olyan érzés, mintha „ágyúval lőnénk verébre”. Amit igazán szeretnénk, az egy olyan módszer, amit gyorsan be lehet vezetni, anélkül, hogy túl sok bonyodalmat okozna.

Sok próbálkozás és tapasztalat után, több projekt során, kidolgoztunk egy könnyű nemzetköziesítési megoldást, ami PHP tömbfájlokra és online fordító eszközökre épül. Ez a megközelítés nemcsak egyszerűen bevezethető, de a fenntartási költsége is minimális. Ma ezt a teljes megoldást megosztom veled, mindenféle hátsó szándék nélkül.

Gyakorlati útmutató: Így oldottam meg a PHP többnyelvűséget az O.Translatorral

Az alapötletünk nagyon egyszerű: Minden nyelvhez tartozik egy PHP fájl, ami egy return utasítással ad vissza egy asszociatív tömböt. Ez a módszer egyszerű, átlátható, és alig terheli a teljesítményt.

1. lépés: Tervezd meg a könyvtárstruktúrádat

Egy átlátható könyvtárstruktúra már fél siker. A rend kedvéért minden nyelvi fájlt ugyanabba a mappába teszünk, és a nyelvi kódokkal nevezzük el őket, például így:

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

2. lépés: Hozd létre a „nyelvi arzenálodat”

Ezután elkészítjük az alapértelmezett nyelvi fájlt. Vegyük példának a kínait, és hozzunk létre egy lang.cn.php fájlt. A fájl tartalma egy egyszerű PHP tömb, ahol a kulcsok egyedi azonosítók, az értékek pedig a megfelelő szövegek.

lang.cn.php példa: A kulcsok változatlanok, az értékek nyelvenként változnak

3. lépés: Jöhet a fordító varázsló, az O.Translator

Kézzel fordítanál le tucatnyi vagy akár száz bejegyzést? Ez az a monoton munka, amit a programozók a legjobban utálnak. Itt jön képbe a titkos fegyverünk, az O.Translator.

Ez egy profi online dokumentumfordító platform, ami tökéletesen támogatja a PHP fájlokat, így közvetlenül beolvassa a tömbödet, és több mint 70 nyelvre lefordítja.

A folyamat nevetségesen egyszerű:

  1. Látogass el az O.Translator honlapjára, és töltsd fel az alapnyelvi fájlodat (pl. lang.cn.php).
  2. Válaszd ki a célnyelveket, például angolt és franciát.
  3. Kattints a fordításra, várj egy kicsit, és már készen is vannak a lefordított lang.en.php és lang.fr.php fájljaid.

Ami a legjobban lenyűgözött, hogy az O.Translator lehetővé teszi, hogy ingyen előnézetben megnézd a fordítás egy részét. Ha elégedett vagy az eredménnyel, eldöntheted, hogy kifizeted-e a teljes fordítást. Ahogy ők mondják: "Soha ne fizess olyan termékért, amivel nem vagy elégedett."

4. lépés: Keltsd életre a kódot

Minden készen áll; már csak az utolsó simítás hiányzik. Most módosítsuk a fő index.php fájlt, hogy dinamikusan betöltse a megfelelő nyelvi csomagot a felhasználó választása alapján.

<?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";

?>

A HTML sablonodban ezután egyszerűen így hívhatod meg a szöveges stringeket:

<!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>

És tessék, máris kész is egy egyszerű, többnyelvű weboldal!

Fontos szempontok és haladó gondolatok

Bár ez a megoldás könnyűsúlyú, van néhány dolog, amit érdemes átgondolni, mielőtt élesben beveted:

  • Hogyan érzékeld a felhasználó nyelvét? A példában egy GET paramétert használunk, például ?lang=en. Egy valódi alkalmazásban használhatod a $_SESSION-t, a $_COOKIE-t, vagy automatikus felismeréshez elemezheted a böngésző Accept-Language fejlécét is.
  • Teljesítmény szempontok: Kis- és közepes méretű oldalaknál a require_once által okozott többletterhelés minden kérésnél elhanyagolható. Ha az oldalad nagy forgalmú, érdemes lehet bytecode cache technológiákat, például APC-t vagy OPcache-t használni a további optimalizáláshoz.
  • Skálázhatóság: Ahogy nő a nyelvek vagy szövegek száma, a fájlok kézi kezelése egyre bonyolultabbá válhat. Ekkor már érdemes lehet profibb i18n megoldásokat is megnézni, például a PHP gettext kiterjesztését vagy a keretrendszerek lokalizációs komponenseit.
  • Fordítási konzisztencia: Ahhoz, hogy a márkanevek és szakszavak minden nyelvi verzióban egységesek legyenek, nagyon ajánlott az O.Translator Szójegyzék funkcióját használni.
  • Magas szintű stratégia: Ez a cikk a technikai megvalósításra fókuszál. Ha szeretnél többet megtudni a weboldal nemzetköziesítésének átfogó stratégiájáról, olvasd el a másik, részletes cikkünket is.

Téma

Jelenet

Jelenet

Közzétett cikkek11

Ajánlott olvasmányok