9

Sto utilizzando Ruby on Rails 3.1 e vorrei sapere come gestire correttamente l'internazionalizzazione relativa ai file di modello parziali. Cioè, ...Problemi nell'utilizzo della gemma i18n con file di modello parziale

... nel mio file app/views/users/flag.html.erb ho:

<%= t('.test_key1') %> 
<%= render :partial => "https://stackoverflow.com/users/flag_form" %> 

... nel mio file app/views/users/_flag_form.html.erb ho:

<%= t('.test_key2') %> 

Se nel mio file config/locales/views/users/en.yml (nota: sto organizzando i file come indicato nel official RoR guide) io uso

en: 
    users: 
    flag: 
     test_key1: Test 1 text 
     test_key2: Test 2 text 

il Test 1 text viene visualizzato nel modello "principale" (app/views/users/flag.html.erb) ma il Test 2 text non è per il modello parziale (app/views/users/_flag_form.html.erb). In che modo è possibile/devo risolvere questo problema per visualizzare correttamente lo Test 2 text?

+0

questo non risolverà il vostro problema (e la mia), ma può aiutare a capire dove le rotaie Cercare le traduzioni https://github.com/256dpi/rails-i18n-debug – masciugo

risposta

10

Un modo sarebbe utilizzare l'ambito anziché il "caricamento lento" utilizzando il punto. Qualcosa del genere dovrebbe funzionare:

I18n.t :test_key2, :scope => 'users.flag' 

o l'uso:

I18n.t "users.flag.test_key2" 

Infine, si potrebbe anche passare al parziale in

<%= render :partial => "https://stackoverflow.com/users/flag_form", :locals => { :test_key => t('.test_key1') } %> 

Si dovrebbe anche checkout la sezione appendice su questo sito come potrebbe essere elencando qualcosa che mi manca: http://www.unixgods.org/~tilo/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

+0

il tuo link è morto :( –

0

Ho scritto questo. Cosa ne pensi?

def translate_for_partials key, *args 
    I18n.t("#{params[:controller].gsub('/', '.')}.#{params[:action]}.#{key}", *args) 
end 

È così male fare un tale metodo?

+0

In vista si potrebbe fare una versione più pulita: (". # {controller_name} # {controller.action_name} # {key}") I18n.t – Magnuss

+0

Magnuss, questo è per controllori annidati 'params [: Controller] .gsub ('/', '') ' –

15

config/locali/en.yml

en: 
    users: 
    flag: 
     test_key1: Test 1 text 
    flag_form: 
     test_key2: Test 2 text 

app/views/utenti/flag.html.erb

<%= t('.test_key1') %> 
<%= render :partial => "https://stackoverflow.com/users/flag_form" %> 

app/views/utenti/_flag_form.html .erb

<%= t('.test_key2') %> 

NB:

  1. Rails percorso per la visualizzazione deve corrispondere percorso YAML al simbolo. È necessario creare una voce nel file YAML che corrisponda al nome della vista. Ometti il ​​carattere di sottolineatura finale poiché è parziale.
  2. Per saperne di più lazy lookups
+2

TL; DR Mantenere la sottolineatura nel nome del file _partial, costruire il vostro albero YAML senza la sottolineatura en:. user: parziale: – givanse

Problemi correlati