PHP Internationalization (i18n): En praktisk utviklerguide
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:
- Besøk O.Translator sin hjemmeside og last opp din grunnspråkfil (f.eks.
lang.cn.php). - Velg målspråkene dine, som engelsk og fransk.
- Klikk på oversett, vent litt, og de oversatte filene
lang.en.phpoglang.fr.phper 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 vips – en enkel flerspråklig nettside er på plass!
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,$_COOKIEeller tolke nettleserensAccept-Languagerequest header for automatisk deteksjon. - Ytelseshensyn: For små til mellomstore nettsider er ytelsesbelastningen av
require_oncefor 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. På det tidspunktet kan det hende du må se nærmere på mer profesjonelle i18n-løsninger, som PHPs gettext-utvidelse eller lokaliseringskomponentene til ulike rammeverk.
- Oversettelseskonsistens: For å sikre at merkenavn og terminologi er konsekvente på alle språkversjoner, anbefaler vi varmt å bruke O.Translators glossar-funksjon.
- Overordnet strategi: Denne artikkelen fokuserer på den tekniske implementasjonen. Hvis du vil lære mer om hvordan du internasjonaliserer nettsider generelt, kan du lese vår andre, mer dyptgående artikkel.