变量插值(variable interpolation),翻译中允许插入变量进行翻译,比如
$20 20元这样的不同的计数金额的方式,这时在翻译文件就可以定义
price: “%{price}元”这样的形式,在翻译的时候,这样调用 t(:price, price: 20)则会20这个变量一起带入到翻译中来
使用default_url_options加routes#scope的方式在url中添加默认语言区域设置
使用l方法并配合在翻译文件中定义时间格式来翻译时间格式
除了语言可以国际化,视图模板也可以国际化!类似于访问 books_controller#index方法会自动渲染books/index.html.erb一样,如果指定了I18n的locale后,rails会去寻找对应区域语言的视图模板,比如访问 localhost:3000/en/books的时候,如果定义了books/index.en.html.erb模板的话,将会去渲染index.en.html.erb模板文件!如果没有定义将会渲染默认的视图文件
翻译的命名空间:
翻译文件中的翻译可以定义为层级结构,比如:
time:
formats:
short: xxx
那么翻译时可以使用这几种形式,是等价的:
t(‘time.formats.short’)
t(‘short’, scope: [:time, :formats])
t(‘formats.short’, scope: [:time])
惰性查找: rails实现了一种针对视图和控制器专用的便捷方法,调用t方法时,要翻译的单词的第一个字母前写上 .(点),那么rails会自动按照当前视图或者控制器的命名空间去寻找翻译,比如 books_controller.rb#index中的 t(‘.hey’),这个方法将会去寻找
books:
index:
hey:
这样的翻译
针对ActiveRecord的翻译: 模型的翻译需要定义成这种形式:
activerecord:
attributes:
user/gender:
female: "Female"
male: "Male"
errors:
models:
user:
attributes
name:
blank:
,定义完之后,model_name.human 以及 model_name.human_attribute_name(attr)就会自动去寻找模型对应的翻译,simple_form_for中使用 f.input :attr这样的形式的时候,也是通过这种规则去寻找翻译。当模型有写validates校验的时候,那么当校验不通过的时候,会按照模型的错误消息的建去寻找翻译比如 user.errors中会有name.blank的建