PHP-internationalisering (i18n): En praktisk guide för utvecklare

Yee
Aug 03, 2024

Gör din PHP-webbplats global: En smartare lösning för internationellt språkstöd
Om du är som jag och underhåller "vanilla" PHP-projekt som inte bygger på stora ramverk (som Laravel eller Symfony), har flerspråkigt stöd (i18n) säkert varit en återkommande, om än liten, källa till huvudbry.
Den traditionella lösningen, gettext
, är visserligen kraftfull men ganska krånglig att konfigurera. Särskilt i små projekt känns det som att "slå ihjäl en mygga med slägga." Det vi egentligen behöver är en metod som går snabbt att implementera utan att det blir för komplicerat.
Efter mycket trial and error i flera projekt har vi tagit fram en lättviktig lösning för internationalisering baserad på PHP-arrayfiler och online-översättningsverktyg. Det här tillvägagångssättet är inte bara enkelt att sätta upp, utan har också extremt låga underhållskostnader. Idag delar jag hela den här lösningen med dig, helt utan förbehåll.
Praktisk guide: Så fixade jag flerspråkigt stöd i PHP med O.Translator
Vår grundidé är väldigt enkel: Varje språk motsvarar en PHP-fil som innehåller ett return
-statement som returnerar en associativ array. Den här metoden är enkel, intuitiv och har minimal prestandapåverkan.
Steg 1: Planera din mappstruktur
En tydlig mappstruktur är halva jobbet. För att hålla ordning lägger vi alla språkfiler i samma mapp och döper dem efter språkkoder, så här:
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: Skapa ditt "språkarsenal"
Nu skapar vi grundspråkfilen. Vi tar kinesiska som exempel och skapar en lang.cn.php
-fil. Filens innehåll är en enkel PHP-array där nycklarna är unika identifierare och värdena är motsvarande textsträngar.
lang.cn.php
-exempel: Nycklarna är samma, värdena ändras beroende på språk
Steg 3: Dags för översättningsmagikern, O.Translator
Ska du översätta dussintals eller hundratals poster manuellt? Det är precis den typen av monotont jobb som programmerare avskyr. Här kommer vårt hemliga vapen in i bilden: O.Translator.
Det är en professionell onlineplattform för dokumentöversättning som har full koll på PHP-filer, så den kan läsa din array direkt och översätta till över 70 språk.
Det är löjligt enkelt:
- Gå till O.Translator hemsidan och ladda upp din grundspråksfil (t.ex.
lang.cn.php
). - Välj vilka målspråk du vill ha, till exempel engelska och franska.
- Klicka på översätt, vänta lite, och dina översatta filer
lang.en.php
ochlang.fr.php
är klara för dig.
Det som imponerade mest på mig är att O.Translator låter dig förhandsgranska en del av översättningen gratis. Om du är nöjd med resultatet kan du sedan välja om du vill betala för hela översättningen. Med deras egna ord: "Betala aldrig för en produkt du inte är nöjd med."
Steg 4: Få koden att leva
Allt är klart; det enda som saknas är sista touchen. Nu ska vi ändra huvudfilen index.php
så att den kan ladda rätt språkpaket dynamiskt beroende på användarens val.
<?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 din HTML-mall kan du sedan enkelt anropa textsträngarna så här:
<!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>
Och där har du det – en enkel flerspråkig webbplats är född!
Saker att tänka på och vidare funderingar
Även om den här lösningen är lättviktig finns det några saker att tänka på innan du kör den i produktion:
- Hur upptäcker man användarens språk? Exemplet använder en GET-parameter som
?lang=en
. I en riktig applikation kan du också använda$_SESSION
,$_COOKIE
eller tolka webbläsarensAccept-Language
-header för automatisk detektion. - Prestanda: För små till medelstora webbplatser är prestandapåverkan av
require_once
för en PHP-fil vid varje förfrågan försumbar. Om din sajt har mycket trafik, fundera på att använda bytecode-cachingtekniker som APC eller OPcache för ytterligare optimering. - Skalbarhet: När antalet språk eller textsträngar växer kan det bli krångligt att hantera filer manuellt. Då kan det vara läge att kika på mer professionella i18n-lösningar, som PHP:s gettext-tillägg eller lokaliseringskomponenterna som finns i olika ramverk.
- Översättningskonsistens: För att säkerställa att varumärkesnamn och terminologi är konsekventa i alla språkversioner rekommenderas det varmt att använda O.Translators ordlistfunktion.
- Hög nivå-strategi: Den här artikeln fokuserar på den tekniska implementationen. Vill du veta mer om övergripande strategi för webbplatsinternationalisering kan du läsa vår andra djupgående artikel.