1

我有一个使用 Faker 帮助构建模拟数据的 gem。我想添加一个新类,使用 Faker 本身使用的相同语法生成新类别的东西。前半部分很简单,我只需定义类,并确保我的 gem 加载文件:

# lib/faker/restaurant.rb
module Faker
  class Restaurant < Base
    class << self
      def name
        parse('restaurant.name')
      end
    end
  end
end

到目前为止,一切都很好。现在,为了描述可以从中得出什么值,我创建了一个 YAML 文件:

faker:
  en:
    restaurant:
      suffix: [Cafe,Restaurant]
      name:
        - "#{Name.first_name}'s #{suffix}"

所以,实际的问题是:这个文件去哪里了,它应该有什么名字?如果这是一个 Rails 应用程序,它会是config/locales/faker.en.yml. 在 gem 中,这似乎不起作用 - 一方面实际上没有“配置”目录,但为此目的创建它并没有帮助,我得到:

> Faker::Restaurant.name
I18n::MissingTranslationData: translation missing: en.faker.restaurant.name
4

1 回答 1

2

好的,想通了。特别感谢dax,他的评论让我朝着正确的方向前进。

Faker 使用 I18n gem 进行本地化(这就是为什么 YAML 文件位于“locales”目录中的原因)。这意味着我需要将自定义 YAML 添加到 I18n 加载路径。文件的确切位置并不重要,只要将它们添加到加载路径即可。就我而言,我把它放在lib/faker/locales/en-US.yml,并将整个目录添加到加载路径中,因此:

lib/my_gem.rb:

I18n.load_path += Dir[File.join(File.expand_path(File.dirname(__FILE__)), 'faker/locales', '*.yml')]
require "faker/restaurant"

.yml我放在该目录中的任何文件都应该被加载并可供 Faker 使用。

旁注:我还需要稍微更改 YAML 格式 - 应该是

en:
  faker:
    <stuff>

而不是像我一样在顶层使用faker。

于 2015-01-26T16:45:41.943 回答