Zitat von nikosch
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
[Erledigt] Mehrsprachige Webseite mit Session
Einklappen
Neue Werbung 2019
Einklappen
Dieses Thema ist geschlossen.
X
X
-
22hase
Ok danke für die Antwort. Stimmt das mit den IDs ist natürlich ne sehr gute Lösung. Muss ich dann direkt mal abchecken, da ich müsste ich die DB jedoch anders weitig aufbauen. Wobei man auch die Datein nach den IDs (47.php, 01.php usw..) benennen könnte, was aber sicherlich unschön ist.
-
22hase
Naja gut unübersichtlich wirds net direkt sind max. 20 PHP Datein. Das sprachspezifische wird ja in den Datein ausgelesen.Zitat von nikosch Beitrag anzeigenErschwert den Überblick. Erhöht aber die Sicherheit, weil man dann die URL-Parameter mit (int) behandeln kann.
Sicherheit geht vor
Kommentar
-
22hase
man könnte aber auch 47.index.html machen und die über mod rewrite doch einfach in www. domain.de/de/47/index/ umschreiben...Zitat von nikosch Beitrag anzeigenHmm, ich finde es macht schon nen Unterschied, ob ich das habe:
start.html
contact.html
imprint.html
..
oder
47.html
12.html
13.html
muss ich dann auch mal abchecken
Kommentar
-
Dann hast Du den oben beschriebenen Vorteil, den das INT bietet aber nicht mehr. Dann musst Du nämlich das mapping der Sprachvarianten über das Filesystem machen, was noch unschöner ist. Du brauchst etwas, womit Du direkt includen kannst, es ginge z.B.
47_de.html
47_en.html
Bsp:
Du bist auf der deutschen Startseite (id = 47), drückst dann [en], wohinter die URL: http://myPage/en/47 liegt.
Der Controller kann daraus jetzt 47 . $language . '.html'; erzeugen und versuchen, direkt zu includieren.
Kommentar
-
22hase
Ach stimmt, ich dachte an dasZitat von nikosch Beitrag anzeigenDann hast Du den oben beschriebenen Vorteil, den das INT bietet aber nicht mehr. Dann musst Du nämlich das mapping der Sprachvarianten über das Filesystem machen, was noch unschöner ist.
aber damit ist ja keine spezifische Datei angesprochen *KopfgegenWand*Code:RewriteRule ^([0-9]+)/([a-z]+)/$ $1-$2.html
Kommentar
-
Dann fällt ja wieder der Vorteil der einfachen Validierung weg, weil du ja wieder einen String hast.Zitat von 22hase Beitrag anzeigenman könnte aber auch 47.index.html machen und die über mod rewrite doch einfach in www. domain.de/de/47/index/ umschreiben...
muss ich dann auch mal abchecken
Edit:
UPS den Post von nikosch nicht gesehn
Kommentar
-
22hase
Mh kann man zur Not auch in jeden Sprachordner die selben Datein anlegen?
de/index.html
de/impressum.html
en/index.html
en/imprint.html
ist aber sicherlich auch nicht optimal, oder?
Kommentar
-
Du solltest die Dateien gleich bennen, sodass du dann einfach den ordner switched und dann die gleich benannte Datei nehmen kannst.
Außerdem würde ich dazu tendieren und dir raten nur englische Namen zu verwenden.
Kommentar
-
22hase
Also sprich die datein einmal anlegen, index, imprint, contact usw...den indhalt je nach sprache aus der DB holen in in den urls nur die sprache ändern (de, en, nl usw..)Zitat von Paul.Schramenko Beitrag anzeigenDu solltest die Dateien gleich bennen, sodass du dann einfach den ordner switched und dann die gleich benannte Datei nehmen kannst.
Außerdem würde ich dazu tendieren und dir raten nur englische Namen zu verwenden.
Kommentar
-
1. Das ist möglichkeit eins.Zitat von 22hase Beitrag anzeigenAlso sprich die datein einmal anlegen, index, imprint, contact usw...den indhalt je nach sprache aus der DB holen in in den urls nur die sprache ändern (de, en, nl usw..)
2. Möglichkeit 2 ist, du legst mehrere Dateien an, pro Sprache eine, bennest diese aber gleich. Dann gibts wieder ne Möglichkeit, entweder imptint_de.html + imprint_en.html (nicht so schön) oder de/imprint.html + en/imprint.html
Wie du diese übersetzt lieg dann bei dir. Am besten vorher bereits anlegen und komplett übersetzt hochladen.
Es sei den es sollen im laufenden Betrieb Änderungen an den Translations möglich sein. Dann würde ich nur eine Datei anlegen und gegebenfalls über mod_rewrite oder sonst wie die sprache holen und über diese dann die Sprachvariablen aus der DB holen.
Kommentar
-
Zuletzt geändert von da.eXecutoR; 11.06.2010, 09:04.Die Frage ist immer was du genau willst. Die perfekte Lösung aus User sowie SEO Sicht ist sicherlich wenn die Url komplett übersetzt und ohne irgenwelche Hilfs-IDs versehen ist. Also z.Bsp. http://www.example.com/products/new/nissan-skyline.html <> http://www.example.com/produkte/neu/...line-gt-r.html
Umsetzen lässt sich eine solche Lösung wie folgt:
Indextabelle
id | parent | title | lang | dblink
1 | 0 | welcome | en | 1
2 | 0 | inprint | en | 2
3 | 2 | employees | en | 1
4 | 0 | willkommen | de | 1
5 | 0 | impressum | de| 2
6 | 5 | mitarbeiter | de| 1
Inhaltstabellen
content_de
id | title | content
1 | Willkommen | Herzlich willkommen auf unserer Seite
2 | Impressum | Dieser Internetauftritt gehört Fimra XYZ
3 | Mitarbeiter | Unser Team besteht aus coolen Leuten
content_en
id | title | content
1 | Welcome | Welcome of our new website
2 | Imprint| The content on this website belongs to Firma XYZ
3 | Employees | Our crazy team with experts
Die URL gestaltet sich dabei wie folgt:
http://www.deineseite.de/de/impressum/mitarbeiter.html
http://www.deineseite.de/en/imprint/employees.html
Via mod_rewrite leitest du alles ( ausgenomen Verzeichnisse wo Bilder drin sind zum Beispiel. ) an die "dispatcher.php" um.
In der Dispatcher.php passiert folgendes:
1. Explode der URL in ein Array $urlparts mittels "/"
2. $urlparts[1] abgleichen mit $lang = array('de','en');
3. Wenn Sprache existiert gehts weiter wie folgt:
Gib mir die ID zurück des Tupels aus der Indextabelle wo lang = $urlparts[1] AND title = $urlparts[letztes-element(-.html) und title des Parent Elements = $urlparts[zweit-letztes-element(-.html).
Danach hol mir aus der Tabelle content_$urlparts[1] das Tuple mit der zuvor ermittelten ID.
Das ganze gibst du dann alles in der selben Datei z.Bsp. content.php aus.
Keine Ordner, keine Dateien doppelt, die ganze businesslogik in einer PHP Klasse.
Natürlich gibt es je nach genauer Anwendung noch so seine kleinen Tücken aber im grossen und ganzen funktioniert die Mehrsprachigkeit so mit dem kleinsten Aufwand im Falle einer Anpassung.
Neue Sprache einfach -> CREATE TABLE content_"NEUE-SPRACHE".
Das $lang Array kannst du dir auch dynamisch erstellen lassen anhand aller Tabellen mit dem namen "content_"*
Grüsse
eXe
Kommentar
-
Besser eine tabelle mit
id | name | value_de | value_en
1 | welcome | Willkommen! | welcome!
2 | imprint | Dieser Internetauftritt gehört Fimra XYZ | The content on this website belongs to Firma XYZ
Und dann in den Templates einfach die Variablen "welcome" oder eine andere aus der DB laden. je nachdem welche Sprache gewählt ist, kriegst du dann das richtige Ergebnis.
Kommentar
-
Hab ich anfangs auch gedacht, aber je nach grösse der Datenbank kann es sich negativ auf die Performance auswirken die Tabelle zu durchsuchen wo alle Daten zusammengefasst sind.Zitat von Paul.Schramenko Beitrag anzeigenBesser eine tabelle mit
id | name | value_de | value_en
1 | welcome | Willkommen! | welcome!
2 | imprint | Dieser Internetauftritt gehört Fimra XYZ | The content on this website belongs to Firma XYZ
Und dann in den Templates einfach die Variablen "welcome" oder eine andere aus der DB laden. je nachdem welche Sprache gewählt ist, kriegst du dann das richtige Ergebnis.
Zudem ist es sauberer die Sprachen getrennt zu haben. ( Find ich persönlich, geschmacksache. )
Zudem hast du die Möglichkeit für einzelne Sprachen ( oder sprich Regionen ) eigene Seiten zu erstellen.
Gruss
Kommentar

Kommentar