Tôi đang trong quá trình thêm quốc tế vào ứng dụng Rails và có nhiều hoặc ít theo dõi Rails Guide và Railscast có liên quan.Cách định cấu hình các tuyến đường Rails để phù hợp với i18n
tôi đã chạy vào hai vấn đề:
- Làm thế nào tôi có thể thêm một "nhà" liên kết để chuyển hướng đến miền địa phương hiện nay. Hiện tại tôi có các liên kết root_path, nhưng chúng không thành công do dòng trong routes.rb được thiết kế để nhận rễ chưa được phát hiện. Điều này có nghĩa là root_path luôn hướng đến ngôn ngữ mặc định, không phải là ngôn ngữ hiện tại.
- Tôi có mọi thứ được thiết lập và hoạt động tại địa phương (ngoại trừ số ở trên) nhưng việc triển khai cho Heroku tất cả các url xuất hiện là rơi thông qua các tệp tuyến đường của tôi và bị bắt bởi một trong số tất cả. Họ đang chuyển hướng đến '/' theo ngôn ngữ defulat .
bộ My lên như sau
application_controller.rb
before_filter :set_locale
def default_url_options(options = {})
{locale: I18n.locale}
end
private
def set_locale
I18n.locale = params[:locale] if params[:locale].present?
end
routes.rb
scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
all_my_routes
# handles /valid-locale
root to: 'home#index', as: "localized_root"
# handles /valid-locale/fake-path
match '*path', to: redirect { |params, request| "/#{params[:locale]}" }
end
# handles/
root to: redirect("/#{I18n.default_locale}")
# handles /bad-locale|anything/valid-path
match '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
# handles /anything|valid-path-but-no-locale
match '/*path', to: redirect("/#{I18n.default_locale}/%{path}")
liên kết nhà của tôi:
<%= link_to "Home", root_path %>
Tuyệt vời mà bạn đã có thể làm cho nó hoạt động theo cách bạn muốn. Nếu tôi sẽ thay đổi bất cứ điều gì, tôi đoán rằng vì bạn đã chọn cách sử dụng 'I18n.locale' làm tất cả, bạn có thể sử dụng nó trong tất cả các lệnh' match' khác thay vì 'I18n .default_locale', vì bạn đang chuyển hướng đến "miền địa phương đã biết cuối cùng" thay vì "Tôi không biết bạn muốn ngôn ngữ nào để bạn có được ngôn ngữ mặc định của ứng dụng". Ngoài ra, bạn đã viết kiểm tra định tuyến chưa? Nếu có, và bạn có thể chia sẻ chúng, vui lòng chỉnh sửa câu trả lời của bạn và đăng câu trả lời cho lợi ích của mọi người. –