Um die Sprache oder den Siteaccess in eZ Publish zu wechseln, gibt es verschiedene Ansätze. eZ Publish selbst bietet dazu leider die weniger saubere Lösung, da sie für SEO nicht gerade tauglich ist.

Variante 1

Einbindung

http://www.mydomain.com/switchlanguage/to/<newLanguageSiteAccess>/<uri>

Das Modul „switchlanguage“ erlaubt es einem sehr einfach den Siteaccess zu wechseln, dazu muss man nur die aktuelle URL am Schluss angeben. Für SEO bedachte Seiten ist es aber nicht geeignet.

Variante 2

Erweiterung:Fetch multilingual url alias by locale“ von Tobias Vogel
Diese Erweiterung ist zwar schon etwas älter, doch funktioniert sie auch unter der letzten 4.x Reihe.

Einbindung

<a href={fetch_url_alias($node.node_id, 'ger-DE')|ezurl()}>Read it in german</a>
<a href={fetch_url_alias($node.node_id, 'eng-US')|ezurl()}>Read it in english</a>

Dazu benötigt man nur die aktuelle Node_ID sowie die gewünschte Sprache und es werden die richtigen SEO Urls ausgegeben.

Variante 3

Erweiterung:nglanguageswitcher“ von Netgen
Eine schöne Erweiterung, die im Grunde das selbe wie bei der Erweiterung von Tobias erledigt: Saubere SEO Urls 🙂 Was mir bei dieser Erweiterung nicht ganz so gut gefällt, ist, dass man die jeweiligen Domains nochmal angeben muss.

Einbindung

{include uri='page_header_languages.tpl'}

# Im Template gäbe es dann den Operator ngurl()
<a href="{$uri|ngurl( $siteaccess )}">Language XX</a>

 Variante 4

Über einen Fetch Befehl. (Leider funktioniert diese Lösung nur wenn die jeweilige Sprache auch als Fallback definiert wurde)

Einbindung

{def $nodeFr = fetch( 'content', 'node', hash( 'node_id', 146, 'language_code', 'fre-FR' ) )
     $nodeEn = fetch( 'content', 'node', hash( 'node_id', 146, 'language_code', 'eng-GB' ) )}
<p>French URL Alias: {$nodeFr.url_alias} </p>
<p>English URL Alias: {$nodeEn.url_alias} </p>

Dies muss man in der site.ini definieren. (FR Siteaccess)

[RegionalSettings]
Locale=fre-FR
ContentObjectLocale=fre-FR
SiteLanguageList[]=eng-GB

und im EN Siteaccess

[RegionalSettings]
Locale=eng-GB
ContentObjectLocale=eng-GB
SiteLanguageList[]=fre-FR

Überzeugt mich leider auch nicht wirklich.

Variante 5

Fetch switchlanguage, ist ähnlich der Variante 1, mit dem Unterschied, dass man gleich die richtige SEO Url bekommt.

Einbindung

{def $urlAliasEn = fetch( 'switchlanguage', 'url_alias', hash( 'node_id', $nodeId, 'locale', 'eng-GB' ) )
     $urlAliasFr = fetch( 'switchlanguage', 'url_alias', hash( 'node_id', $nodeId, 'locale', 'fre-FR' ) )}

Über PHP kann man dies natürlich auch aufrufen.

$urlAliasEn = eZFunctionHandler::execute( 'switchlanguage', 'url_alias', array( 'node_id' => $nodeId, 'locale' => 'eng-GB' ) );
$urlAliasFr = eZFunctionHandler::execute( 'switchlanguage', 'url_alias', array( 'node_id' => $nodeId, 'locale' => 'fre-FR' ) );

Dazu benötigen wir die Variante 2, die NodeID und die gewünschte Sprache. Die Klasse dazu findet man hier: „kernel/private/classes/ezplanguageswitcher.php“

Fazit

Wie man sieht, gibt es ganz schön viele Varianten um die Sprache zu wechseln. Ich bevorzuge die Erweiterung Fetch multilingual url alias by locale, auch wenn sie schon in die Jahre gekommen ist.

Weitere Links:

https://blog.silversolutions.de/wp-content/uploads/2018/12/ez_dummy.pnghttps://blog.silversolutions.de/wp-content/uploads/2018/12/ez_dummy-150x150.pngDavid HohlB2B.praxisB2B.technologieCMS,Tipps & TricksUm die Sprache oder den Siteaccess in eZ Publish zu wechseln, gibt es verschiedene Ansätze. eZ Publish selbst bietet dazu leider die weniger saubere Lösung, da sie für SEO nicht gerade tauglich ist. Variante 1 Einbindung http://www.mydomain.com/switchlanguage/to/<newLanguageSiteAccess>/<uri> Das Modul 'switchlanguage' erlaubt es einem sehr einfach den Siteaccess zu wechseln, dazu muss man nur...Die e-Commerce B2B Experten bloggen über Händler-Shops, ERP, PIM und das integrierte CMS eZ Publish