• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Webseite Sprache wechseln dynamisch

imoney91

Mitglied
Hallo Leute,

ich habe folgendes Problem und bin mit meinem Freund Google noch nicht wirklich glücklich geworden.

Ich möchte eine dynamische HTML-Seite bauen, die ihre Strings/Textpassagen aus einer XML lädt.
Der User kann mit mehreren Buttons die Sprache wechseln. Je nachdem welche Sprache der User auswählt, wir das
zuständige (Sprachen)XML geladen und per Data-Binding in den HTML code eingebunden.

- Ist das der richtige Ansatz für eine multiple language Webseite?
- Data Binding unterstützt nur der internet explorer, ich brauche aber eine globale Lösung.
- Ich habe keine Pattern diesbezüglich gefunden?!

Kann mir jemand ein paar Hinweise geben, damit ich ich schlau machen kann?

Gruß
 
Werbung:
Werbung:
hallö,
dynamisch und xml und html ist schon nichts.
also php is schon nötig.
entweder cms wie schon geschrieben oder Datei bzw Ordner strucktur die sprachen abbildem.

Di bei cms natürlich besser da schon alles steht.

cheffchen
 
Danke für die Antworten, aber ich glaube ich habe mich falsch ausgedrückt. Ich möchte keine Lokalisierung, die abhängig von der Domain oder etc. funktioniert. Ich möchte dem User die Möglichkeit geben die Sprache zu wechseln, ohne eine neue Seite zu laden. Also keine 5 verschiedene statische HTML Seiten mit verschiedenen sprachen, die dann nur als URL aufgerufen werden, sondern die Sprachelemente einer seite dynamisch nachladen, wenn der User eine Sprache ausgewählt hat.

@Cheffchen: ich möchte natürlich Javascript einsetzen
 
Auch das kannst Du nur über eine serverseitige Sprache wie PHP erreichen.

Beispiel:
HTML:
<a href="index.php?lang=en">wechsel zu Englisch</a>

In index.php müsste dann als eine der ersten Prüfungen geschaut werden, ob lang gesetzt ist und wenn ja auf was. Ist es eine unterstützte Sprache kann die PHP-Datei dann die jeweiligen Texte dieser Sprache aus der XML auslesen.

Mit HTML alleine geht das was Du willst nicht.
 
Werbung:
Theoretisch könntest Du die gewählte Sprache per JavaScript als Cookie speichern. Und abhängig von diesem Cookie dann deine XML per JavaScript laden. Wie Du selbst schon sagtest, kann das aber nicht jeder Browser. Der sauberste Weg ist immernoch eine serverseitige Sprachverwaltung.
 
Werbung:
@imoney91: Ich denke ich hatte das gleiche Problem wie du, ich kann dir hier mal meine Loesung zu dem Problem praesentieren (ist zwar OT in dem Bereich hier, aber eine Antwort auf das Problem):

Als erstes wird die eingestellte Sprache des Browsers des Users erfasst. Ist diese eine der unterstuetzten Sprachen, wird auf die Sprache gewechselt. Wird die Sprache nicht unterstuetzt, wird die Seite in en (Englisch) angezeigt. Dabei wird als Startseite der content "Home" eingebunden. Nachdem diese Entscheidung stattgefunden hat, laesst sich ueber ein Menue, wie du es auch hast, die Sprache beliebeig aendern.

