【问题标题】:l10n support in rubyruby 中的 l10n 支持
【发布时间】:2014-07-01 09:16:41
【问题描述】:

我能够使用 python locale module 和 posix 本地化数据库解析本地化日期:

import locale, datetime

locale.setlocale(locale.LC_TIME, 'tr_TR.UTF-8')
print datetime.datetime.strptime("1 Haziran 2014", "%d %B %Y")

===

编辑

此示例加载语言环境和日期时间模块,解析本地化日期以创建 python 日期时间类的实例。我正在寻找可以使用 posix 数据库解析本地化日期的 Ruby 代码。

===

在 ruby​​ 中是否有任何等价物?如果有像python的语言环境模块或C++中的Boost.Locale这样的ruby库,你能给出示例代码吗?我尝试了gettext gemlocale gem(我设置了当前语言环境并尝试了Time.strptime,但失败了)。

我不希望进行自定义 gsub 或 i18n 配置文件解析。我要求使用 posix 数据库来解析日期的代码。

【问题讨论】:

  • 对于您的 python 代码,我得到locale.setlocale 行的locale.Error: unsupported locale setting(对于python 2.7.7 和3.4.1)。
  • 此外,据我所知,没有一个库可以在不解析 i18n 配置文件的情况下执行此操作。如果你想这样做,我可以给你很多不同的选择,但没有什么是标准的。虽然看起来很傻,但我可能会创建一个宝石来捆绑这些东西......
  • @MikeH-R 如果您希望我诊断您的错误,那是因为您尝试使用未安装的语言环境。对于 debian,您可以通过 dpkg-reconfigure locales 进行操作(首先安装 debconf)查看更多信息 here
  • 对,我没有意识到我需要加载语言环境,我只是想我必须安装它(在拱上)检查我在@987654332 列表中的语言环境之一@ 并且效果很好。
  • 有很多人可以帮助您使用 Ruby,但不了解 Phyton 及其语言环境模块。所以我建议更好地解释你需要的结果。

标签: ruby localization


【解决方案1】:

您的Gemfile 中需要 2 个自定义宝石

慢性:

$ git clone git://github.com/mojombo/chronic.git
$ cd chronic && gem build chronic.gemspec
$ gem install chronic-*.gem

慢性-l10n:

$ git clone git://github.com/luan/chronic-l10n.git
$ cd chronic-l10n && gem build chronic-l10n.gemspec
$ gem install chronic-l10n-*.gem

用法:

require 'chronic'
require 'chronic-l10n'

Time.now   #=> Sun Aug 27 23:18:25 PDT 2006

Chronic.locale = :'pt-BR'

Chronic.parse('amanhã')
  #=> Mon Aug 28 12:00:00 PDT 2006

Chronic.parse('segunda', :context => :past)
  #=> Mon Aug 21 12:00:00 PDT 2006

Chronic.parse('essa terça 5:00')
  #=> Tue Aug 29 17:00:00 PDT 2006

Chronic.parse('essa terça 5:00', :ambiguous_time_range => :none)
  #=> Tue Aug 29 05:00:00 PDT 2006

Chronic.parse('27 de maio', :now => Time.local(2000, 1, 1))
  #=> Sat May 27 12:00:00 PDT 2000

Chronic.parse('27 de maio', :guess => false)
  #=> Sun May 27 00:00:00 PDT 2007..Mon May 28 00:00:00 PDT 2007

Chronic.parse('6/4/2012', :endian_precedence => :little)
  #=> Fri Apr 06 00:00:00 PDT 2012

【讨论】:

  • 我见过这个。不幸的是 it loads locales from the library 它存储配置文件,而不是 posix 数据库。
  • @nurettin 从配置文件中加载它是否重要?据我们所知,它们可能是在 POSIX 数据库之后建模的。 (不是说他们是,只是他们可能是)。这确实解决了问题。
  • @MikeH-R 是的,这很重要。那时我必须管理我自己的 posix 数据库副本。那不是解决方案。这个问题是真实存在的,并且被社区中的人(例如您)所忽视。 (而且这个 gem 甚至不使用 po 或 mo 文件)所以不,它不能解决问题。
  • 好吧,看起来应该很简单,可以为 POSIX 数据编写解析器,请参阅ls /usr/share/i18n/locales 的文件。它似乎是一组带有编码它们的 unicode 符号的值。你也可以阅读here for more help
  • 同意。这正是您想要的。
【解决方案2】:

目前似乎没有 ruby​​ gem 或代码可以加载 posix 数据库并使用 strptime 样式标志解析日期。 (不接受复制粘贴答案)

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2012-04-03
    • 2010-11-07
    • 1970-01-01
    • 2012-03-30
    • 2010-11-08
    • 1970-01-01
    • 2010-11-27
    • 2013-05-26
    相关资源
    最近更新 更多