5

Ho un PetsController in cui è stato impostato un messaggio flash. Qualcosa di simile a questo:Come utilizzare I18n dal controller in Rails

class PetsController 

    ... 

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

    ... 

end 

questo controller appartiene a Admin, in modo che si trova all'indirizzo: app/controllers/admin/pets_controller.rb. Userò I18n, così ho sostituito la stringa nel controller con t('controllers.admin.pet.treated'), allora, ho scritto questo yml:

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

situato a: config/locales/controllers/admin/pet/en.yml e non ha funzionato. Ho tentato di localizzarlo a config/locales/controllers/admin/pets/en.yml, config/locales/controllers/admin/en.yml config/locales/controllers/en.yml e nessuno di questi ha funzionato, la traduzione non è stata trovata.

Come posso utilizzare una traduzione da questo controller?

risposta

8

Nel controller che si usano in questo modo

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

Sì, ho trovato che per convenzione, in controllori di traduzione I18n deve essere usato con I18n.t 'key' invece di t ('key') ma anche quest'ultimo deve funzionare. Nel mio caso, lo scambio funziona per me. Grazie Mahesh. –

+0

Come spiegato nelle guide http://guides.rubyonrails.org/i18n.html#lazy-lookup potresti probabilmente semplificarlo con ricerche pigre usando l'helper come questo 't ('. Treated')' – dft

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

Ho dimenticato di scrivere il semplici virgolette nella domanda, ma l'ho davvero usato –

0

Metterlo in config/locales/en.yml e dovrebbe funzionare (potrebbe essere necessario riavviare il server).

Questa guida dovrebbe aiutare a liberare la testa su I18n. Fornisco il collegamento alla sezione pertinente, ma lo leggo per intero: http://guides.rubyonrails.org/i18n.html#adding-translations

Se si desidera utilizzare file nidificati, è necessario abilitarlo. Documentazione dice:

Il meccanismo di caricamento localizzazione predefinita in Rails non caricare i file di localizzazione nei dizionari annidati, come abbiamo qui. Quindi, per questo lavoro, dobbiamo dire esplicitamente Rails di guardare oltre:

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

gli yml che si trovano in 'config/locales/en.yml' sono usati per impostare le transizioni generali o generiche. Quando si hanno molte transazioni, è possibile localizzarle con stesso ordine gerarchico di 'view' e' controller' tree. –

+0

@ IvánCortésRomero: ah, non lo sapevo! Tuttavia, leggi questa guida. Indica che i file nidificati non vengono caricati per impostazione predefinita e come attivarli. –

+0

Non sapevo di questa configurazione, quindi ho controllato il mio 'config/application.rb' e ho trovato già questa linea. Tuttavia, grazie mille. –

0

In callback dovrebbe essere:

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