【问题标题】:MultiLingual In Single Page - Ruby on Rails单页多语言 - Ruby on Rails
【发布时间】:2018-06-28 04:52:24
【问题描述】:

是否可以在 Rails 5 中使用 I18n 加载单个页面时使用多种语言。例如:我有一个问答页面,问题可以用“英语”显示,下面是另一种区域语言作为翻译供用户理解。表示同时显示两种语言。它可以实现吗?有什么方法可以做同样的事情。

谢谢。

【问题讨论】:

    标签: ruby-on-rails internationalization multilingual rails-i18n ruby-on-rails-5.2


    【解决方案1】:

    rails-i18n 提供了一个方法with-locale 来覆盖特定代码块的全局设置区域设置。例如如果您已将全局 I18n.locale 设置为,对特定请求说“日语”:

    # application_controller.rb
    I18n.locale = :ja
    

    但您想在视图中显示某些内容,使用不同的语言环境,如您所说的“英语”,您可以按以下方式进行:

    <!-- my_view.html.erb -->
    
    <% I18n.with_locale(:en) do %>
      <%= t_question %>      <!-- assuming `t_question` is a method, which returns the localised text (in this case, in english) for question in your application -->
    <% end %>
    
    <%= t_answer %>          <!-- this should render the answer in japanese -->
    

    【讨论】:

      【解决方案2】:

      我认为在类似的页面中这是不可能的,但对于不同的页面是可能的。

      设置语言的有效方法是将其作为前缀添加到 URL。这使搜索引擎能够更好地管理不同的语言版本。假设我们希望 localhost:3000/de 显示我们主页的德语版本, localhost:3000/en 显示英文版本。我们需要在config/routes.rb中写

      myapp::Application.routes.draw do
       scope "(:locale)", :locale => /en|de/ do
        root :to => 'page#index'
        get "page/index"
       end
      end
      

      接下来,我们需要在 app/controllers/application_controller.rb 中设置一个 before_filter。该过滤器将路由设置的参数locale设置为I18n.locale:

      class ApplicationController < ActionController::Base
      protect_from_forgery
      before_filter :set_locale
      
      private
       def set_locale
        I18n.locale = params[:locale] || I18n.default_locale
       end
      end
      

      【讨论】:

      • 我想,她已经在做这些事情了,即在一个语言环境中显示整个页面。
      • @JagdeepSingh,是的,你是对的。看到你的回复。它有帮助
      • @Radhika 你检查我的答案了吗?它正是这样做的。您可以使用我的回答中提到的with_locale 以不同的语言显示模板的各个部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 2011-03-01
      相关资源
      最近更新 更多