2009-11-23 3 views
0

J'ai un administrateur multilingue (pour l'anglais et portugais) qui doit enregistrer les données pour les deux langues en même temps, comme la description champ FR et description champ PT sous la même forme.admin multilingue avec Globalize2

Globalize2 fait un peu de magie et je ne sais pas exactement comment sauver ce. Je vais poster mon action de contrôleur ici, qui a évidemment besoin de refactoring. Merci, les gens!

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 

Désolé ... J'ai oublié de le dire .. Mon doute concerne la sauvegarde des traductions. Ce 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 
+0

I ont jamais utilisé les traductions du modèle Globalize, donc je ne peux pas vous aider beaucoup, mais en utilisant eval avec les données soumises utilisateur est un risque de sécurité énorme . – mtyaka

+0

Je sais ... J'utilise juste pour obtenir des champs de la vue avec le nom « k » et mettre en valeur .. pour moins de codage ... mais je ne sais vraiment pas comment résoudre cela dans une belle façon.. –

Répondre

0

Faire la globalisation en utilisant i18n est génial et simple.

Par exemple:

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

Ensuite, créez un en.yml dans config/locales:

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

Et la version portugese ainsi suivant la même convention:

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