Zum Inhalt springen

Anleitung für Mehrsprachige Seiten mit Realurl

Erstellt am 23. August 2007 · 20 Antworten · letzte Antwort am 27. Mai 2014 · Seite 1 von 2

Tags: Frage

brokemeister ·

Da bislang viele immer wieder bei den grundlegenden Dingen für mehrsprachige Seiten am Stolpern sind.

Hier einfach mal eine kleine Zusammenfassung an Hand der Sprachen Deutsch (Default) und Englisch mit One-Tree-Installation...

Damit das ganze auch Suchmaschinen freundlich wird, wird man automatisch von der Domain auf die default Language weitergeleitet und alle Links auf der Seite werden direkt mit der entsprechenden Sprache weitergeleitet.

Beispiele:
http://www.domain.de -> http://www.domain.de/ -> http://www.domain.de/de/
http://www.domain.de/home -> http://www.domain.de/home/ -> http://www.domain.de/de/home/
http://www.domain.de/home/ -> http://www.domain.de/de/home/

Anleitung

1. Sprache erzeugen

>> Web > Liste >> Erdkugel auswählen
Datensatz mit "Webseite Sprache" angelegen; Titel = English
Dieser Datensatz sollte in der Regel die ID 1 erhalten

Jetzt kann der Inhalt in der entsprechende Sprache angelegt werden.

Anmerkung: Die Standardsprache wird per TS definiert.

2. TSConfig für das Roottemplate definieren

## REALURL ##
config {
	baseURL = http://www.domain.de/
	simulateStaticDocuments = 0
	tx_realurl_enable = 1
}

# GET-Parameter für Sprache
config.linkVars = L

# Deutsch / Hauptsprache
config {
	sys_language_uid = 0
	language = de
	locale_all = de_DE
}

# Englisch / 2. Sprache
# Die "1" muss mit der obengenannten ID übereinstimmen
# Die Weiche kann auch alternativ mit einer anderen Domain verknüpft werden (www.domain.com)
[globalVar = GP:L = 1]
config {
	sys_language_uid = 1
	language = en
	locale_all = en_US
}
[global]

3. Realurl mit localconf.php konfigurieren

Häufige wird schon ein Beispiel von RealURL genutzt... Daher hier die entscheidene Stelle bei den preVars:

Wichtig: Die Sprache muss an erster Stelle der preVars stehen!

$TYPO3_CONF_VARS['EXTCONF'] ['realurl'] ['_DEFAULT'] ['preVars'] => array(
				array(
					'GETvar' => 'L',
					'valueMap' => array(
						'de' => '0',
						'en' => '1',
						),
					'valueDefault' => 'de',
					# 'noMatch' => 'bypass',
				),
);

Anmerkung: 'noMatch' wird nicht benötigt, da wir Suchmaschinen freundliche URLS & Links haben wollen. Man kann damit aber gerne mal spielen.

4. Sprache wechseln - Linkerzeugen

Dafür einfach an gewünschter Stelle folgende TS mit integrieren

lib.link.language = TEXT
lib.link.language {
	value = English
	typolink.parameter.data = page:uid
	typolink.additionalParams = &L=1
}

# Änderungen für die englische Sprache
[globalVar = GP:L=1]
	lib.link.language.value = Deutsch
	lib.link.language.typolink.additionalParams = &L=0
[global]

YOUR_MARKER < lib.link.language

5. .htaccess erweitern

Als Vorlage dient die von Typo3 4.1.x mitgelieftere ModRewrite-Teil aus den .htaccess. (Alle Kommentare wurden gelöschen)

Wichtig:
Reihenfolgen der Zeilen beachten!
Durch '+' sind die neuen wichtige Zeilen gekennzeichnet. (Das Zeichen sollte dann weggelassen werden)

RewriteEngine On 

# Erzwingt einem Slash am Ende der Zeile, wenn es keine Datei ist.
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_URI} !(.*)/$
+ RewriteRule ^(.*)$ /$1/ [L,R=301]

RewriteRule ^(typo3|t3lib|tslib|fileadmin|typo3conf|typo3temp|uploads|showpic\.php|favicon\.ico)/ - [L]
RewriteRule ^typo3$ typo3/index_re.php [L]

# Wenn keine Sprache gesetzt ist, wird eine Sprache gesetzt
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_URI} !^/de/(.*)$
+ RewriteCond %{REQUEST_URI} !^/en/(.*)$
+ RewriteRule ^(.*)$ /de/$1 [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]

Ich hoffe mal ich habe jetzt keinen Teil vergessen. Falls doch einfach eine kurze Nachricht an mich...

Viel Spaß beim Nutzen! 🙂

brokemeister ·

Noch als kleiner Bonbon...

Einfach in Setup der Startseite folgende zeilen eintragen und im BE wird bei der Standardsprache die Flagge angezeigt sowie die Sprache...

mod.SHARED {
	defaultLanguageFlag = de.gif
	defaultLanguageLabel = Deutsch
}
brokemeister ·

