Internaționalizarea PHP (i18n): Ghid practic pentru dezvoltatori

Yee
Aug 03, 2024

Dă-ți site-ul PHP pe internațional: O soluție mai eficientă pentru internaționalizare
Dacă ești ca mine și ai proiecte PHP „vanilla” care nu se bazează pe framework-uri mari (gen Laravel sau Symfony), atunci suportul pentru mai multe limbi (i18n) probabil a fost mereu un mic punct sensibil.
Soluția tradițională, gettext
, deși puternică, e destul de complicată de configurat. Mai ales la proiectele mici, parcă „folosești un baros ca să spargi o nucă”. Ce ne trebuie cu adevărat e o metodă care să poată fi implementată rapid, fără prea multă bătaie de cap.
După multe încercări și erori pe diverse proiecte, am ajuns la o soluție lightweight de internaționalizare, bazată pe fișiere array PHP și unelte online de traducere. Abordarea asta nu doar că e simplu de pus în practică, dar are și costuri de mentenanță extrem de mici. Azi îți dau toată soluția asta, fără nicio obligație.
Ghid practic: Cum am rezolvat suportul multi-limbă în PHP cu O.Translator
Ideea noastră de bază e foarte simplă: Fiecare limbă are un fișier PHP, care conține o instrucțiune return
ce întoarce un array asociativ. Metoda asta e simplă, intuitivă și are un impact minim asupra performanței.
Pasul 1: Planifică-ți structura directoarelor
O structură clară a directoarelor e jumătate din bătălie. Ca să păstrăm totul organizat, vom pune toate fișierele de limbă în același director și le vom denumi folosind coduri de limbă, cam așa:
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
Pasul 2: Creează-ți „arsenalul de limbi”
Următorul pas: creăm fișierul de bază pentru limbă. Hai să folosim chineza ca exemplu și să creăm un fișier lang.cn.php
. Conținutul fișierului este un array PHP simplu, unde cheile sunt identificatori unici, iar valorile sunt șirurile de text corespunzătoare.
Exemplu lang.cn.php: Cheile rămân aceleași, valorile se schimbă în funcție de limbă
Pasul 3: Intră în scenă vrăjitorul traducerilor, O.Translator
Să traduci manual zeci sau sute de intrări? Genul ăsta de muncă repetitivă e coșmarul oricărui programator. Aici intervine arma noastră secretă: O.Translator.
Este o platformă profesională de traducere online pentru documente, care suportă perfect fișierele PHP, permițându-i să citească direct array-ul tău și să-l traducă în peste 70 de limbi.
Procesul e incredibil de simplu:
- Intră pe pagina principală O.Translator și încarcă fișierul tău de bază cu limba (de exemplu,
lang.cn.php
). - Alege limbile țintă, cum ar fi engleza și franceza.
- Apasă pe translate, așteaptă puțin și fișierele tale traduse
lang.en.php
șilang.fr.php
vor fi gata pentru tine.
Ce m-a impresionat cel mai mult e că O.Translator îți permite să previzualizezi gratuit o parte din traducere. Dacă ești mulțumit de rezultat, poți decide apoi dacă vrei să plătești pentru traducerea completă. După cum spun chiar ei: "Niciodată să nu plătești pentru un produs cu care nu ești mulțumit."
Pasul 4: Dă viață codului
Totul e pregătit; mai avem nevoie doar de ultima atingere. Acum, hai să modificăm fișierul principal index.php
ca să poată încărca dinamic pachetul de limbă potrivit, în funcție de selecția utilizatorului.
<?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";
?>
În șablonul tău HTML, poți apoi să apelezi ușor șirurile de text astfel:
<!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>
Și gata—așa se naște un site multi-limbă, simplu și rapid!
Considerații și gândire avansată
Deși soluția asta e lightweight, sunt câteva aspecte de luat în calcul înainte să o pui în producție:
- Cum detectezi limba utilizatorului? Exemplul folosește un parametru GET, gen
?lang=en
. Într-o aplicație reală, poți folosi și$_SESSION
,$_COOKIE
sau poți parsa header-ulAccept-Language
al browserului pentru detectare automată. - Considerații de performanță: Pentru site-uri mici sau medii, impactul de performanță al unui
require_once
pentru un fișier PHP la fiecare request e practic neglijabil. Dacă site-ul tău are trafic mare, ia în calcul tehnologii de caching pentru bytecode, cum ar fi APC sau OPcache, pentru optimizare suplimentară. - Scalabilitate: Pe măsură ce crește numărul de limbi sau de texte, gestionarea manuală a fișierelor poate deveni complicată. În acel moment, ar trebui să explorezi soluții i18n mai profesionale, cum ar fi extensia gettext a PHP sau componentele de localizare oferite de framework-uri.
- Consistența traducerilor: Ca să te asiguri că numele de brand și terminologia rămân consecvente în toate versiunile de limbă, îți recomandăm cu tărie să folosești funcția de Glosar din O.Translator.
- Strategie la nivel înalt: Articolul acesta se concentrează pe implementarea tehnică. Dacă vrei să afli mai multe despre strategia generală de internaționalizare a site-ului, poți citi și celălalt articol detaliat al nostru.