zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Merhsprachige Website

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 29.08.2013, 02:21
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 17.08.2013
Beiträge: 242
mymaksimus befindet sich auf einem aufstrebenden Ast
Frage Merhsprachige Website

Hallöle,
Ich wollte mal Fragen wie man das "am besten" mit einer mehrsprachigen Website löst. Ich habe das mal ausprobiert und folgende methode angewandt:
Die jeweilige Sprache wird in der session gespeichert, dann die session variable geswitcht und je nach sprache eine funktion aufgerufen - das sieht ungf. so aus:

PHP-Code:
$lang_arr;
switch(
$_SESSION['lang']){
    case 
'english'english();
}
funcion english(){
    
$lang_arr = array("welcome" => "welcome"
                            "fruit" 
=> "bananas, apples");

So, das heisst auf der eigentlichen Seite muss ich dann jedesmal wenn ich text ausgeben will folgendes machen:

PHP-Code:
<?php echo $lang_arr("fruit"); ?>
Das funktioniert zwar ganz gut, aber ist natürlich - code technisch - ziemlich unübersichtlich... Aber ich würde nur ungern für jede Sprache eine Eigene Seite machen. Es gibt ja die Leute bei denen sehen die ordner dann so aus:

website
---- index_en.html
index_fr.html
index_gr.html

... also wie macht man das am besten? und wie managen das "proffesionelle" Seiten oder cms tools? Ist meine Variante vielleicht doch gar nicht so übel?

Vielen Dank.
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 29.08.2013, 03:20
Benutzerbild von Thielo
Web Ninja
XHTMLforum-Kenner
 
Registriert seit: 17.09.2009
Ort: Stuttgart oder so
Beiträge: 3.372
Thielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein LichtblickThielo ist ein Lichtblick
Standard

Mod Rewrite, ausgelagerte Sprach-Dateien, Datenbank-Einträge wären hier Worte der Wahl.

Mod-Rewrite
hast du beispielsweise folgende URLs:
www.seite.de/de/test.html
www.seite.de/en/test.html

kann über das Modrewrite die URL mit einem Parameter der die Sprache enthält weiterreichen an eine Datei.

Sprachdateien
Auf Basis des Mod-Rewrites werden unterschiedliche Sprachdateien angetriggert und ausgelesen. Jede Sprache hat beispielsweise eine eigene Sprachdatei.

Datenbank
Du hast deine Seiten und Einträge in einer Datenbank gespeichert. Und je nach Sprache kann ein Feld in der Datenbank beim Eintrag gesetzt sein.
__________________
Hier ein immer gültiges Statement: Überarbeite deine Code, lerne die Grundlagen, widersprich mir nicht, wehre dich nicht, ich habe Recht, wir sind Lolgion, wir sind viele.. potato...
All meine Angaben sind ohne Gewähr, es könnte also trotz meiner Unfehlbarkeit dazu kommen dass ich falsch liege

www.richard-thiel.de | Müssen Websiten überall gleich ausschauen?
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 29.08.2013, 09:58
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Das ist etwas komplizierter, als du dir es jetzt vorstellst. Ein Wort zu übersetzen funktioniert so, aber was ist mit sowas: "you have {zahl} apples"?
Das läßt sich im Zweifel noch mit einer printf Syntax lösen, aber was ist, wenn du nicht weißt ob Zahl eins oder zwei ist?
"Es wurde 1 Datei gelöscht" vs. "Es wurden 2 Dateien gelöscht"

Dafür gibt es aber eine Lösung gettext Übersetzers Liebling | PHP Magazin
Mit Zitat antworten
  #4 (permalink)  
Alt 29.08.2013, 11:07
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 17.08.2013
Beiträge: 242
mymaksimus befindet sich auf einem aufstrebenden Ast
Standard

Naja das ist erstmal nicht das problem, man kann die ei traege ja auch trennen. Aber ich frage mich ob es bei mehrsorachigen seiten normal ist dass man wirklich nur noch ueber php text ausgibt.
Naja es geht ja auch nicht anders.
Mit Zitat antworten
  #5 (permalink)  
Alt 29.08.2013, 11:24
?!?
XHTMLforum-Kenner
 
Registriert seit: 20.03.2013
Beiträge: 1.638
explanator sorgt für eine eindrucksvolle Atmosphäreexplanator sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von mymaksimus Beitrag anzeigen
Aber ich frage mich ob es bei mehrsorachigen seiten normal ist dass man wirklich nur noch ueber php text ausgibt..
Du hast im Prinzip 3 Möglichkeiten:
  1. Ausgabe von statischen Seiten. Du erstellst für jede Sprache eine eigene HTML-Seite.
  2. Ausgabe von dynamischen Seiten. Erstellung durch serverseitige Sprache(Standardvorgehen)
  3. Ausgabe von statischer Seite und Inhalte über AJAX dynamisch einpflegen.
Ausser bei Fall 1 hasst du immer auch eine serverseitige Sprache im Spiel.

Ob die Seite hinterher
de.example.org/index
example.org/de/index
example.org/index_de
heisst und ob sie eine Dateiendung hat ist erst mal nebensächlich.
__________________
"Wieso ist der Code schrott, ich dachte hier seien Profis..."
Aus einem Forum.
Mit Zitat antworten
  #6 (permalink)  
Alt 29.08.2013, 12:04
Benutzerbild von lottikarotti
Ein ♥ für's Web
XHTMLforum-Mitglied
 
Registriert seit: 18.04.2012
Ort: Karlsruhe
Beiträge: 396
lottikarotti wird schon bald berühmt werden
Standard

Hallöchen,

Zitat:
Zitat von mymaksimus Beitrag anzeigen
Naja das ist erstmal nicht das problem, man kann die ei traege ja auch trennen. Aber ich frage mich ob es bei mehrsorachigen seiten normal ist dass man wirklich nur noch ueber php text ausgibt.
Naja es geht ja auch nicht anders.
irgendwo müssen die Daten nunmal herkommen. Viele stülpen über PHP (was ja bereits eine Template-Engine ist) weitere Template-Enginges um die Übersichtlichkeit zu wahren. Ich persönlich nutze für meine Projekte eine eigens entwickelte Template-Engine, welche das ebenso von mir entwickelte Wörterbuch direkt abfragen kann. Das sieht in der Praxis dann etwa so aus:

de.php:
PHP-Code:
...
i18n::add('welcome''Herzlich willkommen');
i18n::add('online_user_count', function($param){
    return 
i18n::nswitch(
        
'Es sind keine weiteren Benutzer online.',
        
'Es ist %d weiterer Benutzer online.',
        
'Es sind %d weitere Benutzer online.',
        
$param
    
);
});
... 
template.html:
HTML-Code:
...
<h1>#dict.welcome#</h1>
<p>#dict.online_user_count(online_user_count)#</p>
...
Diese Template-Datei wird von meiner Engine automatisch in eine lauffähige PHP-Datei übersetzt und tut letztlich nichts anderes wie:
PHP-Code:
<?php echo i18n::get('welcome'); ?>
<?php 
echo i18n::get('online_user_count'$online_user_count); ?>
Auf die Frage, wie die "professionellen Seiten" das lösen, gibt es sicherlich keine pauschale Antwort. Jeder Entwickler hat da so seine Vorlieben in Sachen Bibliotheken, Flexibilität, Handhabung, Performance usw.

Viele Grüße,
lotti
__________________
Empfehlenswerte Links:
jsFiddle | JavaScript Patterns | RedBeanPHP | Mozilla Developer Network -/- W3C Validator | JSLint
Mit Zitat antworten
  #7 (permalink)  
Alt 29.08.2013, 12:39
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Wenn dich solche grundlegenden Techniken interessieren, lies dir doch das Symfony-Buch durch. Das ist natürlich alles auf Symfony bezogen, aber sehr gut und leicht verständlich geschrieben und lässt sich oft auch auf allgmeine Anwendungsfälle übertragen.
Mit Zitat antworten
  #8 (permalink)  
Alt 29.08.2013, 13:09
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 17.08.2013
Beiträge: 242
mymaksimus befindet sich auf einem aufstrebenden Ast
Standard

Danke erstmal für die Antworten ^^
Aber lottikarotti, jetzt bin ich etwas verwirrt - wie schaffst du es php code zwischen #...# auszuführen?? Oder übersehe ich da etwas?
Mit Zitat antworten
  #9 (permalink)  
Alt 29.08.2013, 15:25
Benutzerbild von lottikarotti
Ein ♥ für's Web
XHTMLforum-Mitglied
 
Registriert seit: 18.04.2012
Ort: Karlsruhe
Beiträge: 396
lottikarotti wird schon bald berühmt werden
Standard

Hallöchen,

Zitat:
Zitat von mymaksimus Beitrag anzeigen
Aber lottikarotti, jetzt bin ich etwas verwirrt - wie schaffst du es php code zwischen #...# auszuführen?? Oder übersehe ich da etwas?
Stell dir vor du hast eine Datei "index.html" welche eine x-beliebige Syntax für Platzhalter verwendet. Bein "rendern" wird nun die gesamte Datei "index.html" eingelesen, alle sich darin befindlichen Platzhalter werden durch die tatsächlichen Werte ersetzt und anschließend wird das Ergebnis ausgegeben. Du machst quasi aus der Zeichenkette:

HTML-Code:
<h1>#welcome#</h1>
die folgende:

HTML-Code:
<h1>Herzlich willkommen!</h1>
---

Um das nun etwas flexibler und performanter zu gestalten, gehe ich den Weg, dass ich die "rohe Fassung" der Templates selbst übersetze - und zwar in lauffähigen PHP-Code. So wird aus

HTML-Code:
<h1>#welcome#</h1>
zunächst ein PHP-Script mit dem Inhalt:

PHP-Code:
<h1><?php echo $data['welcome']; ?></h1>
Anschließend kann ich diese übersetzte Fassung mittels include "rendern":

PHP-Code:
ob_start();
$data['welcome'] = 'Herzlich willkommen';
include(
'template.php');
$html ob_get_clean(); 
In der Praxis sieht das bei mir natürlich nicht ganz so aus. Für den praktischen Einsatz nutze ich spezielle Klassen, welche mir die ganze Arbeit abnehmen und die Templates bei Bedarf automatisch übersetzen, Parameter weiterreichen usw. Das kann dann so aussehen:
PHP-Code:
<?php
    
echo Template::render'index', [ 'welcome' => 'Herzlich willkommen' ] );
?>
Auch habe ich meiner Template-Engine die Syntax #dict.VAR# beigebracht, damit ich Zeichenketten wie 'Herzlich willkommen' nicht extra an das Template übergeben muss, da diese sich ohnehin nicht ändern.

Derartige Techniken sind eigt. üblich im PHP-Umfeld und du wirst zu dem Thema viele weitere Informationen im Netz finden.

Viele Grüße,
lotti
__________________
Empfehlenswerte Links:
jsFiddle | JavaScript Patterns | RedBeanPHP | Mozilla Developer Network -/- W3C Validator | JSLint

Geändert von lottikarotti (29.08.2013 um 15:28 Uhr)
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 29.08.2013, 16:15
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 17.08.2013
Beiträge: 242
mymaksimus befindet sich auf einem aufstrebenden Ast
Standard

Hm unter welchem Stichwort suche ich denn da?
Also wie bringe ich meinem Dokument bei zB aus $ $ <?php ?> zu machen?
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Teile der Website verschieben sich bei Auflösung Panamajack (X)HTML 7 19.06.2010 15:53
Norwegische Webmaster gegen veraltete Browser Schelm.isch Offtopic 255 23.04.2009 22:27
analysetool für websites opa-rudi Site- und Layoutcheck 23 05.08.2008 15:33
Bitte um Feedback zu meiner überarbeiteten Website Sen-nefer Site- und Layoutcheck 9 08.02.2008 16:49


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:41 Uhr.