我正在实现一个分布式应用程序,服务器与rails和移动客户端在目标c(iPhone)中。为了实现国际化,我使用joshmh的rails插件'globalize2'。xize/json支持globalize2
但是,事实证明,这个插件在ActiveRecord上调用to_xml或to_json时不会转换属性。有谁知道解决方法/补丁?你有什么想法如何解决这个问题,在哪里改变globalize2?
使用: 的Rails 2.3.5 globalize2:从2010-01-11
我正在实现一个分布式应用程序,服务器与rails和移动客户端在目标c(iPhone)中。为了实现国际化,我使用joshmh的rails插件'globalize2'。xize/json支持globalize2
但是,事实证明,这个插件在ActiveRecord上调用to_xml或to_json时不会转换属性。有谁知道解决方法/补丁?你有什么想法如何解决这个问题,在哪里改变globalize2?
使用: 的Rails 2.3.5 globalize2:从2010-01-11
随着Globalize2(以及model_translations以及)模型中的翻译属性不是一个真正的属性,但是一种方法。因此,所以当你执行to_json方法,你可以使用:方法,如里斯建议,但在一个简单的方法:
class Post < ActiveRecord::Base
attr_accessible :title, :text
translates :title, :text
end
class PostsController < ApplicationController
def index
@posts = Post.all
respond_to do |format|
format.html
format.json { render :json => { :posts => @posts.to_json(:only => :id, :methods => :title) }}
format.js
end
end
end
在这里,我想只接收帖子ID和标题JSON响应。有关更多信息,请参见Rails API中的to_json(序列化)。
承诺,我发现在GitHub上这个分支:http://github.com/leword/globalize2 但是看起来它是基于旧版本。
我一直在寻找这个自己,但解决了使用我的问题:方法的选择:
如果你想翻译的@item一个属性,你可以使用:
class Item < ActiveRecord::Base
translates :name
def t_name
self.name
end
end
而在你的控制器:
render :text => @item.to_xml(:methods => [ :t_name ])
如果您的API路径是一样的东西/en/api/item.xml,你应该得到的英语翻译在t_name属性
对于belongs_to的关系:
belongs_to :category
def category_name
self.category.name
end
而在你的控制器:
render :text => @item.to_xml(:methods => [ :category_name ])
你的使用情况可能是不同的。以上是一种解决方法,适用于我。