我正在为列出产品评论摘要的商店构建视图。我正在按分数对评论进行分组,我希望在每组顶部有一个字符串,形式为“10 条 5 星评论”。我知道,如果我只想将“评论”复数化,我可以这样做en.rb:
en: {
reviews_header: {
one: "1 review",
other: "%{count} reviews"
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一种reviews_header哈希格式可以让我指定“评论”和“明星”的计数,以便在必要时将它们都复数化?在伪代码中,我想象的是:
en: {
reviews_header: {
counts: [ :review_count, :star_count ],
review_count: {
one: {
star_count: {
one: "1 review with 1 star",
other: "1 review with %{star_count} stars"
}
},
other: {
star_count: {
one: "%{review_count} reviews with 1 star",
other: "%{review_count} reviews with %{star_count} stars"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我会用t(:reviews_header, review_count: 10, star_count: 5).
我现在正在做的是将字符串更改为“10 条 …
我想为提交按钮编写一个帮助程序,它会考虑操作(创建或更新)以获得正确的翻译.他们来了 :
fr:
submit:
create:
user: "Créer mon compte"
product: "Déposer l'objet"
session: "Se connecter"
update:
user: "Mettre à jour mon compte"
product: "Modifier l'objet"
Run Code Online (Sandbox Code Playgroud)
我试过这个:
def submit_button(model)
if model == nil
I18n.t('submit.create.%{model}')
else
I18n.t('submit.update.%{model}')
end
end
Run Code Online (Sandbox Code Playgroud)
但它没有用,rspec发给我的是:
Capybara::ElementNotFound: Unable to find button ...
Run Code Online (Sandbox Code Playgroud)
我知道这是一个语法问题,但我找不到如何使这项工作......
我有一个text_field :birthday_line在我的用户表单中,我需要解析用户的birthday属性.所以我在User课堂上做这样的事.
attr_accessor :birthday_line
before_save :set_birthday
def set_birthday
self.birthday = Date.strptime(birthday_line, I18n.translate("date.formats.default")
end
Run Code Online (Sandbox Code Playgroud)
但问题是,由于某种原因,它给了我一个错误,说Invalid date我何时尝试传入一个27 ?????? 1987 ?.应该被解析的字符串1987-01-27.我的格式和月份名称config/locales/ru.yml
ru:
date:
formats:
default: "%d %B %Y ?."
month_names: [~, ??????, ???????, ?????, ??????, ???, ????, ????, ???????, ????????, ???????, ??????, ???????]
Run Code Online (Sandbox Code Playgroud)
似乎是正确的.
Date.parse 也没有帮助,它只是解析日期编号(27)并将月份和年份放到今天的日期(因此它将是2013年9月27日而不是1987年1月27日).
我正在尝试开发双语应用程序.
但是,我发现默认的i18n gem不会持久化语言环境.
我有这个索引页面并提供了一个更改默认语言的链接.
<% if I18n.locale == I18n.default_locale %>
<%= link_to "English", :locale=>'en'%>
<% else %>
<%= link_to "Français", :locale=>'fr'%>
<%end%>
Run Code Online (Sandbox Code Playgroud)
问题是当我登录到另一个页面时,语言环境会回退到默认语言.
所以,我只是想知道如何保持用户语言选择并持续使用该语言环境直到用户注销.
提前致谢.
我想要I18n.translate()或I18n.t()使用特定的语言环境,但不是I18n.locale.我不想I18n.t(:my_key, locale: :my_locale)每次都使用,所以如果我可以覆盖函数本身就会很棒.
我试着把它放在一个新的帮手中:
# my_helper.rb
module MyHelper
def translate(key, options = {})
options[:locale] = MY_LOCALE
I18n.translate key, options
end
alias :t :translate
end
Run Code Online (Sandbox Code Playgroud)
这适用于"硬键" t('word'),但没有找到"动态键"的正确路径t('.title'),这应该使用我的部分路径,即de.users.form.title.
谢谢你的帮助!
我想翻译我的应用程序的视图,因为我正在使用partial来为每个视图呈现标题,如下所示:
<%=t "#{controller.controller_name.capitalize} #{controller.action_name}" %>
......我一直在努力翻译它们.如何翻译controller.action_name自定义翻译文件?
我试图访问这样的动作名称:
parkings:
index: "Parkings index"
new: "New %{model}"
Run Code Online (Sandbox Code Playgroud)
它的许多不同的变化,但每一个都失败了.你可以帮帮我吗?
这是我的控制器的一个片段:
def new
@parking = Parking.new
end
def create
@parking = Parking.new(parking_params)
if @parking.save
redirect_to @parking, notice: t(:parking_created)
else
render action: 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢.
我想用 Faker 为数据库做种,问题是我在执行以下操作时遇到错误:
rake db:reset
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
rake aborted!
I18n::MissingTranslationData: translation missing: en.faker.name.name
/Library/Ruby/Gems/2.0.0/gems/i18n-0.7.0/lib/i18n.rb:311:in `handle_exception'
/Library/Ruby/Gems/2.0.0/gems/i18n-0.7.0/lib/i18n.rb:161:in `translate'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker.rb:128:in `rescue in translate'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker.rb:120:in `translate'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker.rb:86:in `fetch'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker.rb:99:in `parse'
/Library/Ruby/Gems/2.0.0/gems/faker-1.4.3/lib/faker/name.rb:8:in `name'
/Users/hbendev/code/wikitec/db/seeds.rb:6:in `block in <top (required)>'
/Users/hbendev/code/wikitec/db/seeds.rb:4:in `times'
/Users/hbendev/code/wikitec/db/seeds.rb:4:in `<top (required)>'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/Library/Ruby/Gems/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:547:in `load_seed'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.0/lib/active_record/tasks/database_tasks.rb:250:in `load_seed'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:180:in `block (2 levels) in <top (required)>'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:139:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:setup => db:seed
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会出现这个错误,因为我之前对 Faker 没有任何问题,我只是想重置数据库以更新种子。
我谷歌它,但我找不到任何相关的解决问题的方法。
我尝试添加:
I18n.reload!
Run Code Online (Sandbox Code Playgroud)
之后require …
例如 :
en:
foobar-does-not-work: 'This is my value'
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
t(foobar-does-not-work) # => returns nil
Run Code Online (Sandbox Code Playgroud)
这不会在Ruby的yml中解析.有没有办法使它工作?我的密钥基于URL,其中包含破折号(-).
所以我知道如果在阅读yaml文件时"翻译缺失:",如何返回默认值.
some = I18n.t("something.something_else", default: "value")
Run Code Online (Sandbox Code Playgroud)
但是,如果我希望默认值为nil,我该如何以Ruby方式执行此操作?我知道我可以正则表达式匹配变量中的"翻译缺失:",如果匹配,我会将它分配给nil.但我想做的就是拥有
some = I18n.t("something.something_else", default: nil)
Run Code Online (Sandbox Code Playgroud)
但它只是让我失去了翻译.有谁知道一个好方法?
我们正在引入 Vue.js 来管理前端。同时,我们正在考虑采用其他方式来管理整个应用程序堆栈中的 I18n。
最初计划的解决方案是使用 gettext 实现,如fast_gettext。但是由于 Vue.js 的到来,一个额外的限制是能够为传统的 Rails 视图和 Vue.js 呈现的元素使用相同的语言环境存储库。
一种可能的有效解决方案是有一种方法来执行类似于 erb 文件可能执行的操作的 rails 代码。
有关信息,Vue.js 是通过 webpacker 安装的,因为我们发现的 gems 似乎已经过时。