PHP internasjonalisering (i18n): En praktisk guide for utviklere

Yee
Aug 03, 2024

Gjør PHP-nettsiden din global: En mer effektiv løsning for internasjonalisering
Hvis du er som meg og vedlikeholder "vanilla" PHP-prosjekter som ikke bruker store rammeverk (som Laravel eller Symfony), har støtte for flere språk (i18n) sikkert vært et vedvarende, men lite, irritasjonsmoment.
Den tradisjonelle løsningen, gettext
, er kraftig, men ganske tungvint å sette opp. Spesielt i små prosjekter føles det som å "skyte spurv med kanon". Det vi egentlig trenger, er en metode som kan implementeres raskt uten å gjøre ting for komplisert.
Etter mye prøving og feiling på flere prosjekter har vi utviklet en lettvektsløsning for internasjonalisering basert på PHP-arrayfiler og nettbaserte oversettelsesverktøy. Denne tilnærmingen er ikke bare enkel å ta i bruk, men har også ekstremt lave vedlikeholdskostnader. I dag deler jeg hele denne løsningen med deg, helt uten forpliktelser.
Praktisk guide: Slik fikset jeg flerspråklig støtte i PHP med O.Translator
Kjerneideen vår er veldig enkel: Hvert språk har sin egen PHP-fil, som inneholder en return
-setning som returnerer et assosiativt array. Denne metoden er enkel, intuitiv og har minimal ytelsespåvirkning.
Steg 1: Planlegg mappestrukturen din
En ryddig mappestruktur er halve jobben. For å holde orden, legger vi alle språkfilene i samme mappe og gir dem navn etter språkkoder, slik som dette:
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
Steg 2: Lag ditt "språklager"
Nå lager vi grunnspråkfilen. La oss bruke kinesisk som eksempel og lage en fil som heter lang.cn.php
. Innholdet i filen er et enkelt PHP-array, der nøklene er unike identifikatorer og verdiene er de tilhørende tekststrengene.
Eksempel på lang.cn.php: Nøklene er de samme, verdiene endres med språket
Steg 3: Gå inn i oversettelsesverdenen med O.Translator
Skal du oversette dusinvis eller hundrevis av oppføringer manuelt? Det er akkurat den typen repeterende arbeid utviklere hater mest. Det er her vårt hemmelige våpen, O.Translator, kommer inn i bildet.
Dette er en profesjonell online oversettelsesplattform som støtter PHP-filer perfekt, slik at den kan lese arrayet ditt direkte og oversette det til over 70 språk.
Prosessen er utrolig enkel:
- Gå til O.Translator-hjemmesiden og last opp grunnspråkfilen din (for eksempel
lang.cn.php
). - Velg målspråkene dine, som engelsk og fransk.
- Klikk på oversett, vent litt, og de oversatte filene
lang.en.php
oglang.fr.php
er klare for deg.
Det som imponerte meg mest, er at O.Translator lar deg forhåndsvise deler av oversettelsen gratis. Hvis du er fornøyd med resultatet, kan du bestemme deg for om du vil betale for hele oversettelsen. Som de selv sier: «Aldri betal for et produkt du ikke er fornøyd med.»
Steg 4: Gjør koden levende
Alt er klart; det eneste som gjenstår er siste finish. Nå skal vi endre hovedfilen index.php
slik at den kan laste inn riktig språkpakke basert på brukerens valg.
<?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";
?>
I HTML-malen din kan du enkelt hente tekststrenger slik:
<!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>
Og der har du det – en enkel flerspråklig nettside er født!
Ting å tenke på og videre refleksjoner
Selv om denne løsningen er lettvekts, er det noen ting du bør vurdere før du går i produksjon:
- Hvordan oppdage brukerens språk? Eksempelet bruker en GET-parameter som
?lang=en
. I en ekte applikasjon kan du også bruke$_SESSION
,$_COOKIE
eller tolke nettleserensAccept-Language
request header for automatisk deteksjon. - Ytelseshensyn: For små til mellomstore nettsider er ytelsesbelastningen av
require_once
for en PHP-fil på hver forespørsel ubetydelig. Hvis siden din har mye trafikk, bør du vurdere å bruke bytecode caching-teknologier som APC eller OPcache for enda bedre ytelse. - Skalerbarhet: Etter hvert som antall språk eller tekststrenger vokser, kan det bli tungvint å håndtere filer manuelt. Da kan det være lurt å utforske mer profesjonelle i18n-løsninger, som PHP's gettext extension eller lokaliseringskomponentene som følger med ulike rammeverk.
- Oversettelseskonsistens: For å sikre konsistens for merkenavn og terminologi på tvers av alle språkversjoner, anbefaler vi på det sterkeste å bruke O.Translator sin ordlistefunksjon.
- Overordnet strategi: Denne artikkelen fokuserer på den tekniske implementasjonen. Hvis du vil lære mer om overordnet strategi for internasjonalisering av nettsider, kan du lese vår andre grundige artikkel.