PHP Website in 3 Sprachen

Susum

Well-known member
ID: 419742
L
10 Juni 2011
8.131
49
Hey,

ich benötige mal ein bisschen Hilfe bei meiner anstehenden Website. Ich möchte relativ einfache Website in 3 verschiedenen Sprachen erstellen.
Wie mache ich das am besten (ohne DB)?

Ich möchte nicht die Site 3 mal kopieren und dann die Sprache nur umändern.

Vielen Dank.

Liebe Grüße,
Susum
 
Du übersetzt einfach nur die Templates und setzt n Stückchen Logik vorne dran, der aus dem HTTP-Request die Sprache liest, die der Benutzer haben will und ggf. einen Mechanismus, damit der Nutzer per Knopfdruck auf der Seite n Override hat und umschalten kann. Fertig.
 
Du übersetzt einfach nur die Templates und setzt n Stückchen Logik vorne dran, der aus dem HTTP-Request die Sprache liest, die der Benutzer haben will und ggf. einen Mechanismus, damit der Nutzer per Knopfdruck auf der Seite n Override hat und umschalten kann. Fertig.

Danke schonmal für die Antwort. Allerdings kann ich damit noch nicht viel anfangen. Kannst du mir da etwas mehr zu sagen oder vielleicht hast du auch ein paar Hilfreiche links dafür ?
 
Is doch eigentlich schon fast alles gesagt.

Hier die Spezifikation, wie der Benutzer per HTTP seine Sprache dir mitteilt:
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4

Buttons zum Umschalten könnten so in etwa aussehen:
https://klamm.de/ ;) - oben rechts,
control-lang1.gif
- und
control-lang2.gif
-Icon.

Alles klar?
 
kleiner Ansatz

Code:
if(!isset($_SESSION['lang']) { $_SESSION['lang'] = 'de'; }
if(isset($_GET['define_lang'])) { $_SESSION['lang'] = $_GET['define_lang']; }

include('language_'.$_SESSION['lang'].'.inc.php');

echo $hallo;

und dann nur in den language_de.inc.php ($hallo = "Hallo"), language_en.inc.php ($hallo = "Hello") etc. - das ganz nur in sicherer und übersichlicher - aber das sollte dir nen Ansatz geben ;)
 
Und was muss ich genau in der PHP schreiben ?
Habe dann ja für einen text immer 3 in unterschiedlichen Sprachen.


edit: seklos: was meinst du mit sicher und übersichtlicher ? Kann man das irgendwo nachlesen?
 
Im Prinzip gibst du jeden Text auf deiner Seite als Variable aus.
Je nachdem, welche Sprache der User wählt, wir die entsprechende Sprache gewählt.

Ich würde für jede Sprache eine eigene Datei anlegen mit den Texten und diese dann einbinden.

z.B. Inhalt von lang_de.php
PHP:
$begruessung = "Hallo Gast";
$blabla = "Dies ist meine tolle Homepage!";

z.B. Inhalt von lang_en.php
PHP:
$begruessung = "Hello Guest";
$blabla = "This is my fancy homepage";

z.B. Inhalt index.php
PHP:
echo $begruessung;
echo $blabla;
 
Solche Konstrukte können ganz schön anstrengend werden je mehr Text man verwendet. Es gäbe da noch die im Ansatz etwas aufwändigere, aber später viel einfachere Variante namens gettext (sofern der Webserver das unterstützt).
 
Solche Konstrukte können ganz schön anstrengend werden je mehr Text man verwendet. Es gäbe da noch die im Ansatz etwas aufwändigere, aber später viel einfachere Variante namens gettext (sofern der Webserver das unterstützt).

Ja leider unterstützen dies zu wenige.


Man muss die einzelnen Dateien halt auch schön sauber halten, und sinnig verarbeiten.
Ich würden wenn dann auch eher sowas in der art nehmen:

dateiDE.inc.php
PHP:
$arrayLanguage[0] = "Hallo Gast";
$arrayLanguage[1] = "Dies ist meine tolle Homepage!";

dateiEN.inc.php
PHP:
$arrayLanguage[0] = "Hello Guest";
$arrayLanguage[1] = "This is my fancy homepage";

Dann zuerst die Browsereinstellung abfragen, welche Sprache genutzt wird.
Diese dann zuerst ausgeben. Dem User jedoch auch ne entscheidung lassen diese zu wechseln.
So habe ich es zumindest gemacht.
 
Ich möchte an dieser Stelle auf die Möglichkeit hinweisen, eine Sprachdatei als JSON anzulegen.
Hat für mich den tollen Vorteil dass auch Javascript ohne Probleme mit JSON klarkommt.

Das z.B. ist die (stark gekürzte) deutsche Sprachdatei eines Projektes welches ich gerade umsetze:

Code:
{
   "errors": {
      "error": "Fehler",
      "e404_title": "Seite nicht gefunden",
      "e404_desc": "Sorry, die aufgerufene Seite konnte nicht gefunden werden.",
	  "invalid_module_title": "Fehler: Ungültiges Modul",
      "invalid_module_desc": "Es ist ein Fehler aufgetreten: Ungültiges Modul"
   },
   
   "actions": {
      "new": "Neu",
      "add": "Hinzufügen",
      "edit": "Anpassen",
      "delete": "Löschen",
      "apply": "Übernehmen",
      "close": "Schließen",
      "enable": "Aktivieren",
      "disable": "Deaktiveren",
      "yes": "Ja",
      "no": "Nein"
   },
 
   "menus": {
	  "menu": "Menü",
      "home": "Startseite",
      "start_quiz": "Quiz starten",
      "question_catalogue": "Fragenkatalog",
	  "categories": "Kategorien",
	  "ladder": "Rangliste",
	  "faq": "FAQ",
	  "team": "Team",
	  "contact": "Kontakt",
	  "imprint": "Impressum",
	  "privacy": "Datenschutz"
   },
   
   "team": {
      "title": "Team"
   },
   
   "faq": {
      "title": "FAQ"
   },
   
   "contact": {
      "title": "Kontakt"
   },
   
   "imprint": {
      "title": "Impressum"
   },
   
   "privacy": {
      "title": "Datenschutz"
   },
   
    "ladder": {
      "title": "Rangliste"
   }
 
}

auslesen tu ich das ganze mit php. hier mal ein schnelles beispiel:

PHP:
<?php 

class language {

   public $data;

   function __construct($language) {
      $data = file_get_contents('lang/'.$language.'.json');
      $this->data = json_decode($data);
	  
	  return $this->data;
   }

}

?>

Ausserdem ist die Syntax von JSON Arrays sehr einfach, man kann also auch Laien mit der Übersetzung "beauftragen".