2012-10-24 11 views
32

Chcę używać zmiennych zadeklarowanych w pliku yml właśnie tam. Na przykład zadeklarowałem site_name i chcę użyć go poniżej w description.Przekazywanie zmiennych wewnątrz umiędzynarodowienia plik yml

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 

Jak mogę połączyć zmienną *site_name z dodatkowym tekstem?

+0

** Patrz również: ** https://stackoverflow.com/questions/15777987/string-interpolation-in-yaml – dreftymac

Odpowiedz

54

Odpowiedź jest krótka, wierzę, no nie można zrobić interpolacji smyczkowy YAML sposób, w jaki chcesz korzystać z an alias.

W twoim przypadku, co chciałbym zrobić, to mieć coś jak następuje w moim pliku regionalne:

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

a następnie wywołać w odpowiednim widoku z nazwy witryny jako parametr:

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

, które dostaniesz "Site Name is an online system".

Jednakże, jeśli jesteś zdesperowany, aby używać aliasów w pliku YAML do łączenia ciągów łącznie następujące całkowicie Unrecommended kod będzie również działać poprzez łańcuch dwa elementy tablicy:

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

i wtedy będzie join tablicę w odpowiednim widoku tak:

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

co również uzyskać Ci "Site Name is an online system".

Jednak zanim zdecydujesz się pójść tą drogą, niezależnie od kwestii, które @felipeclopes związane, rzucić okiem na:

  • this StackOverflow answer dotyczących łączenie ciągów i18n (TL; dr Proszę nie dla zespół tłumaczy).
  • Pytania dotyczące StackOverflow here i here, które są podobne do twojego pytania.
+0

Dziękuję, Paul, za tak szczegółową odpowiedź. Teraz wiem o tej sztuczce z 'join', może być przydatne. Ale podsumuj wszystkie opcje, które wybrałem do wielokrotnego zapisu nazwy strony w pliku .yml. Nie jest to zgodne z zasadą DRY, ale lepiej niż inne trudne opcje. – alex

+0

Rozumiem, że jest to dość stare, ale jestem ciekawy co do celu hitu (!) W "description:!"% {Site_name} to system online ""? –

6

Można użyć następującej składni, jak w przykładzie:

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 

Przykład ten został zaczerpnięty z: Refactoring Ruby on Rails i18n YAML files using dictionaries

+0

Pytanie jest o przejściu varaibles wewnątrz pliku yml, a nie z zamiarem yml – alex

+0

Niestety, więc możesz znaleźć odpowiedź tutaj: http://stackoverflow.com/questions/11097572/refactoring-ruby-on-rails-i18n-yaml-files-using-dictionaries Przeczytaj komentarze, nie był obsługiwany przez innych osoby, które widziały rozwiązanie. Mam nadzieję, że to pomoże! – felipeclopes

+0

Thx, jest to przydatne. Edytuj swoją odpowiedź "składnia use & and *", więc mogę głosować twoją odpowiedź w górę. Ale to nie jest kompletne rozwiązanie. Mam edytować moje pytanie. – alex