Tag: 国际化

如何翻译活动记录模型validation

当我提交一个包含错误的表单时,它会返回一条错误消息。 如何使用i18n翻译这些错误消息? 我已经在我的视图中翻译了所有其他文本,所以我知道l18n在Rails中是如何工作的。 我现在得到这个: 2 errors prohibited this user from being saved: Email translation missing: nl.activerecord.errors.models.user.attributes.email.blank Email translation missing: nl.activerecord.errors.models.user.attributes.email.blank 我想翻译标题和错误。

为什么Rails中的语言环境设置充当全局(使用Thin时)?

我刚刚意识到推荐的Rails方法可以在控制器中设置区域设置 before_filter :set_locale def set_locale I18n.locale = params[:locale] || I18n.default_locale end 全局设置区域设置。 上面的代码有效,但我想知道如果你必须明确键入它, default_locale真的是默认的吗? 我期望的是每个请求都有一个区域设置(就像我们有每个请求的会话一样)并做类似的事情: def set_locale locale = params[:locale] if params[:locale] end 并且默认情况下使用I18n.default_locale 。 这将理想地匹配路径中的可选区域设置: # config/routes.rb scope “(:locale)”, :locale => /en|nl/ do resources :books end 目前,如果出于某种原因我在某些操作中跳过了区域设置,它会使用上一个请求中设置的区域设置,该区域设置可能来自其他用户! 并且不存在潜在的竞争条件,因为一个请求可以更改全局I18n.locale而另一个请求(在I18n.locale之前设置了另一个语言环境)处于渲染的中间? 更新:我现在发现的一些细节,来自I18n文件: 将当前语言环境设置为伪全局,即在Thread.current散列中def locale =(locale) 现在我想了解每个请求是否是一个单独的线程。 更新2:请参阅我的答案以获得解释。

在Rails中,如何在i18n语言环境文件中指定默认的flash消息

我知道i18n语言环境文件中有一些预设结构,以便Rails自动提取值。 例如,如果要为新记录设置默认提交按钮文本: # /config/locales/en.yml en: helpers: submit: create: “Create %{model}” user: create: “Sign Up” 使用此设置,在视图中将产生以下结果: # /app/views/things/new.html.erb #=> Renders a submit button reading “Create Thing” # /app/views/users/new.html.erb #=> Renders a submit button reading “Sign Up” 因此,Rails使用预设层次结构来获取不同模型的提交按钮文本。 (也就是说,你不必告诉它在使用f.submit时要获得哪些i18n文本。)我一直试图找到一种方法来使用flash通知和警报。 是否有类似的预设结构来指定默认的Flash消息? 我知道您可以指定自己的任意结构,如下所示: # /config/locales/en.yml en: controllers: user_accounts: create: flash: notice: “User account was successfully created.” # /app/controllers/users_controller.rb def […]

处理Ruby on Rails中的国际货币输入

我有一个处理货币输入的应用程序 。 但是,如果你在美国,你可以输入一个12,345.67的数字; 在法国,它可能是12.345,67 。 在Rails中,有一种简单的方法可以使货币条目适应区域设置吗? 请注意,我不是在寻找货币的显示(ala number_to_currency ),我正在寻找与某人输入货币字符串并将其转换为小数的人。

使用abbr_month_names(和similars)和I18n.l()

我正在转向轨道,有时候有点奇怪。 安装es.yml文件后,我试图输出我的数据库的DATETIME列。 如果我这样做: = l(a.created_at, :format => :short) 没关系。 它以西class牙语格式打印出一个漂亮的日期。 但我对以这种方式使用abbr_month_names感到困惑。 我已经尝试了很多不同的方式 – 相信我,我在这个问题上大约需要四个小时 – 但我还没有找到一种方法来输出短篇小说中的月份名称“OCT。 我看了很多关于i18n和日期格式的网站,但文章总是以:format =>:short示例结束,并不关心其他显示日期的方法(好吧,有人还解释了如何使用:long格式…)

如何避免Globalize3将属性的回退转换返回到特定上下文?

我正在使用Globalize3和easy_globalize_accesors进行网站的国际化/本地化工作,现在我正在调整表单以管理具有可能翻译的字段。 假设我有一个名为Role的类: class Role translates :name, :fallbacks_for_empty_translations => true # rest of class definition 我这样做是因为我想显示默认翻译,如果没有翻译或在当前语言环境中为空,这可以按预期工作。 但是,在我的forms中我想要相反:我希望每个输入引用一个不同于默认语言环境的不同语言环境来显示没有值,除非在role_translations表中有该属性的值。 以下是我创建输入的方法: … %> 目前,我发生的情况是,如果我创建了一个只有默认语言环境翻译的新角色,当我想编辑角色以将翻译添加到其他语言环境时,每个输入都会显示默认翻译的值。 提前致谢

Rails / I18n:默认范围

我正在使用Rails的默认I18n模块在视图中翻译我的字符串。 现在,当我在注册视图中时,我的所有字符串都从registration开始。 我总是要写 // or :registration) %> 定义该文件的默认范围(甚至可能在控制器中)会很好,所以对t的调用会自动添加定义的范围 // controller set_i18n_default_scope :registration // view // –> looks in “registration.heading” 这可能吗?

heroku I18n语言环境与default_locale不同,在本地工作正常

所以,一切都在本地工作正常,但在heroku它改为:en 在两种环境中启动控制台: Heroku的: heroku console –app myapp 本地: rails c 然后玩 Heroku: > I18n.l Time.now => “Tue, 01 Mar 2011 06:43:58 -0800” Local: > I18n.l Time.now => “tirsdag, 1. mars 2011, 15:43” Heroku: > I18n.default_locale => :nb Local: > I18n.default_locale => :nb #after a lot more trial and error, I find this: Heroku: > I18n.locale […]

排除错误消息中的属性名称

我有一个简单的国际化: attributes: user: login: Login errors: template: header: “Errors” body: “” models: user: attributes: login: taken: “The chosen {{attribute}} is already registered” 生成的错误消息如下: 登录所选登录已经注册 看来,像Rails一样,会自动使用属性名称预先设置错误消息。 这迫使我只用一种方式安排消息 – 将属性名称作为第一个单词。 我需要以下错误消息: 所选的登录已经注册 如何配置Rails不添加属性名称的错误消息?

在Ruby on Rails中本地化包含数字的文本字段

我目前正在开展一个项目,将我们的一个ruby-on-rails网络应用程序国际化,以便它可以在其他国家使用(法国将是这种情况下的第一个)。 我还没有解决的一个特殊问题是显示数字字段。 显示数字仅用于显示目的时,我执行以下操作: 2)%> 在英语中,这显示17.50 ,但在法语中它显示17,50 (用逗号代替小数点),这是预期的。 当我显示文本字段时,问题出现在编辑表单中 15 %> 当这在屏幕上呈现一个文本框时,文本框始终显示17.50,其中包含句号而不是法语的逗号。 我不确定这是否正确。 当我尝试执行以下操作时: 15, :value => number_with_precision(f.object.rate, :precision => 2) %> 这确实在法语文本框中显示了17,50 ,但是当我点击Update按钮保存表单时,Rubyvalidation开始并告诉我17,50不是一个数字(或者更确切地说是“n” ‘est pas un nombre’)。 我必须输入17.50才能保存。 说实话,我不完全确定在这里做正确的事情。 是否所有国家/地区都应在文本框中输入完全停止的数字,或者是否有办法让Ruby-on-Rails显示逗号并对其进行适当validation?