2012-11-08 25 views
5

Tôi đang tạo ứng dụng Rails đầu tiên của mình và ứng dụng sẽ hỗ trợ quốc tế hóa.Trong Rails, cách sắp xếp dữ liệu được bản địa hoá cho các phần tử biểu mẫu khác với nhãn?

Tôi đã đọc số i18n guide và đó là một nguồn rất tốt. Nó thậm chí suggests a file organization cho các tập tin bản địa hóa, mà là một điểm khởi đầu rất tốt:

|-defaults 
|---es.rb 
|---en.rb 
|-models 
|---book 
|-----es.rb 
|-----en.rb 
|-views 
|---defaults 
|-----es.rb 
|-----en.rb 
|---books 
|-----es.rb 
|-----en.rb 
|---users 
|-----es.rb 
|-----en.rb 
|---navigation 
|-----es.rb 
|-----en.rb 

Tuy nhiên, tôi không chắc chắn nơi tốt nhất để giữ một số thông tin thêm (quốc tế hóa) thường được tìm thấy trong các hình thức, như là những gì:

  • placeholders đầu vào
  • văn bản helper (bên cạnh đầu vào, với một thông tin chi tiết thêm về nó)

Vấn đề là : thông tin này liên quan đến các khung nhìn (không phải các mô hình). Tuy nhiên, nó thường được mô tả trong mỗi mô hình, theo từng thuộc tính - làm cho tôi nghiêng để đặt chúng bên trong các tệp mô hình, dưới thuộc tính activerecord.

Câu hỏi của tôi: nơi tốt nhất để đưa dữ liệu được bản địa hóa này là gì? Cả về tổ chức tệp (thư mục) và về tổ chức bên trong tệp.

+0

Bạn đang sử dụng phiên bản đường ray nào? Chiến lược đặt tên i18n đã thay đổi một chút theo thời gian. – numbers1311407

+0

Tôi đang sử dụng 3.2.8 – fegemo

Trả lời

4

Tôi không nghĩ rằng có câu trả lời "đúng" cho câu hỏi này.

Cá nhân tôi có xu hướng không đồng ý với một số tổ chức được đề xuất bởi hướng dẫn. i18n, theo bản chất, hoàn toàn nằm trong miền của lớp xem. Để thả một thư mục "xem" trong đó có một chút khó hiểu, và có lẽ đã dẫn nhiều hơn một nhà phát triển cho vấn đề chính xác bạn đang có bây giờ.

Tôi khuyên bạn nên bỏ các tệp views/book và giữ mọi thứ liên quan đến mô hình trong cùng một tệp. Tất cả các bản dịch là dành cho "lượt xem" và việc lưu giữ tất cả các bản dịch liên quan đến từng mô hình riêng lẻ có thể sạch hơn và ít bị lỗi hơn.

# locale/models/model.en (or es, etc) 

# all the activerecord translations 
activerecord: 
    models: 
    # ... 
    attributes: 
    # ... 
    errors: 
    # ... 
# then your form translations. 
helpers: 
    label: 
    # Here you might add overrides for activerecord attribute lookups, but 
    # do so with care (see note below). 

    # then below are your custom view fields 
    placeholders: 
    model: 
     attribute: 'translation' 
    details: 
    model: 
     attribute: 'translation' 

Lưu ý về helpers.label so activerecord.attributes:

Rails tự currently trông ở hai nơi cho dịch nhãn. Đầu tiên:

helpers: 
    label: 
    model: 
     attribute: 'translation' 

Rơi trở lại với bản dịch activerecord:

activerecord: 
    attributes: 
    model: 
     attribute: 'translation' 

Đây là phần nào của một cái bẫy, vì nó có nghĩa là nhãn thức và các lỗi activerecord (và bản dịch khác) sẽ khác nhau. Ví dụ: nếu bạn muốn nhãn biểu mẫu của bạn có nhiều dấu nhắc hơn (ví dụ: "Nhập nội dung" cho thuộc tính "body"), nhưng cũng có thể là nguồn lỗi nếu helper.label của bạn không rõ ràng đề cập đến bản dịch activerecord, ví dụ ("Nhập tin nhắn" cho thuộc tính "body"). Vì vậy, ghi đè cẩn thận.

+0

Thảo luận tuyệt vời, tuyệt vời. Cảm ơn vì đã chia sẽ kinh nghiệm của bạn! – fegemo

+0

Theo như tôi có thể biết, liên kết "hiện tại" của bạn giờ đây sẽ trỏ [tại đây] (https://github.com/rails/rails/blob/4-0-stable/actionpack/lib/action_view/helpers/tags/ nhãn.rb # L48) - nhưng tôi không chắc làm thế nào điều đó chứng minh rằng nó rơi trở lại bản dịch activerecord. Bạn có thể nhớ làm thế nào mà chuỗi được folllowed? – Gareth

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