Für alle, die noch nicht viel mit PHP oder mit der .htaccess gearbeitet haben, sollten die Dateien sichern und als Kopie anlegen.

localconf.php -> localconf.old
.htaccess -> _htaccess.bak (Der Punkt am Anfang darf nicht mehr da sein!)

Melle84 ·

Hallo Brokemeister,

eine Frage zu dem How-to für die Mehrsprachigkeit: bei dem Schritt 3 wohin und in welche Datei muss dieser PHP Code?

Vielen Dank

Gruss Melle

stoun ·

Hallo brokemeister,

erst vielen Dank für deine Anleitung!

Jetzt 2 Fragen.
ich habe alles gemacht und bekommen zwei Fehler.

1. Nach Änderungen in localconf.php bekomme ich eine Fehlermeldung

Parse error: parse error, unexpected T_DOUBLE_ARROW in /html/typo3conf/localconf.php on line 33

Habe
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']['preVars'] => array(
auf
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']['preVars'] = array(

geändert, dann geht es.
War das tipp-Fehler oder habe ich was falsch gemacht?

2. Nach Änderungen in .htacces bekomme ich eine andere Fehlermeldung:

Error!
Reason: "de/" could not be found, closest page matching is

Was mache ich hier falsch und wie kann ich es lösen?

Danke für deine Hilfe!

brokemeister ·

@Melle 84 und für alle anderen: Bei Fragen bitte extra Thread nutzen: Da dieser Thread sonst unübersichtlich wird.
Die Datei steht aber im übrigen in der Überschrift...

@stount: Vielen Dank für den Hinweis. Hier die Korrektur

3. Realurl mit localconf.php konfigurieren

Häufige wird schon ein Beispiel von RealURL genutzt... Daher hier die entscheidene Stelle bei den preVars:

Wichtig: Die Sprache muss an erster Stelle der preVars stehen!

$TYPO3_CONF_VARS['EXTCONF'] ['realurl'] ['_DEFAULT'] ['preVars'] = array(
				array(
					'GETvar' => 'L',
					'valueMap' => array(
						'de' => '0',
						'en' => '1',
						),
					'valueDefault' => 'de',
					# 'noMatch' => 'bypass',
				),
);

oder
für alle die schon einen Teil eine konfiguration haben, einfach den Mittelteil kopieren...

//$TYPO3_CONF_VARS['EXTCONF'] ['realurl'] ['_DEFAULT'] = Array(
			['preVars'] => array(
					array(
						'GETvar' => 'L',
						'valueMap' => array(
							'de' => '0',
							'en' => '1',
							),
						'valueDefault' => 'de',
						# 'noMatch' => 'bypass',
					),
			),
//);

Anmerkung: 'noMatch' wird nicht benötigt, da wir Suchmaschinen freundliche URLS & Links haben wollen. Man kann damit aber gerne mal spielen.

Pablito ·

Irgendwie funktioniert das nicht mit 4.2.0 . Ist das anders ? Wenn ja, wo finde ich die Anleitung ?

brokemeister ·
Pablito schrieb

Irgendwie funktioniert das nicht mit 4.2.0 . Ist das anders ? Wenn ja, wo finde ich die Anleitung ?

Bitte nutze einen eigenen Thread. Aber es sollte sich nichts großartig in 4.2 geändert haben. Wennn du ein Prob hast, poste gleich deine Zeilen in deinem Thread. Raten ist schwierig...

patricks ·

Wenn ich die htaccess entsprechend abänder werd ich immer auf die xammp startseite weitergeleitet wenn ich einen link klicke.

RewriteEngine On

# Erzwingt einem Slash am Ende der Zeile, wenn es keine Datei ist.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ // [L,R=301]

RewriteRule ^(typo3|t3lib|tslib|fileadmin|typo3conf|typo3temp|uploads|showpic\.php|favicon\.ico)/ - [L]
RewriteRule ^typo3$ typo3/typo3/index_re.php [L]

