PHP-Internationalisierung (i18n): Ein praktischer Leitfaden für Entwickler

more

Yee

Aug 03, 2024

cover-img

Mach deine PHP-Website weltweit zugänglich: Eine effizientere Lösung für Internationalisierung

Wenn du wie ich „Vanilla“-PHP-Projekte betreust, die nicht auf große Frameworks wie Laravel oder Symfony setzen, dann ist Mehrsprachigkeit (i18n) wahrscheinlich schon länger ein kleines, aber hartnäckiges Problem.

Die klassische Lösung, gettext, ist zwar mächtig, aber ziemlich umständlich einzurichten. Gerade bei kleinen Projekten fühlt es sich an wie „mit Kanonen auf Spatzen schießen“. Was wir wirklich brauchen, ist eine Methode, die sich schnell umsetzen lässt, ohne zu viel Komplexität einzuführen.

Nach viel Ausprobieren in verschiedenen Projekten haben wir eine schlanke Internationalisierungslösung entwickelt, die auf PHP-Array-Dateien und Online-Übersetzungstools basiert. Dieser Ansatz ist nicht nur einfach zu implementieren, sondern verursacht auch extrem geringe Wartungskosten. Heute teile ich diese komplette Lösung mit dir – ganz ohne Haken.

Hands-on-Anleitung: So habe ich PHP-Mehrsprachigkeit mit O.Translator gemeistert

Unsere Kernidee ist ganz simpel: Jede Sprache entspricht einer PHP-Datei, die ein return-Statement mit einem assoziativen Array enthält. Diese Methode ist einfach, intuitiv und hat kaum Performance-Overhead.

Schritt 1: Plane deine Verzeichnisstruktur

Eine klare Verzeichnisstruktur ist schon die halbe Miete. Damit alles schön übersichtlich bleibt, packen wir alle Sprachdateien in denselben Ordner und benennen sie nach Sprachcodes – zum Beispiel so:

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

Schritt 2: Erstelle dein „Sprachen-Arsenal“

Als Nächstes legen wir die Basis-Sprachdatei an. Nehmen wir Chinesisch als Beispiel und erstellen eine Datei namens lang.cn.php. Der Inhalt der Datei ist ein einfaches PHP-Array, bei dem die Keys eindeutige Bezeichner sind und die Values die jeweiligen Textbausteine.

lang.cn.php-Beispiel: Keys bleiben gleich, Values ändern sich je nach Sprache

Schritt 3: Jetzt kommt der Übersetzungs-Zauberer O.Translator ins Spiel

Dutzende oder sogar hunderte Einträge von Hand übersetzen? Das ist genau die Art von Fleißarbeit, die Programmierer am meisten hassen. Hier kommt unser Geheimtipp ins Spiel: O.Translator.

Das ist eine professionelle Online-Plattform für Dokumentenübersetzungen, die PHP-Dateien perfekt unterstützt. Sie kann dein Array direkt einlesen und in über 70 Sprachen übersetzen.

Der Ablauf ist echt simpel:

  1. Geh auf die O.Translator-Homepage und lade deine Ausgangssprache-Datei hoch (zum Beispiel lang.cn.php).
  2. Wähle deine Zielsprachen aus, zum Beispiel Englisch und Französisch.
  3. Klick auf Übersetzen, warte kurz, und schon bekommst du deine übersetzten lang.en.php und lang.fr.php Dateien.

Was mich am meisten beeindruckt hat: Bei O.Translator kannst du einen Teil der Übersetzung kostenlos anschauen. Wenn du mit dem Ergebnis zufrieden bist, kannst du entscheiden, ob du für die komplette Übersetzung bezahlen willst. In ihren eigenen Worten: "Bezahle nie für ein Produkt, mit dem du nicht zufrieden bist."

Schritt 4: Lass den Code lebendig werden

Alles ist bereit; jetzt fehlt nur noch der letzte Schliff. Jetzt passen wir die Hauptdatei index.php so an, dass sie je nach Auswahl des Nutzers das passende Sprachpaket lädt.

<?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 deinem HTML-Template kannst du die Textbausteine dann ganz einfach so aufrufen:

<!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>

Und schon ist sie da – deine einfache mehrsprachige Website!

Überlegungen und weiterführende Gedanken

Auch wenn diese Lösung schlank ist, gibt es ein paar Dinge, die du vor dem Einsatz in der Produktion beachten solltest:

  • Wie erkennt man die Sprache des Nutzers? Im Beispiel wird ein GET-Parameter wie ?lang=en verwendet. In einer echten Anwendung könntest du auch $_SESSION, $_COOKIE oder den Accept-Language-Header des Browsers für die automatische Erkennung nutzen.
  • Performance-Überlegungen: Für kleine bis mittelgroße Websites ist der Performance-Overhead von require_once für eine PHP-Datei pro Anfrage vernachlässigbar. Wenn deine Seite viel Traffic hat, solltest du Bytecode-Caching-Technologien wie APC oder OPcache für weitere Optimierungen nutzen.
  • Skalierbarkeit: Wenn die Anzahl der Sprachen oder Textbausteine wächst, kann die manuelle Verwaltung der Dateien schnell kompliziert werden. Dann solltest du vielleicht professionellere i18n-Lösungen wie PHPs gettext-Erweiterung oder die Lokalisierungskomponenten von Frameworks ausprobieren.
  • Übersetzungskonsistenz: Damit Markennamen und Fachbegriffe in allen Sprachversionen einheitlich bleiben, solltest du unbedingt das Glossar-Feature von O.Translator nutzen.
  • High-level-Strategie: In diesem Artikel geht es um die technische Umsetzung. Wenn du mehr über die allgemeine Strategie zur Internationalisierung von Websites wissen möchtest, lies dir gerne unseren anderen ausführlichen Artikel durch.

Thema

Szenario

Szenario

Veröffentlichte Artikel11

Empfohlene Lektüre