gpt4 book ai didi

ruby-on-rails - Rails i18n中的混合语言环境

转载 作者:行者123 更新时间:2023-12-04 03:17:15 24 4
gpt4 key购买 nike

Rails以某种方式混合了我的语言环境,我完全不知道为什么。我翻译的大多数字符串都可以按预期工作,但是对于某些字符串,它混合了语言环境。

有趣的是,这仅发生在我们的系统之一上。使用Apache专门运行Passenger。

在我的开发系统上使用Webrick,Thin或Passenger Standalone时,一切都很好。

这就是我的application.rb中的内容:

config.i18n.default_locale = :de

这是在 application_controller.rb中:
before_filter :set_locale

def set_locale
I18n.locale = @current_client ? @current_client.locale : I18n.default_locale
end

(我在 @current_clientnil并执行 else部分的页面上遇到了这些问题)。

因此,我基本上是在使用 :de语言环境。当在表单上显示验证错误时,我会遇到如下混淆的翻译:

ist zu kurz (nicht weniger als 6 Zeichen) und translation missing: en.activerecord.errors.custom.password_format



如您所见,第一个失败的验证中的错误消息按预期进行了翻译,因为第二个错误消息尝试访问英语翻译(不存在)。

我怀疑即使在执行 before_filter之前,延迟加载已翻译字符串的问题。

为什么会发生这种情况的任何线索?

记录:这是Rails 3

编辑:

我刚刚发现,这取决于所使用的环境。使用开发环境时,一切都很好。在使用生产环境(或类似生产的环境)时,我会遇到上述行为。

编辑2 :

我发现了更多:具体取决于 config.cache_classes。设置为 true时,我看到的是混合翻译。设置为 false时(如在典型的开发环境中一样),i18n会按预期工作。

编辑3 :

也许这与以下错误有关?

https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/5522

编辑4 :

这与上面提到的错误有关,该问题是由于使用I18n字符串的模型类的加载异常而引起的,但是在I18n初始化之前就进行了类加载,因此找不到转换。甚至还有另一个关于此的错误:

https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/6353

不幸的是,Rails伙计们没有设法在最近的3.0.4版本中包含此修复程序(据我所知)。因此,我试图找出一种解决方法(在我的应用程序配置中):
 config.before_eager_load do
I18n.load_path += Dir[Rails.root.join('config', 'locales', 'de.yml').to_s]
I18n::Railtie.reloader.paths.concat I18n.load_path
I18n::Railtie.reloader.execute_if_updated
I18n.reload!
end

不幸的是,这不起作用。有什么线索吗?

最佳答案

如果您的 gem 也使用I18n(我在用active_admin遇到此问题时),也可能会出现此问题。 Rails将I18n设置为较晚,以使Gem能够使用相同的load_paths。

我所做的就是将其添加到production.rb中:

config.before_configuration do
I18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
I18n.locale = 'pt-PT'
I18n.reload!
end

关于ruby-on-rails - Rails i18n中的混合语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4884970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com