我刚刚更新到rails 4.0.2并且我收到此警告:
[已弃用] I18n.enforce_available_locales将来默认为true.如果您确实想跳过语言环境的验证,可以设置I18n.enforce_available_locales = false以避免此消息.
将其设置为false是否存在任何安全问题?
我希望能够在rails中翻译i18n中的复数字符串.一个字符串可以是:
You have 2 kids
Run Code Online (Sandbox Code Playgroud)
要么
You have 1 kid
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用复数辅助方法,但我希望将其嵌入到i18n翻译中,以便我在将来的任何时候都不必弄乱我的观点.我读到它:count在某种程度上用于复数的翻译,但我找不到任何关于它如何实现的真实资源.
请注意,我知道我可以在翻译字符串中传递变量.我也试过类似的东西:
<%= t 'misc.kids', :kids_num => pluralize(1, 'kid') %>
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但有一个相同想法的根本问题.我需要'kid'在pluralize helper中指定字符串.我不想这样做,因为它将导致将来查看问题.相反,我想保留翻译中的所有内容,而不是视图中的任何内容.
我怎样才能做到这一点 ?
ruby-on-rails internationalization pluralize plural rails-i18n
在rails 3应用程序上工作,我想在输出之前检查翻译是否存在,如果它不存在则回退到某些静态文本.我可以这样做:
if I18n.t("some_translation.key").to_s.index("translation missing")
Run Code Online (Sandbox Code Playgroud)
但我觉得应该有比这更好的方法.如果将来的rails将"缺少翻译"更改为"未找到翻译",该怎么办?或者,如果出于某种奇怪的原因,文本包含"翻译缺失".有任何想法吗?
我将默认语言环境设置为environment.rbas de(德语).
我还看到德语中的所有错误消息,因此服务器会选择语言环境.但是当我尝试用strftime以下内容打印日期时:
some_date.strftime('%B, %y')
Run Code Online (Sandbox Code Playgroud)
它以英语(January, 11)打印,而不是预期的德语(Januar, 11).
如何根据默认区域设置打印日期?
我猜测rails将所有解析后的翻译yml文件存储在一种数组/哈希中.有没有办法访问这个?
例如,如果我有一个文件:
en:
test_string: "testing this"
warning: "This is just an example
Run Code Online (Sandbox Code Playgroud)
我可以做一些像I18n.translations_store [:en] [:test_string]的事吗?我可以使用YAML :: load解析yml文件,但在我的情况下,我已经将子文件夹中的yml文件拆分为组织,我很确定rails已经解析了它们.
我的模型中包含的内容是:
def body_color_enum
[
['Aqua', '#009c9c'],
['Grey', '#6d6e71'],
['Yellow', '#ffe600'],
['White', 'white']
]
end
Run Code Online (Sandbox Code Playgroud)
我希望这些值来自翻译文件'en.yml'
en:
group:
hero:
hex1: '#6d6e71'
name1: 'Dark grey'
hex2: '#ccc'
name2: 'Light grey'
hex3: '#0099ce'
name3: 'Blue'
hex4: '#ffffff'
name4: 'White'
Run Code Online (Sandbox Code Playgroud)
我试过这个:
def body_color_enum
[
[t('group.hero.name1'), '#009c9c'],
['Grey', '#6d6e71'],
['Yellow', '#ffe600'],
['White', 'white']
]
end
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
undefined method `t' for #<Group:0x007fabad847ac8>
Run Code Online (Sandbox Code Playgroud)
所以我问的是如何从模型中访问我的本地文件,以便我可以在body_color_enum方法中设置我的值.
我有这个问题
activerecord:
notices:
messages:
success:
create: "Something was created"
models:
user:
success:
create: "Thanks for registration"
I18n.t("activerecord.notices.models.user.success.create")
# => "Thanks for registration"
I18n.t("activerecord.notices.models.book.success.create")
# => "translation missing: de, activerecord, notices, models, book, success, create"
Run Code Online (Sandbox Code Playgroud)
我不知道为什么书模型没有得到后备按摩.我已经定了config.i18n.fallbacks = true.我正在使用Rails 3
fallback ruby-on-rails internationalization ruby-on-rails-3 rails-i18n
这可能是I18n-ception,但我可以说我有一个en.yml文件如下
en:
my_var: Foo
my_message: "This is a message where I'd like to interpolate I18n's %{my_var}"
Run Code Online (Sandbox Code Playgroud)
有没有办法向I18n表明%{my_var}应该是my_var关键en.yml?
我知道我可以通过做类似的事情来实现它
I18n.t 'my_message', :my_var => I18n.t('my_var')
Run Code Online (Sandbox Code Playgroud)
但我希望I18n有办法自我引用键.
任何方式只能为某些文本强制翻译为特定语言.就像是:
t("my.text",:fr)
Run Code Online (Sandbox Code Playgroud)
原因是我希望用户能够更改其内容的语言而不是网站界面.谢谢!
在我的项目中,我在命名空间管理员中有控制器,我正在使用breadcrumbs_on_rails来构建breadcrums.我的控制器看起来像:模块管理员
class FaqsController < Admin::ApplicationController
include FaqsHelper
load_and_authorize_resource
add_breadcrumb t('faqs.faqs_list') , :faqs_path #this line makes the problem
def index
@faqs = @faqs
add_breadcrumb t('faqs.faqs_list')
end
def new
add_breadcrumb t('faqs.new')
end
#other code ommitted
end
end
Run Code Online (Sandbox Code Playgroud)
我可以在新的,编辑和其他控制器动作中使用t方法但是当这个't'不在控制器动作中时,我有以下错误:
undefined method `t' for Admin::FaqsController:Class
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
rails-i18n ×10
ruby-on-rails ×10
localization ×3
ruby ×3
deprecated ×1
fallback ×1
plural ×1
pluralize ×1
strftime ×1
translation ×1
yaml ×1