PHP Internationalisatie (i18n): Een praktische gids voor ontwikkelaars

Yee
Aug 03, 2024

Maak je PHP-website wereldwijd: een efficiëntere oplossing voor internationalisatie
Als je net als ik "vanilla" PHP-projecten onderhoudt die niet afhankelijk zijn van grote frameworks (zoals Laravel of Symfony), dan is meertalige ondersteuning (i18n) waarschijnlijk altijd een kleine, maar hardnekkige uitdaging geweest.
De traditionele oplossing, gettext
, is krachtig, maar behoorlijk omslachtig om te configureren. Vooral bij kleine projecten voelt het als "met een kanon op een mug schieten." Wat we eigenlijk nodig hebben, is een methode die je snel kunt implementeren zonder al te veel complexiteit toe te voegen.
Na veel proberen en testen in verschillende projecten hebben we een lichte internationalisatie-oplossing ontwikkeld op basis van PHP-arraybestanden en online vertaaltools. Deze aanpak is niet alleen eenvoudig te implementeren, maar heeft ook extreem lage onderhoudskosten. Vandaag deel ik deze hele oplossing met jou, helemaal gratis.
Praktische gids: zo heb ik meertalige ondersteuning in PHP geregeld met O.Translator
Ons kernidee is heel simpel: Elke taal hoort bij een PHP-bestand, dat een return
-statement bevat met een associatieve array. Deze methode is eenvoudig, intuïtief en heeft nauwelijks invloed op de performance.
Stap 1: Plan je mappenstructuur
Een duidelijke mappenstructuur is het halve werk. Om alles overzichtelijk te houden, zetten we alle taalbestanden in dezelfde map en geven we ze namen met taalcodes, zoals dit:
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
Stap 2: Maak je 'taal-arsenaal'
Nu maken we het basistaalbestand aan. Laten we Chinees als voorbeeld nemen en een lang.cn.php
-bestand maken. De inhoud van het bestand is een simpele PHP-array, waarbij de keys unieke identifiers zijn en de values de bijbehorende tekststrings.
lang.cn.php voorbeeld: Keys blijven hetzelfde, values veranderen per taal
Stap 3: Betreed de vertaalwizard, O.Translator
Handmatig tientallen of honderden items vertalen? Dat is precies het soort repetitief werk waar programmeurs een hekel aan hebben. Hier komt ons geheime wapen, O.Translator, om de hoek kijken.
Het is een professioneel online vertaalplatform voor documenten dat perfect PHP-bestanden ondersteunt, waardoor het je array direct kan lezen en vertalen naar meer dan 70 talen.
Het proces is echt supersimpel:
- Ga naar de O.Translator homepage en upload je basistaalbestand (bijvoorbeeld
lang.cn.php
). - Kies je doeltalen, zoals Engels en Frans.
- Klik op vertalen, wacht even, en je vertaalde
lang.en.php
enlang.fr.php
bestanden zijn direct voor je beschikbaar.
Wat mij vooral opviel, is dat O.Translator je een voorbeeld van de vertaling gratis laat zien. Ben je tevreden met het resultaat? Dan kun je daarna beslissen of je voor de volledige vertaling wilt betalen. In hun eigen woorden: "Betaal nooit voor een product waar je niet blij mee bent."
Stap 4: Breng de code tot leven
Alles is klaar; we hoeven alleen nog de laatste hand te leggen. Laten we nu het hoofdbestand index.php
aanpassen zodat het automatisch het juiste taalpakket laadt op basis van de keuze van de gebruiker.
<?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";
?>
In je HTML-template kun je de tekststrings dan heel makkelijk zo aanroepen:
<!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>
En daar heb je het—een simpele meertalige website is geboren!
Overwegingen en verder denken
Hoewel deze oplossing lichtgewicht is, zijn er een paar punten waar je op moet letten voordat je naar productie gaat:
- Hoe detecteer je de taal van de gebruiker? In het voorbeeld wordt een GET-parameter gebruikt, zoals
?lang=en
. In een echte applicatie kun je ook$_SESSION
,$_COOKIE
gebruiken, of deAccept-Language
request header van de browser uitlezen voor automatische detectie. - Prestatie-overwegingen: Voor kleine tot middelgrote websites is de performance-overhead van
require_once
van een PHP-bestand per request verwaarloosbaar. Heeft je site veel verkeer? Overweeg dan bytecode caching-technologieën zoals APC of OPcache voor extra optimalisatie. - Schaalbaarheid: Naarmate het aantal talen of tekststrings groeit, kan het handmatig beheren van bestanden ingewikkeld worden. Op dat moment kun je meer professionele i18n-oplossingen overwegen, zoals PHP's gettext-extensie of de localisatiecomponenten die frameworks bieden.
- Vertaalconsistentie: Om consistentie te waarborgen voor merknamen en terminologie in alle taalversies, raden we je sterk aan om de Glossary-functie van O.Translator te gebruiken.
- Hoog-niveau strategie: Dit artikel richt zich op de technische implementatie. Wil je meer weten over de algemene strategie voor website-internationalisatie? Lees dan ons andere uitgebreide artikel.