globalize2 с поддержкой xml / json - PullRequest
1 голос
/ 21 января 2010

Я реализую распределенное приложение, сервер с рельсами и мобильные клиенты в цели c (iPhone). Чтобы включить интернационализацию, я использую плагин rails 'globalize2' от joshmh.

Однако оказалось, что этот плагин не переводит атрибуты при вызове to_xml или to_json в ActiveRecord. Кто-нибудь знает об обходном пути / патче? У вас есть идеи, как это исправить, где изменить globalize2?

Использование: Рельсы 2.3.5 globalize2: коммит от 2010-01-11

Ответы [ 2 ]

1 голос
/ 28 марта 2010

С 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

Здесь я хотел бы получить только идентификатор сообщения и заголовок в ответе json. Для получения дополнительной информации см. To_json (Сериализация) в Rails API .

0 голосов
/ 04 февраля 2010

Я нашел эту вилку на github: http://github.com/leword/globalize2 Но похоже, что он основан на более старой версии.

Я искал это сам, но решил свою проблему с помощью опции: method:

Если вы хотите перевести один атрибут в @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 ])

Ваш вариант использования, вероятно, отличается. Выше есть обходной путь, который работает для меня.

...