标签: rails-i18n

符合 I18n 标准的中文语言环境

我想知道Chinese language可用I18n标准语言环境中的标准代码。:en以英语为例。还告诉我如何yml为中文命名文件(英语为 en.yml)。

加入zh.yml/config/locales/并为中国指定代码:zh不工作。

rails 控制台中的 I18n.available_locales 仅提供以下几行。

irb(main):022:0> I18n.available_locales
=> [:ar, :en, :de]
Run Code Online (Sandbox Code Playgroud)

我在里面看不到 :zh 。我们如何在其中包含中文翻译代码?

谢谢 :)-

locale ruby-on-rails rails-i18n

3
推荐指数
1
解决办法
5490
查看次数

Rails引擎ActiveRecord模型I18n

我有一个Rails应用程序,它依赖于一个单独的引擎(存储在其中vendor/engine_name).该引擎有一个ActiveRecord对象Bar:

module Foo
  class Bar < ActiveRecord::Base
    # has an attribute bar_attr
  end
end
Run Code Online (Sandbox Code Playgroud)

在该引擎的config/locales/en.yml文件中,我尝试过:

en:
  activerecord:
    attributes:
      bar_attr: "TEST"
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

en:
  activerecord:
    attributes:
      bar:
        bar_attr: "TEST"
Run Code Online (Sandbox Code Playgroud)

和:

en:
  activerecord:
    attributes:
      foo:
        bar:
          bar_attr: "TEST"
Run Code Online (Sandbox Code Playgroud)

但无论如何,当我Foo::Bar.human_attribute_name("bar_attr")从父应用程序调用时,我得到"Bar attr"(例如默认的人类属性名称).请注意,Foo::Bar.model_name.human当我尝试使用以下翻译时会出现同样的问题:

en:
  activerecord:
    models:
      ...
Run Code Online (Sandbox Code Playgroud)

我不确定应用程序/引擎结构是否相关,因为我en.yml在父应用程序的翻译文件中也尝试了上述三种格式,没有运气.

为了正确翻译这些模型名称/属性,我缺少什么?

ruby-on-rails rails-i18n rails-activerecord

3
推荐指数
1
解决办法
1515
查看次数

Rails的语言环境回退不适用于生产环境

我有一个Rails 3.2应用程序。它有2个语言环境ko&en。ko是默认设置,但是如果不可用,我希望它回退到en。后备功能在开发环境中有效,而在生产环境中无效。

[config/application.rb]
    config.i18n.default_locale = :ko
    config.i18n.fallbacks = [:en]

[config/environments/production.rb]
  config.i18n.fallbacks = true


[config/locales/en.yml]
  ttt: TTT

[config/locales/ko.yml]
  (ttt is not defined)


**In development console:**

I18n.localt #=> :ko
I18n.t("ttt") #=> "TTT" (Works fine)


**In production console:**

I18n.locale #=> :ko
I18n.t("ttt") #=> "translation missing: ko.ttt" (Not working)
Run Code Online (Sandbox Code Playgroud)

我想念什么?

谢谢。

山姆

fallback locale ruby-on-rails rails-i18n

3
推荐指数
1
解决办法
1343
查看次数

Rails3 在模型文件中使用 i18n 字符串

在应用程序中,需要以用户的语言生成字符串,然后将其传递到另一个服务器/应用程序。因此该模型可以识别

  def user_language
    self.user.idioma.code.downcase
  end
Run Code Online (Sandbox Code Playgroud)

但基于该语言生成一个字符串并读取语言环境的 yaml 文件是一个挑战:

  def description
    user_language.products.name
  end
Run Code Online (Sandbox Code Playgroud)

我意识到该模型不知道去查找区域设置文件。怎样才能调用它呢?

ruby-on-rails-3.2 rails-i18n

3
推荐指数
1
解决办法
711
查看次数

RSpec 和 Rails:存根 @virtual_path 用于翻译助手以测试应用程序助手

我有一个助手page_title_defaultApplicationHelper

def page_title_default(options = {})
  t '.title', options
end
Run Code Online (Sandbox Code Playgroud)

现在我想像这样测试它:

describe '#page_title' do
  subject { page_title }

  it { ... }
end
Run Code Online (Sandbox Code Playgroud)

结尾

这会导致以下错误:

Cannot use t(".title") shortcut because path is not available
Run Code Online (Sandbox Code Playgroud)

根据这篇文章,应该可以@virtual_path像这样存根变量:

helper.instance_variable_set(:@virtual_path, "admin.path.form")
Run Code Online (Sandbox Code Playgroud)

但这似乎没有帮助:虽然我能够存根它然后helper.t '.something'在测试中直接调用类似的东西,但它不适用于page_title_default方法中使用的翻译助手(仍然@virtual_path设置为nil)。所以它似乎不是翻译助手的同一个实例。但是我怎样才能找到page_title_default方法呢?

