PHP nemzetközivé tétel (i18n): Gyakorlati fejlesztői útmutató
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 lép színre 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 főoldalá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.phpfá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 már kész is – ennyire egyszerűen születik meg egy 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-Languagefejlé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. Ezen a ponton már érdemes lehet profibb i18n megoldások után nézni, például a PHP gettext bővítményét vagy a frameworkök beépített lokalizációs moduljait.
- Fordítási következetesség: Ha szeretnéd, hogy a márkanevek és szakszavak minden nyelven egységesek legyenek, nagyon ajánljuk 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 érdekel a weboldalak nemzetköziesítésének átfogó stratégiája, akkor olvasd el a másik, részletes cikkünket is.
Téma

forgatókönyv
Közzétett cikkek13
Ajánlott olvasmányok