2012-06-11 7 views
23

Mam plik terms.en.yml z niektórych lokalizacji, na przykład:Jak przerwać linie w plikach lokalizacji .yml na szynach?

en: 
    devise: 
    registrations: 
     terms: 
     text: 'This agreement was written in English (US). To the extent any translated version of this agreement conflicts with the English version, the English version controls. Please note that Section 16 contains certain changes to the general terms for users outside the United States.\n\ Some new line' 

Jak mogłem przełamać linię lub utworzyć tam paragraf?

Oto trochę informacji, ale mi to nie pomogło, robiłem coś złego. http://yaml.org/spec/1.1/#b-paragraph-separator

+0

Jak używasz Rails musisz korzystać z niektórych środków ostrożności zarówno na szynach stronie YAML. Poniżej znajduje się moja odpowiedź, aby uzyskać więcej szczegółów i proszę o uznanie jej za poprawną odpowiedź. Dzięki. –

Odpowiedz

45

Działa to dla mnie:

en: 
    hello: "Hello world" 
    bye: | 
    Bye! 
    See you! 
    error: > 
    Something happend. 
    Try later. 

Zastosowanie:

irb(main):001:0> I18n.t 'bye' 
=> "Bye!\nSee you!\n" 
irb(main):002:0> I18n.t 'error' 
=> "Something happend. Try later.\n" 
+0

Ustawia prawidłowy ciąg znaków, ale program nie tworzy HTML '
' s, więc nie ma żadnego efektu? – amoebe

+1

Do tego celu użyj pomocnika 'simple_format'? –

+2

W ten sposób masz tylko linebreaks w kodzie YAML, ale nie w wyjściu HTML. Próbowałem tego w normalnym pliku .yml w Railsach 4.2.6 i nie działa, zarówno "|" i opcje ">". Poniżej znajduje się moja odpowiedź, aby uzyskać więcej szczegółów i proszę o uznanie jej za poprawną odpowiedź. Dzięki. –

7

Jeśli chcesz mieć linebreaks w kodzie, ale nie na wyjściu:

en: 
    devise: 
    registrations: 
     terms: 
     text: > 
      This agreement was written in English (US). 
      To the extent any translated version of this 
      agreement conflicts with the English version, 
      the English version controls. Please note 
      that Section 16 contains certain changes to 
      the general terms for users outside the 
      United States. 

      Some new line 
6

I rozważ, że twoja odpowiedź oznacza:

"Jak napisać frazę/akapit w pliku .yml (YAML) z liniami przerwań i sprawić, że wyjście na szynę (HTML) zawiera te linie przerwań?"

Tak więc dla mnie celem jest napisanie frazy wewnątrz pliku .yml (YAML) z liniami nieciągłości, aby łatwo zrozumieć ostateczny wynik, a następnie uzyskać dokładne wyniki w naszym kodzie HTML wygenerowanym przez Rails.

Do tego potrzebujemy prostych środków ostrożności zarówno w pliku .yml, jak i w pliku .html.erb | .slim.

To jak to robię.

welcome_page.html.slim

h4.white = t('welcome_html') 

Należy tutaj zauważyć _html ostatnią część. Jeśli Twój klucz tłumaczenia kończy się na _html, otrzymujesz możliwość ucieczki za darmo. Źródło: http://guides.rubyonrails.org/i18n.html#using-safe-html-translations

en.yml

en: 
    welcome_html: | 
    Welcome on StackOverflow!</br> 
    This is your personal dashboard! 

Więc teraz wewnątrz naszego .yml pliku możemy użyć </br> tag HTML, który będzie uciekł. Aby łatwo odczytać i zrozumieć, w jaki sposób będą wyświetlane dane wyjściowe, chcielibyśmy użyć "|" Opcja yaml, która pozwala nam mieć linie przerwań również w pliku .yml. Ale przypomnij, że "|" Opcja jest właśnie dla nas, aby być bardziej zrozumiałym dla człowieka i przyjaznym dla programisty. "|" Opcja YAML nie wpłynie na wynik! Również możemy skorzystać z innych opcji YAML takie jak:

en: 
    welcome_html: > 
    Welcome on StackOverflow!</br> 
    This is your personal dashboard! 

czyli

en: 
    welcome_html: 
    Welcome on StackOverflow!</br> 
    This is your personal dashboard! 

czyli

en: 
    welcome_html: "Welcome on StackOverflow!</br>This is your personal dashboard!" 

Wszystkie one wytwarzają taką samą moc, więc teraz twoja strona HTML będzie odzwierciedlać ta linia podziału.

0

Odpowiedź Diego D's z użyciem _html jako prefiksu YAML działa głównie, ale gdy nie jest (na przykład w ostrzeżeniu flashowym), możesz również spróbować użyć .html_safe na zlokalizowanym łańcuchu w szablonie.

więc jako przykład:

<% flash.each do |name, msg| -%> 
    <%= content_tag :div, msg.html_safe, class: name %> 
<% end -%>