Verwenden von URL-Unterordnern für mehrsprachige Store-Ansichten in Magento 2


8

Ich habe Magento 2 mit zwei Store-Ansichten konfiguriert, um zwei Front-End-Sprachen (Englisch und Italienisch) zu haben, und ich möchte das folgende Verhalten haben:

http://example.com/     -->  Store View "English" (code = "en") - Default
http://example.com/it/  -->  Store View "Italian" (code = "it")

Das heißt, die englische Store-Ansicht sollte in Standard-URLs verfügbar sein, und die italienische Store-Ansicht sollte im Unterordner "it" in der URL verfügbar sein. Nichts Seltsames, eine übliche Konfiguration für mehrsprachige Websites.

Ich habe hier eine ziemlich ähnliche Frage zu Magento 1.x gefunden: Verschiedene Storeviews oder Websites in Unterordnern . Da die akzeptierte Antwort jedoch nicht trivial ist (sie beinhaltet Umschreibungen in der .htaccessund Änderungen in der index.php), möchte ich fragen, ob es mit Magento 2 einen einfacheren Weg gibt, dies zu erreichen.


AKTUALISIEREN

Prämisse: Es macht mir nichts aus, mehrere Websites zu haben, daher habe ich nicht das Problem, mehrere Websites mit derselben Sprache zu haben (das wäre ein Problem für die folgende Lösung).

Also habe ich die Add Store Code to UrlsOption von Konfiguration> Web> URL> Speichercode zu URLs hinzufügen aktiviert und sie funktioniert einwandfrei . Aber jetzt habe ich URLs für die Standardsprache (Englisch) dupliziert:

http://example.com/     -->  Store View "English" (code = "en")
http://example.com/en/  -->  Store View "English" (code = "en")
http://example.com/it/  -->  Store View "Italian" (code = "it")

Gibt es eine Möglichkeit, dies zu vermeiden, dh den Unterordner in der URL für die Standardsprache zu vermeiden?

Antworten:


7

Am Ende habe ich die folgende Lösung verwendet. Ich habe gesehen, dass es eine recht häufige Konfiguration für mehrsprachige Magento-Websites ist.

Diese Lösung bietet eine Standardsprache mit einer Umleitung von "normaler" URL (URLs ohne Lang-Unterordner) zu URLs mit dem Standard-Lang-Unterordner.

Wenn dies beispielsweise itdie Standardsprache ist, geschieht Folgendes:

example.com/         -->  example.com/it/
example.com/contact  -->  example.com/it/contact
...

1) Erstellen Sie Geschäftsansichten mit Lang-Code

  • Gehen Sie zu Stores> All Stores .
  • Erstellen Sie eine Store-Ansicht für jede Sprache.
  • Stellen Sie im Feld Code den Sprachcode ein.
  • Beispiel: Ich habe zwei Geschäftsansichten, Italiano mit dem Code "it" (Standardansicht) und Englisch mit dem Code en .

2) Aktivieren Sie die Option Store Code zu URLs hinzufügen

  • Über Stores> Konfigurationen> Web> URL-Optionen> Speichercode zu URLs hinzufügen> Ja .
  • Wenn ich diese Option aktiviere, habe ich Folgendes:

    http://example.com/it/  -->  Store View "Italian" (code = "it")
    http://example.com/en/  -->  Store View "English" (code = "en")

3) Legen Sie im .htaccess eine Standard-Sprachumleitung fest

Öffnen Sie die .htaccessund suchen Sie nach diesen Zeilen:

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

Setzen Sie dann die folgenden Zeilen direkt vor die obigen:

############################################
## redirects for urls without lang dir to default lang (it)

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteCond %{REQUEST_URI} !^/(it|en|admin\w*|soap|rest)($|/.*$)
    RewriteRule ^(.*)$ /it/$1 [L,R=301]

Diese Zeilen leiten alle URLs ohne Sprachunterordner zu derselben URL mit dem Standardunterordner /itam Anfang um:

example.com/contact  -->  example.com/it/contact

Urls , beginnend mit en/, admin, soap/, rest/werden nicht umgeleitet.

Sie können es anpassen, den Standard-Sprachunterordner ändern und andere ignorierte URLs hinzufügen (mindestens eine für jeden Sprachcode, den Sie haben).

4) Leiten Sie das Stammverzeichnis in das Standard-Sprachunterverzeichnis um

Bei der .htaccessSuche nach diesen Zeilen:

############################################
## enable rewrites

    Options +FollowSymLinks
    RewriteEngine on

Setzen Sie dann die folgenden Zeilen direkt danach :

############################################
## redirect root to default lang (it)

    RedirectMatch 301 ^/$ /it/

Nachteile

Ich habe diese Lösung verwendet und sie funktioniert gut für mich. Der einzige wirkliche Nachteil, den ich erlebt habe, ist, dass das .htaccessbei jedem Update von Magento neu geschrieben wird, sodass ich es nach dem Update wiederherstellen muss.

Ein weiterer Nachteil kann sein, wenn Sie mehrere Website-Konfigurationen und mehrere Websites mit denselben Sprachen haben, wie in einem Kommentar zu dieser Antwort angegeben: https://magento.stackexchange.com/a/197/38275


0

Ich habe eine Frage. Angenommen, ich habe zwei URLs unter einem Administrator (Magento 2): 1) www.abc.cz - führt nur die tschechische Version 2 aus) www.cde.com - führt derzeit die EN-Version aus

Ich möchte mehr Store-Ansicht unter .com haben, zum Beispiel: .com / de, .com / es usw., aber ich möchte kein "Ordnersystem" für die EN-Sprache haben, das direkt unter .com ausgeführt wird.

Wenn ich von jemandem richtig verstehe, ist die .cz-Version betroffen, wenn ich das Ordnersystem für .com verwende, und erstellt einen .cz / cz-Ordner, der für mich unerwünscht ist.

Wie geht das. Danke für deine Hilfe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.