ruby-on-rails - 根据当前语言环境在 Rails 中显示小时格式(上午/下午或下午)

我刚刚意识到 Rails(目前为 3.1.3)中的 l(或本地化)方法似乎无法根据当前设置的语言环境管理时钟格式。我只是假设是这种情况,并没有专门对此进行测试...我刚刚验证了日期已根据语言环境重新格式化。

我的 Rails 控制台中的以下所有内容均采用 24 小时制。两种语言环境之间唯一明显的区别是月份名称的大写。

I18n.l Time.now, :format => :short,  :locale => :"en"
I18n.l Time.now + 12.hours, :format => :short,  :locale => :"en"
I18n.l Time.now, :format => :short,  :locale => :"sv-SE"
I18n.l Time.now + 12.hours, :format => :short,  :locale => :"sv-SE"

现在,这是为什么呢? 这不是本地化时间的一部分吗?

我发现 AM/PM 的唯一手动干预是为我可以“手动”要求 12 小时制的表单生成选择。一个奇怪的选择,因为在我看来,这就像我想要依赖语言环境的那种东西。

看看 Mac OS,我确实可以分别为格式首选项选择语言和区域设置,但这就是我们使用 en-US、en-GB、sv-SE 命名的原因,对吗?表示语言-国家。我可以通过适合瑞典的格式将 en-SE 文件添加到我的应用程序,其中包含英语翻译。

我假设并非所有美国开发人员都会进入并编辑英语的默认语言环境文件(en-US 看起来与 en btw 相同)以获得适合美国用户的 12 小时制。所以,请随时向我展示我有多愚蠢。我完全希望这个问题能够解决一些非常非常基本的问题。

简而言之。我错了什么?我如何“修复”我的时间戳? :)

最佳答案

如果你直接用%I.%m %p指定你可以得到一个12小时制的时钟:%p表示指示器(“AM”或“PM”),%I表示小时12 小时制 (01..12) 的一天

>> I18n.l Time.now, :format => "%I.%m %p",  :locale => :"en"
=> "01.12 pm"
>> I18n.l Time.now + 12.hours, :format => "%I.%m %p",  :locale => :"en"
=> "01.12 am"

这适用于 Rails 3.1

https://stackoverflow.com/questions/8532121/

相关文章:

visual-c++ - 为什么没有定义 PCTSTR 但定义了 LPCTSTR?

php - php preg匹配中的 "*"和 "?"有什么区别?

c# - 如何判断对象初始化程序何时完成

sql - 如何从 SQL Server 获取数据库列表?

logging - 如何在 Glassfish 中设置日志记录级别?

bash - 在 bash 中,如何在键入命令行时扩展 !$?

vim - 在vim中,如何查看我当前所在的#ifdef宏?

django - 在管理员中对 list_editable 字段进行自定义验证

visual-c++ - 错误 C2664 : 'sprintf' : cannot convert

objective-c - Xcode - 将 CGRect 转换为 ID?