Mehrsprachigkeit mit Languages
Erste Schritte: Mehrsprachigkeit mit Languages
Wenn du eine Anwendung für Benutzer aus verschiedenen Ländern oder Kulturen entwickeln möchtest,
ist Mehrsprachigkeit unverzichtbar. Das phpFK – PHP Framework (oder ein ähnlich aufgebautes MVC-System)
bietet dir dazu die Möglichkeit, Sprachdateien zu hinterlegen und je nach Einstellung
automatisch die passenden Texte zu laden. In diesem Tutorial zeigen wir dir Schritt für Schritt,
wie du mehrsprachige Inhalte anbieten kannst.
Warum Mehrsprachigkeit?
Mehrsprachige Websites und Anwendungen erreichen ein größeres Publikum und wirken professioneller,
da Nutzer in ihrer bevorzugten Sprache navigieren können. Mit einem gut durchdachten Sprachsystem
passt sich deine App leicht an neue Märkte an und du hast die Sprachstrings sauber von der Logik getrennt.
Grundidee: app/languages/
In phpFK gibt es oft einen Ordner app/languages/, in dem du separate Dateien
für jede unterstützte Sprache anlegst, z. B. de.php, en.php, fr.php etc.
Jede Datei gibt ein assoziatives Array mit Texten zurück:
Beispiel: app/languages/de.php
return [ 'welcome_message' => 'Willkommen im phpFK Framework!', 'button_save' => 'Speichern', 'button_cancel' => 'Abbrechen', ];
Hier haben wir drei Einträge für deutsche Strings:
welcome_message, button_save und button_cancel.
Beispiel: app/languages/en.php
return [ 'welcome_message' => 'Welcome to the phpFK Framework!', 'button_save' => 'Save', 'button_cancel' => 'Cancel', ];
In der englischen Sprachdatei sind dieselben Keys vorhanden, aber mit englischen Texten.
Language-Klasse: core/Language.php
Um die Sprachdateien de.php oder en.php zu laden und im Code anzuzeigen,
kannst du dir eine Language-Klasse erstellen, die das Laden der jeweiligen Datei übernimmt.
Oft liegt diese unter core/Language.php und sieht vereinfacht so aus:
namespace Core; class Language { private static $lang = 'en'; private static $translations = []; public static function setLanguage($lang) { $file = APP_PATH . 'languages/' . $lang . '.php'; if (file_exists($file)) { self::$lang = $lang; self::$translations = require $file; } else { // Fallback: Lade stattdessen 'en.php' oder 'de.php', um Fehler zu vermeiden self::$translations = require APP_PATH . 'languages/en.php'; } } public static function get($key) { return self::$translations[$key] ?? "LANG_KEY_NOT_FOUND: $key"; } public static function current() { return self::$lang; } }
1. setLanguage($lang) versucht, die entsprechende Datei (z. B. „de.php“) zu laden.
2. get($key) liefert den passenden String. Wenn keiner vorhanden ist,
wird ein Platzhalter zurückgegeben.
3. current() gibt die aktuell gesetzte Sprache zurück (falls du sie irgendwo anzeigen möchtest).
Sprache dynamisch auswählen
Entweder setzt du die Sprache manuell in public/index.php:
// public/index.php (Auszug) \Core\Language::setLanguage('de');
oder du gibst deinen Nutzern die Möglichkeit, die Sprache über einen GET-Parameter zu ändern:
$lang = $_GET['lang'] ?? 'en'; \Core\Language::setLanguage($lang);
So könntest du den Link ?lang=de oder ?lang=en verwenden,
um verschiedene Sprachen zu aktivieren.
Texte im Controller oder in der View ausgeben
Sobald die Language-Klasse initialisiert ist, kannst du in deinen Controllern oder Views
jederzeit auf die Übersetzungen zugreifen:
// Im Controller echo \Core\Language::get('welcome_message'); // In einer PHP-View <?php echo \Core\Language::get('button_save'); ?>
In beiden Fällen wird überprüft, welche Sprache gesetzt ist, und der entsprechende String ausgegeben.
Weitere Best Practices
- Passende Schlüssel: Nutze schlanke, klare Keys. Etwa
„app_title“, „menu_about“, „menu_contact“. - Plural-Formen: Für Sprachen mit unterschiedlichen Pluralformen (z. B. Russisch)
kann man eine Methode trans_choice() ergänzen, die an den Key noch die Anzahl übergibt.
So bekommst du bei 1 Artikel oder 2 Artikel jeweils den richtigen Text. - Datums- und Zahlenformat: Manchmal möchtest du nicht nur Texte, sondern auch
Datums- und Währungsformate anpassen. Eine fortgeschrittene Language-Klasse kann hier eingreifen
und z. B.
strftime oder Intl-Funktionen nutzen. - Fallback-Lösungen: Falls mal ein Sprachkey fehlt, hast du mit
„LANG_KEY_NOT_FOUND“ schon einen groben Hinweis. Für produktive Seiten empfiehlt es sich,
stattdessen eine Standard-Sprache (z. B. Englisch) zu verwenden.
Multilinguale URLs
In komplexeren Anwendungen willst du vielleicht nicht nur Texte, sondern die gesamte URL
abhängig von der Sprache gestalten (z. B. /en/home vs. /de/start).
Dazu braucht es ein erweitertes Routing-Konzept, bei dem die Sprache als Bestandteil des Pfads,
als Subdomain (en.example.com, de.example.com) oder als Query-Parameter
(?lang=en) verwendet wird.
phpFK ist flexibel genug, solche Anpassungen per routes.php und Controller-Logik umzusetzen.
Fazit
Die Mehrsprachigkeit im phpFK – PHP Framework beruht auf einfachen Sprachdateien im Ordner
app/languages/ und einer schlanken Language-Klasse, die das Laden und Abfragen
der gewünschten Strings übernimmt. Mit diesem Ansatz kannst du problemlos deine Anwendung
in mehreren Sprachen verfügbar machen, ohne Code-Duplikation in den Controllern oder Views.
Bei Bedarf erweiterst du das System um Plural-Forms, dynamische URL-Pfade oder
eine tiefergehende Lokalisierung (L10n), um Datums- und Zahlenformate anzupassen.
So wird deine Anwendung fit für Nutzer auf der ganzen Welt.