支持 xml/json 的 globalize2

发布于 2024-08-18 06:28:51 字数 265 浏览 9 评论 0原文

我正在 Objective C (iPhone) 中实现一个分布式应用程序、带有 Rails 的服务器和移动客户端。为了实现国际化,我使用 joshmh 的 Rails 插件“globalize2”。

然而,事实证明,在 ActiveRecord 上调用 to_xml 或 to_json 时,该插件不会转换属性。有谁知道解决方法/补丁?您有什么想法如何解决这个问题,在哪里改变 globalize2 吗?

使用: 轨道2.3.5 globalize2:从 2010-01-11 提交

I'm implementing a distributed application, server with rails and mobile clients in objective c (iPhone). To enable internationalization, I use the rails plugin 'globalize2' by joshmh.

However, it turned out that this plugin does not translate attributes when calling to_xml or to_json on an ActiveRecord. Does anyone know of a workaround / patch? Do you have any ideas how to fix this, where to alter globalize2?

Using:
Rails 2.3.5
globalize2: commit from 2010-01-11

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寒尘 2024-08-25 06:28:51

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

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(序列化)。

With Globalize2 (and with model_translations as well) translated attribute in a model is not a real attribute but is a method. Thus and so when you execute to_json method you can use :methods, as Joris suggested, but in a simpler way:

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

Here I would like to receive only post id and title in json response. For additional information see to_json (Serialization) in Rails API.

源来凯始玺欢你 2024-08-25 06:28:51

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

我自己正在寻找这个,但使用 :methods 选项解决了我的问题:

如果你想翻译 @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 属性中获得英文翻译

对于 own_to 关系:

belongs_to :category
def category_name
  self.category.name
end

在您的控制器中:

render :text => @item.to_xml(:methods => [ :category_name ])

您的用例可能不同。以上是对我有用的解决方法。

I found this fork on github: http://github.com/leword/globalize2
But it looks like it is based on an older version.

I was looking for this myself, but solved my problem using the :methods option:

If you want to translate one attribute in @item, you can use:

class Item < ActiveRecord::Base
  translates :name
  def t_name
    self.name
  end
end

And in your controller:

render :text => @item.to_xml(:methods => [ :t_name ])

If your api path is something like /en/api/item.xml, you should get the english translation in the t_name attribute

For a belongs_to relation:

belongs_to :category
def category_name
  self.category.name
end

And in your controller:

render :text => @item.to_xml(:methods => [ :category_name ])

Your use case is probably different. Above is a workaround that works for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文