PHP:
<?php
header("Cache-control: private"); 
$abfrage = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
$test = substr($_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"],25);


if(isSet($_GET["lang"]))
{
	$lang = $_GET["lang"];
}
else if(!isSet($GET["lang"]))
{
	if(substr($abfrage,0,2) == "de" OR substr($abfrage,0,2) == "en" OR substr($abfrage,0,2) == "fr" OR substr($abfrage,0,2) == "es" OR substr($abfrage,0,2) == "cn")
	{
		$lang = substr($abfrage,0,2);
		$content = "home";
	}
	else
	{
		$lang = "en";
		$content = "home";
	}
}

switch ($lang) {
	
case "de":
	$lang_file = 'lang.de.php';
	$id = "1";
break;
	
case "en":
	$lang_file = 'lang.en.php';
	$id = "2";
break;
 
case "es":
	$lang_file = 'lang.es.php';
	$id = "3";
break;

case "fr":
	$lang_file = 'lang.fr.php';
	$id = "4";
break;

case "cn":
	$lang_file = 'lang.cn.php';
	$id = "5";
break;
 
}
  
include_once 'languages/'.$lang_file; 	 
?>


Hier einmal das normale Navigationsmenue in dem die einzelnen Inhalte variabel verlinkt sind:


HTML:
      <div class="menu">
        <ul>
          <li><a href="<?php echo $lang['MENU_HOME_LINK']; ?>"><?php echo $lang['MENU_HOME']; ?></a></li>
          <li class="<?php echo $lang['MENU_DROPDOWN_ABOUT']; ?>"><a href="<?php echo $lang['MENU_ABOUT_LINK']; ?>"><?php echo $lang['MENU_ABOUT']; ?></a>
            <ul>
              <li><a href='#'><?php echo $lang['MENU_ABOUT_BACKGROUND']; ?></a></li>
              <li><a href='#'><?php echo $lang['MENU_ABOUT_TEAM']; ?></a></li>
            </ul>
          </li>
          <li class="<?php echo $lang['MENU_DROPDOWN_SERVICE']; ?>"><a href='#'><?php echo $lang['MENU_SERVICE']; ?></a>
            <ul>
              <li><a href='#'><?php echo $lang['MENU_SERVICE_DESCRIPTION']; ?></a></li>
              <li><a href='#'><?php echo $lang['MENU_SERVICE_EXAMPLES']; ?></a></li>
            </ul> 
          </li> 
          <li><a href='#'><?php echo $lang['MENU_REFERENCES']; ?></a></li>
          <li><a href='#'><?php echo $lang['MENU_PARTNER']; ?></a></li>
          <li><a href='#'><?php echo $lang['MENU_SAFETY']; ?></a></li>
          <li><a href='#'><?php echo $lang['MENU_CONTACT']; ?></a></li>
        </ul>
      </div>

Und dazu noch das Sprachmenue. In dem nicht nur die aktuelle Sprache geaendert wird, sondern auch der momentan geladene Content angepasst wird, also der Inhalt gleich bleibt und nur die Sprache sich aendert.

HTML:
        <div class="header_menu1">
          <ul>
            <li><a href='#'><?php echo $lang['HEADER_MENU1_ABOUT']; ?></a></li>
            <li><a href='#'><?php echo $lang['HEADER_MENU1_CONTACT']; ?></a></li>
            <li class="language"><a href='<?php if ($test == "" ) { echo $lang['HEADER_MENU1_LANGUAGE_01_LINK']."&content=home"; } else { echo $lang['HEADER_MENU1_LANGUAGE_01_LINK'].substr($_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"],25); } ?>'><img src="<?php echo $lang['HEADER_MENU1_LANGUAGE_01_IMG']; ?>" width="12px" height="12px" alt="<?php echo $lang['HEADER_MENU1_LANGUAGE_01_ALT']; ?>"><?php echo $lang['HEADER_MENU1_LANGUAGE_01']; ?></a>
              <ul>
                <li><a href='<?php if ($test == "" ) { echo $lang['HEADER_MENU1_LANGUAGE_02_LINK']."&content=home"; } else { echo $lang['HEADER_MENU1_LANGUAGE_02_LINK'].substr($_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"],25); } ?>'><img src="<?php echo $lang['HEADER_MENU1_LANGUAGE_02_IMG']; ?>" width="12" height="12" alt="<?php echo $lang['HEADER_MENU1_LANGUAGE_02_ALT']; ?>"><?php echo $lang['HEADER_MENU1_LANGUAGE_02']; ?></a></li>
                <li><a href='<?php if ($test == "" ) { echo $lang['HEADER_MENU1_LANGUAGE_03_LINK']."&content=home"; } else { echo $lang['HEADER_MENU1_LANGUAGE_03_LINK'].substr($_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"],25); } ?>'><img src="<?php echo $lang['HEADER_MENU1_LANGUAGE_03_IMG']; ?>" width="12" height="12" alt="<?php echo $lang['HEADER_MENU1_LANGUAGE_03_ALT']; ?>"><?php echo $lang['HEADER_MENU1_LANGUAGE_03']; ?></a></li>
                <li><a href='<?php if ($test == "" ) { echo $lang['HEADER_MENU1_LANGUAGE_04_LINK']."&content=home"; } else { echo $lang['HEADER_MENU1_LANGUAGE_04_LINK'].substr($_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"],25); } ?>'><img src="<?php echo $lang['HEADER_MENU1_LANGUAGE_04_IMG']; ?>" width="12" height="12" alt="<?php echo $lang['HEADER_MENU1_LANGUAGE_04_ALT']; ?>"><?php echo $lang['HEADER_MENU1_LANGUAGE_04']; ?></a></li>
                <li><a href='<?php if ($test == "" ) { echo $lang['HEADER_MENU1_LANGUAGE_05_LINK']."&content=home"; } else { echo $lang['HEADER_MENU1_LANGUAGE_05_LINK'].substr($_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"],25); } ?>'><img src="<?php echo $lang['HEADER_MENU1_LANGUAGE_05_IMG']; ?>" width="12" height="12" alt="<?php echo $lang['HEADER_MENU1_LANGUAGE_05_ALT']; ?>"><?php echo $lang['HEADER_MENU1_LANGUAGE_05']; ?></a></li>
              </ul>
            </li>
          </ul>
        </div>

Die einzelnen Sprachen sind in den Dateien language.de.php usw hinterlegt. Die sind dort einfach in einem Array drin ... Bsp:

PHP:
<?php
/*
------------------
Language: deutsch
------------------
*/ 
$lang = array();

// header_menu1
 
$lang['HEADER_MENU1_ABOUT'] = 'Über ECB';
$lang['HEADER_MENU1_CONTACT'] = 'Kontaktieren Sie uns';


// header_menu 1 languages

$lang['HEADER_MENU1_LANGUAGE_01'] = 'Deutsch';
$lang['HEADER_MENU1_LANGUAGE_01_ALT'] = 'Deutsch';
$lang['HEADER_MENU1_LANGUAGE_01_LINK'] = '?lang=de';
$lang['HEADER_MENU1_LANGUAGE_01_IMG'] = 'pic/icons/GermanyFlag.png';

$lang['HEADER_MENU1_LANGUAGE_02'] = 'English';
$lang['HEADER_MENU1_LANGUAGE_02_ALT'] = 'English';
$lang['HEADER_MENU1_LANGUAGE_02_LINK'] = 'index.php?lang=en';
$lang['HEADER_MENU1_LANGUAGE_02_IMG'] = 'pic/icons/UnitedKingdomflag.png';

/*usw*/
php>

Final wird der content ueber xml Dateien eingebunden, in jeder Datei (content=home oder content=aboutus) gibt es 5 IDs wo jede ID fuer eine Sprachvariante steht:

PHP:
 <div class="main">    
	  <?php
	  if(isSet($_GET["content"]))
	  {
		  $content = $_GET["content"];
	  }
	  
	  switch ($content) {
		  case "home":
		  	$datei = "home.xml";
		  break;
		  
		  case "aboutus":
		  	$datei = "aboutus.xml";
		  break;
	  }
	  	  	    	             
      if (file_exists("$datei")) {         
        $xml = simplexml_load_file("$datei");         
        $path ="/content/artikel[@id=".$id."]";         
        if (!$res = $xml->xpath($path)) {
          echo "Artikel nicht vorhanden!";
        }
        else {
          echo "<h1>".$res[0]->titel."</h1>";
          echo "<p><b>".$res[0]->teaser."</b></p>";
          echo "<p>".$res[0]->inhalt."</p>";
        }
      }
      
      else {
        exit("Konnte Datei nicht laden.");
      }
      ?>
      </div>

Und noch die xml in der der Content, in dem Beispiel Home, gespeichert ist:

HTML:
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<content>

 <artikel id="1">

 <meta>
  <keywords>home, deutsch</keywords> 
  <description>home, deutsch</description> 
 </meta>

  <titel>HOME DEUTSCH</titel> 
  <teaser>Der Teaser, eine kurze Beschreibung</teaser> 
  <inhalt>Der Artikelinhalt</inhalt> 

 </artikel>


 <artikel id="2">

 <meta>
  <keywords>home, english</keywords> 
  <description>home, english</description> 
 </meta>

  <titel>HOME ENGLISCH</titel> 
  <teaser>Der zweite Teaser, eine kurze Beschreibung</teaser> 
  <inhalt>Der zweite Artikelinhalt</inhalt> 

 </artikel>

</content>

Wie das Ganze schlussendlich funktioniert kannst du dir HIER anschauen. Zur Info: Die Sprachen ES FR und CH sind momentan noch nicht uebersetzt, es funktionieren also nur EN und DE.

Hoffe das hat geholfen und ist nicht zu verwirrend ;) ... and den Rest von euch Profis: Wenn wer in meiner Methode was sieht was man auf jeden Fall anders machen sollte bzw. verbesser kann, immer her mit den Tips!! Danke!
 
Zuletzt bearbeitet:
Hallo,

oi, da hast ja was zusammen geschustert :O).
Als übung ja ok aber zum echten einsatz?

Hast schon mal was von gettext() gehört?
oder mal ein einfaches CMS als Framework nutzen für mehr sprachigkeit.

Deins geht für miniseiten vielleicht ja noch gerade so aber ist doch zu sehr fehlerbehaftet.

Die Urls sehen auch nicht so ganz optimal aus ;O).
#main ist fester höhe gibt bei verschiedenen browser auch Problem.

Cheffchen
 
Werbung:
Zurück
Oben