Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to avoid Globalize3 from returning fallback translations for an attribute into a specific context?

I'm working in the internationalization/localization of web site using Globalize3 and easy_globalize_accesors and right now I'm adapting the forms to manage fields with possible translations. Suppose I have a class named Role:

class Role  
  translates :name, :fallbacks_for_empty_translations => true
  # rest of class definition

I've done this because I want to show the default translation if there isn't a translation or is empty in the current locale and this works as expected.
But, in my form I want the opposite: I would like to have each input who refers to a different locale than default locale to show no value unless there is a value for that attribute in the role_translations table. Here is how I've created the inputs:

<%= textfield 'role', "name_#{locale}", :class => ... %> 

Currently, what happens to me is if I have created a new Role with only the translation for the default locale, when I want to edit the role to add translations to other locales, each input show me the value of default translation.
Thanks in advance

like image 707
Rene Hernandez Avatar asked Nov 05 '13 20:11

Rene Hernandez


2 Answers

You can implement this method in your model:

  def read_translated_attribute(name)
    globalize.stash.contains?(Globalize.locale, name) ? globalize.stash.read(Globalize.locale, name) : translation_for(Globalize.locale).send(name)
  end

Then you'll just need to set the input values in your form explicitely, like this:

<%= text_field 'role', "name_#{locale}", :value => @role.read_translated_attribute(:name), :class => ... %>
like image 89
rabusmar Avatar answered Oct 04 '22 12:10

rabusmar


You could use

<%= text_field 'role', "name_#{locale}", :value => @role.name_translations[locale], :class => ... %>
like image 22
Rune Schjellerup Philosof Avatar answered Oct 04 '22 12:10

Rune Schjellerup Philosof