Internaționalizarea PHP (i18n): Un 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:
- Vizitează pagina principală O.Translator și încarcă fișierul tău de limbă de bază (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.phpvor 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—ai un site multilingv simplu!
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,$_COOKIEsau poți parsa header-ulAccept-Languageal browserului pentru detectare automată. - Considerații de performanță: Pentru site-uri mici sau medii, impactul de performanță al unui
require_oncepentru 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ă. Atunci ar putea fi nevoie să explorezi soluții i18n mai profesionale, cum ar fi extensia gettext pentru PHP sau componentele de localizare oferite de framework-uri.
- Consistența traducerilor: Pentru a păstra consistența numelor de brand și a terminologiei în toate versiunile de limbă, îți recomand cu căldură să folosești funcția de Glosar a 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-urilor web, aruncă o privire și peste celălalt articol detaliat al nostru.