date_tools 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/data/locales/ar.yml +47 -0
- data/data/locales/bg.yml +47 -0
- data/data/locales/ca.yml +47 -0
- data/data/locales/cs.yml +47 -0
- data/data/locales/da.yml +47 -0
- data/data/locales/de.yml +47 -0
- data/data/locales/de_at.yml +47 -0
- data/data/locales/de_ch.yml +47 -0
- data/data/locales/en.yml +47 -0
- data/data/locales/en_au.yml +47 -0
- data/data/locales/en_ca.yml +47 -0
- data/data/locales/en_gb.yml +47 -0
- data/data/locales/en_in.yml +47 -0
- data/data/locales/en_us.yml +47 -0
- data/data/locales/es.yml +47 -0
- data/data/locales/es_ar.yml +47 -0
- data/data/locales/es_cl.yml +47 -0
- data/data/locales/es_co.yml +47 -0
- data/data/locales/es_mx.yml +47 -0
- data/data/locales/es_pe.yml +47 -0
- data/data/locales/es_ve.yml +47 -0
- data/data/locales/fi.yml +47 -0
- data/data/locales/fr.yml +47 -0
- data/data/locales/fr_ca.yml +47 -0
- data/data/locales/fr_ch.yml +47 -0
- data/data/locales/it.yml +47 -0
- data/data/locales/it_ch.yml +47 -0
- data/data/locales/ko.yml +47 -0
- data/data/locales/lt.yml +47 -0
- data/data/locales/nl.yml +47 -0
- data/data/locales/nl_be.yml +47 -0
- data/data/locales/no.yml +47 -0
- data/data/locales/pt.yml +47 -0
- data/data/locales/pt_br.yml +47 -0
- data/data/locales/ru.yml +47 -0
- data/data/locales/se.yml +47 -0
- data/data/locales/sr.yml +47 -0
- data/data/locales/zh_TW.yml +47 -0
- data/examples/example_date_creator.rb +9 -1
- data/examples/example_date_i18n.rb +52 -0
- data/examples/example_date_locale.rb +18 -5
- data/examples/example_date_time_compare.rb +11 -2
- data/lib/date_tools.rb +93 -26
- data/lib/date_tools/date_locale.rb +126 -234
- data/lib/date_tools/date_time_compare.rb +3 -0
- data/unittest/test_date_creator.rb +1 -0
- data/unittest/test_date_locale.rb +103 -196
- data/unittest/test_date_locale_loaded.rb +113 -0
- data/unittest/test_date_time_compare.rb +1 -0
- data/unittest/test_date_tools.rb +13 -0
- metadata +90 -37
- data/readme.html +0 -68
- data/readme.txt +0 -50
@@ -1,15 +1,28 @@
|
|
1
|
-
|
1
|
+
#encoding: utf-8
|
2
|
+
=begin rdoc
|
3
|
+
Example of the use of the gem in combination with locale.rb
|
4
|
+
=end
|
5
|
+
module Example
|
6
|
+
end
|
7
|
+
$:.unshift('../lib')
|
8
|
+
require 'date_tools/date_locale'
|
9
|
+
|
2
10
|
|
3
11
|
#Here you can play with locales.
|
4
12
|
#Please run the tests with and without locale.
|
5
|
-
|
13
|
+
require 'locale'
|
6
14
|
#~ Locale.current = 'en'
|
7
15
|
#~ Locale.current = 'fr'
|
8
16
|
|
17
|
+
#~ puts $"
|
18
|
+
#Exception with ruby 1.9
|
19
|
+
#~ Locale.current = 'de'
|
20
|
+
p Locale.current
|
21
|
+
|
9
22
|
#
|
10
23
|
#Test with encoding conversion
|
11
24
|
#
|
12
|
-
|
25
|
+
DateTools::Mixin.set_target_encoding( 'iso-8859-1')
|
13
26
|
[
|
14
27
|
Date.new(2009, 1,21),
|
15
28
|
Date.new(2009, 2,21),
|
@@ -23,13 +36,13 @@ Date_locale.set_target_encoding( 'iso-8859-1')
|
|
23
36
|
|
24
37
|
#
|
25
38
|
#Test all languages (unicode nbeeded)
|
26
|
-
|
39
|
+
DateTools::Mixin.set_target_encoding( 'utf-8')
|
27
40
|
[
|
28
41
|
Date.new(2009, 1,21),
|
29
42
|
Date.new(2009, 2,21),
|
30
43
|
Date.new(2009,10,21),
|
31
44
|
].each{|d|
|
32
|
-
|
45
|
+
DateTools::Mixin::DATE_TEXTS.keys.each{|lang|
|
33
46
|
puts d.strftime("#{lang}: %Y-%m-%d: %A (%a) %B (%b)", lang)
|
34
47
|
}
|
35
48
|
}
|
@@ -1,4 +1,11 @@
|
|
1
|
-
|
1
|
+
=begin rdoc
|
2
|
+
Example, how you can compare Time and Date-objects.
|
3
|
+
=end
|
4
|
+
module Example
|
5
|
+
end
|
6
|
+
|
7
|
+
$:.unshift('../lib')
|
8
|
+
require 'date_tools/date_time_compare.rb'
|
2
9
|
|
3
10
|
|
4
11
|
array = [
|
@@ -13,7 +20,9 @@ array = [
|
|
13
20
|
array << DateTime.new(rand(10)+1995 ,rand(11)+1, rand(27)+1, rand(22)+1,rand(58)+1)
|
14
21
|
}
|
15
22
|
|
16
|
-
|
23
|
+
=begin
|
24
|
+
Normally array.sort with Time- and Date-objects end in an error.
|
25
|
+
=end
|
17
26
|
#~ puts array.map{|d| d.to_date}.sort
|
18
27
|
array.sort_by{|d| d.to_date}.each{|d|
|
19
28
|
puts d.strftime("%Y-%m-%d %H:%M (#{d.class})")
|
data/lib/date_tools.rb
CHANGED
@@ -1,31 +1,98 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
#
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
1
|
+
=begin
|
2
|
+
=date_tools-Gem
|
3
|
+
Define some helper for the classes Date, DateTime and Time:
|
4
|
+
* compare to time (sort date and time-objects)
|
5
|
+
* define locales (non-english monthnames.
|
6
|
+
* new creators
|
7
|
+
|
8
|
+
Check the examples-folders to get an impression of the gem.
|
9
|
+
|
10
|
+
==date_tools/date_time_compare.rb:
|
11
|
+
Usage:
|
12
|
+
require 'date_tools/date_time_compare'
|
13
|
+
|
14
|
+
Allows to compare Date and Time objects (allows to sort by mixed Date/Time-keys).
|
15
|
+
|
16
|
+
Time gets also some methods like Date:
|
17
|
+
* Time#cwday
|
18
|
+
* Time#cweek
|
19
|
+
* Time#cwyear
|
20
|
+
|
21
|
+
-> please check the examples in
|
22
|
+
examples/example_date_time_compare.rb[link:files/examples/example_date_time_compare_rb.html]
|
23
|
+
|
24
|
+
==date_tools/date_creator.rb:
|
25
|
+
Usage:
|
26
|
+
require 'date_tools/date_creator'
|
27
|
+
|
28
|
+
New date creations:
|
29
|
+
Date.new_by_mday: Allows "Third sunday in june 2010"...
|
30
|
+
|
31
|
+
-> please check the examples in
|
32
|
+
examples/example_date_creator.rb[link:files/examples/example_date_creator_rb.html]
|
33
|
+
|
34
|
+
|
35
|
+
==date_tools/date_locale.rb:
|
36
|
+
Usage:
|
37
|
+
require 'date_tools/date_locale.rb'
|
38
|
+
|
39
|
+
Localization of Date, DateTime and Time.
|
40
|
+
|
41
|
+
strftime (Date#strftime, Time#strftime and DateTime#strftime)
|
42
|
+
gets an optional parameter to determine the language.
|
43
|
+
|
44
|
+
Default is en, or if locale is used the current locale.
|
45
|
+
|
46
|
+
-> please check the examples in
|
47
|
+
examples/example_date_locale.rb[link:files/examples/example_date_locale_rb.html]
|
48
|
+
|
49
|
+
==Usage with I18N
|
50
|
+
|
51
|
+
With I18N y
|
52
|
+
ou don't need a redefinition of Time#strftime,
|
53
|
+
with I18N you use the I18n.localize function.
|
54
|
+
|
55
|
+
But you can use this gem to define the translations of day and month names.
|
56
|
+
|
57
|
+
Example:
|
58
|
+
|
59
|
+
require 'date_tools'
|
60
|
+
require 'i18n'
|
61
|
+
|
62
|
+
I18n.load_path = DateTools::I18N_FILES
|
63
|
+
I18n.load_path += YOUR_I18N_FILES
|
64
|
+
I18n.backend.load_translations #this is done automatic by rails
|
65
|
+
|
66
|
+
%w{en de de_at}.each{|locale|
|
67
|
+
I18n.locale = locale
|
68
|
+
puts I18n.localize Time.now #"07. r 2013 00:13"
|
69
|
+
#~ puts I18n.l Time.now #"07. r 2013 00:13"
|
70
|
+
}
|
71
|
+
|
72
|
+
Remark:
|
73
|
+
If you get a
|
74
|
+
translation missing: en.time.formats.default (I18n::MissingTranslationData)
|
75
|
+
then you didn't localize time/date in your project (YOUR_I18N_FILES).
|
76
|
+
|
77
|
+
This gem doesn't define, how your Time/Date is printed,
|
78
|
+
it only defines the correct day- and month name if you use %B/%A.
|
79
|
+
|
80
|
+
-> please check the examples in
|
81
|
+
examples/example_date_i18n.rb[link:files/examples/example_date_i18n_rb.html]
|
82
|
+
|
83
|
+
=end
|
24
84
|
|
85
|
+
module DateTools
|
86
|
+
VERSION = '0.1.0'
|
25
87
|
|
88
|
+
#Path to I18N-compatible language definition for day- and month names.
|
89
|
+
I18N_FILES = Dir[File.join(File.expand_path(__FILE__),'..','..','data', 'locales','*.yml')]
|
90
|
+
|
91
|
+
|
92
|
+
end #module Date_tools
|
26
93
|
#
|
27
94
|
#There are no dependicies between the
|
28
95
|
#
|
29
|
-
require 'date_tools/date_creator.rb'
|
30
|
-
require 'date_tools/date_locale.rb'
|
31
|
-
require 'date_tools/date_time_compare.rb'
|
96
|
+
#~ require 'date_tools/date_creator.rb'
|
97
|
+
#~ require 'date_tools/date_locale.rb'
|
98
|
+
#~ require 'date_tools/date_time_compare.rb'
|
@@ -1,249 +1,137 @@
|
|
1
|
+
#encoding: utf-8
|
1
2
|
#
|
2
3
|
#Make a 'localization' for Date, DateTime and Time.
|
3
4
|
#
|
4
5
|
#This is not using locale, but if you use locale, it is detected and locale sensitive.
|
5
6
|
#
|
6
|
-
#The output is
|
7
|
+
#The defaut output is utf-8, other encodings can be set with Date_locale.set_target_encoding.
|
7
8
|
#
|
8
9
|
|
10
|
+
require_relative '../date_tools'
|
11
|
+
require 'date'
|
12
|
+
require 'yaml'
|
9
13
|
|
10
|
-
|
11
|
-
#~ require 'date'
|
12
|
-
|
14
|
+
module DateTools
|
13
15
|
#
|
14
|
-
#Adaption for a localized Date-class
|
16
|
+
#Adaption for a localized Date, Time and DateTime-class
|
15
17
|
#
|
16
|
-
#Solution based on discussion at ruby-forum.de
|
17
|
-
#-http://forum.ruby-portal.de/viewtopic.php?f=1&t=10527&start=0
|
18
|
+
#Solution based on discussion at ruby-forum.de
|
19
|
+
#- http://forum.ruby-portal.de/viewtopic.php?f=1&t=10527&start=0
|
18
20
|
#
|
19
|
-
module
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
:abbr_monthnames => [nil] + %w{gen feb mar abr mai jun jul ago set oct nov des},
|
32
|
-
:daynames => %w{diumenge dilluns dimarts dimecres dijous divendres dissabte},
|
33
|
-
:abbr_daynames => %w{dmg dll dmt dmc djs dvn dsb},
|
34
|
-
},
|
35
|
-
:cf => {
|
36
|
-
:monthnames => [nil] + %w{Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre},
|
37
|
-
:abbr_monthnames => [nil] + %w{Jan Fev Mar Avr Mai Jun Jui Aou Sep Oct Nov Dec},
|
38
|
-
:daynames => %w{Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi},
|
39
|
-
:abbr_daynames => %w{Dim Lun Mar Mer Jeu Ven Sam},
|
40
|
-
},
|
41
|
-
:cs => {
|
42
|
-
:monthnames => [nil] + %w{Leden Únor Březen Duben Květen Červen Červenec Srpen Září Říjen Listopad Prosinec},
|
43
|
-
:abbr_monthnames => [nil] + %w{Led Úno Bře Dub Kvě Čvn Čvc Srp Zář Říj Lis Pro},
|
44
|
-
:daynames => %w{Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota},
|
45
|
-
:abbr_daynames => %w{Ne Po Út St Čt Pá So},
|
46
|
-
},
|
47
|
-
:da => {
|
48
|
-
:monthnames => [nil] + %w{januar februar marts april maj juni juli august september oktober november december},
|
49
|
-
:abbr_monthnames => [nil] + %w{jan feb mar apr maj jun jul aug sep okt nov dec},
|
50
|
-
:daynames => %w{søndag mandag tirsdag onsdag torsdag fredag lørdag},
|
51
|
-
:abbr_daynames => %w{søn man tir ons tors fre lør},
|
52
|
-
},
|
53
|
-
:de => {
|
54
|
-
:monthnames => [nil] + %w{Januar Februar März April Mai Juni Juli August September Oktober November Dezember},
|
55
|
-
:abbr_monthnames => [nil] + %w{Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez},
|
56
|
-
:daynames => %w{Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag},
|
57
|
-
:abbr_daynames => %w{So Mo Di Mi Do Fr Sa},
|
58
|
-
},
|
59
|
-
:de_at => {
|
60
|
-
:monthnames => [nil] + %w(Jänner Feber März April Mai Juni Juli August September Oktober November Dezember),
|
61
|
-
:abbr_monthnames => [nil] + %w(Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez),
|
62
|
-
:daynames => %w(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag),
|
63
|
-
:abbr_daynames => %w(So Mo Di Mi Do Fr Sa),
|
64
|
-
},
|
65
|
-
:en => {
|
66
|
-
:monthnames => [nil] + %w{January February March April May June July August September October November December},
|
67
|
-
:abbr_monthnames => [nil] + %w{Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec},
|
68
|
-
:daynames => %w{Sunday Monday Tuesday Wednesday Thursday Friday Saturday},
|
69
|
-
:abbr_daynames => %w{Sun Mon Tue Wed Thu Fri Sat},
|
70
|
-
},
|
71
|
-
:es => {
|
72
|
-
:monthnames => [nil] + %w{enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre},
|
73
|
-
:abbr_monthnames => [nil] + %w{ene feb mar abr may jun jul ago sep oct nov dic},
|
74
|
-
:daynames => %w{domingo lunes martes miércoles jueves viernes sábado},
|
75
|
-
:abbr_daynames => %w{dom lun mar mié jue vie sáb},
|
76
|
-
},
|
77
|
-
:es_ar => {
|
78
|
-
:monthnames => [nil] + %w{enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre},
|
79
|
-
:abbr_monthnames => [nil] + %w{ene feb mar abr may jun jul ago sep oct nov dic},
|
80
|
-
:daynames => %w{domingo lunes martes miércoles jueves viernes sábado},
|
81
|
-
:abbr_daynames => %w{dom lun mar mié jue vie sáb},
|
82
|
-
},
|
83
|
-
:fi => {
|
84
|
-
:monthnames => [nil] + %w{tammikuu helmikuu maaliskuu huhtikuu toukokuu kesäkuu heinäkuu elokuu syyskuu lokakuu marraskuu joulukuu},
|
85
|
-
:abbr_monthnames => [nil] + %w{tammi helmi maalis huhti touko kesä heinä elo syys loka marras joulu},
|
86
|
-
:daynames => %w{sunnuntai maanantai tiistai keskiviikko torstai perjantai lauantai},
|
87
|
-
:abbr_daynames => %w{su ma ti ke to pe la},
|
88
|
-
},
|
89
|
-
:fr => {
|
90
|
-
:monthnames => [nil] + %w{Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Decembre},
|
91
|
-
:abbr_monthnames => [nil] + %w{Jan Fév Mar Avr Mai Jui Jul Aoû Sep Oct Nov Déc},
|
92
|
-
:daynames => %w{Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi},
|
93
|
-
:abbr_daynames => %w{Dim Lun Mar Mer Jeu Ven Sam},
|
94
|
-
},
|
95
|
-
:it => {
|
96
|
-
:monthnames => [nil] + %w{Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre Novembre Dicembre },
|
97
|
-
:daynames => %w{ Domenica Lunedì Martedì Mercoledì Giovedì Venerdì Sabato },
|
98
|
-
:abbr_monthnames => [nil] + %w{ Gen Feb Mar Apr Mag Giu Lug Ago Set Ott Nov Dic },
|
99
|
-
:abbr_daynames => %w{ Dom Lun Mar Mer Gio Ven Sab },
|
100
|
-
},
|
101
|
-
:ko => {
|
102
|
-
:monthnames => [nil] + %w{1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월},
|
103
|
-
:abbr_monthnames => [nil] + %w{1 2 3 4 5 6 7 8 9 10 11 12},
|
104
|
-
:daynames => %w{일요일 월요일 화요일 수요일 목요일 금요일 토요일},
|
105
|
-
:abbr_daynames => %w{일 월 화 수 목 금 토},
|
106
|
-
},
|
107
|
-
:nl => {
|
108
|
-
:monthnames => [nil] + %w{Januari Februari Maart April Mei Juni Juli Augustus September Oktober November December},
|
109
|
-
:abbr_monthnames => [nil] + %w{Jan Feb Maa Apr Mei Jun Jul Aug Sep Okt Nov Dec},
|
110
|
-
:daynames => %w{Zondag Maandag Dinsdag Woensdag Donderdag Vrijdag Zaterdag},
|
111
|
-
:abbr_daynames => %w{Zo Ma Di Wo Do Vr Za},
|
112
|
-
},
|
113
|
-
:no => {
|
114
|
-
:monthnames => [nil] + %w{januar februar mars april mai juni juli august september oktober november desember},
|
115
|
-
:abbr_monthnames => [nil] + %w{jan feb mar apr mai jun jul aug sep okt nov des},
|
116
|
-
:daynames => %w{søndag mandag tirsdag onsdag torsdag fredag lørdag},
|
117
|
-
:abbr_daynames => %w{søn man tir ons tors fre lør},
|
118
|
-
},
|
119
|
-
:pt => {
|
120
|
-
:monthnames => [nil] + %w{Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro},
|
121
|
-
:abbr_monthnames => [nil] + %w{Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez},
|
122
|
-
:daynames => %w{domingo segunda terça quarta quinta sexta sábado},
|
123
|
-
:abbr_daynames => %w{Dom Seg Ter Qua Qui Sex Sab},
|
124
|
-
},
|
125
|
-
:pt_br => {
|
126
|
-
:monthnames => [nil] + %w{janeiro fevereiro março abril maio junho julho agosto setembro outubro novembro dezembro},
|
127
|
-
:abbr_monthnames => [nil] + %w{jan fev mar abr mai jun jul ago set out nov dez},
|
128
|
-
:daynames => %w{domingo segunda terça quarta quinta sexta sábado},
|
129
|
-
:abbr_daynames => %w{dom seg ter qua qui sex sáb},
|
130
|
-
},
|
131
|
-
:ru => {
|
132
|
-
:monthnames => [nil] + %w{Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь},
|
133
|
-
:abbr_monthnames => [nil] + %w{Янв Фев Мар Апр Май Июн Июл Авг Сен Окт Ноя Дек},
|
134
|
-
:daynames => %w{Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота},
|
135
|
-
:abbr_daynames => %w{Вск Пнд Втр Сре Чет Пят Суб},
|
136
|
-
},
|
137
|
-
:se => {
|
138
|
-
:monthnames => [nil] + %w{januari februari mars april maj juni juli augusti september oktober november december},
|
139
|
-
:abbr_monthnames => [nil] + %w{jan feb mar apr maj jun jul aug sep okt nov dec},
|
140
|
-
:daynames => %w{söndag måndag tisdag onsdag torsdag fredag lördag},
|
141
|
-
:abbr_daynames => %w{sön mån tis ons tors fre lör},
|
142
|
-
},
|
143
|
-
:sr => {
|
144
|
-
:monthnames => [nil] + %w{Januar Februar Mart April Maj Jun Jul Avgust Septembar Oktobar Novembar Decembar},
|
145
|
-
:abbr_monthnames => [nil] + %w{Jan Feb Mar Apr Maj Jun Jul Aug Sep Okt Nov Dec},
|
146
|
-
:daynames => %w{Nedelja Ponedeljak Utorak Sreda Četvrtak Petak Subota},
|
147
|
-
:abbr_daynames => %w{Ned Pon Uto Sre Čet Pet Sub},
|
148
|
-
},
|
149
|
-
}
|
150
|
-
#~ puts DATE_TEXTS.to_yaml
|
151
|
-
|
152
|
-
#Not really necessary.
|
153
|
-
#But I want to avoid later changes.
|
154
|
-
DATE_TEXTS.freeze
|
21
|
+
module Mixin
|
22
|
+
#Constant/Hash with the supported languages.
|
23
|
+
DATE_TEXTS = {}
|
24
|
+
I18N_FILES.each{|langdef|
|
25
|
+
DATE_TEXTS.update(
|
26
|
+
YAML.load(File.read(langdef, :encoding => 'utf-8'))
|
27
|
+
)
|
28
|
+
}
|
29
|
+
|
30
|
+
#Not really necessary.
|
31
|
+
#But I want to avoid later changes.
|
32
|
+
#~ DATE_TEXTS.freeze
|
155
33
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
#Set default converter
|
163
|
-
#~ @@encoding_converter = Iconv.new( 'iso-8859-1', 'utf-8' )
|
164
|
-
|
165
|
-
#
|
166
|
-
#The daynames are encoded in UTF (I hope ;-) ).
|
167
|
-
#With this method you can define a global converter.
|
168
|
-
#
|
169
|
-
#Example:
|
170
|
-
# Date_locale.set_target_encoding( 'iso-8859-1')
|
171
|
-
#
|
172
|
-
def self.set_target_encoding( enc )
|
173
|
-
@@encoding_converter = Iconv.new( enc, 'utf-8' )
|
174
|
-
end
|
175
|
-
|
176
|
-
|
177
|
-
#
|
178
|
-
#Get the key for the wanted language.
|
179
|
-
#
|
180
|
-
#Allows the usage (or not to use) locale.
|
181
|
-
def self.get_language_key( lang = nil )
|
34
|
+
#
|
35
|
+
#Is the seleted locale/language supported?
|
36
|
+
def self.locale?( lang )
|
37
|
+
#fixme check via .get_language_key
|
38
|
+
return !! DATE_TEXTS[lang.to_s]
|
39
|
+
end
|
182
40
|
|
183
41
|
#
|
184
|
-
#
|
42
|
+
#The daynames are encoded in UTF by default.
|
43
|
+
#With this setter you can define an alternative target encoding.
|
44
|
+
#
|
45
|
+
#Example:
|
46
|
+
# Date_locale.set_target_encoding( 'iso-8859-1')
|
185
47
|
#
|
186
|
-
|
187
|
-
|
188
|
-
Date_locale.set_target_encoding( lang.charset )
|
189
|
-
return lang.language.to_sym
|
48
|
+
def self.set_target_encoding( enc )
|
49
|
+
@@default_encoding = enc
|
190
50
|
end
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
51
|
+
|
52
|
+
|
53
|
+
=begin rdoc
|
54
|
+
Get the key for the wanted language.
|
55
|
+
|
56
|
+
If locale is given, it i tried to detect the current language.
|
57
|
+
|
58
|
+
Allows the usage (or not to use) the locale-gem[https://rubygems.org/gems/locale]
|
59
|
+
or i18n-gem[https://rubygems.org/gems/i18n].
|
60
|
+
=end
|
61
|
+
def self.get_language_key( locale = nil, default = 'en' )
|
62
|
+
|
63
|
+
if locale
|
64
|
+
#convert Locale to string
|
65
|
+
langkey = locale.to_s.downcase
|
66
|
+
else #Undefined default, take actual locale or en
|
67
|
+
langkey = default
|
68
|
+
if defined?( Locale )
|
69
|
+
langkey = Locale.current.to_s.downcase
|
70
|
+
elsif defined?( I18n )
|
71
|
+
langkey = I18n.locale.to_s.downcase
|
72
|
+
end
|
200
73
|
end
|
201
|
-
end
|
202
74
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
if DATE_TEXTS[lang]
|
213
|
-
daynames = DATE_TEXTS[lang][:daynames]
|
214
|
-
abbr_daynames = DATE_TEXTS[lang][:abbr_daynames]
|
215
|
-
monthnames = DATE_TEXTS[lang][:monthnames]
|
216
|
-
abbr_monthnames = DATE_TEXTS[lang][:abbr_monthnames]
|
217
|
-
else
|
218
|
-
raise "Missing Support for locale #{lang.inspect}"
|
219
|
-
end
|
220
|
-
|
221
|
-
#Make the original replacements, after....
|
222
|
-
result = self.strftime_orig(
|
223
|
-
#...you replaced the language dependent parts.
|
224
|
-
format.gsub(/%([aAbB])/){|m|
|
225
|
-
case $1
|
226
|
-
when 'a'; abbr_daynames[self.wday]
|
227
|
-
when 'A'; daynames[self.wday]
|
228
|
-
when 'b'; abbr_monthnames[self.mon]
|
229
|
-
when 'B'; monthnames[self.mon]
|
230
|
-
else
|
231
|
-
raise "Date#strftime: InputError"
|
232
|
-
end
|
233
|
-
}
|
234
|
-
)
|
235
|
-
if defined? @@encoding_converter
|
236
|
-
@@encoding_converter.iconv(result)
|
237
|
-
else
|
238
|
-
result
|
75
|
+
#Convert language key to something like en_us, de_at...
|
76
|
+
langkey.sub!(/-/, '_')
|
77
|
+
#Use language if locale is not defined
|
78
|
+
if ! locale?(langkey) and langkey =~ /(.+)[-_](.+)/
|
79
|
+
langkey = $1
|
80
|
+
end
|
81
|
+
|
82
|
+
return langkey
|
83
|
+
|
239
84
|
end
|
240
|
-
end #strftime_locale(format = '%F', lang = :en )
|
241
85
|
|
86
|
+
#
|
87
|
+
#strftime with the day- and month names in the selected language.
|
88
|
+
#This method is used to redefine
|
89
|
+
#Date#strftime, Time#strftime and DateTime#strftime .
|
90
|
+
#
|
91
|
+
#language can be a Symbol, String or a Locale.
|
92
|
+
#It is checked with DateTools::Mixin.get_language_key .
|
93
|
+
#
|
94
|
+
def strftime_locale(format = '%F', language = nil )
|
95
|
+
|
96
|
+
lang = DateTools::Mixin.get_language_key(language)
|
97
|
+
|
98
|
+
#Get the texts
|
99
|
+
if DATE_TEXTS[lang]
|
100
|
+
daynames = DATE_TEXTS[lang]['date']['day_names']
|
101
|
+
abbr_daynames = DATE_TEXTS[lang]['date']['abbr_day_names']
|
102
|
+
monthnames = DATE_TEXTS[lang]['date']['month_names']
|
103
|
+
abbr_monthnames = DATE_TEXTS[lang]['date']['abbr_month_names']
|
104
|
+
else
|
105
|
+
raise "Missing Support for locale #{lang.inspect}"
|
106
|
+
end
|
107
|
+
|
108
|
+
#Make the original replacements, after....
|
109
|
+
result = self.strftime_orig(
|
110
|
+
#...you replaced the language dependent parts.
|
111
|
+
format.gsub(/%([aAbB])/){|m|
|
112
|
+
case $1
|
113
|
+
when 'a'; abbr_daynames[self.wday]
|
114
|
+
when 'A'; daynames[self.wday]
|
115
|
+
when 'b'; abbr_monthnames[self.mon]
|
116
|
+
when 'B'; monthnames[self.mon]
|
117
|
+
else
|
118
|
+
raise "Date#strftime: InputError"
|
119
|
+
end
|
120
|
+
}
|
121
|
+
)
|
122
|
+
if defined? @@default_encoding
|
123
|
+
result.encode(@@default_encoding)
|
124
|
+
else
|
125
|
+
result
|
126
|
+
end
|
127
|
+
end #strftime_locale(format = '%F', lang = :en )
|
128
|
+
|
129
|
+
end #module Mixin
|
242
130
|
end #module Date_locale
|
243
131
|
|
244
132
|
class Date
|
245
133
|
|
246
|
-
include
|
134
|
+
include DateTools::Mixin
|
247
135
|
alias :strftime_orig :strftime
|
248
136
|
|
249
137
|
#Redefine strftime with flexible daynames.
|
@@ -270,7 +158,7 @@ end
|
|
270
158
|
|
271
159
|
|
272
160
|
class Time
|
273
|
-
include
|
161
|
+
include DateTools::Mixin
|
274
162
|
alias :strftime_orig :strftime
|
275
163
|
#Redefine strftime for locale versions.
|
276
164
|
def strftime(format='%F', lang = nil )
|
@@ -285,16 +173,20 @@ end
|
|
285
173
|
if __FILE__ == $0
|
286
174
|
#~ require 'date_locale'
|
287
175
|
|
288
|
-
|
289
|
-
|
290
|
-
|
176
|
+
p DateTools::Mixin.get_language_key('de-at')
|
177
|
+
|
178
|
+
#~ d = Date.new(2009,10,21)
|
179
|
+
#~ puts d.strftime("de: %A {%a} {%A} {%W} %w ", :de ) #=> de: Mittwoch {Mi} {Mittwoch} {42} 3 (loc: en)
|
180
|
+
#~ puts d.strftime("en: %A {%a} {%A} {%W} %w ", :en ) #=> en: Wednesday {Wed} {Wednesday} {42} 3 (loc: en)
|
181
|
+
|
182
|
+
#~ puts "=======Load locale"
|
291
183
|
|
292
|
-
|
293
|
-
|
294
|
-
Locale.current
|
295
|
-
|
296
|
-
Locale.current
|
297
|
-
puts d.strftime("
|
298
|
-
puts d.strftime("
|
299
|
-
puts d.strftime("en: %A {%a} {%A} {%W} %w (loc: #{Locale.current})", :en ) #=> en: Wednesday {Wed} {Wednesday} {42} 3 (loc: en)
|
184
|
+
#~ require 'locale'
|
185
|
+
#~ Locale.current = 'de-de'
|
186
|
+
#~ puts d.strftime("#{Locale.current}: %A {%a} {%A} {%W} %w") #=> de: Mittwoch {Mi} {Mittwoch} {42} 3
|
187
|
+
#~ Locale.current = 'en'
|
188
|
+
#~ puts d.strftime("#{Locale.current}: %A {%a} {%A} {%W} %w") #=> en: Wednesday {Wed} {Wednesday} {42} 3
|
189
|
+
#~ puts d.strftime("de: %A {%a} {%A} {%W} %w (loc: #{Locale.current})", :de ) #=> de: Mittwoch {Mi} {Mittwoch} {42} 3 (loc: en)
|
190
|
+
#~ puts d.strftime("en: %A {%a} {%A} {%W} %w (loc: #{Locale.current})", :en ) #=> en: Wednesday {Wed} {Wednesday} {42} 3 (loc: en)
|
191
|
+
#~ puts d.strftime("en: %A {%a} {%A} {%W} %w (loc: #{Locale.current})", :en ) #=> en: Wednesday {Wed} {Wednesday} {42} 3 (loc: en)
|
300
192
|
end #if __FILE__ == $0
|