Utilisation de sous-dossiers URL pour des vues de magasin multilingues dans Magento 2

8

J'ai configuré Magento 2 avec deux vues de magasin afin d'avoir deux langues frontales (anglais et italien) et je voudrais avoir le comportement suivant:

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

Autrement dit, la vue de la boutique en anglais doit être disponible sur les URL standard et la vue de la boutique en italien doit être disponible dans le sous-dossier "it" de l'URL. Rien d'étrange, une configuration courante pour les sites Web multilingues.

J'ai trouvé ici une question assez similaire concernant Magento 1.x: Différentes vues de magasin ou sites Web dans les sous-dossiers . Mais comme la réponse acceptée n'est pas triviale (elle implique des réécritures dans le .htaccesset des modifications dans le index.php), je voudrais demander si avec Magento 2 il existe un moyen plus simple de faire cela?


MISE À JOUR

Prémisse: cela ne me dérange pas d'avoir plusieurs sites Web, donc je n'ai pas le problème d'avoir plusieurs sites Web avec les mêmes langues (ce serait un problème pour la solution ci-dessous).

J'ai donc activé l' Add Store Code to Urlsoption, depuis Configuration> Web> Url> Ajouter un code de magasin aux URL , et cela fonctionne bien. Mais maintenant, j'ai dupliqué les URL pour la langue par défaut (anglais):

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

Existe-t-il un moyen d'éviter cela, c'est-à-dire d'éviter le sous-dossier dans l'url de la langue par défaut?

Andrea
la source

Réponses:

7

J'ai fini par utiliser la solution ci-dessous. J'ai vu qu'il s'agit d'une configuration assez courante pour les sites Web Magento multilingues.

Cette solution fournit une langue par défaut avec une redirection de l'url "normale" (urls sans sous-dossier lang) vers des URL avec le sous-dossier lang par défaut.

Par exemple, si itc'est la langue par défaut, il se passe ceci:

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

1) Créez des vues de magasin avec le code lang

  • Accédez à Magasins> Tous les magasins .
  • Créez une vue de magasin pour chaque langue.
  • Définissez dans le champ Code le code de langue.
  • Exemple: J'ai deux vues de magasin, Italiano avec le code "it" (vue par défaut) et l' anglais avec le code en .

2) Activez l' option Ajouter un code de magasin aux URL

  • Dans Magasins> Configurations> Web> Options d'URL> Ajouter un code de magasin aux URL> Oui .
  • En activant cette option, j'ai les éléments suivants:

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

3) Définissez une redirection de langue par défaut dans le .htaccess

Ouvrez le .htaccesset recherchez ces lignes:

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

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

Placez ensuite les lignes suivantes juste avant celles ci-dessus:

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

Ces lignes redirigeront toutes les URL sans sous-dossier de langue vers la même URL avec le sous-dossier par défaut /itau début:

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

Urls commençant par en/, admin, soap/,rest/ ne sont pas redirigés.

Vous pouvez le personnaliser, en changeant le sous-dossier de langue par défaut et en ajoutant d'autres URL ignorées (au moins une pour chaque code de langue que vous avez).

4) Rediriger la racine vers le sous-répertoire de langue par défaut

Dans la .htaccessrecherche de ces lignes:

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

    Options +FollowSymLinks
    RewriteEngine on

Placez ensuite les lignes suivantes juste après :

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

    RedirectMatch 301 ^/$ /it/

Désavantages

J'ai utilisé cette solution et cela fonctionne bien pour moi. Le seul inconvénient que j'ai rencontré est que le .htaccessfichier est réécrit chaque fois que je mets à jour Magento, donc je dois le restaurer après la mise à jour.

Un autre inconvénient peut être si vous avez une configuration de sites Web multiples et plusieurs sites Web avec les mêmes langues comme indiqué dans un commentaire à cette réponse: https://magento.stackexchange.com/a/197/38275

Andrea
la source
0

J'ai une question. Disons que j'ai deux URL sous un administrateur (Magento 2): 1) www.abc.cz - fonctionne uniquement en version tchèque 2) www.cde.com - exécute actuellement la version EN

Je veux avoir plus de vue Store sous .com par exemple: .com / de, .com / es etc. mais je ne veux pas avoir de "système de dossiers" pour la langue EN qui s'exécute directement sous .com.

Si je comprends bien de quelqu'un, lorsque je commence à utiliser le système de dossiers pour .com, la version .cz sera affectée et créera le dossier .cz / cz, ce qui n'est pas souhaitable pour moi.

Comment faire ça. Merci de votre aide.

Viktor Malcev
la source