默认情况下,邀请邮件的主题是
mailer:
invitation_instructions:
subject: 'Invitation instructions'
Run Code Online (Sandbox Code Playgroud)
我想改成它
subject: '%{invited_by} has invited you!'
Run Code Online (Sandbox Code Playgroud)
但是这需要让i8n的translate方法可以访问invite_by变量.
如何在不更改默认行为的情况下访问/声明此变量?
ruby-on-rails actionmailer devise rails-i18n devise-invitable
我正在尝试更改我的rails(4.1.4)应用程序正在使用的语言环境,但每次我尝试使用如下命令在控制台中更改它
I18n.locale = :es
I18n.default_locale = :de
Run Code Online (Sandbox Code Playgroud)
出现I18n :: InvalidLocale错误.对于我测试的每个区域设置都是这种情况,包括区域性的,例如:en-US.即使我为该语言环境设置了*.yml文件,也是如此.唯一有效的是:en,这是我的默认值.
我觉得这应该是非常基本的东西,因为我找到的所有资源似乎都跳过这个作为给定,但它不适合我,我无法找出在哪里寻找问题源.
localization ruby-on-rails internationalization rails-console rails-i18n
我正在使用i18n-active_record 0.1.0在Rails 4中开发一个应用程序来保存我的翻译而不是.yml文件.它工作正常.
然而,我正在努力的一件事是,每个翻译记录是每个语言环境的一个记录,即
#1. { locale: "en", key: "hello", value: "hello")
#2. { locale: "se", key: "hello", value: "hej")
Run Code Online (Sandbox Code Playgroud)
这使得更新它们是一项繁琐的工作.我希望将它作为一个,即:
{ key: "hello", value_en: "hello", value_se: "hej" }
Run Code Online (Sandbox Code Playgroud)
或类似的,以便以一种形式更新一个密钥的所有实例.我似乎找不到任何关于那个的东西,这让我很困惑.
有没有办法轻松做到这一点?任何类型的黑客也都可以.
我在我的Ubuntu主目录中,试图创建一个新的rails应用程序rails new,但我收到此错误:
i18n宝石不可用.请将其添加到您的Gemfile并运行bundle install
我运行的任何rails命令都会出错.我真的很困惑,因为我不在应用程序中.我就在我的主目录中.没有gemfile.我尝试将'i18n'安装到我的主目录中gem install 'i18n',并且它有效,但我仍然遇到了这个错误.
我之前在我的主目录中从未遇到过rails命令的任何问题.当我cd进入我的个人应用程序时,所有与rails相关的工作正常.这是怎么回事?
此外,我现在在所有现有的rails应用程序中遇到同样的错误.铁轨突然变得依赖于那颗宝石了吗?或者可以删除我的主目录中的gem以某种方式使其在我的应用程序中不可用?
我尝试gem cleanup rails并重新安装,但没有任何改变.结果如下:
$ gem cleanup rails
Cleaning up installed gems...
Attempting to uninstall rails-4.0.10
Successfully uninstalled rails-4.0.10
Attempting to uninstall rails-4.2.1
Successfully uninstalled rails-4.2.1
Attempting to uninstall rails-4.2.4
Successfully uninstalled rails-4.2.4
Attempting to uninstall rails-5.0.1
Successfully uninstalled rails-5.0.1
Attempting to uninstall rails-5.0.2
Successfully uninstalled rails-5.0.2
Attempting to uninstall rails-5.0.3
Successfully uninstalled rails-5.0.3
Attempting to uninstall rails-5.0.4
Successfully uninstalled rails-5.0.4
Clean …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序(my_test_app),内置了i18n支持.目前,有两种语言文件可用,FR&EN,如果我在它们之间来回切换,一切正常,因为我希望看到非引擎功能,如用户索引/显示/编辑/删除(ISED)选项.
在my_test_app中,我安装了一个Rails引擎(my_engine),它有一个控制器和模型集(engine_job).所以,一个可行的URL应该是
http://0.0.0.0:3000/fr/my_engine/engine_job
Run Code Online (Sandbox Code Playgroud)
然而,无论我选择何种语言,它总是出现在EN中.检查参数显示:
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
locale: fr
action: index
controller: my_engine/engine_job
Run Code Online (Sandbox Code Playgroud)
然而,所选择的翻译是EN.
my_test_app route.rb:
MyTestApp::Application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
mount MyEngine::Engine, at: "/my_engine"
end # scope locale
match '*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" and !req.path == "/#{I18n.default_locale}/"}
match '', to: redirect("/#{I18n.default_locale}/")
end
Run Code Online (Sandbox Code Playgroud)
my_engine route.rb:
MyEngine::Engine.routes.draw do
resources :my_jobs
end
Run Code Online (Sandbox Code Playgroud)
耙路线:
my_engine (/:locale)/my_engine MyEngine::Engine {:locale=>/en|fr/}
/*path(.:format) :controller#:action
/ :controller#:action
users GET (/:locale)/users(.:format) users#index {:locale=>/en|fr/}
POST (/:locale)/users(.:format) users#create {:locale=>/en|fr/}
new_user GET (/:locale)/users/new(.:format) users#new {:locale=>/en|fr/}
edit_user …Run Code Online (Sandbox Code Playgroud) 我希望Rails像表单标签一样自动翻译占位符文本.我怎样才能做到这一点?
表单标签会自动翻译,如下所示:
= f.text_field :first_name
Run Code Online (Sandbox Code Playgroud)
此帮助程序使用区域设置文件:
en:
active_model:
models:
user:
attributes:
first_name: Your name
Run Code Online (Sandbox Code Playgroud)
哪个输出这个HTML
<label for="first_name">Your name</label>
Run Code Online (Sandbox Code Playgroud)
如何才能使占位符翻译?我是否必须输入如下所示的完整范围:
= f.text_field :first_name,
placeholder: t('.first_name', scope: 'active_model.models.user.attributes.first_name')
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
我正在使用I18n-js gem来定位js文件.我已经在gem自述文件的帮助下安装了它并且它第一次工作.
问题是当我向我的translations.js文件中添加新的翻译时rake i18n:js:export,我的模板中没有显示rake任务翻译 - 仅限missing translation(开发和生产具有相同的情况),尽管translations.js内容包含所有新翻译.
的application.js
//= require i18n
//= require i18n/translations
Run Code Online (Sandbox Code Playgroud)
我错过了什么?如果您需要更多信息,请对其进行评论.谢谢
我的Rails应用程序是在rails 4.0.2上,我在使用locale变量和params[:locale]从官方rails 指南之后的url方案切换翻译时遇到问题.我有一个单页的网站我的网站.
我的国际化路线:
scope "(:locale)", locale: /en|de/ do
#my routes here
end
Run Code Online (Sandbox Code Playgroud)
我的应用控制器
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
#Rails.application.routes.default_url_options[:locale]= I18n.locale
end
# app/controllers/application_controller.rb
def default_url_options(options = {})
{ locale: I18n.locale }.merge options
end
Run Code Online (Sandbox Code Playgroud)
用于更改视图中区域设置变量的链接:
<%= link_to_unless I18n.locale == :en, "English", locale: :en %>
|
<%= link_to_unless I18n.locale == :de, "Deutsch", locale: :de %>
Run Code Online (Sandbox Code Playgroud)
会发生什么:locale变量设置正确但翻译没有切换.如果我删除其中一个翻译文件(目前用于英语和德语),语言将切换到剩余的翻译文件.当我放回另一个翻译文件并尝试通过更改语言环境变量切换到它时,它永远不会切换到另一种语言.
为什么我的代码没有改变翻译?
I18n.translate可以翻译error.messages,如下所示:
I18n.translate('error.messages.taken')
-> has already been taken
Run Code Online (Sandbox Code Playgroud)
但是有一些错误消息包含如下参数:
I18n.translate('error.messages.greater_than_or_equal_to')
-> must be greater than or equal to %{count}"
Run Code Online (Sandbox Code Playgroud)
是否可以在I18n.translate中传递参数'count'?
我正在为列出产品评论摘要的商店构建视图。我正在按分数对评论进行分组,我希望在每组顶部有一个字符串,形式为“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 条 …
rails-i18n ×10
ruby ×2
rubygems ×2
actionmailer ×1
devise ×1
javascript ×1
localization ×1
ubuntu ×1