新手问题 是否 rails 程序都需要 i18n?

mahone3297 · 2014年05月15日 · 最后由 sickate 回复于 2014年09月17日 · 3025 次阅读

最近打算用 rails 写东西,发现个问题

<%= f.label :username, class:"col-sm-2" %>

view,就这么个东西,出来的 html 是英文的 username. 想用中文“用户名”怎么办?我查了下,好像有 2 个方法

  1. <%= f.label :username, '用户名', class:"col-sm-2" %>
  2. i18n

大家都是怎么做的?直接选 1?还是选 i18n?i18n 好像有点烦啊,假如一般情况下不会做多语言站点。 i18n 的话,locale.yml 里要设置,然后 view 可能也要 2 份: index.html.erb index.zh.html.erb

请教下大家,到底该怎么样?

这个并不是多语言站点的问题,i18n 方便管理。光说一点,如果哪天你想把‘username’,从‘用户名’换成‘昵称’,那你是不是要去改很多文件?

#1 楼 @hanluner ok,有道理。 然后,用 i18n 去管理,假如不做多语言站点的话,那是否只需要配置 locale 就可以了? 不会像这样写 2 份,是么? index.html.erb index.zh.html.erb 我理解成小段文字,放 config/locale/yml 中,大段文字在像上面这样生成 2 份。

你们平常做网站一般是怎么做的?

i18n default 是在 application.rb 设置的,跟模板后缀没关系。你想访问不同的语言站点仅仅是在 url 后面,例如访问中英文日文:www.example.com/posts?locale=en, www.example.com/posts?locale=zh, www.example.com/posts?locale=japan

  1. application.rb 中设置中文 locale config.i18n.default_locale = 'zh-CN'

  2. 在 locale 文件夹下创建 xxx.zh-CN.yml, 比如 activerecord.zh-CN.yml, 内容为

zh-CN:
  activerecord:
    models:
      user: "用户"
    attributes:
      user:
        username: "用户名"
  1. 在 view 中直接 =f.label :username 就行了

#4 楼 @lufeihaidao 自己平常做项目,或者开发公司产品,都会用 i18n 的是么? 基本上每个项目都会这样做的,是么?

flash[:success] = "你已经成功下单<span>#{item.name}</span>"

# OR

# OrderController
flash[:success] = t "cn.order.success", name: item.name
# order.yml
cn:
  order:
    success: "你已经成功下单<span>%{name}</span>"


先不说在代码里写中文是很没有逼格的事情,从代码本身结构来说你感觉哪个更好?

#6 楼 @bydmm 上面那个。

@mahone3297 不,看情况,如果你的项目只面向中文用户,就不必纠结 i18n

#6 楼 @bydmm #7 楼 @Rei #8 楼 @sphawkcn 哈哈,谢谢大家!感觉 @bydmm 本来想让大家选下面那个的,结果大家都选了上面那个。 #9 楼 @lufeihaidao 嗯,好。我决定不纠结 i18n 了。。。

i18n 多方便

我的项目没有用 i18n,现在发现 i18n 还有这好处。

#7 楼 @Rei 为什么呢?如果要支持多语言下面那种可扩展性更好吧。尽管我感觉在代码里写 t 也看着别扭,不过也不知道有没有更好的方法

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