ruby rspec ruby-on-rails rails-i18n

3
推荐指数
1
解决办法
688
查看次数

Rails I18n - 格式的字符串

我正在使用HTML模板,允许使用以下格式的突出显示(粗体)文本:

<h3><span class="semi-bold">Visit</span> details</h3>
Run Code Online (Sandbox Code Playgroud)

这将呈现为:

访问细节

我想在标题中添加I18n图层,但我发现在不同语言中,文本突出显示顺序可能会有所不同:

(en)访问细节

(es)Detalles de visita

我觉得把HTML放在语言文件中的想法令人恶心(我想在不同的上下文中使用字符串):

en:
  visit_details: '<span class="semi-bold">Visit</span> details'
es:
  visit_details: 'Detalles de <span class="semi-bold">visita</span>'
Run Code Online (Sandbox Code Playgroud)

Rails是否提供了更好的方法来处理这种格式化的i18n文本?

ruby-on-rails rails-i18n ruby-on-rails-4

3
推荐指数
1
解决办法
1457
查看次数

i18n HTML 转义不起作用

根据 Ruby on Rails 指南(http://guides.rubyonrails.org/i18n.html#using-safe-html-translations),我需要做的就是在不调用html_safe它们的情况下呈现我的翻译,就是让键名以_html. 这是我尝试过的:

en:
  breadcrumbs:
    root_html: "<i class='material-icons'>home</i>"
Run Code Online (Sandbox Code Playgroud)

像这样调用它:

I18n.t('breadcrumbs.root_html')
Run Code Online (Sandbox Code Playgroud)

导致输出是在我的翻译中定义的这个字符串,而不是呈现的 HTML。我究竟做错了什么?

使用 Ruby on Rails 4.2.1。提前致谢!

rails-i18n ruby-on-rails-4

3
推荐指数
1
解决办法
2430
查看次数

Rails:表单对象在 activemodel 上找不到 I18n(命名空间问题)

我有一个表单对象(rails 3),我正在尝试使用config/locales/en.yml错误消息。

我的表单对象如下所示:

class Users::PasswordAndLoginUpdatingForm
  include Virtus.model

  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Validations

  attribute :requested_email_address, String
  validates :requested_email_address, allow_blank: true, format: { with: User::VALID_EMAIL_REGEX }
Run Code Online (Sandbox Code Playgroud)

在我的形式中我有通常的

form_for @form_object ... do |f|
Run Code Online (Sandbox Code Playgroud)

如果我pry进去并找出f.object_name我会得到什么users_password_and_login_updating_form

最后,我的config/locales/en.yml样子是这样的:

en:
  activemodel:
    errors:
      models:
        users_password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "bar"
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,我无法让它使用国际化。

forms ruby-on-rails rails-i18n

3
推荐指数
1
解决办法
1313
查看次数

Rails 5:如何从另一个 yaml 配置文件引用 I18n 翻译?

我有一个配置文件:

# config/meta.yml
base_meta:
  title: 'Top 10 Cats'
Run Code Online (Sandbox Code Playgroud)

它有一个相应的初始化器:

# config/meta.yml
base_meta:
  title: 'Top 10 Cats'
Run Code Online (Sandbox Code Playgroud)

我可以像这样访问标题:

# config/initializers/meta.rb
META = YAML.load_file("#{Rails.root.to_s}/config/meta.yml")
Run Code Online (Sandbox Code Playgroud)

但是,我想国际化我的元数据。我相信这应该由现有的locales/yaml 文件来处理。

如何引用现有的翻译?

# config/locales/en.yml
en:
  title: 'Top 10 Cats'
Run Code Online (Sandbox Code Playgroud)

我尝试过使用 erb,但它不起作用:

# config/meta.yml
base_meta:
  title: t(:title)
Run Code Online (Sandbox Code Playgroud)

将文件重命名为config/meta.yml.erb也没有效果。

有没有办法从我的配置文件中引用 I18n 键?

ruby ruby-on-rails rails-i18n ruby-on-rails-5

3
推荐指数
1
解决办法
2109
查看次数

如何使用 i18n 本地化 Stimulus JS 值?

我正在开发 Rails 6 应用程序,我试图将所有显示的字符串存储在语言环境文件中。我有一个名为的刺激控制器countdown_controller.js

import { Controller } from "@hotwired/stimulus";

export default class extends Controller {

  static values = {
    message: { type: String, default: "Deal closed!" }
  }
}
Run Code Online (Sandbox Code Playgroud)

en.yml:

en:
 deals:
   status:
     closed: "Deal closed!"
Run Code Online (Sandbox Code Playgroud)

我想用作inI18n.t("deals.status.closed")的值而不是直接写入字符串。我不知道该怎么做。messageValuecountdown_controller.js

localization ruby-on-rails rails-i18n stimulusjs

3
推荐指数
1
解决办法
792
查看次数