今天使用Cucumber测试的时候,发现Capybara打开的浏览器中I18n不正常。百思不得其解之后开始折腾。
当配置是这样的时候:
config.i18n.default_locale = 'zh-CN'
情况是这样的:
tiroc@vm-u10:~/code/demo$ rails c test
Loading test environment (Rails 3.0.3)
ruby-1.8.7-p334 :001 > I18n.locale
=> :en
ruby-1.8.7-p334 :002 > I18n.default_locale
=> :"zh-CN"
ruby-1.8.7-p334 :003 > exit
tiroc@vm-u10:~/code/demo$ rails c
Loading development environment (Rails 3.0.3)
ruby-1.8.7-p334 :001 > I18n.locale
=> :"zh-CN"
ruby-1.8.7-p334 :002 > I18n.default_locale
=> :"zh-CN"
ruby-1.8.7-p334 :003 > exit
tiroc@vm-u10:~/code/demo$ rails c production
Loading production environment (Rails 3.0.3)
ruby-1.8.7-p334 :001 > I18n.locale
=> :en
ruby-1.8.7-p334 :002 > I18n.default_locale
=> :"zh-CN"
ruby-1.8.7-p334 :003 >
不知道什么原因,development环境下,I18n.locale被设置为了I18n.default_locale。所以:
引用
rails s => 使用zh-CN.yml
rails s -e production => 使用en.yml
rails s -e test => 使用en.yml
最诡异的要数测试了,当我执行rake cucumber,测试代码中会使用Capybara打开浏览器。这个时候你会发现浏览器中的I18n是正常的!
当初在上述配置下部署到服务器的时候,发现I18n不正常,也不知道在哪里Google到一片文章。说可以这样解决:
# config.i18n.default_locale = 'zh-CN'
config.i18n.locale = 'zh-CN'
结果,今天出现的情况就与我前边描述的情况几乎完全相反,之前开发、部署一切都正常。直到Capybara帮我把浏览器打开的时候才出错。
找了一下官方I18n指南,发现可以这样解决:
class ApplicationController < ActionController::Base
before_filter :set_locale
private
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
end
不过,在本地的thin start -e production运行的时候,在URL中加上?locale=en是无效的,还是显示中文。不知道什么原因。
分享到:
相关推荐
rails_locale_detection 结合使用参数,cookie,http标头和可选的用户对象来设置请求的当前语言环境。 反过来,它检查params[:locale] , cookies[:locale]和HTTP_ACCEPT_LANGUAGE标头的值,以找到与可用语言环境...
I18n.default_locale将I18n.default_locale视为要翻译的字符串的主要来源。 如果希望主源与I18n.default_locale不同,则可以通过设置Tolk::Locale.primary_locale_name覆盖它。 开发人员应对主语言环境文件(默认为...
为 Rails 提供一个视图助手,以单词显示货币金额(例如number_to_currency_in_words(100) => '一百美元')。 这个助手带有两个受支持的语言环境(英语和法语),但可以轻松实现自己的语言环境(请参阅“实施新的...
为了支持中文响应,可以在`config/application.rb`中配置`config.i18n.default_locale = :zh_CN`。 - **翻译文件**: 对应的语言文件存储在`config/locales`目录下,例如`zh-CN.yml`。 #### 7. 改进Model、控制器和...
3. **翻译辅助方法**:Rails提供了`t`(translate)和`l`(localize)两个辅助方法,用于在视图、模型和控制器中进行翻译。`t`方法用于文本翻译,如`t('hello')`,在对应的YAML文件中有`hello: '你好'`,则会返回...
Activerecord::可订购用于简单订购的 Rails 3 插件。安装插入您的Gemfile : gem "ar-orderable"然后bundle install设置添加订单字段,如order_nr为整数在模型中添加行acts_as_orderable并根据需要添加选项column: ...
传送器用于新 Rails 应用程序的生成器表中的内容 rails g 传送:sidekiq rails g 传送... default_locale = :ru rails g 传送:gitignore 复制.gitignore文件的模板,包含所有常见的排除项 rails g 传送:数据库用于 p
从精炼CMS中提取的I18n逻辑,用于精炼CMS。 gem 'refinerycms-i18n' , '~> 4.0.1' bundle install rails g refinery : i18n Refinery :: I18n . configure do | config | config . default_locale = :en # ...
在没有RVM或rbenv的Ubuntu 14.04上的Rails,PostgreSQL带Passenger + Nginx ssh-copy-id -i ~/.ssh/id_rsa.pub ... 在/ etc / default / locale中: LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC
I18n.defaultLocale = "#{I18n.default_locale}"; I18n.locale = "#{I18n.locale}"; I18n.fallbacks = true; = javascript_include_tag "i18n" = javascript_include_tag "translations" 有关更多选项/详细信息,...
Ruby-i18n是Ruby语言中的一个核心库,专门用于实现国际化(Internationalization,简称i18n)和本地化(Localization,简称l10n)功能。在软件开发过程中,尤其是在面向全球用户的应用中,i18n和l10n是至关重要的,...
你需要在代码的开头或者配置文件中添加`I18n.default_locale = :zh-CN`来设置默认为中文(简体中国)。 3. **创建翻译资源**:在Ruby中,通常会有一个 YAML 文件(如`config/locales/zh-CN.yml`)来存储各种语言的...
此Cookbook集合提供了一些食谱来增强Ruby / Rails / Node.js应用程序的部署,并提供其他一些功能。 支持的操作系统平台: Ubuntu 14.04 LTS 。 包装 笔记 实用工具 系统实用程序。 区域设置 utilities::locale_...
default_locale = :en # (note that `en` is already the default!) 您项目中的一个简单翻译文件可能位于config/locales/en.yml ,如下所示: en : test : " This is a test " 然后,您可以通过以下方式访问此...
config.i18n.default_locale = :en config.i18n.available_locales = [:en, :ru] 活动记录 gem "aws-s3" gem "fog" gem "mini_magick" gem "carrierwave" gem "bson_ext" gem "devise" gem "activeadmin-settings" ...
百济I18n 这是一个小库,可以在JavaScript上提供Rails I18n的翻译。... defaultLocale = "pt-BR" ;I18n . locale = "pt-BR" ;I18n . currentLocale ( ) ;// pt-BR 注意:现在,您可以在像这样加载I18n之前应用您的配
- **Ruby on Rails**:基于Ruby语言的框架,以其优雅简洁的语法和约定优于配置的设计理念著称。 #### 二、Struts2框架技术概述 **2.1 Struts1和Struts2的对比** Struts1与Struts2的主要区别在于: - **请求处理...