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

Yee
Aug 03, 2024

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ű:
- Látogass el az O.Translator honlapjára, és töltsd fel az alapnyelvi fájlodat (pl.
lang.cn.php
). - Válaszd ki a célnyelveket, például angolt és franciát.
- Kattints a fordításra, várj egy kicsit, és már készen is vannak a lefordított
lang.en.php
éslang.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.