作者: yuanyi 转自 LetRails
原文地址:http://www.letrails.cn/archives/rails-2-2-i18n-tutorials/
Rails 2.2出来有段时间了,前段时间需要个Wiki程序,于是试着将Instiki(Ruby on Rails官方网站的Wiki程序)移植到了2.2(http://github.com/yzhang/instiki_i18n/tree/master),同时加上了i18n支持,需要建Wiki的朋友可以试试,不过中间发现网上的指南都讲的不太全,所以我决定把看过的几个帖子整理下,合并出一个稍微完整的指南。
基本用法
基本用法想必大家都知道了,Rails默认的Locale文件夹在config/locales下,假设你要支持中文和英语,那么你需要在这个文件夹下放置en.yml和zh.yml。
# zh.yml
zh:
submit: '提交'
create: '创建'
#en.yml
en:
submit: 'Submit'
create: 'Create'
Rails 会自动加载config/locales目录下的locale文件,如果你的locale文件放在别的地方,那么你可以通过修改I18n.load_path来加载它:
# in config/initializer/locale.rb
I18n.load_path += Dir[ File.join(RAILS_ROOT, 'lib', 'locale', '*.{rb,yml}') ]
使用很简单,你可以进入Console进行测试:
> I18n.t 'submit'
=> "Submit"
> I18n.locale = 'zh'
=> "zh"
> I18n.t('submit')
=> "提交"
试图中更加简单,你可以直接调用t方法:
传递变量
有些时候,我们的字符串中可能需要包含变量,只需要将其放在两个大括号内就可以了:
# zh.yml
zh:
hello: "你好, {{name}}"
打开console:
> I18n.t 'hello', :name => 'Rails'
=> "你好,Rails!"
单复数处理
实际上,中文不存在这个问题,这个问题主要存在于字母语言,解决方法是:
# en.yml
en:
post:
one: '1 post'
other: '{{count}} posts'
然后在console中测试:
> I18n.t 'post', :count => 1
=> "1 post"
> I18n.t 'post', :count => 5
=> "5 posts"
时间和日期
时间和日期的翻译稍微复杂,需要用到rails-i18n项目下rails/locale文件夹下的zh-CN.yml文件,由于文件太大,就不贴出来了,有了这个文件,现在你就可以:
> I18n.l Date.today, :format => 'long'
=> "2009年1月08日"
> I18n.l Time.now, :format => 'default'
=> "2009年1月08日 星期四 20:37:58 CST"
> I18n.time_ago_in_words(Time.now)
=> "一分钟内"
> I18n.time_ago_in_words(48.minutes.ago)
=> "大约一小时"
数字
假设你已经有了上面的那个文件:
> number_to_currency(100)
=> "$100.00"
> I18n.locale = 'zh'
=> "zh"
> number_to_currency(100)
=> "CNY 100.00"
你只需要将CNY换成人民币的符号就可以了。
ActiveRecord
ActiveRecord也很简单,假设你有一个user model,它有两个属性login和email,那么需要在zh.yml中定义:
zh:
activerecord:
models:
user: "用户"
attributes:
user:
login: "用户名"
email: "电邮"
这样就OK了:
> u = User.create
false
> u.errors.full_messages
['用户名不能为空字符', '电邮不能为空字符']
根据请求设定语言
要设置应用的默认语言,可以通过
config.i18n.default_locale = :zh
如果要根据用户浏览器的设置选择语言,需要在application.rb中加一个before_filter:
class ApplicationController
before_fiter :set_language
def set_language
request_language = request.env['HTTP_ACCEPT_LANGUAGE']
request_language = request_language.nil? ? nil : request_language[/[^,;]+/]
I18n.locale = request_language if request_language && File.exist?("#{RAILS_ROOT}/config/locales/#{request_language}.yml")
end
end
参考:
http://rails-i18n.org/wiki/pages/i18n-rails-guide
http://media.railscasts.com/videos/138_i18n.mov
http://blog.ashchan.com/archive/2008/11/24/rails-i18n-activerecord-model-human-name-made-easy/
http://i18n-demo.phusion.nl/
分享到:
相关推荐
rails-i18n, 用于收集 Ruby on Rails i18n 环境数据以及其他有趣的Rails 相关 i18n 内容的存储库 Rails 语言环境数据存储库 中心收集区域设置数据,以便在 ruby 上使用。 gem-安装添加到你的Gemfile:gem 'rails-i18n...
适用于JavaScript的Ruby on Rails i18n 该gem通过Rack中间件公开您的JSON序列化翻译,以便将它们与JavaScript结合使用。 安装 此宝石正在开发中,这些步骤可能会更改 # Gemfile gem 'rails-i18n-js', :git => '...
i18n...# You *must* choose GetText or Rails-i18n style checking# If you want GetText-style checkingI18n/GetText: Enabled: trueI18n/RailsI18n: Enabled: false# If you want rails-i18n
mail_form, 在 Rails 中使用 i18n 验证附件和请求信息,直接从表单发送电子邮件 MailForm Rails 3这个 gem 构建在 ActiveModel 之上,展示如何从 Rails 中提取验证。命名和 i18n,而不需要自己实现。本自述文件指的...
Ruby-i18n是Ruby语言中的一个核心库,专门用于实现国际化(Internationalization,简称i18n)和本地化(Localization,简称l10n)功能。在软件开发过程中,尤其是在面向全球用户的应用中,i18n和l10n是至关重要的,...
I18nLinter ...只需在Ruby on Rails项目的文件夹中输入i18n_linter ,然后观察可以国际化的字符串即可。 注意:仅报告ruby文件中的字符串。 $ cd my/ruby_on_rails/project $ i18n_linter [options]
Ruby国际化和本地化(i18n)解决方案。 目前由@radar维护。 用法 滑轨 您将最常在Rails应用程序中使用此库。 用法的示例, 。 Ruby(无Rails) 如果要在没有Rails的情况下使用此库,则只需将i18n添加到Gemfile ...
Rails 2.2引入了一个强大的国际化系统(i18n)。这使得开发者能够轻松地为应用程序添加多语言支持,从而满足全球用户的需求。i18n支持允许开发者轻松创建多语言界面,无需编写额外的复杂代码即可实现动态切换语言环境...
有关e Ruby I18n的Ruby国际化和本地化(i18n)解决方案,请参见《 Rails指南》。 目前由@radar维护。 使用Rails最常见的是在Rails应用程序中使用此库。 有关用法的示例,请参见《 Rails指南》。 Ruby(不带Rails)...
Rails这样做:使用嵌套的yml文件的I18n.t('syntax.with.lots.of.dots')我们这样做: _('Just translate my damn text!')使用简单,平坦的mo / po / yml文件,或者直接从db要使用I18n调用,请添加syntax.with.lots....
react-i18n 该模块与 gem集成在一起,并作为的包装器构建。 基本设定 安装模块 $ npm install --save i18n-js react-i18n 设置i18n-js 在Gemfile中 gem 'i18n-js' 您认为* .haml :javascript I18n.default...
百济I18n 这是一个小库,可以在JavaScript上提供Rails I18n的翻译。 从借来的特征: 多元化日期/时间本地化号码本地化语言环境回退资产管道支持还有更多! :)用法安装通过NPM npm install baiji-i18n 运行npm ...
Rails是基于Ruby的Web框架,它提供了非常简洁的国际化(i18n)API。以下是如何在Rails中实现国际化: 1. **创建翻译文件**:在`config/locales`目录下,为每种语言创建一个对应的YAML文件,例如`en.yml`(英语)和`...
I18nRouting I18n_routing是Ruby on Rails的插件,可让您轻松地通过版本2.2以后的Rails中包含的I18n api转换路线。 所有必需的信息都可以在Wiki上找到: 如有疑问,请使用i18_routing谷歌论坛: 适用于Rails 2.3、...
I18n:Bamboo monkey 修补 Rails I18n 模块,并将强制所有对 I18n.translate (I18n.t) 和 I18n.localize (I18n.l) 的调用返回所有可用语言环境中最长的翻译或本地化值。 出于显而易见的原因(猴子补丁 :anxious_face...
devise-i18n, 设计 gem的翻译 devise-i18n 设计"是一种基于warden的Rails 灵活... 国际化( aka i18n ) 是一个"计算机软件适应不同语言。区域差异和目标市场技术要求的方法"。在控制器。模型和其他领域中支持 i18n,但它
I18nTimezones I18n时区-此gem的目的是简单地提供时区转换。 该gem易于与需要i18n时区转换的其他gem结合使用,因此我们可以使用通用的i18n时区转换gem。 如果您要对时区和翻译做任何事情,则无需重新发明轮子并...
在Rails中,国际化主要依赖于`i18n`库,该库提供了一套灵活的API来管理和处理翻译文本。Rails的国际化工作流程包括以下几个步骤: 1. **配置**:首先,在`config/application.rb`或`config/environments/...
该软件包旨在帮助您创建Rails国际化密钥。 Sublime Text 2版本不再使用新功能进行更新; 您仍然可以从Package Control下载它,也可以在找到它。 可用命令 1.检查按键 如果要检查*.yml文件中存在哪些键,则可以打开...
MailForm库是专门为简化这一过程而设计的,它允许开发者直接从Rails的表单中发送邮件,并且提供了I18n(国际化)支持、验证功能以及添加附件和请求信息的能力。这个库由Plataformatec开发,其最新版本为bd43996。 ...