Rails 4 在管理员端管理基于文件的翻译

Rails 4 Manage File based Translations at Admin End

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

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

我以前从未实现过翻译。

默认情况下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