PHP-oversættelse og vejledning til internationalisering af hjemmesider

Yee
Aug 03, 2024

Få dit PHP-websted ud i verden: En mere effektiv internationaliseringsløsning
Hvis du, ligesom jeg, vedligeholder nogle 'native' PHP-projekter, der ikke er afhængige af store frameworks (som Laravel eller Symfony), har flersproget support (i18n) sandsynligvis altid været en mindre eller større udfordring.
Traditionelle løsninger som gettext
er ganske vist kraftfulde, men konfigurationen er ret besværlig, især i mindre projekter, hvor det kan føles som at skyde gråspurve med kanoner. Det, vi virkelig har brug for, er en metode, der både hurtigt kan implementeres og ikke tilføjer unødig kompleksitet.
Gennem flere projekter har vi udviklet en letvægts internationaliseringsløsning baseret på PHP-arrayfiler og online oversættelsesværktøjer. Denne løsning er ikke kun nem at implementere, men har også meget lave vedligeholdelsesomkostninger. I dag deler jeg denne løsning med dig uden forbehold.
Praktisk øvelse: Sådan brugte jeg O.Translator til at håndtere PHP-flersprogethed
Vores kerneidé er meget enkel: Hvert sprog har sin egen PHP-fil, som indeholder en return
-sætning med et associerende array. Denne metode er simpel, intuitiv og har minimal performanceomkostning.
Første trin: Planlæg din mappestruktur
En klar mappestruktur er halvdelen af succesen. For at gøre administrationen nemmere har vi samlet alle sprogfiler ét sted og navngivet dem med sprogkoder, for eksempel:
project_root/
├── index.php // 你的主逻辑文件
├── i18n/ // 存放所有语言文件的文件夹
│ ├── lang.cn.php // 中文语言包
│ ├── lang.en.php // 英文语言包
│ └── lang.fr.php // 法文语言包
Andet trin: Opret dit 'sprogammunitionslager'
Herefter opretter vi de grundlæggende sprogfiler. Her bruger vi kinesisk som eksempel og opretter en lang.cn.php
-fil. Filens indhold er blot et simpelt PHP-array, hvor nøglen (key) er en unik identifikator, og værdien (value) er den tilsvarende tekst.
lang.cn.php-eksempel: Nøglenavnet forbliver det samme, værdien ændres alt efter sproget
Tredje trin: Lad os byde oversættelsestroldmanden O.Translator velkommen
At oversætte snesevis eller hundreder af opslag manuelt? Det er bestemt det mest ensformige arbejde, en programmør kan forestille sig. På dette tidspunkt er det tid til, at vores hemmelige våben – O.Translator – træder ind på scenen.
Det er en professionel online platform til dokumentoversættelse, der understøtter PHP-filer perfekt og kan læse dine arrays direkte og oversætte dem til mere end 70 sprog.
Arbejdsprocessen er så enkel, at det er bemærkelsesværdigt:
- Gå til O.Translator forsiden, og upload din grundlæggende sprogfil (for eksempel
lang.cn.php
). - Vælg det målsprog, du ønsker at oversætte til, for eksempel engelsk og fransk.
- Klik på oversæt, vent et øjeblik, og de oversatte filer
lang.en.php
oglang.fr.php
vil være klar til dig.
Det, der imponerede mig mest, er, at O.Translator giver dig mulighed for at forhåndsvise en del af oversættelsesresultatet gratis. Hvis du er tilfreds med resultatet, kan du derefter beslutte, om du vil betale for hele indholdet. Som de selv siger: “Du skal aldrig betale for et produkt, du ikke er tilfreds med.”
Fjerde trin: Gør koden “levende”
Alt er klar, kun østenvinden mangler. Nu skal vi ændre hovedfilen index.php
, så den kan indlæse den relevante sprogpakke dynamisk baseret på brugerens valg.
<?php
// 1. 决定当前语言 (这里用GET参数做演示)
$supported_langs = ['en', 'cn', 'fr'];
$default_lang = 'en';
$lang = isset($_GET['lang']) && in_array($_GET['lang'], $supported_langs) ? $_GET['lang'] : $default_lang;
// 2. 加载对应的语言文件
// 使用 $_ 全局变量或 $TEXTS 这样的特定变量来存储文案
$_ = require_once __DIR__ . "/i18n/lang.{$lang}.php";
?>
I din HTML-skabelon kan du nu nemt kalde teksterne som vist nedenfor:
<!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>
Se, sådan blev et simpelt flersproget website til!
Bemærkninger og videre overvejelser
Selvom denne løsning er letvægts, er der stadig nogle punkter, du bør overveje, før du tager den i brug:
- Hvordan identificerer man brugerens sprog? I eksemplet vises brugen af en GET-parameter som
?lang=en
, men i praksis kan du også automatisk afgøre det via$_SESSION
,$_COOKIE
eller ved at analysere browserensAccept-Language
header. - Ydelsesmæssige overvejelser: For små og mellemstore websites er det næsten uden betydning for ydeevnen at
require_once
en PHP-fil ved hver anmodning. Hvis dit website har meget stor trafik, kan du overveje at bruge bytecode-cachingteknologier som APC eller OPcache for yderligere optimering. - Skalerbarhed: Når antallet af sprog eller mængden af tekst eksploderer, bliver manuel filhåndtering mere kompleks. På dette tidspunkt kan det være nødvendigt at udforske mere professionelle internationaliseringsløsninger, såsom PHP's gettext-udvidelse eller lokaliseringskomponenter, der følger med rammeværket.
- Oversættelseskonsistens: For at sikre ensartethed i brugen af brandnavne og termer på tværs af alle sprogversioner, anbefales det kraftigt at benytte O.Translators ordlistefunktion.
- Makrostrategi: Denne artikel fokuserer på den tekniske implementering. Hvis du vil vide mere om overordnede strategier for webside-internationalisering, kan du læse vores anden dybdegående artikel.