views:

143

answers:

1

I have a multilingual admin (for English and Portuguese) that needs to save data for both languages at the same time, like Description EN field and Description PT field in the same form.

Globalize2 makes some magic and I don't know exactly how to save this. I'll post my controller action here, that obviously needs some refactoring. Thanks, people!

def create
  @brand = Brand.create()
  @brand.title = params[:title]
  @brand.upload_logo(params[:logo]) unless params[:logo].blank?
  @brand.order = params[:order]
  @brand.priority = params[:priority]

  plataforms = Plataform.find(:all, :conditions => ["id IN (?)", params[:plataforms]])
  @brand.plataforms = plataforms

  params[:pt].each do |k, v|
    I18n.locale = :pt
    eval "@brand.#{k} = v"
  end

  params[:en].each do |k, v|
    I18n.locale = :en
    eval "@brand.#{k} = v"  
  end

  respond_to do |format|
    if @brand.save
    # if 1 == 1
      flash[:notice] = 'Brand was successfully created.'
      format.html { redirect_to(@brand) }
      format.xml  { render :xml => @brand, :status => :created, :location => @brand }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @brand.errors, :status => :unprocessable_entity }
    end
  end
end

Sorry.. I've forgotten to say.. My doubt is about saving the translations. This code:

params[:pt].each do |k, v|
  I18n.locale = :pt
  eval "@brand.#{k} = v"
end

params[:en].each do |k, v|
  I18n.locale = :en
  eval "@brand.#{k} = v"  
end
A: 

Doing globalization using i18n is great and simple.

For instance :

flash[:notice] = t 'Brand was successfully created'

Then create a en.yml in config/locales :

en:
 Brand was successfully created: "Brand was successfully created"

And the portugese version as well following the same convention :

pt: (not sure about the country code)
Brand was successfully created: "bla bla bla I don't speak portugese"
marcgg