# Wenn keine Sprache gesetzt ist, wird eine Sprache gesetzt
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/typo3/de/(.*)$
RewriteCond %{REQUEST_URI} !^/typo3/en/(.*)$
RewriteRule ^(.*)$ /typo3/de/ [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /typo3/index.php [L]

Mein T3 liegt in einem Ordner "typo3".

harakiri81 ·

eine frage hierzu ( typo3 4.2.1; FE: http://web302.server3.nx24.com/unternehmen/ueberblick.html )

mit der o.g. .htaccess funktioniert meine sprachumschaltung nicht!
aber mit meiner aktuellen .htaccess trotzdem:

RewriteEngine On
RewriteRule ^typo3$ - [L]
RewriteRule ^typo3/.*$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php

aber was ich erreichen möchte: wenn man die seite aufruft über http://web302.server3.nx24.com/ dann erscheint die standardsprache deutsch wie gewünscht. wechsel ich aber in eine fremdsprache und dann wieder zurück nach deutsch, dann habe ich /de/ im pfad, was ich nicht möchte, weil es am anfang auch nicht so ist.
habe schon versucht, bei sprachumschaltung zurück nach deutsch den parameter L wegzulassen, aber dann geht die umschaltung nicht mehr.

wie kann ich das gewünschte erreichen? muss ich meine .htaccess anpassen?
danke!

GELBGRUEN ·
harakiri81 schrieb

[...]
aber was ich erreichen möchte: wenn man die seite aufruft über http://web302.server3.nx24.com/ dann erscheint die standardsprache deutsch wie gewünscht. wechsel ich aber in eine fremdsprache und dann wieder zurück nach deutsch, dann habe ich /de/ im pfad, was ich nicht möchte, weil es am anfang auch nicht so ist.
habe schon versucht, bei sprachumschaltung zurück nach deutsch den parameter L wegzulassen, aber dann geht die umschaltung nicht mehr.

wie kann ich das gewünschte erreichen? muss ich meine .htaccess anpassen?
danke!

Geht mir ähnlich.
Mir würde schon reichen wenn

url.de -> url.de/de
url.com -> url.com/en

abgeändert würde.
Aber sobald ich die .htaccess wie oben anpasse kommt bei mir ein 500er.

in-session ·

Vielleicht könnt Ihr mir noch ein wenig helfen, bezüglich des Codes:

RewriteCond %{REQUEST_URI} !^/de/(.*)$
RewriteCond %{REQUEST_URI} !^/en/(.*)$
RewriteRule ^(.*)$ /de/ [L,R=301]

Dieser funktioniert super, nur sollte die Sprachumleitung wenn keine Sprache gesetzt ist wie folgt sein:

anstatt "domain.de/de/" auf "domain.de/de.html"

Eine Idee wie ich das umsetzen kann?

Danke Chris

Chrissli ·

Vielleicht hilft dir der Teil in der realurl_conf.php weiter:

$TYPO3_CONF_VARS['EXTCONF'] ['realurl'] ['_DEFAULT'] = array(
...
       'fileName' => array (
		'defaultToHTMLsuffixOnPrev' => 1,
		'index' => array(
			'index.html' => array(
				'keyValues' => array (
					'type' => 1,*/
				),
			),
		),
	),
...
);
Apop ·

Hallo,

ich hab das Problem, dass die englischen Seitentitel nicht in die URLs aufgenommen werden.
Ansonsten funktioniert alles.

Hat da jemand einen Rat für mich, hab schon alles dumm und dämlich konfiguriert.

Nutze Typo3 v6.0 und die aktuelle RealUrl.

Gruß

jdd2405 ·
Apop schrieb

Hallo,

ich hab das Problem, dass die englischen Seitentitel nicht in die URLs aufgenommen werden.
Ansonsten funktioniert alles.

Hat da jemand einen Rat für mich, hab schon alles dumm und dämlich konfiguriert.

Nutze Typo3 v6.0 und die aktuelle RealUrl.

Gruß

Ich habe das gleiche Problem. Es führt mich schlussendlich immer wieder auf die 404-Error-Page.
Zudem benutze ich bei RealURL die Funktion "Enable automatic configuration". Mit dem muss man doch keinen zusätzlichen PHP-Code mehr hinzufügen, oder?

cyberfloh ·

Moin,

erstmal funktioniert das Skript bei mir gut.
Einziges Problem das ich habe ist mein Backend.
Seit der Konfiguration habe ich keinen Zugriff mehr auf mein Backend über www.domain.de/typo3
sobald ich das eingebe, werde ich automatisch auf www.domain.de/de/ umgeleitet.

Hat jemand einen Tipp für mich ?

Wäre sehr dankbar !

Grüße

cyberfloh ·
cyberfloh schrieb

Moin,

erstmal funktioniert das Skript bei mir gut.
Einziges Problem das ich habe ist mein Backend.
Seit der Konfiguration habe ich keinen Zugriff mehr auf mein Backend über www.domain.de/typo3
sobald ich das eingebe, werde ich automatisch auf www.domain.de/de/ umgeleitet.

Hat jemand einen Tipp für mich ?

Wäre sehr dankbar !

Grüße

OK OK, ich habs gefunden. So ein Flash / bewirkt oft Wunder :-) Wie peinlich ;-)
Natürlich muss es heissen: domain.de/typo3/ dann geht es auch ....

cyberfloh ·
cyberfloh schrieb
cyberfloh schrieb

Moin,

erstmal funktioniert das Skript bei mir gut.
Einziges Problem das ich habe ist mein Backend.
Seit der Konfiguration habe ich keinen Zugriff mehr auf mein Backend über www.domain.de/typo3
sobald ich das eingebe, werde ich automatisch auf www.domain.de/de/ umgeleitet.

Hat jemand einen Tipp für mich ?

Wäre sehr dankbar !

Grüße

OK OK, ich habs gefunden. So ein Flash / bewirkt oft Wunder :-) Wie peinlich ;-)
Natürlich muss es heissen: domain.de/typo3/ dann geht es auch ....

SLASH blöde Autokorrektur...