2012-10-24 5 views
32

Desidero utilizzare le variabili dichiarate nel file yml proprio lì. Ad esempio, ho dichiarato site_name e desidero utilizzarlo di seguito in description.Passaggio di variabili all'interno del file yml di internazionalizzazione dei binari

en: 
    site_name: &site_name "Site Name" 
    static_pages: 
    company: 
     description: *site_name #this works fine 
     description: "#{*site_name} is an online system" #this doesn't work 

Come posso combinare *site_name variabile con testo aggiuntivo?

+0

** Consulta anche: ** https://stackoverflow.com/questions/15777987/string-interpolation-in-yaml – dreftymac

risposta

54

La risposta breve è, io credo, no, non si può fare di interpolazione di stringhe in YAML il modo in cui si desidera utilizzare an alias.

Nel tuo caso, quello che vorrei fare è avere qualcosa di simile a quanto segue nel mio file locale:

en: 
    site_name: "Site Name" 
    static_pages: 
    company: 
     description: ! '%{site_name} is an online system' 

e quindi chiamare nella vista appropriata con il nome del sito come parametro:

t('.description', site_name: t('site_name')) 

che ti porterà a "Site Name is an online system".

Tuttavia, se siete disperati per utilizzare gli alias nel file YAML per concatenare le stringhe insieme, il seguente completamente unrecommended codice dovrebbe funzionare anche facendo in modo che la stringa di essere due elementi di un array:

en: 
    site_name: &site_name "Site Name" 
    static_pages: 
    company: 
     description: 
     - *site_name 
     - "is an online system" 

e poi si sarebbe join la matrice nella vista appropriata in questo modo:

t('.description').join(" ") 

che sarebbe anche ottenere "Site Name is an online system".

Tuttavia, prima di decidere di andare su questa strada, a parte la questione che @felipeclopes legato a, uno sguardo a:

  • this StackOverflow answer riguardo concatenazione di stringhe i18n (tl; dr favore, non per il tuo team di traduzione).
  • StackOverflow domande here e here simili alla domanda.
+0

Grazie, Paul, per una risposta così dettagliata. Ora conosco questo trucco con 'join', potrebbe essere utile. Riepilogando tutte le opzioni, scelgo di scrivere il nome del sito più volte nel file .yml. Non è conforme al principio ASCIUTTO, ma meglio di altre opzioni difficili. – alex

+0

Mi rendo conto che è piuttosto vecchio, ma sono curioso dello scopo del botto (!) In "descrizione:! '% {Site_name} è un sistema online" "? –

6

È possibile utilizzare la seguente sintassi, come nell'esempio:

dictionary: 
    email: &email Email 
    name: &name Name 
    password: &password Password 
    confirmation: &confirmation Confirmation 

activerecord: 
    attributes: 
    user: 
     email: *email 
     name: *name 
     password: *password 
     password_confirmation: *confirmation 
    models: 
    user: User 
users: 
    fields: 
    email: *email 
    name: *name 
    password: *password 
    confirmation: *confirmation 
sessions: 
    new: 
    email: *email 
    password: *password 

Questo esempio è stato preso da: Refactoring Ruby on Rails i18n YAML files using dictionaries

+0

La domanda è di circa passando varaibles all'interno di file yml, non dalla vista YML – alex

+0

Siamo spiacenti, quindi puoi trovare la risposta qui: http://stackoverflow.com/questions/11097572/refactoring-ruby-on-rails-i18n-yaml-files-using-dictionaries Leggi i commenti, non è supportato dall'altra persone che hanno visto la soluzione. Spero che questo aiuti! – felipeclopes

+0

Thx, è utile. Modifica la tua risposta pls "usa & e * sintassi" in modo da poter votare la tua risposta. Ma non è la soluzione completa. Ho modificato la mia domanda. – alex

Problemi correlati