PHP internacionalizácia (i18n): Praktický sprievodca pre vývojárov

more

Yee

Aug 03, 2024

cover-img

Posuň svoj PHP web do sveta: Efektívnejšie riešenie pre viacjazyčnosť

Ak si na tom podobne ako ja a staráš sa o "vanilla" PHP projekty, ktoré nebežia na veľkých frameworkoch (ako Laravel alebo Symfony), tak podpora viacerých jazykov (i18n) bola asi vždy taká malá, ale otravná bolesť.

Tradičné riešenie, gettext, je síce silné, ale jeho nastavenie je dosť otravné. Najmä pri menších projektoch to pôsobí ako "ísť na komára kladivom." Čo naozaj potrebujeme, je spôsob, ktorý sa dá rýchlo nasadiť a nezavádza zbytočnú zložitosť.

Po množstve pokusov a omylov na rôznych projektoch sme vyvinuli ľahké riešenie pre viacjazyčnosť, ktoré využíva PHP array súbory a online prekladacie nástroje. Tento prístup je nielen jednoduchý na nasadenie, ale má aj extrémne nízke náklady na údržbu. Dnes sa s tebou podelím o celé toto riešenie, bez akýchkoľvek háčikov.

Praktický návod: Ako som zvládol viacjazyčnosť v PHP pomocou O.Translator

Naša hlavná myšlienka je úplne jednoduchá: Každý jazyk má svoj PHP súbor, ktorý obsahuje return s asociatívnym poľom. Tento spôsob je jednoduchý, intuitívny a má minimálny vplyv na výkon.

Krok 1: Naplánuj si štruktúru adresárov

Prehľadná štruktúra adresárov je polovica úspechu. Aby sme mali vo veciach poriadok, všetky jazykové súbory uložíme do jedného adresára a pomenujeme ich podľa jazykových kódov, napríklad takto:

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

Krok 2: Vytvor si svoj „jazykový arzenál“

Ďalej vytvoríme základný jazykový súbor. Ako príklad použijeme čínštinu a vytvoríme súbor lang.cn.php. Obsah súboru je jednoduché PHP pole, kde kľúče sú unikátne identifikátory a hodnoty sú príslušné textové reťazce.

Príklad lang.cn.php: Kľúče ostávajú rovnaké, hodnoty sa menia podľa jazyka

Krok 3: Privítaj čarodejníka prekladu, O.Translator

Prekladať ručne desiatky alebo stovky položiek? To je presne ten typ opakovanej práce, ktorú programátori neznášajú. A tu prichádza na scénu naša tajná zbraň – O.Translator.

Je to profi online platforma na preklad dokumentov, ktorá perfektne podporuje PHP súbory, takže vie priamo načítať tvoje pole a preložiť ho do viac ako 70 jazykov.

Celý proces je fakt smiešne jednoduchý:

  1. Choď na O.Translator homepage a nahraj svoj základný jazykový súbor (napríklad lang.cn.php).
  2. Vyber si cieľové jazyky, napríklad angličtinu alebo francúzštinu.
  3. Klikni na preklad, chvíľu počkaj a tvoje preložené súbory lang.en.php a lang.fr.php budú pripravené.

Najviac ma zaujalo, že O.Translator ti umožní zadarmo si pozrieť ukážku časti prekladu. Ak si s výsledkom spokojný, až potom sa rozhodneš, či chceš zaplatiť za celý preklad. Ich vlastnými slovami: "Nikdy neplať za produkt, s ktorým nie si spokojný."

Krok 4: Oživíme kód

Všetko je pripravené; už len posledná bodka. Teraz upravíme hlavný súbor index.php, aby vedel dynamicky načítať správny jazykový balíček podľa výberu používateľa.

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

?>

Vo svojom HTML template potom môžeš jednoducho volať textové reťazce takto:

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

A je to—jednoduchý viacjazyčný web je na svete!

Na čo myslieť a čo zvážiť navyše

Aj keď je toto riešenie ľahké, pred nasadením do produkcie je dobré zvážiť pár vecí:

  • Ako zistiť jazyk používateľa? Príklad používa GET parameter ako ?lang=en. V reálnej aplikácii môžeš použiť aj $_SESSION, $_COOKIE alebo automaticky zistiť jazyk z hlavičky prehliadača Accept-Language.
  • Výkonnostné hľadisko: Pri malých a stredne veľkých weboch je záťaž z require_once pre PHP súbor pri každej požiadavke zanedbateľná. Ak máš web s veľkou návštevnosťou, zváž použitie bytecode cache technológií ako APC alebo OPcache na ešte lepšiu optimalizáciu.
  • Škálovateľnosť: Keď ti začne pribúdať počet jazykov alebo textových reťazcov, ručné spravovanie súborov sa môže skomplikovať. Vtedy už možno budeš potrebovať profesionálnejšie i18n riešenia, napríklad PHP's gettext extension alebo lokalizačné komponenty, ktoré ponúkajú frameworky.
  • Konzistentnosť prekladu: Aby si mal istotu, že názvy značiek a terminológia budú vo všetkých jazykových verziách rovnaké, veľmi odporúčam využiť funkciu Glosár v O.Translatori.
  • Stratégia z nadhľadu: Tento článok sa zameriava na technickú implementáciu. Ak sa chceš dozvedieť viac o celkovej stratégii internacionalizácie webu, môžeš si prečítať náš ďalší podrobný článok.

Téma

Scéna

Scéna

Publikované články11

Odporúčané čítanie