PHP internationalisering (i18n): En praktisk vejledning for udviklere

more

Yee

Aug 03, 2024

cover-img

Gør dit PHP-website globalt: En mere effektiv løsning til internationalisering

Hvis du ligesom mig vedligeholder "vanilla" PHP-projekter, der ikke bruger store frameworks (som Laravel eller Symfony), så har understøttelse af flere sprog (i18n) sikkert været et vedvarende, om end lille, irritationsmoment.

Den traditionelle løsning, gettext, er ganske vist kraftfuld, men ret besværlig at sætte op. Især i små projekter føles det som at "skyde gråspurve med kanoner." Det vi egentlig har brug for, er en metode, der kan implementeres hurtigt uden at gøre det hele for kompliceret.

Efter mange forsøg og fejl på tværs af flere projekter har vi udviklet en letvægtsløsning til internationalisering baseret på PHP-arrayfiler og online oversættelsesværktøjer. Denne tilgang er ikke bare nem at tage i brug, men har også ekstremt lave vedligeholdelsesomkostninger. I dag deler jeg hele denne løsning med dig – helt uden forbehold.

Hands-on guide: Sådan fik jeg styr på PHP-multisprog med O.Translator

Vores kerneidé er meget enkel: Hvert sprog svarer til en PHP-fil, som indeholder et return-statement, der returnerer et associativt array. Denne metode er simpel, intuitiv og har minimal performance-overhead.

Trin 1: Planlæg din mappestruktur

En klar mappestruktur er halvdelen af arbejdet. For at holde styr på det hele, lægger vi alle sprogfiler i samme mappe og navngiver dem med sprogkoder, sådan her:

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

Trin 2: Opret dit "sprogarsenal"

Nu laver vi basis-sprogfilen. Lad os tage kinesisk som eksempel og oprette en lang.cn.php-fil. Filens indhold er et simpelt PHP-array, hvor nøglerne er unikke identifikatorer, og værdierne er de tilsvarende tekststrenge.

lang.cn.php-eksempel: Nøglerne forbliver de samme, værdierne ændres med sproget

Trin 3: Gå ind i oversættelsestroldmanden, O.Translator

Manuelt oversætte dusinvis eller hundreder af poster? Det er den slags gentagne arbejde, programmører hader allermest. Her kommer vores hemmelige våben, O.Translator, ind i billedet.

Det er en professionel online dokumentoversættelsesplatform, der understøtter PHP-filer perfekt, så den kan læse dit array direkte og oversætte det til over 70 sprog.

Processen er absurd enkel:

  1. Besøg O.Translator-hjemmesiden og upload din basis-sprogfil (fx lang.cn.php).
  2. Vælg dine målsprog, for eksempel engelsk og fransk.
  3. Klik på oversæt, vent et øjeblik, og dine oversatte filer lang.en.php og lang.fr.php er klar til dig.

Det, der imponerede mig mest, er, at O.Translator lader dig forhåndsvise en del af oversættelsen gratis. Hvis du er tilfreds med resultatet, kan du bagefter beslutte, om du vil betale for den fulde oversættelse. Med deres egne ord: "Betal aldrig for et produkt, du ikke er tilfreds med."

Trin 4: Få koden til at leve

Alt er klar; det eneste, vi mangler, er det sidste touch. Nu skal vi bare ændre hovedfilen index.php, så den dynamisk kan indlæse den rigtige sprogpakke alt efter brugerens 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 din HTML-skabelon kan du så nemt kalde tekststrenge sådan her:

<!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 så har du det—et simpelt flersproget website er født!

Overvejelser og avanceret tænkning

Selvom denne løsning er letvægts, er der et par ting, du bør overveje, før du går i produktion:

  • Hvordan opdager man brugerens sprog? Eksemplet bruger en GET-parameter som ?lang=en. I en rigtig applikation kan du også bruge $_SESSION, $_COOKIE eller analysere browserens Accept-Language request header for automatisk detektion.
  • Performance-overvejelser: For små til mellemstore websites er performance-overhead ved require_once af en PHP-fil på hver request ubetydelig. Hvis dit site har meget trafik, kan du overveje at bruge bytecode-cachingteknologier som APC eller OPcache for yderligere optimering.
  • Skalerbarhed: Når antallet af sprog eller tekststrenge vokser, kan det blive besværligt at håndtere filerne manuelt. På det tidspunkt kan det være nødvendigt at kigge på mere professionelle i18n-løsninger, såsom PHP's gettext extension eller de lokaliseringskomponenter, der følger med frameworks.
  • Oversættelseskonsistens: For at sikre ensartethed i brandnavne og terminologi på tværs af alle sprogversioner, anbefales det stærkt at bruge O.Translators ordlistefunktion.
  • Overordnet strategi: Denne artikel fokuserer på den tekniske implementering. Hvis du vil lære mere om den overordnede strategi for internationalisering af websites, kan du læse vores anden dybdegående artikel.

Emne

Scene

Scene

Udgivne artikler11

Anbefalet læsning