概念 及 相关GEM
把应用翻译成英语之外的其他语言,或提供多语言支持
rails 2.2以上版本,自带的ruby I18n gem, 提供了易用易扩展的框架
- “国际化”(internationalization)过程通常是指,把所有字符串及本地化相关信息(例如日期或货币格式)从应用中抽取出来
- “本地化”(localization)过程通常是指,翻译这些字符串并提供相关信息的本地格式
I18n 公开 API
rails中的每一个静态字符串都已经国际化
公开API中最重要的两个方法
- translate # 查找文本翻译
- localize # 把日期和时间对象转换为本地格式(本地化)
这两个的别名分别为#t 和 #l
- I18n.t 'store.title'
- I18n.l Time.now
其他方法
- load_path # 自定义翻译文件的路径
- locale # 获取或设置当前区域
- default_locale # 获取或设置默认区域
- available_locales # 应用可用的区域设置白名单
- enforce_available_locales # 强制使用白名单(true 或 false)
- exception_handler # 使用其他异常处理程序
- backend # 使用其他后端
国际化设置
Rails 会把 config/locales 文件夹中的 .rb 和 .yml 文件自动添加到翻译文件加载路径中。
#config/locales/em.yml
en:
hello: "Hello world" # 注意:两个空格缩进,不要使用tab
Rails 会自动加载翻译文件加载路径(I18n.load_path),这是一个保存有翻译文件路径的数组。通过配置翻译文件加载路径,我们可以自定义翻译文件的目录结构和文件命名规则
I18n 库的后端采用了延迟加载技术,相关翻译信息仅在第一次查找时加载
默认的区域设置和翻译的加载路径可以在 config/application.rb 文件中配置
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = 'zh-CN'
项目中使用
到 application.rb 中添加
config.i18n.default_locale = 'zh-CN'
添加config/locals/zh-CN.yml文件
zh-CN:
navbar:
about: 关于
activerecord:
errors:
models:
user:
attributes:
name:
blank: 用户名不能为空
taken: 用户已经存在
email:
blank: 请填写邮箱地址
taken: 邮箱已经被占用
password:
blank: 密码不能为空
password_confirmation:
confirmation: 两次输入密码不相同
在erb页面中对应修改
- <li><%= link_to "About", "/about" %></li>
+ <li><%= link_to t("navbar.about"), "/about" %></li>