2012-07-04 32 views
6

tôi sử dụng before_filter trong ApplicationController để thiết lập miền địa phương cho ứng dụng của tôi:Ruby on Rails + Devise + I18n: cách đặt ngôn ngữ?

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    before_filter :set_locale 

    def set_locale 
    I18n.locale = request.compatible_language_from ["uk", "ru", "de", "en"] 
    end 
end 

Nó hoạt động cho bộ điều khiển được viết bởi tôi. Nhưng tất cả các tin nhắn của nhà phát triển vẫn là tiếng Anh.

Thiết config.i18n.default_locale = "uk" (hoặc khác) trong config/application.rb công trình, vì vậy tôi đoán rằng những rắc rối là điều khiển của devise mà không sử dụng before_filter của tôi (có thể, nó không kế thừa ApplicationController ở tất cả (?)).

Cách khắc phục sự cố này? Làm thế nào để tạo ra sử dụng ngôn ngữ của tôi?

+1

sử dụng ứng dụng ApplicationController của bạn. điều này có thể cấu hình thông qua cài đặt parent_controller. – phoet

+0

@Hauleth Vâng, tôi đã làm. Và chúng hoạt động nếu tôi đặt ngôn ngữ không phải tiếng Anh làm mặc định với config.i18n.default_locale trong application.rb – frp

Trả lời

0

Bạn cần phải sử dụng prepend_before_action (hoặc prepend_before_filter nhưng nó là bí danh của prepend_before_action và sắp không được dùng nữa) vì vậy bạn nên có một cái gì đó như:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    prepend_before_action :set_locale 

    private 

    def set_locale 
    I18n.locale = request.compatible_language_from [:uk, :ru, :de, :en] 
    end 
end 

Lưu ý rằng điều này có thể phá vỡ I18n.locale trong các chế độ xem của bạn để bạn có thể cần phải đặt số này trong before_action bổ sung.

0

Tôi gặp phải vấn đề này khi ngôn ngữ lập trình bằng tiếng Pháp của tôi tải cho mọi người và vấn đề là miền địa phương của tôi ban đầu được tạo trong tệp riêng của họ - devise.en.yml. Tôi đã chuyển chúng vào tệp en.yml và mọi thứ đã được khắc phục.

Hy vọng điều này sẽ giúp ai đó trong tương lai!

Các vấn đề liên quan