Usando subpastas de URL para visualizações de loja em vários idiomas no Magento 2

8

Configurei o Magento 2 com duas visualizações de loja para ter dois idiomas de front-end (inglês e italiano) e gostaria de ter o seguinte comportamento:

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

Ou seja, a Visualização da loja em inglês deve estar disponível em URLs padrão e a Visualização da loja em italiano deve estar disponível na subpasta "it" na URL. Nada de estranho, uma configuração comum para sites multilíngues.

Encontrei aqui uma pergunta bastante semelhante sobre o Magento 1.x: Diferentes visualizações de sites ou sites em subpastas . Mas como a resposta aceita não é trivial (envolve reescrever no .htaccesse modificações no index.php), gostaria de perguntar se, com o Magento 2, existe uma maneira mais simples de fazer isso?


ATUALIZAR

Premissa: não me importo em ter vários sites, por isso não tenho o problema de ter vários sites com os mesmos idiomas (isso seria um problema para a solução abaixo).

Então, ativei a Add Store Code to Urlsopção, em Configuração> Web> URL> Adicionar código de loja aos URLs , e está funcionando bem. Mas agora eu tenho URLs duplicados para o idioma padrão (inglês):

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 uma maneira de evitar isso, ou seja, evitar a subpasta no URL para o idioma padrão?

Andrea
fonte

Respostas:

7

Acabei usando a solução abaixo. Eu vi que é uma configuração bastante comum para sites Magento em vários idiomas.

Esta solução fornece um idioma padrão com um redirecionamento de URL "normal" (URLs sem subpasta lang) para URLs com a subpasta lang padrão.

Por exemplo, se ité o idioma padrão, acontece o seguinte:

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

1) Crie visualizações de loja com código lang

  • Vá para Lojas> Todas as lojas .
  • Crie uma visualização da loja para cada idioma.
  • Defina no campo Código o código do idioma.
  • Exemplo: Eu tenho duas visualizações de loja, Italiano com o código "it" (visualização padrão) e Inglês com o código en .

2) Ative a adicionar código loja para URLs opção

  • Em Lojas> Configurações> Web> Opções de URL> Adicionar código de loja a URLs> Sim .
  • Habilitando esta opção, tenho o seguinte:

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

3) Defina um redirecionamento de idioma padrão no .htaccess

Abra o .htaccesse procure por estas linhas:

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

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

Em seguida, coloque as seguintes linhas antes das linhas acima:

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

Essas linhas redirecionarão todos os URLs sem subpasta de idioma para o mesmo URL com a subpasta padrão /itno início:

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

URLs que começam com en/, admin, soap/, rest/não são redirecionadas.

Você pode personalizá-lo, alterando a subpasta de idioma padrão e adicionando outros URLs ignorados (pelo menos um para cada código de idioma que você possui).

4) Redirecione a raiz para o subdiretório de idioma padrão

Na .htaccessbusca por estas linhas:

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

    Options +FollowSymLinks
    RewriteEngine on

Em seguida, coloque as seguintes linhas logo após :

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

    RedirectMatch 301 ^/$ /it/

Desvantagens

Eu usei essa solução e está funcionando bem para mim. A única desvantagem que experimentei é que ele .htaccessé reescrito toda vez que atualizo o Magento, por isso tenho que restaurá-lo após a atualização.

Outra desvantagem pode ser se você tiver uma configuração de vários sites e vários sites com os mesmos idiomas, conforme indicado em um comentário a esta resposta: https://magento.stackexchange.com/a/197/38275

Andrea
fonte
0

Eu tenho uma pergunta. Digamos que eu tenha dois URLs sob um administrador (Magento 2): 1) www.abc.cz - executa apenas a versão tcheca 2) www.cde.com - atualmente executa a versão EN

Quero ter mais visualização da loja em .com, por exemplo: .com / de, .com / es etc., mas não quero ter "sistema de pastas" para o idioma EN que é executado diretamente em .com.

Se eu entendi corretamente de alguém, quando começar a usar o sistema de pastas para .com, a versão .cz será afetada e criará a pasta .cz / cz, que é indesejável para mim.

Como fazer isso. Obrigado pela ajuda.

Viktor Malcev
fonte