我在ApplicationController中使用before_filter为我的应用程序设置语言环境:
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
适用于由我编写的控制器。但所有设计的消息仍然是英文。
在config.i18n.default_locale = "uk"
中设置config/application.rb
(或其他)是有效的,所以我想问题是设计的控制器不使用我的before_filter(可能,它根本不会继承ApplicationController
(?))。
如何解决此问题?如何设计使用我的语言环境?
答案 0 :(得分:3)
看看Devise Wiki https://github.com/plataformatec/devise/wiki/I18n 他们有很多YML文件样本。
如果你还想写自己的,请尝试在你的I18n文件中使用这样的东西
en:
devise:
sessions:
signed_in: 'Signed in successfully.'
有关GitHub的更多信息https://github.com/plataformatec/devise#i18n
答案 1 :(得分:0)
您需要使用filename=parameters.txt
while IFS=: read -r first second; do
if [ “$first” == “sheet_name” ]; then
echo ‘matched’
else
echo “not matched“
fi
done < $filename
(或prepend_before_action
,但它是prepend_before_filter
的别名,很快就会被弃用)所以您应该使用以下内容:
prepend_before_action
注意,这可能会破坏视图中的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
,因此您可能需要在其他I18n.locale
中进行设置。
答案 2 :(得分:0)
我有这个问题,我的法语设计语言环境正在为每个人加载,问题是我的设计语言环境最初是在他们自己的文件中构建的 - __set()
。我将它们移到devise.en.yml
文件中,一切都已修复。
希望这有助于将来的某个人!
答案 3 :(得分:0)
您可以通过以下方式在config/application.rb
或config/initializers/locale.rb
中设置默认语言环境:
# Set default locale to something other than :en
I18n.default_locale = :fa
的建议
然后,您应该添加相关的yml
翻译文件,例如:fa.yml
。文件应位于存在默认locales
文件的en
目录中。您还可以设置要加载的自定义目录。