Использование вложенных папок URL для многоязычных представлений магазина в Magento 2

8

Я настроил Magento 2 с двумя представлениями магазина, чтобы иметь два языка интерфейса (английский и итальянский), и я хотел бы иметь следующее поведение:

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

Таким образом, представление «Английский магазин» должно быть доступно по стандартным URL-адресам, а представление «Итальянский магазин» должно быть доступно в подпапке «it» в URL-адресе. Ничего странного, обычная конфигурация для мультиязычных сайтов.

Я нашел здесь довольно похожий вопрос, касающийся Magento 1.x: различные виды магазинов или веб-сайты в подпапках . Но так как принятый ответ не тривиален (он включает в себя переписывание в .htaccessи изменения в index.php), я хотел бы спросить, есть ли в Magento 2 более простой способ сделать это?


ОБНОВИТЬ

Предпосылка: я не против иметь несколько веб-сайтов, поэтому у меня нет проблем с несколькими веб-сайтами с одинаковыми языками (это было бы проблемой для приведенного ниже решения).

Поэтому я включил эту Add Store Code to Urlsопцию, выбрав Конфигурация> Интернет> URL-адрес> Добавить код магазина в URL-адреса , и он работает хорошо. Но теперь я продублировал URL для языка по умолчанию (английский):

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

Есть ли способ избежать этого, то есть избежать подпапки в URL для языка по умолчанию?

Andrea
источник

Ответы:

7

В итоге я воспользовался приведенным ниже решением. Я видел, что это довольно распространенная конфигурация для многоязычных веб-сайтов Magento.

Это решение предоставляет язык по умолчанию с перенаправлением с «обычного» URL (URL-адреса без подпапки lang) на URL-адреса с подпапкой lang по умолчанию.

Например, если itязык по умолчанию, это происходит так:

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

1) Создайте представления магазина с кодом языка

  • Перейти в магазины> Все магазины .
  • Создайте представление магазина для каждого языка.
  • Установите в коде поле кода языка.
  • Пример: у меня есть два вида магазина: Italiano с кодом «it» (вид по умолчанию) и English с кодом en .

2) Включите опцию Добавить код магазина в URL

  • В разделе «Магазины»> «Конфигурации»> «Интернет»> «Параметры URL-адресов»> «Добавить код магазина в URL-адреса»> «Да» .
  • Включив эту опцию, я имею следующее:

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

3) Установите перенаправление языка по умолчанию в .htaccess

Откройте .htaccessи найдите следующие строки:

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

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

Затем поместите следующие строки непосредственно перед вышеупомянутыми:

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

Эти строки будут перенаправлять все URL-адреса без языковой подпапки на тот же URL-адрес с подпапкой /itпо умолчанию в начале:

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

Urls начиная с en/, admin, soap/, rest/не перенаправляются.

Вы можете настроить его, изменив языковую подпапку по умолчанию и добавив другие игнорируемые URL-адреса (по крайней мере, один для каждого кода языка, который у вас есть).

4) Перенаправить рут на язык по умолчанию.

В .htaccessпоиске этих строк:

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

    Options +FollowSymLinks
    RewriteEngine on

Затем поместите следующие строки сразу после :

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

    RedirectMatch 301 ^/$ /it/

Недостатки

Я использовал это решение, и оно работает хорошо для меня. Единственный недостаток, который я испытал, заключается в том, что .htaccessон переписывается каждый раз, когда я обновляю Magento, поэтому я должен восстановить его после обновления.

Еще один недостаток может быть, если у вас есть несколько веб-сайтов конфигурации и несколько веб-сайтов с такими же языками, как указано в комментарии к этому ответу: https://magento.stackexchange.com/a/197/38275

Andrea
источник
0

У меня вопрос. Допустим, у меня есть два URL под одним администратором (Magento 2): 1) www.abc.cz - работает только чешская версия 2) www.cde.com - в настоящее время работает EN версия

Я хочу иметь больше представлений Store в .com, например: .com / de, .com / es и т. Д., Но я не хочу иметь «систему папок» для языка EN, которая работает непосредственно в .com.

Если я правильно понимаю от кого-то, когда я начну использовать систему папок для .com, это повлияет на версию .cz и создаст папку .cz / cz, что для меня нежелательно.

Как это сделать. Спасибо за помощь.

Виктор Мальцев
источник