我想知道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 。我们如何在其中包含中文翻译代码?
谢谢 :)-
我有一个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在父应用程序的翻译文件中也尝试了上述三种格式,没有运气.
为了正确翻译这些模型名称/属性,我缺少什么?
我有一个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)
我想念什么?
谢谢。
山姆
在应用程序中,需要以用户的语言生成字符串,然后将其传递到另一个服务器/应用程序。因此该模型可以识别
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)
我意识到该模型不知道去查找区域设置文件。怎样才能调用它呢?
我有一个助手page_title_default在ApplicationHelper:
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方法呢?
我正在使用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 指南(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 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)
我遇到的问题是,我无法让它使用国际化。
我有一个配置文件:
# 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 键?
我正在开发 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