blob: e98732e086e53db5293bf93d3158b0e3d6f58180 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
##
# A message container for a locale.
#
# This object provides the following two features:
#
# * Loads translated messages from .po file.
# * Translates a message into the locale.
class RDoc::I18n::Locale
@@locales = {} # :nodoc:
class << self
##
# Returns the locale object for +locale_name+.
def [](locale_name)
@@locales[locale_name] ||= new(locale_name)
end
##
# Sets the locale object for +locale_name+.
#
# Normally, this method is not used. This method is useful for
# testing.
def []=(locale_name, locale)
@@locales[locale_name] = locale
end
end
##
# The name of the locale. It uses IETF language tag format
# +[language[_territory][.codeset][@modifier]]+.
#
# See also {BCP 47 - Tags for Identifying
# Languages}[http://tools.ietf.org/rfc/bcp/bcp47.txt].
attr_reader :name
##
# Creates a new locale object for +name+ locale. +name+ must
# follow IETF language tag format.
def initialize(name)
@name = name
@messages = {}
end
##
# Loads translation messages from +locale_directory+/+@name+/rdoc.po
# or +locale_directory+/+@name+.po. The former has high priority.
#
# This method requires gettext gem for parsing .po file. If you
# don't have gettext gem, this method doesn't load .po file. This
# method warns and returns +false+.
#
# Returns +true+ if succeeded, +false+ otherwise.
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
##
# Translates the +message+ into locale. If there is no tranlsation
# messages for +message+ in locale, +message+ itself is returned.
def translate(message)
@messages[message] || message
end
end
|