20

mam tego problemu i18njak używać szyn i18n fallback wyposażony

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" 

nie wiem dlaczego model książka nie dostać masaż awaryjnej. Ustawiłem config.i18n.fallbacks = true. Używam szyn 3

+0

kluczem książka nie jest obecny w pliku. Spójrz na to samo i spróbuj ponownie, dodając klucz do książki. –

+0

tak, nie jest tam, ale to jest główny powód do korzystania z awaryjnego. nie musisz awarie, jeśli wszystko zdefiniujesz. ale nie mogę tego zrobić. to dla mnie bezużyteczna praca. – antpaw

+0

Byłoby miło, jeśli edytujesz pytanie, by wyjaśnić więcej. Jakie są teraz twoje ustawienia regionalne i do jakich regionów chcesz się przywrócić? (Wygląda na to, że masz własne niemieckie locale, ale dlaczego piszesz po angielsku?) – lulalala

Odpowiedz

22

Kiedy : default opcja jest podana jego wartość zostanie zwrócona jeśli tłumaczenie brakuje:

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

Więcej informacji here

+0

ok dzięki, to wydaje mi się działać dla mnie "I18n.t (" activerecord.notices.models. # {object.to_s.downcase }. # {type} ",: default => I18n.t (" activerecord.notices.messages. # {type} "))" – antpaw

17

Jeżeli masz włączony fallbacks dla twój backend? Zakładając, że jest to proste (na podstawie yml w przykładzie):

umieścić to do inicjowania:

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

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

+0

Dla szyn, po prostu umieść to w pliku takim jak config/initializers/i18n_fallbacks.rb –

+0

To działało dla mnie na Railsach 2 – lobati

+0

To działało dla mnie na Rails 2 - po dodaniu klejnotu "i18n". –

82

ustawić w config/environment.rb zwykle

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

So możesz zwolnić kolejność wycofania.

Należy jednak zachować uwagę w niektórych środowiskach/*. Rb konfiguracja zostanie zastąpiona.

+15

To powinna być zaakceptowana odpowiedź. – samvermette

+1

To ** nie powinno ** być przyjętą odpowiedzią, OP poprosił o awarię klucza (ustawienia domyślne AKA), a nie o powrót języka. – rewritten

+0

@rewritten Czy możesz wyjaśnić nieco więcej? Czułem, że nie potrafię rozróżnić tych dwóch bardzo wyraźnie i nie mogę znaleźć w tym również dyskusji na forum internetowym. – lulalala

16

w szynach 3+, to jest ustawione w config/Środowiska pliki:

# 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

To już nie jest domyślnie, ale nadal można go dodać. – tybro0103

4

Uważam, że najlepszym sposobem radzenia sobie brakujący ciąg znaków, to aby wyświetlić domyślne ustawienia regionalne, zamiast komunikatu o błędzie .

Dodaj tę linię w pliku application.rb, aby przywrócić ustawienia narodowe w języku angielskim.

config.i18n.fallbacks = [:en] 

W przypadku, gdy chcesz określić fallbacks locale-specyficzny, można użyć następujących:

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

Należy również pamiętać, że można włączyć i wyłączyć fallbacks opartych na środowisku. więc podczas rozwoju to może mieć sens mieć wyświetlony komunikat o błędzie, można zamiast umożliwić fallbacks w twojej environments/production.rb z następujących czynności:

config.i18n.fallbacks = true 
+1

Obecnie nie zgadzam się. Jeśli inny programista zmieni lub usunie klucz tłumaczenia, a aplikacja zostanie później wdrożona, możesz uzyskać domyślny ciąg ustawień lokalnych i nie mieć wiedzy o błędzie, a następnie klient złoży skargę. Lepiej byłoby stworzyć specyfikację testową, aby zapewnić, że wszystkie klucze dla określonego języka są na miejscu –