Rails 4 引擎是否自动加载引擎的 i18n 地区文件?

8

我有一个关于Rails engine的问题,但是在Rails引擎指南中没有提到。希望能在这里得到解答。

我有一个引擎,例如叫做my_engine,还有一个应用程序,称为my_app。

为了开发目的,在my_app的Gemfile中,我只需使用以下代码行简单地包含my_engine,使用:file键。

#my_app/Gemfile
...
gem "my_engine", :path => "./../my_engine"
...

我的my_engine结构如下:

.
├── Gemfile
├── Gemfile.lock
├── app
│   ├── ...
|   |...
|
├── config
│   ├── locales
│   │   └── models
│   │       └── products
│   │           ├── en.yml
│   │           └── zh-TW.yml
│   └── routes.rb
├── lib
│   ├── my_engine
│   │   ├── engine.rb
│   │   └── version.rb
│   ├── my_engine.rb
│   └── tasks
│       └── my_engine_tasks.rake

我发现在尝试检查 my_app 下的 I18n.load_path 时,没有任何路径指向 my_engine,这意味着 my_app 没有加载 my_engine 的本地化事务。

>>rails console
Loading development environment (Rails 4.0.2)
2.1.0 :001 >I18n.load_path.each { |x| puts x }

是否有些配置或在加载locales时遗漏了一些重要步骤?


实际上,我读完这个之后并不明白你在说什么,你的意思是Rails没有加载引擎的本地化文件吗? - Mathew P. Jones
2个回答

4

我正在使用

Rails 4.1.6

我在Gemfile中像这样安装了我的引擎

gem 'core', path: "core"

当我检查我的加载路径时
I18n.load_path.find_all { |p| p.match("core") }.each { |p| puts p }

我看到从我的引擎中包含了本地化信息。

/absolute_path/core/config/locales/de.yml

/absolute_path/core/config/locales/en.yml

作为默认设置,Rails正在加载您的引擎本地化文件。文档中也有提到。

http://edgeapi.rubyonrails.org/classes/Rails/Engine.html

然后确保该文件在config/application.rb(或Gemfile)的顶部加载,并且它将自动加载app内部的模型、控制器和助手,加载config/routes.rb中的路由,加载config/locales/中的本地化内容,并在lib/tasks/中加载任务。

-1

Application Controller 中声明的所有方法都可以从任何位置访问。请指定应该使用哪种语言加载代码:

# on my_app/app/controller/application_controller.rb
class ApplicationController < ActionController::Base

before_filter :set_locale

def set_locale
   I18n.locale = request.headers['HTTP_ACCEPT_LANGUAGE'].split(',')[0].split('-')[0]
end

希望这能对你有所帮助,Randy Marsh。

答案可能对一些人来说不够清晰,因为它只提供了源代码。你能否编辑你的帖子并添加更多的解释?谢谢。 - Constantino Tsarouhas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接