20

ho questo problema i18ncome utilizzare le rotaie fallback i18n caratteristiche

activerecord: 
    notices: 
    messages: 
     success: 
     create: "Something was created" 
    models: 
     user: 
     success: 
      create: "Thanks for registration" 

I18n.t("activerecord.notices.models.user.success.create") 
# => "Thanks for registration" 


I18n.t("activerecord.notices.models.book.success.create") 
# => "translation missing: de, activerecord, notices, models, book, success, create" 

Non so il motivo per cui il modello libro non ottiene il massaggio fallback. Ho impostato config.i18n.fallbacks = true. Sto usando Rails 3

+0

il libro chiave non è presente nel file. Guarda lo stesso e riprova aggiungendo la chiave del libro. –

+0

sì non è lì, ma questo è il motivo principale per usare un fallback. non hai bisogno di fallback se definisci tutto. ma non posso farlo. è un lavoro molto inutile per me. – antpaw

+0

Sarebbe bello se modifichi la domanda per chiarire di più. In quale locale ci si trova ora e a quale locale si desidera eseguire il fallback? (sembra che tu abbia il tuo locale tedesco, ma perché scrivi inglese?) – lulalala

risposta

22

Quando un : opzione predefinita è dato, il suo valore verrà restituito se la traduzione non è presente:

I18n.t :missing, :default => 'Not here' 
# => 'Not here' 

Maggiori informazioni here

+0

ok grazie, sembra funzionare per me "I18n.t (" activerecord.notices.models. # {object.to_s.downcase }. # {type} ",: default => I18n.t (" activerecord.notices.messages. # {type} "))" – antpaw

17

Hai attivato fallback per il tuo back-end? Supponendo che sia semplice (basato sulla yml nell'esempio):

mettere questo in un inizializzatore:

require "i18n/backend/fallbacks" 
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) 

https://github.com/svenfuchs/i18n/wiki/Fallbacks

+0

Per rail, basta inserirlo in un file come config/initializers/i18n_fallbacks.rb –

+0

Questo ha funzionato per me su Rails 2 – lobati

+0

Questo ha funzionato per me su Rails 2 - dopo aver incluso la gemma 'i18n'. –

82

ho impostato in config/application.rb solito

config.i18n.fallbacks =[:de, :fr, :en] 

Così puoi decelerare l'ordine del fallback.

Ma attenzione in alcuni ambienti/*. Rb la configurazione viene sovrascritta.

+15

Questa dovrebbe essere la risposta accettata. – samvermette

+1

Questa ** non dovrebbe ** essere la risposta accettata, l'OP ha chiesto il fallback della chiave (default AKA), non per il fallback della lingua. – rewritten

+0

@rewritten puoi chiarire un po 'di più? Sentivo di non poter distinguere questi due in modo molto chiaro e di non riuscire a trovare una discussione online. – lulalala

16

In rotaie 3+, questo è impostato nella cartella config/ambienti file:

# Enable locale fallbacks for I18n (makes lookups for any locale fall back to 
    # the I18n.default_locale when a translation can not be found) 
    config.i18n.fallbacks = true 
+0

Questo non è più lì per impostazione predefinita, ma può ancora essere aggiunto. – tybro0103

4

credo che il modo migliore per gestire una stringa mancante, è quello di visualizzare una località di default, piuttosto che un messaggio di errore .

Aggiungere questa riga in application.rb per tornare alle impostazioni locali in inglese.

config.i18n.fallbacks = [:en] 

Nel caso in cui si desidera specificare fallback specifiche della lingua, è possibile utilizzare il seguente:

config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]} 

Si noti inoltre che è possibile attivare e disattivare ricadute in base al proprio ambiente. Così, mentre sullo sviluppo che potrebbe avere senso per avere un errore visualizzato, è possibile invece abilitare fallback nel environments/production.rb con il seguente:

config.i18n.fallbacks = true 
+1

Attualmente non sono d'accordo. Se un altro sviluppatore modifica o elimina una chiave di traduzione e l'app in seguito distribuisce, puoi ottenere la stringa locale predefinita e non avere alcuna conoscenza dell'errore, quindi in seguito il cliente si lamenterà. Potrebbe essere meglio creare una specifica di prova per garantire che tutte le chiavi di una determinata lingua siano presenti –