2012-10-24 19 views
32

Tôi muốn sử dụng các biến được khai báo trong tệp yml ngay tại đó. Ví dụ: tôi đã khai báo site_name và muốn sử dụng nó bên dưới trong description.Truyền các biến bên trong tập tin yML quốc tế hóa

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 

Làm cách nào để kết hợp biến số *site_name với văn bản bổ sung?

+0

** Xem thêm: ** https://stackoverflow.com/questions/15777987/string-interpolation-in-yaml – dreftymac

Trả lời

54

Câu trả lời ngắn gọn là, tôi tin rằng, không có bạn không thể làm chuỗi suy trong YAML theo cách bạn muốn sử dụng an alias.

Trong trường hợp của bạn, những gì tôi sẽ làm là có một cái gì đó như sau trong tập tin địa phương của tôi:

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

và sau đó gọi trong giao diện phù hợp với tên trang web như một tham số:

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

sẽ giúp bạn "Site Name is an online system".

Tuy nhiên, nếu bạn đang tuyệt vọng để sử dụng bí danh trong file YAML của bạn để nối các chuỗi lại với nhau, sau đây hoàn toàn unrecommended mã cũng sẽ làm việc bằng cách có chuỗi là hai yếu tố của một mảng:

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

và sau đó bạn sẽ join mảng trong giao diện thích hợp như thế này:

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

nào cũng sẽ giúp bạn có "Site Name is an online system".

Tuy nhiên, trước khi quyết định đi theo con đường này, ngoài những câu hỏi đó @felipeclopes liên quan đến, có một cái nhìn tại địa chỉ:

  • this StackOverflow answer về concatenating dây i18n (tl; dr Xin đừng cho lợi ích của nhóm dịch thuật của bạn).
  • Câu hỏi về StackOverflow herehere tương tự như câu hỏi của bạn.
+0

Cảm ơn Paul, vì câu trả lời chi tiết như vậy. Bây giờ tôi biết về thủ thuật này với 'tham gia', nó có thể hữu ích. Nhưng tóm tắt tất cả các tùy chọn tôi chọn để viết tên trang nhiều lần trong tệp .yml. Nó không phù hợp với nguyên tắc DRY, nhưng tốt hơn sau đó các tùy chọn khôn lanh khác. – alex

+0

Tôi nhận ra điều này là khá cũ, nhưng tôi tò mò vì mục đích của bang (!) Trong "description:! '% {Site_name} là một hệ thống trực tuyến" "? –

6

Bạn có thể sử dụng cú pháp sau đây, như trong ví dụ:

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 

Ví dụ này được lấy từ: Refactoring Ruby on Rails i18n YAML files using dictionaries

+0

Câu hỏi đặt ra là về đi varaibles bên trong tập tin yml, không khỏi tầm nhìn đến YML – alex

+0

Xin lỗi, để bạn có thể tìm thấy câu trả lời ở đây: http://stackoverflow.com/questions/11097572/refactoring-ruby-on-rails-i18n-yaml-files-using-dictionaries Đọc nhận xét, nó không được hỗ trợ bởi người khác những người đã xem giải pháp. Hy vọng điều này sẽ hữu ích! – felipeclopes

+0

Thx, nó hữu ích. Chỉnh sửa câu trả lời của bạn "sử dụng & và * cú pháp" để tôi có thể bình chọn câu trả lời của bạn. Nhưng nó không phải là giải pháp hoàn chỉnh. Tôi đã chỉnh sửa câu hỏi của mình. – alex

Các vấn đề liên quan