Rails 在 Rails 4 中用了 accepts_nested_attributes_for 后,locale 中翻译字符串的键值要怎么写?

felixding · 2013年12月04日 · 最后由 kgen 回复于 2013年12月05日 · 4798 次阅读

我有一个专门保存附件的多态类 Attachment,然后我在 User 类中创建和它的关系,如下:

class Attachment < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true
  validates_attachment :asset, presence: true
end

class User < ActiveRecord::Base
  has_one :avatar, as: :attachable, class_name: "Attachment"
  accepts_nested_attributes_for :avatar
end

在模板中,我需要让用户上传头像,因此编写了如下代码:

= f.fields_for :avatar do |a|
  = a.label :asset, class: :required
  = a.file_field :asset

功能上一切正常。问题就是,如何让 Rails 读取到正确的 locale 文件中的字符串?以便在表单的 label 中正确显示?

我试过以下几种,都不行(页面上显示出来的还是“Asset”,而不是翻译出来的字符串):

user:
  avatar:
    asset: 头像

user/avatar:
  asset: 头像

user[avatar]:
  asset: 头像

目前唯一可以的,就是:

attachment:
  asset: 头像

但这显然不能用,因为并非所有的附件都是头像。

题外话:我的原帖中,标题中的中英文间并没有空格,发表后发现系统自动给我加了空格。这是怎么回事?

#2 楼 @Rei 我知道这在技术上完全可行。暂且不提空格严重降低可读性这事儿,既然发帖人选择不空格,管理员可以在未经同意的情况下编辑发帖人的内容吗?

#3 楼 @felixding

  1. 中英文混写不带空格是不够好的,这么做的初衷是为了改善排版;
  2. 没有空格不代表用户故意空格,而是他没有意识到;

一些例子参考:

#3 楼 @felixding

严重降低可读性

这个我不认同

管理员可以在未经同意的情况下编辑发帖人的内容

这就好比你上传了头像也给裁剪成了正方形,这个问题你怎么不纠结

还是上面说的,自动标题加空格初衷是为了改善排版。 如果你执意认为这么不好,那这个我也无话可说。

显式指明需要那个翻译呗…… = a.label t('user.avatar.asset'), class: :required 写成这样又不会怀孕,干嘛一定要在 local 里改

#6 楼 @huacnlee

这是两个问题。

空格好不好是另外一码事儿,暂且不说。

可是内容就是另外一回事。管理员以自己的标准修改大家发言的内容,这显然是不合适的。我没有在任何一个网站上,见过发言内容会被网站自行修改的(这和普遍的剪裁头像完全不同)。除非其服务协议有事先声明,但我也没在 Ruby China 上发现此类声明或协议。

综上,管理员(你或者 Daniel?)要么搞一个服务协议,不接受的自然就不来玩;要么真的让它变得“自由和开放”,至少不要修改别人的发言。

#7 楼 @aptx4869

感谢!这样当然可以,但是在表单显示错误提示时,这个属性还是不能被翻译过来。

#8 楼 @felixding

那就抛开空格这事情来说,说要不要管理员修改的问题。

在一些表述不清楚、或是内容排版混乱的时候,我们是不是应该适当的修改,让内容正确,比如我们经常会修改那些没正确格式化代码的帖子,让它有代码格式化和着色。(我们目前就是有这么做)

那如果按照你这么说,那用户可以说我就是不想那么排....


我觉得你还是在纠结给你加个空格的问题上面,因为你不认为这么做是对的。


还是那句话,这么做的初衷是改善(当然,这确实我认为的改善)排版

#10 楼 @huacnlee

问题就在这儿。如果人家和你的意见不一致-比如,你上贴中第二段话结尾括号的用法是错的,如果你认为这是正确用法,然后按照自己的意见更改了所有人对括号的用法,还说这是别人“表述不清楚……排版混乱”-那么,这显然是说不过去的。

#8 楼 @felixding 的确还未有这样一个服务协议,而我们很少修改或者删除帖子。

通常我自己是这样,看到有明显的错别字我可能会帮助修改,如果内容方面有不合适的地方,比如逻辑错误等,就回复楼主让楼主自己修改。但是从不自主去修改楼主的内容。

#12 楼 @lgn21st

赞同,我觉得管理员不应该越俎代庖修改别人的发言内容。但是提示他有错别字或者逻辑不清,这是非常负责任并值得赞赏的。

#13 楼 @felixding 谢谢互相理解。

我记得最初是 @huacnlee 在论坛上搭建了一个基于 Solr 的全站搜索功能,为了分词的方便,开始建议大家在中英文混合的场景下尽量在英文单词的前后添加空格,目的是为了检索方便。后来慢慢的我自己就养成了这个习惯,当输入英文单词的时候会自觉添加空格。以至于现在论坛有了这个自动添加空格的功能我自己都没有意识到...... XD

