2009-08-28 31 views
16

Tôi đã tìm kiếm giải pháp plugin/gem để mở rộng đường dẫn bản địa i18n để lưu bản dịch vào cơ sở dữ liệu của tôi. Có lẽ tôi đã sử dụng cụm từ tìm kiếm sai, nhưng tất cả những gì tôi tìm thấy là thông tin, thay đổi IS phụ trợ thực sự có thể và blog entry này mô tả cách viết chương trình phụ trợ của riêng tôi.Đường ray: lưu trữ bản dịch trong cơ sở dữ liệu

Thật khó để tưởng tượng, tất cả những ứng dụng đường ray đó đều có bản dịch được lưu trữ trong tệp yml hoặc mọi nhà phát triển đã viết các chương trình phụ trợ riêng!

Bạn có biết giải pháp làm việc cho việc này không? Lưu trữ các văn bản đa dòng trong yml thực sự khiến tôi thất vọng! ;)

Cảm ơn và chào đón,

Joe

Trả lời

19

i18n có hỗ trợ tích hợp để sử dụng cơ sở dữ liệu làm phụ trợ dịch.

Tạo một bảng sử dụng mã này vào cuộc di cư:

create_table :translations do |t| 
    t.string :locale 
    t.string :key 
    t.text :value 
    t.text :interpolations 
    t.boolean :is_proc, :default => false 
    end 

Sau đó, thêm một initializer trong config/initializers/i18n.rb với nội dung:

I18n.backend = I18n::Backend::ActiveRecord.new 

Và cuối cùng ... đặt bản dịch trong bảng. Một cái gì đó như:

locale key  value 
en  Cool  Cool 
es  Cool  Frio 
en  nav.Home home 
es  nav.Home casa 
... 

Tính i18n 0.5.Tôi tin rằng họ đã chuyển mã này ra thành viên ngọc riêng của nó ... Tôi quên viên đá quý đó được gọi là gì.

+0

Hướng dẫn Rails có một số nội dung về chủ đề này (http://guides.rubyonrails.org/i18n.html#using-different-backends). Cảm ơn bạn đã điền vào các khoảng trống @Jason! – captainpete

1
+1

Xin chào Aram, okay, toàn cầu hóa giúp dễ dàng dịch nội dung có liên quan đến mô hình, nhưng còn tất cả nội dung tĩnh như dấu ấn, nội dung e-mail, v.v ... thì sao? – xijo

+0

Tôi tưởng tượng bạn sẽ phải viết phụ trợ của riêng bạn sau đó. Chính xác những gì bạn đang cố gắng để làm? –

+0

Dự án hiện tại của tôi phải xử lý nhiều văn bản mô tả - nhưng vì nó sẽ trở nên năng động hơn trong tương lai nên chúng tôi quyết định sử dụng đường ray ngay từ đầu. Bây giờ các tệp yml của chúng tôi có hơn 1000 dòng! Có lẽ tôi sẽ tạo một mô hình và lưu trữ các cặp khóa-giá trị được tuần tự hóa trong đó. Không đẹp chút nào, nhưng thỏa hiệp .. – xijo

9

cuối cùng tôi đã tìm thấy những gì tôi đang tìm kiếm sự giúp đỡ của Sven Fuchs:

http://github.com/dylanz/i18n_backend_database/tree/master

Plugin này khá tuyệt vời bởi Dylan Stamat thực hiện chính xác những gì tên cho biết và bổ sung xử lý bộ nhớ đệm!

Sven cũng đề cập đến, đó là chi nhánh hiện tại của i18n/active_record cung cấp một backend ActiveRecord cũng như:

http://github.com/svenfuchs/i18n/blob/active_record/lib/i18n/backend/active_record.rb

Một số cuộc thảo luận về chủ đề này đang xảy ra trong goolge i18n nhóm người dùng :

http://groups.google.com/group/rails-i18n/browse_thread/thread/6b7ba3c401890a7e

Vấn đề được giải quyết, nhờ ông I18n Sven Fuchs! ;)

+0

Rất tuyệt! Tốt khi nghe bạn có một giải pháp tốt đẹp. Cảm ơn bạn đã chia sẻ. –

0

Chúng tôi đã có một kinh nghiệm tốt với fast_gettext

nó có một backend DB hậu thuẫn mà đi kèm với một bộ điều khiển để thực hiện bản dịch qua web. Bộ nhớ đệm được tích hợp sẵn, mặc dù chúng tôi phải mã hóa trước khi tải tất cả các bản dịch khi khởi động (nhanh hơn rất nhiều sau đó tải chúng theo từng bộ nhớ đệm).

+0

Bạn có thể chia sẻ tải trước trong wiki fast_gettext, để người khác có thể sử dụng lại nó không? – grosser

+0

Tôi cũng thích điều đó! – caesarsol

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