Sử dụng các thư mục con URL cho Lượt xem cửa hàng đa ngôn ngữ trong Magento 2


8

Tôi đã định cấu hình Magento 2 với hai Chế độ xem Cửa hàng để có hai ngôn ngữ giao diện người dùng (tiếng Anh và tiếng Ý) và tôi muốn có hành vi sau:

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

Nghĩa là, Chế độ xem Cửa hàng tiếng Anh phải có sẵn trên các url tiêu chuẩn và Chế độ xem Cửa hàng Ý phải có sẵn trong thư mục con "nó" trong url. Không có gì lạ, một cấu hình phổ biến cho các trang web đa ngôn ngữ.

Tôi tìm thấy ở đây một câu hỏi khá giống nhau về Magento 1.x: Các lượt xem hoặc trang web khác nhau trong các thư mục con . Nhưng vì câu trả lời được chấp nhận là không tầm thường (nó liên quan đến việc viết lại .htaccessvà sửa đổi trong index.php), tôi muốn hỏi liệu với Magento 2 có cách nào đơn giản hơn để thực hiện việc này không?


CẬP NHẬT

Tiền đề: Tôi không bận tâm về việc có nhiều trang web vì vậy tôi không gặp vấn đề gì khi có một số trang web có cùng ngôn ngữ (đó sẽ là một vấn đề đối với giải pháp bên dưới).

Vì vậy, tôi đã bật Add Store Code to Urlstùy chọn, từ Cấu hình> Web> Url> Thêm mã cửa hàng vào Url và nó hoạt động tốt. Nhưng bây giờ tôi đã sao chép các url cho ngôn ngữ mặc định (tiếng Anh):

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ó cách nào để tránh điều này, tức là tránh thư mục con trong url cho ngôn ngữ mặc định?

Câu trả lời:


7

Tôi đã kết thúc bằng cách sử dụng giải pháp dưới đây. Tôi thấy nó là một cấu hình khá phổ biến cho các trang web Magento đa ngôn ngữ.

Giải pháp này cung cấp ngôn ngữ mặc định với chuyển hướng từ url "bình thường" (url không có thư mục con lang) sang url với thư mục con lang mặc định.

Ví dụ: nếu itlà ngôn ngữ mặc định, nó sẽ xảy ra điều này:

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

1) Tạo lượt xem cửa hàng với mã lang

  • Chuyển đến Cửa hàng> Tất cả Cửa hàng .
  • Tạo Chế độ xem cửa hàng cho từng ngôn ngữ.
  • Lấy bối cảnh luật lĩnh vực mã ngôn ngữ.
  • Ví dụ: Tôi có hai chế độ xem cửa hàng, tiếng Ý với mã "nó" (chế độ xem mặc định) và tiếng Anh có mã en .

2) Kích hoạt tùy chọn Thêm mã cửa hàng vào Urls

  • Từ Cửa hàng> Cấu hình> Web> Tùy chọn Url> Thêm mã cửa hàng vào Url> Có .
  • Kích hoạt tùy chọn này tôi có những điều sau đây:

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

3) Đặt chuyển hướng ngôn ngữ mặc định trong .htaccess

Mở .htaccessvà tìm kiếm những dòng này:

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

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

Sau đó đặt các dòng sau ngay trước các dòng trên:

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

Các dòng này sẽ chuyển hướng tất cả các url mà không có thư mục con ngôn ngữ đến cùng một url với thư mục con mặc định /itở đầu:

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

Url bắt đầu với en/, admin, soap/, rest/không được chuyển đi.

Bạn có thể tùy chỉnh nó, thay đổi thư mục con ngôn ngữ mặc định và thêm các url bị bỏ qua khác (ít nhất một cho mỗi mã ngôn ngữ bạn có).

4) Chuyển hướng gốc đến thư mục con ngôn ngữ mặc định

Trong quá trình .htaccesstìm kiếm những dòng này:

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

    Options +FollowSymLinks
    RewriteEngine on

Sau đó đặt các dòng sau ngay sau :

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

    RedirectMatch 301 ^/$ /it/

Hạn chế

Tôi đã sử dụng giải pháp này và nó hoạt động tốt cho tôi. Hạn chế thực sự duy nhất tôi đã trải nghiệm là nó .htaccessđược viết lại mỗi lần tôi cập nhật Magento, vì vậy tôi phải khôi phục nó sau khi cập nhật.

Một nhược điểm khác có thể là nếu bạn có cấu hình nhiều trang web và một số trang web có cùng ngôn ngữ như được nêu trong một nhận xét cho câu trả lời này: https://magento.stackexchange.com/a/197/38275


0

Tôi có câu hỏi. Giả sử tôi có hai url dưới một quản trị viên (Magento 2): 1) www.abc.cz - chỉ chạy phiên bản tiếng Séc 2) www.cde.com - hiện đang chạy phiên bản EN

Tôi muốn có nhiều lượt xem Cửa hàng hơn trong ví dụ: .com / de, .com / es, v.v. nhưng tôi không muốn có "hệ thống thư mục" cho ngôn ngữ EN chạy trực tiếp dưới .com.

Nếu tôi hiểu chính xác từ ai đó, khi tôi bắt đầu sử dụng hệ thống thư mục cho .com, phiên bản .cz sẽ bị ảnh hưởng và tạo thư mục .cz / cz không mong muốn đối với tôi.

Làm thế nào để làm điều đó. Cảm ơn sự giúp đỡ của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.