Rails 4在Admin End管理基于文件的翻译

时间:2015-09-16 06:06:33

标签: ruby-on-rails-4 rubygems translation multilingual rails-i18n

我正在使用rails网站,我需要将其设置为多语言。我已经为翻译所需的语言创建了yml文件。

我想要的是通过管理面板中的一个部分提供管理员对文件的访问权限来编辑它们而不是浏览文件。是否有任何宝石用于管理通过管理员端的翻译。

我之前从未实施翻译。

1 个答案:

答案 0 :(得分:1)

默认情况下,Rails使用YAML文件存储国际化信息。但我们不限于使用YAML(它只能读取翻译但不能动态存储它们)。我们可以使用任何数据库作为后端。

首先,您可以使用此gem:https://github.com/svenfuchs/i18n-active_record

您可以更改默认后端:

I18n.backend = Globalize::Backend::Static.new

您还可以使用Chan后端将多个后端链接在一起。

# config/initializers/locale.rb
I18n.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18n.backend)

但是,由于每个请求页面都经常访问翻译,因此ActiveRecord不是最好的方法。出于这些原因,键值存储是最佳选择。

您可以使用Redis数据库:

首先安装Redis

$ brew install redis

安装redis gem:

# Gemfile
source 'http://rubygems.org'

# ...    

gem 'redis'

现在你可以改变后端:

# config/initializers/locale.rb
I18n.backend = I18n::Backend::KeyValue.new(Redis.new)

添加翻译的代码:

# /app/views/admin/translations/index.html.erb

<%= form_tag admin_translations_path do %>
    <p>
        <%= label_tag :locale %><br>
        <%= text_field_tag :locale %>
    </p>

    <p>
        <%= label_tag :key %><br>
        <%= text_field_tag :key %>
    </p>

    <p>
        <%= label_tag :value %><br>
        <%= text_field_tag :value %>
    </p>
    <p><%= submit_tag "Submit" %></p>
<% end %>

此表单将POST到admin / TranslationsController的创建操作:

 # /app/controllers/admin/translations_controller.rb
 module Admin
    class TranslationsController < ApplicationController
         # ....

         def create
             I18n.backend.store_translations(params[:locale]), {params[:key] => params[:value]}, escape: false)
             redirect_to admin_translations_path, notice: "Translation Added"
         end
     end
end

您也可以使用redis-i18n gem执行相同操作:https://github.com/redis-store/redis-i18n