首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持xml/json的globalize2

支持xml/json的globalize2
EN

Stack Overflow用户
提问于 2010-01-21 18:55:09
回答 2查看 145关注 0票数 2

我正在用objective c (iPhone)实现一个分布式应用程序,服务器端带有rails和移动客户端。为了实现国际化,我使用了joshmh的rails插件'globalize2‘。

然而,事实证明,当在ActiveRecord上调用to_xml或to_json时,该插件不会转换属性。有没有人知道解决办法/补丁?你有任何想法如何解决这个问题吗?在哪里修改globalize2?

使用: Rails 2.3.5 globalize2: commit from 2010-01-11

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-29 03:37:30

使用Globalize2 (以及model_translations ),模型中转换后的属性不是真正的属性,而是一种方法。因此,当您执行to_json方法时,您可以像Joris建议的那样使用:methods,但以一种更简单的方式:

代码语言:javascript
复制
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

在这里,我希望在json响应中只接收帖子id和标题。有关更多信息,请参见Rails API中的to_json (序列化)。

票数 1
EN

Stack Overflow用户

发布于 2010-02-04 07:25:03

我在github上找到了这个分支:http://github.com/leword/globalize2,但它看起来是基于一个较老的版本。

我一直在寻找它,但是使用:methods选项解决了我的问题:

如果你想翻译@item中的一个属性,你可以使用:

代码语言:javascript
复制
class Item < ActiveRecord::Base
  translates :name
  def t_name
    self.name
  end
end

在你的控制器中:

代码语言:javascript
复制
render :text => @item.to_xml(:methods => [ :t_name ])

如果您的api path类似于/en/api/item.xml,那么您应该在t_name属性中获得英文翻译

对于belongs_to关系:

代码语言:javascript
复制
belongs_to :category
def category_name
  self.category.name
end

在你的控制器中:

代码语言:javascript
复制
render :text => @item.to_xml(:methods => [ :category_name ])

您的用例可能有所不同。以上是一种适用于我的解决方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2108577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档