Utilizzo delle sottocartelle URL per visualizzazioni archivio multilingue in Magento 2


8

Ho configurato Magento 2 con due visualizzazioni dello store per avere due lingue front-end (inglese e italiano) e vorrei avere il seguente comportamento:

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

In altre parole, la visualizzazione del negozio in inglese dovrebbe essere disponibile sugli URL standard e la visualizzazione del negozio in italiano dovrebbe essere disponibile nella sottocartella "it" nell'URL. Niente di strano, una configurazione comune per i siti Web multilingue.

Ho trovato qui una domanda abbastanza simile per quanto riguarda Magento 1.x: diverse visualizzazioni di negozi o siti Web in sottocartelle . Ma poiché la risposta accettata non è banale (implica riscrittura .htaccesse modifiche nella index.php), vorrei chiedere se con Magento 2 esiste un modo più semplice per farlo?


AGGIORNARE

Premessa: non mi dispiace avere più siti Web, quindi non ho il problema di avere più siti Web con le stesse lingue ( sarebbe un problema per la soluzione di seguito).

Quindi ho abilitato l' Add Store Code to Urlsopzione, da Configurazione> Web> URL> Aggiungi codice negozio a URL , e funziona bene. Ma ora ho URL duplicati per la lingua predefinita (inglese):

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")

C'è un modo per evitarlo, ovvero evitare la sottocartella nell'URL per la lingua predefinita?

Risposte:


7

Ho finito per usare la soluzione di seguito. Ho visto che è una configurazione abbastanza comune per i siti Web Magento multilingue.

Questa soluzione fornisce una lingua predefinita con un reindirizzamento dall'URL "normale" (url senza sottocartella lang) agli url con la sottocartella lang predefinita.

Ad esempio, se itè la lingua predefinita, succede questo:

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

1) Creare visualizzazioni dello store con il codice lang

  • Vai a Negozi> Tutti i negozi .
  • Crea una vista negozio per ogni lingua.
  • Impostare nel campo Codice il codice della lingua.
  • Esempio: ho due visualizzazioni negozio, Italiano con codice "it" (visualizzazione predefinita) e inglese con codice en .

2) Abilita l' opzione Aggiungi codice negozio a URL

  • Da negozi> Configurazioni> Web> Opzioni URL> Aggiungi codice negozio a URL> Sì .
  • Abilitando questa opzione ho il seguente:

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

3) Impostare un reindirizzamento lingua predefinito in .htaccess

Apri .htaccesse cerca queste righe:

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

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

Quindi posizionare le seguenti righe appena prima di quelle sopra:

############################################
## 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]

Queste righe reindirizzeranno tutti gli URL senza la sottocartella della lingua allo stesso URL con la sottocartella predefinita /itall'inizio:

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

Urls che iniziano con en/, admin, soap/, rest/non vengono reindirizzate.

Puoi personalizzarlo, cambiando la sottocartella della lingua predefinita e aggiungendo altri URL ignorati (almeno uno per ogni codice di lingua che hai).

4) Reindirizzare la radice alla directory secondaria della lingua predefinita

Nella .htaccessricerca di queste righe:

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

    Options +FollowSymLinks
    RewriteEngine on

Quindi posizionare le seguenti righe subito dopo :

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

    RedirectMatch 301 ^/$ /it/

svantaggi

Ho usato questa soluzione e funziona bene per me. L'unico vero inconveniente che ho riscontrato è che .htaccessviene riscritto ogni volta che aggiorno Magento, quindi devo ripristinarlo dopo l'aggiornamento.

Un altro svantaggio può essere se si dispone di una configurazione di più siti Web e di più siti Web con le stesse lingue indicate in un commento a questa risposta: https://magento.stackexchange.com/a/197/38275


0

Ho una domanda. Diciamo che ho due URL sotto un solo amministratore (Magento 2): 1) www.abc.cz - esegue solo la versione ceca 2) www.cde.com - attualmente esegue la versione EN

Voglio avere più vista dello Store in .com, ad esempio: .com / de, .com / es ecc., Ma non voglio avere un "sistema di cartelle" per il linguaggio EN che funziona direttamente in .com.

Se capisco correttamente da qualcuno, quando comincio a utilizzare il sistema di cartelle per .com, la versione .cz sarà interessata e creerò la cartella .cz / cz che non è desiderabile per me.

Come farlo. Grazie per l'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.