Menggunakan subfolder URL untuk Tampilan Toko multi-bahasa di Magento 2

8

Saya mengonfigurasi Magento 2 dengan dua Tampilan Toko untuk memiliki dua bahasa front-end (Inggris dan Italia) dan saya ingin memiliki perilaku berikut:

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

Yaitu, Tampilan Toko Inggris harus tersedia pada url standar dan Tampilan Toko Italia harus tersedia dalam subfolder "itu" di url. Tidak ada yang aneh, konfigurasi umum untuk situs web multilanguage.

Saya menemukan di sini pertanyaan yang sangat mirip tentang Magento 1.x: Tampilan toko atau situs web yang berbeda dalam subfolder . Tetapi karena jawaban yang diterima tidak sepele (ini melibatkan penulisan ulang dalam .htaccessdan modifikasi pada index.php), saya ingin bertanya apakah dengan Magento 2 ada cara yang lebih sederhana untuk menyelesaikannya?


MEMPERBARUI

Premis: Saya tidak keberatan memiliki beberapa situs web jadi saya tidak memiliki masalah untuk memiliki beberapa situs web dengan bahasa yang sama (itu akan menjadi masalah untuk solusi di bawah).

Jadi saya mengaktifkan Add Store Code to Urlsopsi, dari Configuration> Web> Url> Add Store Code to Url , dan itu berfungsi baik. Tetapi sekarang saya memiliki duplikat url untuk bahasa default (Inggris):

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

Apakah ada cara untuk menghindari ini, yaitu menghindari subfolder di url untuk bahasa default?

Andrea
sumber

Jawaban:

7

Saya akhirnya menggunakan solusi di bawah ini. Saya melihat ini adalah konfigurasi yang cukup umum untuk situs web Magento multi-bahasa.

Solusi ini menyediakan bahasa default dengan pengalihan dari url "normal" (url tanpa subfolder lang) ke url dengan subfolder lang default.

Misalnya, jika itadalah bahasa default, itu terjadi ini:

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

1) Buat tampilan toko dengan kode lang

  • Pergi ke Toko> Semua Toko .
  • Buat Tampilan Toko untuk setiap bahasa.
  • Atur di bidang Kode kode bahasa.
  • Contoh: Saya memiliki dua tampilan toko, Italiano dengan kode "it" (tampilan default) dan bahasa Inggris dengan kode en .

2) Aktifkan Tambah Kode Store untuk Url pilihan

  • Dari Toko> Konfigurasi> Web> Opsi Url> Tambahkan Kode Toko ke Url> Ya .
  • Mengaktifkan opsi ini, saya memiliki yang berikut ini:

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

3) Atur pengalihan bahasa default di .htaccess

Buka .htaccessdan cari baris berikut:

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

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

Kemudian tempatkan baris berikut tepat sebelum yang di atas:

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

Baris-baris ini akan mengalihkan semua url tanpa subfolder bahasa ke url yang sama dengan subfolder default /itdi awal:

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

Url dimulai dengan en/, admin, soap/, rest/tidak diarahkan.

Anda dapat menyesuaikannya, mengubah subfolder bahasa default dan menambahkan url yang diabaikan lainnya (setidaknya satu untuk setiap kode bahasa yang Anda miliki).

4) Arahkan ulang root ke subdir bahasa default

Dalam .htaccessmencari garis-garis ini:

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

    Options +FollowSymLinks
    RewriteEngine on

Kemudian letakkan baris berikut tepat setelah :

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

    RedirectMatch 301 ^/$ /it/

Kekurangannya

Saya menggunakan solusi ini dan ini bekerja baik untuk saya. Satu-satunya kelemahan yang saya alami adalah bahwa .htaccessini ditulis ulang setiap kali saya memperbarui Magento, jadi saya harus mengembalikannya setelah pembaruan.

Kelemahan lainnya adalah jika Anda memiliki beberapa konfigurasi situs web dan beberapa situs web dengan bahasa yang sama seperti yang ditunjukkan dalam komentar untuk jawaban ini: https://magento.stackexchange.com/a/197/38275

Andrea
sumber
0

Saya memiliki pertanyaan. Katakanlah saya memiliki dua url di bawah satu admin (Magento 2): 1) www.abc.cz - hanya menjalankan versi Ceko 2) www.cde.com - saat ini menjalankan versi EN

Saya ingin memiliki lebih banyak tampilan Store di bawah .com misalnya: .com / de, .com / es dll. Tetapi saya tidak ingin memiliki "sistem folder" untuk bahasa EN yang berjalan langsung di bawah .com.

Jika saya mengerti dengan benar dari seseorang, ketika saya mulai menggunakan sistem folder untuk .com, versi .cz akan terpengaruh dan membuat folder .cz / cz yang tidak diinginkan untuk saya.

Bagaimana cara melakukannya. Terima kasih untuk bantuannya.

Viktor Malcev
sumber