Tôi chỉ nhận ra rằng Rails cách khuyến khích để thiết lập miền địa phương trong điều khiển của bạnTại sao cài đặt ngôn ngữ trong Rails hoạt động như toàn cầu (khi sử dụng Thin)?
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
đặt locale trên toàn cầu. Các mã trên hoạt động, nhưng tôi tự hỏi là default_locale
thực sự mặc định nếu bạn phải gõ nó một cách rõ ràng?
gì tôi mong đợi là phải có một miền địa phương theo yêu cầu (như chúng tôi có phiên theo yêu cầu) và làm một cái gì đó như:
def set_locale
locale = params[:locale] if params[:locale]
end
Và khi I18n.default_locale
được sử dụng bởi mặc định khác. Điều này sẽ phù hợp với lý tưởng là miền địa phương tùy chọn trong đường dẫn:
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
end
Còn bây giờ nếu vì một lý do tôi bỏ qua thiết lập miền địa phương trong một số hành động nó sử dụng ngôn ngữ thiết trong yêu cầu trước đó mà có thể là từ một người dùng khác!
Và không có điều kiện chủng tộc tiềm năng nào vì một yêu cầu có thể thay đổi toàn cầu I18n.locale
trong khi yêu cầu khác (đã đặt ngôn ngữ khác trước đó) đang ở giữa hiển thị?
UPDATE: Một số chi tiết tôi thấy bây giờ, từ documentstion i18n:
Thiết lập miền địa phương hiện tại giả trên toàn cầu, tức là trong băm Thread.current def locale = (locale)
Bây giờ tôi muốn hiểu nếu mọi yêu cầu là một chuỗi riêng biệt.
CẬP NHẬT 2: Xem câu trả lời của tôi để được giải thích.
Tôi đang gặp vấn đề tương tự, nhưng tôi đang sử dụng Unicorn! Bất kỳ ý tưởng làm thế nào để giải quyết điều này? cảm ơn –
Tôi nghĩ rằng khi bạn nói "I18n.set_locale", bạn thực sự có nghĩa là "I18n.locale =" phải không? http://www.rubydoc.info/github/svenfuchs/i18n/I18n/Config:locale= – lulalala
Bạn nói đúng, cảm ơn bạn đã sửa. – khustochka