ruby_l10n 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d1a530810a15383cb1e32c1293514dd15ee8260e
4
- data.tar.gz: 5fc7495993d88564f65e7b16bf12d6d062e3cf01
3
+ metadata.gz: c9a7f623be56a1bdf69e8e6bf25cb0291e371eac
4
+ data.tar.gz: 682713561f1cfe651730c2c57309de6b5a515e21
5
5
  SHA512:
6
- metadata.gz: 1859243be7a0d2a3968a4186d36d649f72307f40950ad08421f383dc75bcb22344d9d1bed851f433c486a96645c4f6f474fdcec895357fbb415e4099c423a8f9
7
- data.tar.gz: f805ec8ab4032d1af9bfdd899014d16fca3c01e8692455f5029abbc5c1edaf713f9abb5f14571f68ebc1bad211b8a09eab2b25f12f7a553d056e2a192465b853
6
+ metadata.gz: e7a348165a48ecd5debf06a5d4d71f612787f027e21529d929f8191e2931e7e946cfd290fd00cf1d3cb11442f33b7fd624f5d310d4ffd8f9c76a5972c1cf350e
7
+ data.tar.gz: 49ac9b001facdc4a60e434165245f8705e5103e9c3ef7c18739bfe29a41944669211d3db1e0b619b75dc68a778796ab066b58341fa0951311d38c9661385e33e
@@ -0,0 +1,23 @@
1
+ module DateTimeMaps
2
+
3
+ SHORT_SIZE = 3
4
+
5
+ DAY_NAME_MAP = {'Sun' => 0, 'Mon' => 1, 'Tue' => 2,
6
+ 'Wed' => 3, 'Thu' => 4, 'Fri' => 5, 'Sat' => 6}
7
+
8
+ MONTH_NAME_MAP = {'Jan' => 0, 'Feb' => 1, 'Mar' => 2, 'Apr' => 3,
9
+ 'May' => 4, 'Jun' => 5, 'Jul' => 6, 'Aug' => 7,
10
+ 'Sep' => 8, 'Oct' => 9, 'Nov' => 10, 'Dec' => 11}
11
+
12
+ SHORT_DAY_REGEX = /(Sun)|(Mon)|(Tue)|(Wed)|(Thu)|(Fri)|(Sat)/
13
+ LONG_DAY_REGEX = /(Sunday)|(Monday)|(Tuesday)|(Wednesday)|(Thursday)|(Friday)|(Saturday)/
14
+ DEFAULT_DAY_REGEX = LONG_DAY_REGEX
15
+
16
+ LONG_MONTH_REGEX = /(January)|(February)|(March)|(April)|(May)|(June)|(July)|(August)|(September)|(October)|(November)|(December)/
17
+ SHORT_MONTH_REGEX = /(Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec)/
18
+ DEFAULT_MONTH_REGEX = LONG_MONTH_REGEX
19
+
20
+ end
21
+
22
+
23
+
@@ -0,0 +1,215 @@
1
+ require 'action_view'
2
+ require 'config_service'
3
+ require 'logging'
4
+
5
+ require_relative './date_time_maps'
6
+
7
+ class LocaleHelper
8
+ include ActionView::Helpers::NumberHelper
9
+ include DateTimeMaps
10
+
11
+
12
+ def initialize(locale, options = {})
13
+ @locale = locale
14
+ config = ConfigService.load_config("locales/#{locale}.yml")
15
+ @format_data = config[locale]
16
+
17
+ if options['logger']
18
+ @logger = options['logger']
19
+ else
20
+ @logger = ::Logging::Logger.new("locale_helper_#{@locale}_#{self.object_id}")
21
+ current_env = ENV['RACK_ENV'] || ENV['RAILS_ENV'] || options['env'] || 'development'
22
+ #raise File.expand_path("../../log/#{current_env}.log")
23
+ @logger.add_appenders(Logging.appenders.stdout, Logging.appenders.file(File.expand_path("./log/#{current_env}.log")))
24
+ end
25
+
26
+ end
27
+
28
+ def logger
29
+ @logger
30
+ end
31
+
32
+ def default_date(date)
33
+ date_to_string(date, 'default')
34
+ end
35
+
36
+ def long_date(date)
37
+ date_to_string(date, 'long')
38
+ end
39
+
40
+ def short_date(date)
41
+ date_to_string(date, 'short')
42
+ end
43
+
44
+ def day_name(english_name)
45
+ get_day_name(english_name,'day_names')
46
+ end
47
+
48
+ def short_day_name(english_name)
49
+ get_day_name(english_name,'abbr_day_names')
50
+ end
51
+
52
+ def month_name(english_name)
53
+ get_month_name(english_name, 'month_names')
54
+ end
55
+
56
+ def short_month_name(english_name)
57
+ get_month_name(english_name, 'abbr_month_names')
58
+ end
59
+
60
+
61
+ def default_time(time)
62
+ time_to_string(time, 'default')
63
+ end
64
+
65
+ def history_time(time)
66
+ time.strftime(@format_data['time']['formats']['history'])
67
+ end
68
+
69
+ def long_time(time)
70
+ time_to_string(time,'long')
71
+ end
72
+
73
+ def short_time(time)
74
+ time_to_string(time, 'short')
75
+ end
76
+
77
+ def only_time(time)
78
+ time_to_string(time, 'time')
79
+ end
80
+
81
+ def lc_number(number)
82
+
83
+ return '' if (number.nil? || number == '')
84
+ number_with_delimiter(number, number_delimiter, number_separator)
85
+
86
+ end
87
+
88
+ def lc_number_with_precision(number, precision = number_precision)
89
+ st = localize_number(number)
90
+ if st =~ Regexp.compile(number_separator)
91
+ return ($` + $& + $'[0,precision])
92
+ end
93
+
94
+ return st
95
+ end
96
+
97
+ def lc_currency(number, unit = @format_data['number']['currency']['format']['unit'])
98
+ return number if number.to_s =~ /Infinity/ or number.to_s == 'NaN'
99
+ precision = @format_data['number']['currency']['format']['precision']
100
+ separator = number_separator
101
+ result = number_to_currency(number,:precision => precision,
102
+ :unit => unit,
103
+ :format => @format_data['number']['currency']['format']['format'],
104
+ :separator => separator,
105
+ :delimiter => number_delimiter
106
+ )
107
+ #logger.error("separator --> #{separator} --- result --> #{result}")
108
+ int, dec = result.split(separator)
109
+ if (!dec.nil? && dec.length < precision)
110
+ (precision - dec.length).times {
111
+ result += '0'
112
+ }
113
+ end
114
+ result
115
+ end
116
+
117
+ def lc_currency_number_only(number)
118
+ lc_currency(number,'')
119
+ end
120
+
121
+ def lc_label(label, *args)
122
+ st = @format_data['labels'][label]
123
+
124
+ if st.nil?
125
+ logger.error("\n***** Warning: label #{label} is not found in the locale #{@locale}.\n\n")
126
+ # st = LOCALES[US_LOCALE].lc_label(label, args)
127
+ return "#{lc_label('label_not_found')} #{label}"
128
+ end
129
+
130
+ if (!args.empty?)
131
+ st2 = st.dup
132
+ st.scan(/\{\{(\d)+\}\}/) { |word|
133
+ st2.sub!(Regexp.compile("\\{\\{#{word[0]}\\}\\}"), args[word[0].to_i].to_s)
134
+
135
+ }
136
+ return st2
137
+ end
138
+
139
+ return st
140
+ end
141
+
142
+
143
+ def number_precision
144
+ @format_data['number']['format']['precision']
145
+ end
146
+
147
+ def currency_precision
148
+ @format_data['number']['currency']['format']['precision']
149
+ end
150
+
151
+ def number_separator
152
+ @format_data['number']['format']['separator']
153
+ end
154
+
155
+ def number_delimiter
156
+ @format_data['number']['format']['delimiter']
157
+ end
158
+
159
+ def get_hst_format
160
+ @format_data['time']['formats']['history']
161
+ end
162
+
163
+ private
164
+
165
+ def date_to_string(date, format)
166
+ return '' if date.nil?
167
+ if date.is_a? ActiveSupport::TimeWithZone
168
+ date = date.to_date
169
+ end
170
+
171
+ raise "Invalid type #{date} of class #{date.class}" unless [Date, Time, DateTime].include? date.class
172
+ result = date.strftime(@format_data['date']['formats'][format])
173
+ sub_month(result, format)
174
+ end
175
+
176
+ def time_to_string(time, format)
177
+ raise "Invalid type #{time} of class #{time.class}" unless [Time, DateTime].include? time.class
178
+ result = time.strftime(@format_data['time']['formats'][format])
179
+ return result if format == 'time'
180
+ result = sub_month(result, format)
181
+ sub_day(result, format)
182
+ end
183
+
184
+ def get_day_name(english_name, format)
185
+ english_name = "#{english_name[0,3]}" if (english_name.size >= SHORT_SIZE)
186
+ @format_data['date'][format][DAY_NAME_MAP[english_name]]
187
+ end
188
+
189
+ def get_month_name(english_name, format)
190
+ if (english_name.size >= SHORT_SIZE )
191
+ english_name = "#{english_name[0,3]}"
192
+ end
193
+ @format_data['date'][format][MONTH_NAME_MAP[english_name]]
194
+ end
195
+
196
+ def sub_month(str_date, format)
197
+ idx = (str_date =~ eval("#{format.upcase}_MONTH_REGEX"))
198
+ return str_date unless idx
199
+ english_name = $&
200
+ month = (format == 'short')? short_month_name(english_name) :
201
+ month_name(english_name)
202
+ $` + month + $'
203
+ end
204
+
205
+ def sub_day(str_time, format)
206
+ idx = (str_time =~ eval("#{format.upcase}_DAY_REGEX"))
207
+ return str_time unless idx
208
+
209
+ english_name = $&
210
+ day = (format == 'short')? short_day_name(english_name) :
211
+ day_name(english_name)
212
+ $` + day + $'
213
+ end
214
+
215
+ end
data/ruby_l10n.gemspec CHANGED
@@ -1,12 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'ruby_l10n'
3
- s.version = '0.0.2'
3
+ s.version = '0.0.3'
4
4
  s.summary = "A gem that provide L10n functionalities"
5
5
  s.description = "A gem that provide L10n functionalities"
6
6
  s.authors = ['Linh Chau']
7
7
  s.email = 'chauhonglinh@gmail.com'
8
8
  s.files = [
9
- './ruby_l10n.gemspec', 'lib/ruby_l10n.rb',
9
+ './ruby_l10n.gemspec', 'lib/ruby_l10n.rb',
10
+ 'lib/helpers/locale_helper.rb', 'lib/helpers/date_time_maps.rb'
10
11
  ]
11
12
  s.homepage = 'https://github.com/linhchauatl/ruby_l10n'
12
13
  s.license = 'MIT'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_l10n
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Linh Chau
@@ -87,6 +87,8 @@ extensions: []
87
87
  extra_rdoc_files: []
88
88
  files:
89
89
  - "./ruby_l10n.gemspec"
90
+ - lib/helpers/date_time_maps.rb
91
+ - lib/helpers/locale_helper.rb
90
92
  - lib/ruby_l10n.rb
91
93
  homepage: https://github.com/linhchauatl/ruby_l10n
92
94
  licenses: