5

Mam kontroler PetsController, w którym ustawiono wiadomość błyskawiczną. Coś takiego:Jak korzystać z I18n z kontrolera w Railsach

class PetsController 

    ... 

    def treat_dog 
    #do somthing 
    flash[:success] = 'Your dog is being treated.' 
    end 

    ... 

end 

kontroler ten należy do admina, dlatego znajduje się pod adresem: app/controllers/admin/pets_controller.rb. Użyję i18n, więc zastępuje ciąg kontroler z t('controllers.admin.pet.treated') więc napisałem ten yml:

en: 
    controllers: 
    admin: 
     pet: 
     treated: "Your dog is being treated." 

pod adresem: config/locales/controllers/admin/pet/en.yml i to nie działa. Podjęto próbę zlokalizowania go pod adresem config/locales/controllers/admin/pets/en.yml, , i żaden z nich nie działał, tłumaczenie nie zostało znalezione.

Jak mogę użyć tłumaczenia z tego kontrolera?

Odpowiedz

8

W kontrolerze go używać jak to

I18n.t 'controllers.admin.pet.treated' 
+0

Tak, znalazłem, że zgodnie z konwencją, w sterownikach tłumaczenia I18n musi być użyty z kluczem I18n.t zamiast t ("klucz"), ale ten ostatni też musi działać. W moim przypadku wymień go na mnie. Dzięki, Mahesh. –

+0

Jak wyjaśniono w przewodniku http://guides.rubyonrails.org/i18n.html#lazy-lookup prawdopodobnie mógłbyś to uprościć dzięki leniwym wyszukiwaniom przy użyciu helpera takiego jak ten 't ('. Treat')' – dft

0
def treat_dog 
    #do somthing 
    flash[:success] = t('controllers.admin.pet.treated') 
end 
+0

Zapomniałem napisać proste zapytania w pytaniu, ale naprawdę go używałem –

0

Umieścić go w config/locales/en.yml i powinno działać (może być konieczne ponowne uruchomienie serwera).

Ten przewodnik powinien pomóc w wyczyszczeniu głowy wokół I18n. Podaję odnośnik do odpowiedniej sekcji, ale przeczytam ją w całości: http://guides.rubyonrails.org/i18n.html#adding-translations

Jeśli nalegasz na używanie plików zagnieżdżonych, musisz je włączyć. Dokumentacja mówi:

Domyślny mechanizm ładujący ustawienia lokalne w Railsach nie ładuje plików lokalizacji w zagnieżdżonych słownikach, tak jak tutaj mamy. Tak więc, aby to zadziałało, musimy wyraźnie powiedzieć Rails szukać dalej:

# config/application.rb 
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')] 
+0

pliki yml znajdujące się w 'config/locales/en.yml' są używane do ustawienia ogólnych lub ogólnych tranlacji. Gdy masz dużo tranlacji, możesz je zlokalizować za pomocą ten sam porządek hierarchii niż drzewo 'widok' i' kontroler'. –

+0

@ IvánCortésRomero: hah, nie wiedziałem o tym! Jednak przeczytaj ten przewodnik. Wspomina, że ​​pliki zagnieżdżone nie są ładowane domyślnie i jak je włączyć. –

+0

Nie wiedziałem o tej konfiguracji, więc sprawdziłem mój 'config/application.rb' i znalazłem już ten wiersz. Jednak dziękuję bardzo. –

0

W zwrotnego powinno być:

add_breadcrumb proc{ I18n.t('home_page') }, :root_path