【问题标题】:How to localize a Rails plugin?如何本地化 Rails 插件?
【发布时间】:2009-03-07 18:20:37
【问题描述】:

我想将 OpenIdAuthentication 插件翻译成另一种语言,但我不想直接更改插件。

这是我要翻译的消息的基本结构:

模块 OpenIdAuthentication

  班级成绩
    ERROR_MESSAGES = {
      :missing => "抱歉,找不到 OpenID 服务器",
      :invalid => "抱歉,这似乎不是一个有效的 OpenID",
      :canceled => "OpenID 验证被取消",
      :failed => "OpenID 验证失败",
      :setup_needed => "OpenID 验证需要设置"
    }
  结尾

结束

有没有可能在不直接更改插件的情况下翻译它们?

谢谢!

【问题讨论】:

    标签: ruby-on-rails plugins internationalization


    【解决方案1】:

    您可以在插件加载后随时重新定义OpenIdAuthentication::Result::ERROR_MESSAGES 来覆盖它。

    您可以通过不同的插件(在OpenIdAuthentication 之后加载)或从插件加载后所需的文件(例如environment.rb 中的require lib/open_id_authentication_suppl.rb)执行此操作:

    代码本质上是一个复制粘贴作业,如下所示:

    module OpenIdAuthentication
    
      class Result
        ERROR_MESSAGES = {
          :missing      => "<message in foreign language>",
          :invalid      => "<message in foreign language>",
          :canceled     => "<message in foreign language>",
          :failed       => "<message in foreign language>",
          :setup_needed => "<message in foreign language>"
        } 
      end
    

    要将其与I18N-rails(内置于 Rails 2.2.2,在以前版本中作为 gem/插件提供)集成,请执行以下操作:

      class I18NResultMessages
        def [](key)
          I18n.t(key, :scope => 'openidauthentication.errors.messages')
        end
      end
    
      class Result
        ERROR_MESSAGES = I18NResultMessages.new
      end
    

    然后在 Rails 启动时为 openidauthentication.errors.messages 的各种语言环境定义并加载您的 I18n yml 文件,并且不要忘记在每次开始处理基于登录用户的语言环境的控制器操作时设置您的 I18n.locale .

    【讨论】:

    • 谢谢!这段代码确实有效!所以我认为没有办法直接在语言环境中使用 yml 文件,因为该插件还没有为 i18n 做好准备。我说的对吗?
    【解决方案2】:

    将该代码复制到/lib 中的文件中,然后在environment.rb 中使用它。真的就这么简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-11
      • 2018-11-10
      • 2016-09-25
      • 2011-07-21
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多