class RDoc::I18n::Locale

用于区域设置的消息容器。

此对象提供以下两个功能

* Loads translated messages from .po file.
* Translates a message into the locale.

属性

name[R]

区域设置的名称。它使用 IETF 语言标记格式 +[语言[.字符集]]+。

另请参阅 BCP 47 - 语言标识标签

公共类方法

[](locale_name) 点击切换源代码

返回 locale_name 的区域设置对象。

# File rdoc/i18n/locale.rb, line 19
def [](locale_name)
  @@locales[locale_name] ||= new(locale_name)
end
[]=(locale_name, locale) 点击切换源代码

设置 locale_name 的区域设置对象。

通常,不使用此方法。此方法对于测试很有用。

# File rdoc/i18n/locale.rb, line 29
def []=(locale_name, locale)
  @@locales[locale_name] = locale
end
new(name) 点击切换源代码

name 区域设置创建新的区域设置对象。 name 必须遵循 IETF 语言标记格式。

# File rdoc/i18n/locale.rb, line 48
def initialize(name)
  @name = name
  @messages = {}
end

公共实例方法

load(locale_directory) 点击切换源代码

locale_directory/+@name+/rdoc.po 或 locale_directory/+@name+.po 加载翻译消息。前者具有较高的优先级。

此方法需要 gettext gem 来解析 .po 文件。 如果您没有 gettext gem,则此方法不会加载 .po 文件。此方法会发出警告并返回 false

如果成功,则返回 true,否则返回 false

# File rdoc/i18n/locale.rb, line 63
def load(locale_directory)
  return false if @name.nil?

  po_file_candidates = [
    File.join(locale_directory, @name, 'rdoc.po'),
    File.join(locale_directory, "#{@name}.po"),
  ]
  po_file = po_file_candidates.find do |po_file_candidate|
    File.exist?(po_file_candidate)
  end
  return false unless po_file

  begin
    require 'gettext/po_parser'
    require 'gettext/mo'
  rescue LoadError
    warn('Need gettext gem for i18n feature:')
    warn('  gem install gettext')
    return false
  end

  po_parser = GetText::POParser.new
  messages = GetText::MO.new
  po_parser.report_warning = false
  po_parser.parse_file(po_file, messages)

  @messages.merge!(messages)

  true
end
translate(message) 点击切换源代码

message 翻译为区域设置。 如果在区域设置中没有 message 的翻译消息,则返回 message 本身。

# File rdoc/i18n/locale.rb, line 98
def translate(message)
  @messages[message] || message
end