9

Tôi đang sử dụng Ruby on Rails 3.1 và tôi muốn biết cách xử lý quốc tế chính xác liên quan đến các tệp mẫu một phần. Đó là, ...Rắc rối khi sử dụng đá quý i18n với các tệp mẫu từng phần

... trong tập tin app/views/users/flag.html.erb của tôi, tôi có:

<%= t('.test_key1') %> 
<%= render :partial => "https://stackoverflow.com/users/flag_form" %> 

... trong tập tin app/views/users/_flag_form.html.erb của tôi, tôi có:

<%= t('.test_key2') %> 

Nếu trong tập tin config/locales/views/users/en.yml tôi (lưu ý: Tôi đang tổ chức các tệp như được nêu trong official RoR guide) Tôi sử dụng

en: 
    users: 
    flag: 
     test_key1: Test 1 text 
     test_key2: Test 2 text 

các Test 1 text được hiển thị trong "chính" mẫu (app/views/users/flag.html.erb) nhưng Test 2 text không dành cho những mẫu phần (app/views/users/_flag_form.html.erb). Làm cách nào tôi có thể giải quyết vấn đề này để hiển thị đúng số Test 2 text?

+0

này sẽ không giải quyết được vấn đề của bạn (và tôi) nhưng có thể giúp để hiểu nơi đường ray tìm kiếm bản dịch https://github.com/256dpi/rails-i18n-debug – masciugo

Trả lời

10

Một cách là sử dụng phạm vi, thay vì "tải chậm" bằng cách sử dụng điểm dừng đầy đủ. Something như thế này nên làm việc:

I18n.t :test_key2, :scope => 'users.flag' 

hoặc sử dụng:

I18n.t "users.flag.test_key2" 

Cuối cùng, bạn thậm chí có thể vượt qua nó để một phần như trong

<%= render :partial => "https://stackoverflow.com/users/flag_form", :locals => { :test_key => t('.test_key1') } %> 

Bạn cũng nên kiểm tra các phần phụ lục trên trang web này vì nó có thể liệt kê thứ gì đó mà tôi bị thiếu: http://www.unixgods.org/~tilo/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

+0

liên kết của bạn đã chết: ( –

0

Tôi đã viết điều này. Bạn nghĩ gì về nó?

def translate_for_partials key, *args 
    I18n.t("#{params[:controller].gsub('/', '.')}.#{params[:action]}.#{key}", *args) 
end 

Điều đó có tệ không?

+0

Theo quan điểm, bạn có thể làm một phiên bản sạch hơn: I18n.t ("# {controller_name}. # {controller.action_name}. # {key}") – Magnuss

+0

Magnuss, đây là các tham số của bộ điều khiển lồng nhau ': controller. .ubub ('/', '.') ' –

15

config/miền địa phương/en.yml

en: 
    users: 
    flag: 
     test_key1: Test 1 text 
    flag_form: 
     test_key2: Test 2 text 

app/views/users/flag.html.erb

<%= t('.test_key1') %> 
<%= render :partial => "https://stackoverflow.com/users/flag_form" %> 

app/views/users/_flag_form.html .erb

<%= t('.test_key2') %> 

NB:

  1. Rails đường dẫn đến quan điểm phải phù hợp với con đường YAML vào biểu tượng. Bạn cần tạo một mục nhập tại tệp YAML khớp với tên của khung nhìn. Bỏ qua dấu gạch dưới sau vì nó là một phần.
  2. đọc về nhiều lazy lookups
+2

TL; DR Giữ dấu gạch dưới trong tên tập tin _partial của bạn, xây dựng cây YAML của bạn mà không có dấu gạch dưới. vi: user: partial: – givanse

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