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

leslin123 · 发布于 2014年1月14日 · 最后由 swordray 回复于 2014年1月15日 · 1572 次阅读
8830

求助各位, 设置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] %>

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

共收到 10 条回复
8830
leslin123 · #1 · 2014年1月14日

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

958
zfjoy520 · #2 · 2014年1月14日

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

8830
leslin123 · #3 · 2014年1月14日

嗯,@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=
96
zhaoguobin · #4 · 2014年1月14日
config.i18n.default_locale = :"zh-CN"

不知道对不对

3
lgn21st · #5 · 2014年1月14日

楼主你的帖子没有办法看,贴代码的时候,要用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 中

8830
leslin123 · #6 · 2014年1月14日

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

config.i18n.default_locale = "zh-CN"
3
lgn21st · #7 · 2014年1月14日

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

8830
leslin123 · #8 · 2014年1月14日

好的,谢谢 @lgn21st

8830
leslin123 · #9 · 2014年1月14日

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

def set_locale
  I18n.locale = cookies[:locale] || I18n.default_locale
end
6291
swordray · #10 · 2014年1月15日

#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
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册