我认为你说的有道理,我们应该接受你的意见,擅自修改他人的内容或者格式而未提前告知他人知晓,或者征得他人同意,的确有待商榷。让我们讨论一下,是不是应该去掉这个功能。

  1. 要空格这个已经是很多中英文混排的做法了;
  2. 我们不会修改到括号那么细的地方;
  3. 意见不一致这个,如果有用户不认可头像被裁剪成等比,那是不是也得遵从?
  4. 我说排版混乱是只确实混乱的

#14 楼 @lgn21st

你还在青岛不?我现在暂居北京,离得近啊,一直想去玩儿。你还在的话抽空过去找你。

#12 楼 @lgn21st 我认为适当修改排版是非常有必要的!

如果这个事情我们不做,最终这里会变成百度贴吧那样乱七八遭的

#16 楼 @felixding 我常住青岛了,平时超级无聊啊~~~ 如果你得空的话,来我这里吧,呆多久都没有问题,我陪你好好玩玩 😄

#13 楼 @felixding #14 楼 @lgn21st #10 楼 @huacnlee

管理员只是把 1+1=2 改成 1 + 1 = 2 又不是改成 1+1=3。论坛的初衷是方便大家讨论,交流 Ruby 相关技术。改成空格便于大家更好的阅读,不是挺好的吗?

如果这也觉得自己的权利被侵犯,那是管理员的攻击力太高,还是自己的防御力太弱呢?

#15 楼 @huacnlee

1、我相信不加空格的更多,但我不想在此讨论空格到底加还是不加; 2、为什么?因为空格不够“细”就可以随意让管理员修改发言内容? 3、这个我已经回答了,你是管理员,你决定。我只要求不要修改我的发言内容;

你不会修改我本条发言抹黑我吧?玩笑,但道理是一样的:对别人来说,既然你可以增加空格,就也可以修改任何内容。

#8 楼 @felixding 还有,扯出“自由和开放”这个词你有没有想过,如果真的达到所谓的自由开放,那是不是连删帖都不行了?还有我们现在的注册一个星期以后才能发帖这也是侵犯了用户了权利了?

我依然还是那句话,删帖也好、注册一星期才能发帖也好、自动空格也好...这些都是在尝试改善内容。

自动空格这个事情你可以再发帖出来讨论要不要这么做

但是你把这个事情扯到“自由”的高度确实有些过了

#17 楼 @huacnlee 我是这么看的:有的用户会非常喜欢这个功能,有的用户比如我会意识不到这个功能,而有的用户会不理解这个功能,有的用户会排斥这个功能... 到底选择哪个可以照顾到最大用户群的利益,我们就用哪个。但是以空格这个功能为例,可能长期的循序渐进的引导,让用户普遍接受并形成习惯,或者通过技术的方式建议而非强制,可能会更友好一点。

最后我非常,非常不希望这里成为百度贴吧那样乱七八糟,但是我对那些不熟悉排版的小白用户很宽容。

#19 楼 @Victor

这事儿谈不上攻击力防御力的,也别上来就什么事儿都扯到人身上。

#23 楼 @felixding 这里是一个交流技术的论坛,恰当的使用 MarkDown 语法和 在单词前后加空格 这些排版技术,可以方便大家阅读。

如果你觉得我刚才的回复伤害了你,属于对你的人身攻击,那我在这里对你郑重的说一句 对不起 。我本人是有宗教信仰的,最怕伤害别人。你若觉得我的道歉不够真诚,我的邮件是 ***@gmail.com 把你的电话用邮件发给我。我打电话道歉。

#21 楼 @huacnlee “自由和开放”是写在 Ruby China 的“关于”页面中的……

#22 楼 @lgn21st 好啊,我去之前联系你。

#24 楼 @Victor 笑,言重了,我也没觉得受伤害,只是我认为就事论事比较好。

#26 楼 @felixding 那我把邮件删除了

本以为是这么小的技术问题讨论了这么多回复,结果进来一看,居然是因为 程序自动化修正排版问题 被楼主认为是 侵犯用户权利,要求提供 许可协议


我觉得楼主应该先了解一下,这个是机器行为,还是管理员人工行为。 即使是(目前显然不是)管理员人工行为,也可以询问一下这样修改的原因。 然后再发表自己的意见也不迟。

如果机器排版行为都被上升到许可协议层面,那所有网站都需要写几百页的许可协议,说明为何表单输入框中的文字,和提交后的文字排版样式不同。 Markdown 这种标记语言更要跪求全世界理解它修改了排版,还吃掉了标记符号 😄

我觉得可以出个排版指导,弄个排版节点,不规范的帖子移进去要求修改并且不能发新帖。让会员都搞清楚这里的排版标准而不是用程序修正。cc @huacnlee

#30 楼 @Rei 其实,这里大部分会员都不反对这种自动化排版优化的,基本上跟切上传头像一个级别的。

可以把需要大量人工修改排版的帖子,移动到单独的节点处理。

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