新手问题 [已解决] 遇到个问题,对于新人来说感觉很沮丧,因为耗了半天多了都不知道怎么弄。

Catherine · 2015年11月04日 · 最后由 msg7086 回复于 2015年11月05日 · 2705 次阅读

解决的关键在于: I18n 在 config/locale/*.yml 里写字典时,一定要注意格式的对齐,不然会出错!

现在的情况

完成了 rails tutorial,也理解这些那些模型什么的。现在是准备自己把 tutorial 里的微博改造成一种微博客。反正就是自己想一些功能,然后去想办法实现。看了 wiki 里的介绍,作为新人这么做没什么问题吧。

现在感觉常将我困惑住的问题

经常就是,比如我想实现一个功能,先想想需要用什么方法解决,如果连大体方法都没有,就先问或者查,搞出个思路。但感觉总是会出现这种问题:比如我现在想将应用里的所有消息(message),换成中文。但我卡在了不知道怎么把 has_secure_password 里自带的 3 个验证换成中文的提示消息。


我也看了搜了,文档也查了。看到社区里还有个朋友也是跟我想的一样,然后有人回复说用个叫 I18n 的 gem 包。我也用了,然后还去查了 ruby china 的源码在 git 上。对照着把 locale 里的 yml 加上格式差不多的内容,就是从 error: 下面开始。但问题还是出现了,当触发了 has_secure_password 的验证时,提示还是英文。我也试着再加了对 password 字段的 comfirmation 验证,但情况是添加的验证触发了消息,has_secure_password 还是触发了消息。


来社区小有一段时间了,最近才注册的。总感觉像这种简单的问题根本不配出现在社区里,大家讨论的都是高大上的东西,我就为个把消息改为中文的小想法困住止步不前。而且还是有人说了:用 I18n gem 包。


但就是说到了具体该用什么方法去解决自己的问题,自己都还是遇到问题。这个问题也许对作为大神的大家没有什么难过的,但真的好怕这次遇到坑都是这个过程。有点沮丧..

只是说下现在这个问题吧,我在 layout 的 application.rb 里加上了对国际化方法的引用。是参考这个弄的http://www.tuicool.com/articles/NZBBNbz 然后我在消息调用的 each 里的每一个 key 和 value 都加上了 t 在前面。单独也试过,如果有字典可用,是可以翻译出来的。但似乎对于 has_secure_password 里自带的验证的消息似乎没用啊..

还有就是比如自己搜索过,文档查看过,然后自己也试着折腾过,还是弄不出来的话发贴在社区里询问,不会因为是个简单的问题被排斥吧..只是真不知道自己这个学习过程是正确的还是缺少了....感觉自己好菜啊......

不要难过...其实就是 i18n 的东西. 你说的这个自带的消息验证应该是写在

zh-CN:
  errors:

这下面的. 然后设置下 local 的语言. 就可以了.

#4 楼 @rei 谢谢,这碗鸡汤很适合现在的自己... #3 楼 @hging 我在 config/locale 下有 zh.yml 和 en.yml。 en.yml 的是

en:

   activerecord:
      models:
        user: "账号"
      attributes:
        user:
          name: "用户名"
          email: "邮箱"
          password: "密码"
          password_confirmation: "密码确认"


这个可以正常显示翻译过去的词。我尝试直接在 en.yml 里写 error:,改为

 activerecord:
      models:
        user: "账号"
      attributes:
        user:
          name: "用户名"
          email: "邮箱"
          password: "密码"
          password_confirmation: "密码确认"
       errors:
          models:
            user: 用户
          messages:
            inclusion: "不包含于列表中"
            exclusion: "是保留关键字"
            invalid: "是无效的"
            confirmation: "与确认值不匹配"
            accepted: "必须是可被接受的"
            empty: "不能留空"
            blank: "不能为空字符"
            too_long: "过长(最长为 %{count} 个字符)"
            too_short: "过短(最短为 %{count} 个字符)"
            wrong_length: "长度非法(必须为 %{count} 个字符)"
            taken: "已经被使用"
            not_a_number: "不是数字"
#

就直接报错了,如果我把这段 errors:下面的内容写到 zh.yml 里(我在 ApplicationController.rb 里写了

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

并且 config/application 里设置了默认语言用 en

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
   config.i18n.default_locale = :en
   config.encoding = 'utf-8'

但 has_secure_password 里的 3 个验证消息还是没有被翻译过来...

#3 楼 @hging 不用麻烦了,自己解决了,找到问题了....谢谢你们。。

#6 楼 @catherine 如果解决了问题,建议把解决过程也发布出来,可以帮到后来的人。

#4 楼 @rei 看了你的文章,让我想起之前翻出的七八年前写的 PHP 代码,发现和现在的水平差不多,顿时我就……

刚起步那段时间学习曲线陡峭,速度总是慢的,日积月累就越来越快了。楼主不要灰心,加油。

#8 楼 @msg7086 恭喜你那个时候你就已经达到自己的最高峰了

每个人都是这样走过来的

学习这东西只要感觉来了,挡都挡不住,哈哈

#11 楼 @dandananddada :doge: 有一种人生还没开始就快结束了的感觉……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号