Rails 设置 i18n 时 date_select 出现 can’ t convert Symbol into String 错误 尝试多种方法不行

leslin123 · 2014年01月14日 · 最后由 swordray 回复于 2014年01月15日 · 3751 次阅读

求助各位, 设置 i18n 时 date_select 出现 can’t convert Symbol into String 错误 我的 zh-CN.yml 已经设置好了 order,github 下载的

order:
- :year
- :month
- :day

config/application.rb 也按照要求设置了

# config/application.rb
 config.i18n.load_path += Dir[Rails.root.join('config','locales','*.{rb,yml}')]
 config.i18n.default_locale = "zh-CN"

但是,对应的代码

<div class="field">
  <%= f.label :return_end_at %><br />
  <%= f.date_select :return_end_at %>
</div>

(1)一直出问题,是哪里没有设置好呢?

必须要用

<%= f.date_select :return_begin_at, :locale => 'en' %>  

或者

<%= f.date_select :return_end_at, :order => [:year,:month,:day] %>

才能使用,前者显示英文,而后者又显示有问题,没法显示中文,贴图如下

@lgn21st @huacnlee 两位大牛帮忙看看,一直没有解决问题,多有打扰,谢谢!

#1 楼 @leslin123 大牛们现在都还没起床。^_^

嗯,@zfjoy520 谢谢,等待大牛中 是不是需要把 Ubuntu 12 本地的 locale 也修改为中文的?当前是这样的

# locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
config.i18n.default_locale = :"zh-CN"

不知道对不对

楼主你的帖子没有办法看,贴代码的时候,要用 markdown 格式化一下代码,否则看起来非常累,我帮你稍微格式化了一下。

你的 Rails 版本是多少,我这里简单测试了一下,在 Rails 4.0.2 中,指定

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = 'zh-CN'

然后把这个文件 https://raw2.github.com/svenfuchs/rails-i18n/master/rails/locale/zh-CN.yml 直接放 config/locals 中

谢谢 @lgn21st@zhaoguobin 我的版本是 Rails 3.2.13,我把 zh-CN.yml 的 开头 zh-CN: 改成小写的 zh-cn: 之后,就显示正常了。没有明白具体原因,我的设置是大写的:

config.i18n.default_locale = "zh-CN"

#6 楼 @leslin123 不明白为什么这里大小写敏感,如果要找原因的话,就只能去源码里面找了,或者升级一下 Rails 吧。

找到问题了,我代码里用了一段 locale 设置,我的浏览器里果然有 locale,值为 zh-cn 小写的,这个是导致问题的根本原因,哎呀,可给折腾了。

def set_locale
  I18n.locale = cookies[:locale] || I18n.default_locale
end

#9 楼 @leslin123 要检测一下 locale 是否支持

locales = [params[:locale], cookies[:locale], session[:locale], request.env['HTTP_ACCEPT_LANGUAGE'].to_s.gsub(/-(\w+)/, &:upcase).split(';').first.to_s.split(',').reverse, I18n.default_locale].flatten.compact
I18n.locale = session[:locale] = (locales & I18n.available_locales.map(&:to_s)).first
需要 登录 后方可回复, 如果你还没有账号请 注册新账号