Rails Faker 如何自定义本地语言文件?或者覆盖原来的语言文件

zhaopei · 发布于 2015年10月28日 · 最后由 dc2000 回复于 2015年11月02日 · 987 次阅读
Acca18

github的文档中这样写:

Customization

Since you may want to make addresses and other types of data look different depending on where in the world you are (US postal codes vs. UK postal codes, for example), Faker uses the I18n gem to store strings (like state names) and formats (US postal codes are NNNNN while UK postal codes are AAN NAA), allowing you to get different formats by switching locales. Just set Faker::Config.locale to the locale you want, and Faker will take care of the rest.

If your locale doesn't already exist, create it in the \lib\locales\ directory and you can then override or add elements to suit

en-au-ocker: faker: name: # Existing faker field, new data first_name: [Charlotte, Ava, Chloe, Emily] # New faker fields ocker_first_name: [Bazza, Bluey, Davo, Johno, Shano, Shazza] region: [South East Queensland, Wide Bay Burnett, Margaret River, Port Pirie, Gippsland, Elizabeth, Barossa]

我在本地的config/environments/test.rb中加入了 Faker::Config.locale = 'zh-HK' 然后创建lib/locales/zh-HK.yml 文件 zh-HK.yml文件如下图 执行 rails console test 后

显示是zh-HK,但是生成的name是英文的,不知道什么原因?

共收到 7 条回复
21754

控制台程序和你的Rail的应用是有区别的,控制台程序只会去找Rails框架中的和中文相关的“zh-CN.yml”和“zh-TW.yml”两个文件,所以你自己写的文件名,Faker在控制台是找不到的,因为他是读的“I18n ”的配置文件。你给他指定的locales的话 Faker::Config.locale='zh-HK' ,由于控制台中它只能找到“zh-CN.yml”和“zh-TW.yml”文件,所以找不到指定文件的话就会读取默认配置,获取一个英文的随机名字。命令行的话,你像下面这么做,设置适当的解码格式应该就对了:

如果你要配置自己的yml文件的话,比如“zh-HK.yml”,你得把这个名为“zh-HK.yml”的文件放在“Your App/config/locales”下面,并在test.rb给你的yml文件做配置。

Acca18

#1楼 @dc2000 If your locale doesn't already exist, create it in the \lib\locales\ directory and you can then override or add elements to suit 文档上说要放在\lib\locales下面, 我一会放在config/locales下面试试

Acca18

#1楼 @dc2000 faker中文支持不太好,自定义的放在config/locales下面也不管用,

21754

不管用总会报错吧,报什么错误,和什么相关的。然后去一步一步定位一下,你这样和没说一样。

96

中单大魔王Faker

21754

昨天又看了一下书,发现yaml文件的语法和一般的程序不一样。具体可以参考这里。http://www.yaml.org/spec/1.2/spec.html。它里面有这么一段话 “YAML’s block collections use indentation for scope and begin each entry on its own line. Block sequences indicate each entry with a dash and space ( “- ”). Mappings use a colon and space (“: ”) to mark each key: value pair. Comments begin with an octothorpe (also called a “hash”, “sharp”, “pound”, or “number sign” - “#”). " 意思就是属性声明的时候必须使用 (“: ”) 就是一个冒号加一个空格来匹配。 ”To maintain portability, tab characters must not be used in indentation,“ 在yaml文件中也就是说禁止用Tab键。

你可以检查一下,你的yaml文件中是否使用了tab或者少了空格。如果不按他的要求做,rails会解析不了yaml文件。具体的内容你可以参考上面的文档说明。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册