代码之家  ›  专栏  ›  技术社区  ›  Philipp Bolliger

支持XML/JSON的Globalize2

  •  1
  • Philipp Bolliger  · 技术社区  · 16 年前

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

    但是,事实证明,这个插件在调用ActiveRecord上的\uXML或\uJSON时不转换属性。有人知道变通办法/补丁吗?你对如何解决这个问题,在哪里改变全球化有什么想法吗?

    使用: 轨道2.3.5 全球化2:2010-01-11承诺

    2 回复  |  直到 16 年前
        1
  •  1
  •   Voldy    16 年前

    对于globalize2(以及model_翻译),模型中的translated属性不是真正的属性,而是一种方法。因此,在执行to-json方法时,可以使用 方法: 如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响应中接收post-id和title。有关更多信息,请参阅 Rails API .

        2
  •  0
  •   Joris    16 年前

    我在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 :category
    def category_name
      self.category.name
    end
    

    在控制器中:

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

    您的用例可能不同。上面是一个适合我的解决方案。