edtf-humanize 1.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/locales/en.edtf.yml +44 -0
- data/config/locales/fr.edtf.yml +55 -0
- data/config/locales/it.edtf.yml +55 -0
- data/lib/edtf/humanize/century.rb +4 -4
- data/lib/edtf/humanize/decade.rb +4 -4
- data/lib/edtf/humanize/interval.rb +4 -21
- data/lib/edtf/humanize/iso_date.rb +4 -4
- data/lib/edtf/humanize/language/default/century.rb +20 -0
- data/lib/edtf/humanize/language/default/decade.rb +21 -0
- data/lib/edtf/humanize/language/default/formats.rb +112 -0
- data/lib/edtf/humanize/language/default/interval.rb +132 -0
- data/lib/edtf/humanize/language/default/iso_date.rb +21 -0
- data/lib/edtf/humanize/language/default/season.rb +30 -0
- data/lib/edtf/humanize/language/default/set.rb +78 -0
- data/lib/edtf/humanize/language/default/unknown.rb +17 -0
- data/lib/edtf/humanize/language/default.rb +17 -0
- data/lib/edtf/humanize/language/english.rb +11 -0
- data/lib/edtf/humanize/language/french.rb +36 -0
- data/lib/edtf/humanize/language/italian.rb +34 -0
- data/lib/edtf/humanize/language.rb +13 -0
- data/lib/edtf/humanize/season.rb +4 -16
- data/lib/edtf/humanize/set.rb +4 -33
- data/lib/edtf/humanize/unknown.rb +5 -3
- data/lib/edtf/humanize/version.rb +3 -1
- data/lib/edtf/humanize.rb +24 -45
- data/lib/edtf-humanize.rb +5 -0
- data/spec/edtf_humanize_en_spec.rb +102 -0
- data/spec/edtf_humanize_fr_spec.rb +110 -0
- data/spec/edtf_humanize_it_spec.rb +110 -0
- data/spec/spec_helper.rb +2 -0
- metadata +70 -20
- data/lib/edtf/humanize/formats.rb +0 -73
- data/spec/edtf_humanize_spec.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d1b42abe59756665b608da4635e8766f78fb44ac2e658e14365141bf919eae9
|
4
|
+
data.tar.gz: f7a583e56c886eee461568fd2deacbd4769221b48b1f5e6b6f9b2ed68b08420c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7d3799ba863355aefa8afd5fdd09f20bc796cea31609d2015979b36f175ccff9a998019b62901c71d0873ca48dc03c0405f47fce7dd049d2ac801fc763d74f3
|
7
|
+
data.tar.gz: 6233da61c4a069e473336c229cd117e479ce1037d10d789506a32565ff4abed04740ce9fa59df1f8be772aaaa62447e58e9b422f6d72ed8778c9e2a6416e0035
|
@@ -0,0 +1,44 @@
|
|
1
|
+
en:
|
2
|
+
edtf:
|
3
|
+
terms:
|
4
|
+
approximate_date_prefix_day: "circa "
|
5
|
+
approximate_date_prefix_month: "circa "
|
6
|
+
approximate_date_prefix_year: "circa "
|
7
|
+
approximate_date_suffix_day: ""
|
8
|
+
approximate_date_suffix_month: ""
|
9
|
+
approximate_date_suffix_year: ""
|
10
|
+
century_suffix: "s"
|
11
|
+
decade_prefix: ""
|
12
|
+
decade_suffix: "s"
|
13
|
+
interval_prefix_day: ""
|
14
|
+
interval_prefix_month: ""
|
15
|
+
interval_prefix_year: ""
|
16
|
+
interval_connector_approximate: " to "
|
17
|
+
interval_connector_day: " to "
|
18
|
+
interval_connector_open: " to "
|
19
|
+
interval_connector_month: " to "
|
20
|
+
interval_connector_year: " to "
|
21
|
+
interval_unspecified_suffix: "s"
|
22
|
+
open_start_interval_with_day: "until %{date}"
|
23
|
+
open_start_interval_with_month: "until %{date}"
|
24
|
+
open_start_interval_with_year: "until %{date}"
|
25
|
+
open_end_interval_with_day: "since %{date}"
|
26
|
+
open_end_interval_with_month: "since %{date}"
|
27
|
+
open_end_interval_with_year: "since %{date}"
|
28
|
+
set_dates_connector_exclusive: ", "
|
29
|
+
set_dates_connector_inclusive: ", "
|
30
|
+
set_earlier_prefix_exclusive: 'on or before '
|
31
|
+
set_earlier_prefix_inclusive: 'on and before '
|
32
|
+
set_last_date_connector_exclusive: " or "
|
33
|
+
set_last_date_connector_inclusive: " and "
|
34
|
+
set_later_prefix_exclusive: 'on or after '
|
35
|
+
set_later_prefix_inclusive: 'on and after '
|
36
|
+
set_two_dates_connector_exclusive: " or "
|
37
|
+
set_two_dates_connector_inclusive: " and "
|
38
|
+
uncertain_date_suffix: "?"
|
39
|
+
unknown: 'unknown'
|
40
|
+
unspecified_digit_substitute: "x"
|
41
|
+
formats:
|
42
|
+
day_precision_strftime_format: "%B %-d, %Y"
|
43
|
+
month_precision_strftime_format: "%B %Y"
|
44
|
+
year_precision_strftime_format: "%Y"
|
@@ -0,0 +1,55 @@
|
|
1
|
+
fr:
|
2
|
+
date:
|
3
|
+
day_names: [Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi]
|
4
|
+
abbr_day_names: [Dim, Lun, Mar, Mer, Jeu, Ven, Sam]
|
5
|
+
# Don't forget the nil at the beginning; there's no such thing as a 0th month
|
6
|
+
month_names: [~, Janvier, Février, Mars, Avril, Mai, Juin, Juillet, Août, Septembre, Octobre, Novembre, Decembre]
|
7
|
+
abbr_month_names: [~, Jan, Fev, Mar, Avr, Mai, Jun, Jul, Aou, Sep, Oct, Nov, Dec]
|
8
|
+
seasons:
|
9
|
+
spring: "printemps"
|
10
|
+
summer: "été"
|
11
|
+
autumn: "automne"
|
12
|
+
winter: "hiver"
|
13
|
+
edtf:
|
14
|
+
terms:
|
15
|
+
approximate_date_prefix_day: ""
|
16
|
+
approximate_date_prefix_month: ""
|
17
|
+
approximate_date_prefix_year: ""
|
18
|
+
approximate_date_suffix_day: " environ"
|
19
|
+
approximate_date_suffix_month: " environ"
|
20
|
+
approximate_date_suffix_year: " environ"
|
21
|
+
decade_prefix: "Les années "
|
22
|
+
decade_suffix: ""
|
23
|
+
century_suffix: ""
|
24
|
+
interval_prefix_day: "Du "
|
25
|
+
interval_prefix_month: "De "
|
26
|
+
interval_prefix_year: "De "
|
27
|
+
interval_connector_approximate: " à "
|
28
|
+
interval_connector_open: " à "
|
29
|
+
interval_connector_day: " au "
|
30
|
+
interval_connector_month: " à "
|
31
|
+
interval_connector_year: " à "
|
32
|
+
interval_unspecified_suffix: "s"
|
33
|
+
open_start_interval_with_day: "Jusqu'au %{date}"
|
34
|
+
open_start_interval_with_month: "Jusqu'en %{date}"
|
35
|
+
open_start_interval_with_year: "Jusqu'en %{date}"
|
36
|
+
open_end_interval_with_day: "Depuis le %{date}"
|
37
|
+
open_end_interval_with_month: "Depuis %{date}"
|
38
|
+
open_end_interval_with_year: "Depuis %{date}"
|
39
|
+
set_dates_connector_exclusive: ", "
|
40
|
+
set_dates_connector_inclusive: ", "
|
41
|
+
set_earlier_prefix_exclusive: 'Le ou avant '
|
42
|
+
set_earlier_prefix_inclusive: 'Le et avant '
|
43
|
+
set_last_date_connector_exclusive: " ou "
|
44
|
+
set_last_date_connector_inclusive: " et "
|
45
|
+
set_later_prefix_exclusive: 'Le ou après '
|
46
|
+
set_later_prefix_inclusive: 'Le et après '
|
47
|
+
set_two_dates_connector_exclusive: " ou "
|
48
|
+
set_two_dates_connector_inclusive: " et "
|
49
|
+
uncertain_date_suffix: "?"
|
50
|
+
unknown: 'Inconnue'
|
51
|
+
unspecified_digit_substitute: "x"
|
52
|
+
formats:
|
53
|
+
day_precision_strftime_format: "%-d %B %Y"
|
54
|
+
month_precision_strftime_format: "%B %Y"
|
55
|
+
year_precision_strftime_format: "%Y"
|
@@ -0,0 +1,55 @@
|
|
1
|
+
it:
|
2
|
+
date:
|
3
|
+
day_names: [domenica, lunedì, martedì, mercoledì, giovedì, venerdì, sabato]
|
4
|
+
abbr_day_names: [dom, lun, mar, mer, gio, ven, sab]
|
5
|
+
# Don't forget the nil at the beginning; there's no such thing as a 0th month
|
6
|
+
month_names: [~, gennaio, febbraio, marzo, aprile, maggio, giugno, luglio, agosto, settembre, ottobre, novembre, dicembre]
|
7
|
+
abbr_month_names: [~, gen, feb, mar, apr, mag, giu, lug, ago, set, ott, nov, dic]
|
8
|
+
seasons:
|
9
|
+
spring: "primavera"
|
10
|
+
summer: "estate"
|
11
|
+
autumn: "autunno"
|
12
|
+
winter: "inverno"
|
13
|
+
edtf:
|
14
|
+
terms:
|
15
|
+
approximate_date_prefix_day: "circa "
|
16
|
+
approximate_date_prefix_month: "circa "
|
17
|
+
approximate_date_prefix_year: "circa "
|
18
|
+
approximate_date_suffix_day: ""
|
19
|
+
approximate_date_suffix_month: ""
|
20
|
+
approximate_date_suffix_year: ""
|
21
|
+
decade_prefix: "anni "
|
22
|
+
decade_suffix: ""
|
23
|
+
century_suffix: ""
|
24
|
+
interval_prefix_day: ""
|
25
|
+
interval_prefix_month: ""
|
26
|
+
interval_prefix_year: ""
|
27
|
+
interval_connector_approximate: " - "
|
28
|
+
interval_connector_open: " - "
|
29
|
+
interval_connector_day: " - "
|
30
|
+
interval_connector_month: " - "
|
31
|
+
interval_connector_year: " - "
|
32
|
+
interval_unspecified_suffix: ""
|
33
|
+
open_start_interval_with_day: "fino a %{date}"
|
34
|
+
open_start_interval_with_month: "fino a %{date}"
|
35
|
+
open_start_interval_with_year: "fino a %{date}"
|
36
|
+
open_end_interval_with_day: "%{date} - "
|
37
|
+
open_end_interval_with_month: "%{date} - "
|
38
|
+
open_end_interval_with_year: "%{date} - "
|
39
|
+
set_dates_connector_exclusive: ", "
|
40
|
+
set_dates_connector_inclusive: ", "
|
41
|
+
set_earlier_prefix_exclusive: "prima di "
|
42
|
+
set_earlier_prefix_inclusive: "prima di "
|
43
|
+
set_last_date_connector_exclusive: " o "
|
44
|
+
set_last_date_connector_inclusive: " e "
|
45
|
+
set_later_prefix_exclusive: "dopo "
|
46
|
+
set_later_prefix_inclusive: "dopo "
|
47
|
+
set_two_dates_connector_exclusive: " o "
|
48
|
+
set_two_dates_connector_inclusive: " e "
|
49
|
+
uncertain_date_suffix: " ?"
|
50
|
+
unknown: "data sconosciuta"
|
51
|
+
unspecified_digit_substitute: "x"
|
52
|
+
formats:
|
53
|
+
day_precision_strftime_format: "%-d %B %Y"
|
54
|
+
month_precision_strftime_format: "%B %Y"
|
55
|
+
year_precision_strftime_format: "%Y"
|
@@ -1,13 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Edtf
|
2
4
|
module Humanize
|
3
5
|
module Century
|
4
|
-
|
5
|
-
include Edtf::Humanize::Formats
|
6
|
+
include Edtf::Humanize::Language
|
6
7
|
|
7
8
|
def humanize
|
8
|
-
|
9
|
+
language_strategy::Century.humanizer(self)
|
9
10
|
end
|
10
|
-
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/lib/edtf/humanize/decade.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Edtf
|
2
4
|
module Humanize
|
3
5
|
module Decade
|
4
|
-
|
5
|
-
include Edtf::Humanize::Formats
|
6
|
+
include Edtf::Humanize::Language
|
6
7
|
|
7
8
|
def humanize
|
8
|
-
|
9
|
+
language_strategy::Decade.humanizer(self)
|
9
10
|
end
|
10
|
-
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,30 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Edtf
|
2
4
|
module Humanize
|
3
5
|
module Interval
|
4
|
-
|
5
|
-
include Edtf::Humanize::Formats
|
6
|
+
include Edtf::Humanize::Language
|
6
7
|
|
7
8
|
def humanize
|
8
|
-
|
9
|
-
"#{simple_date_format(self.from)}"\
|
10
|
-
"#{Edtf::Humanize.configuration.interval_connector}"\
|
11
|
-
"#{apply_if_approximate(self.to)}"\
|
12
|
-
"#{simple_date_format(self.to)}"
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# '198u/199u' => 1980s to 1990s
|
18
|
-
def apply_if_unspecified_year date
|
19
|
-
display = date_precision(date)
|
20
|
-
if date.respond_to? :unspecified?
|
21
|
-
if date.unspecified? :year
|
22
|
-
display << Edtf::Humanize.configuration.interval_unspecified_suffix
|
23
|
-
end
|
24
|
-
end
|
25
|
-
display
|
9
|
+
language_strategy::Interval.humanizer(self)
|
26
10
|
end
|
27
|
-
|
28
11
|
end
|
29
12
|
end
|
30
13
|
end
|
@@ -1,13 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Edtf
|
2
4
|
module Humanize
|
3
5
|
module IsoDate
|
4
|
-
|
5
|
-
include Edtf::Humanize::Formats
|
6
|
+
include Edtf::Humanize::Language
|
6
7
|
|
7
8
|
def humanize
|
8
|
-
|
9
|
+
language_strategy::IsoDate.humanizer(self)
|
9
10
|
end
|
10
|
-
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Edtf
|
4
|
+
module Humanize
|
5
|
+
module Language
|
6
|
+
module Default
|
7
|
+
module Century
|
8
|
+
include Edtf::Humanize::Language::Default::Formats
|
9
|
+
|
10
|
+
extend self
|
11
|
+
|
12
|
+
def humanizer(date)
|
13
|
+
"#{date.begin.year}" \
|
14
|
+
"#{I18n.t('edtf.terms.century_suffix', default: 's')}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Edtf
|
4
|
+
module Humanize
|
5
|
+
module Language
|
6
|
+
module Default
|
7
|
+
module Decade
|
8
|
+
include Edtf::Humanize::Language::Default::Formats
|
9
|
+
|
10
|
+
extend self
|
11
|
+
|
12
|
+
def humanizer(date)
|
13
|
+
"#{I18n.t('edtf.terms.decade_prefix', default: '')}" \
|
14
|
+
"#{date.begin.year}" \
|
15
|
+
"#{I18n.t('edtf.terms.decade_suffix', default: 's')}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Edtf
|
4
|
+
module Humanize
|
5
|
+
module Language
|
6
|
+
module Default
|
7
|
+
module Formats
|
8
|
+
extend self
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def date_format(date)
|
13
|
+
"#{apply_if_unspecified_year(date)}#{apply_if_uncertain(date)}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def date_precision(date)
|
17
|
+
if date.respond_to? :precision
|
18
|
+
case date.precision
|
19
|
+
when :day # 2010-10-25
|
20
|
+
day_precision_format(date)
|
21
|
+
when :month # 2010-10
|
22
|
+
month_precision_format(date)
|
23
|
+
when :year # 2010
|
24
|
+
year_precision_format(date)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
date
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# October 5, 1995
|
32
|
+
def day_precision_format(date)
|
33
|
+
I18n.localize(
|
34
|
+
date,
|
35
|
+
format: I18n.t('edtf.formats.day_precision_strftime_format',
|
36
|
+
default: '%B %-d, %Y')
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
# October 1995
|
41
|
+
def month_precision_format(date)
|
42
|
+
I18n.localize(
|
43
|
+
date,
|
44
|
+
format: I18n.t('edtf.formats.month_precision_strftime_format',
|
45
|
+
default: '%B %Y')
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
# 1995
|
50
|
+
def year_precision_format(date)
|
51
|
+
date.strftime(I18n.t('edtf.formats.year_precision_strftime_format',
|
52
|
+
default: '%Y'))
|
53
|
+
end
|
54
|
+
|
55
|
+
# '1990~' => circa 1990
|
56
|
+
def apply_prefix_if_approximate(date)
|
57
|
+
return unless date.respond_to?(:approximate?) && date.approximate?
|
58
|
+
|
59
|
+
case date.precision
|
60
|
+
when :year
|
61
|
+
I18n.t('edtf.terms.approximate_date_prefix_year',
|
62
|
+
default: 'circa ')
|
63
|
+
when :month
|
64
|
+
I18n.t('edtf.terms.approximate_date_prefix_month',
|
65
|
+
default: 'circa ')
|
66
|
+
when :day
|
67
|
+
I18n.t('edtf.terms.approximate_date_prefix_day',
|
68
|
+
default: 'circa ')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# '1990~' => 1990 environ
|
73
|
+
def apply_suffix_if_approximate(date)
|
74
|
+
return '' unless date.respond_to?(:approximate?) &&
|
75
|
+
date.approximate?
|
76
|
+
|
77
|
+
case date.precision
|
78
|
+
when :year
|
79
|
+
I18n.t('edtf.terms.approximate_date_suffix_year', default: '')
|
80
|
+
when :month
|
81
|
+
I18n.t('edtf.terms.approximate_date_suffix_month', default: '')
|
82
|
+
when :day
|
83
|
+
I18n.t('edtf.terms.approximate_date_suffix_day', default: '')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# '1990?' => 1990?
|
88
|
+
def apply_if_uncertain(date)
|
89
|
+
return '' unless date.respond_to?(:uncertain?) && date.uncertain?
|
90
|
+
|
91
|
+
I18n.t('edtf.terms.uncertain_date_suffix', default: '?')
|
92
|
+
end
|
93
|
+
|
94
|
+
# '198u' => 198x
|
95
|
+
def apply_if_unspecified_year(date)
|
96
|
+
display = date_precision(date)
|
97
|
+
if date.respond_to?(:unspecified?) && date.unspecified?(:year)
|
98
|
+
year_substitute =
|
99
|
+
date.year_precision.edtf.gsub(
|
100
|
+
/u/,
|
101
|
+
I18n.t('edtf.terms.unspecified_digit_substitute',
|
102
|
+
default: 'x')
|
103
|
+
)
|
104
|
+
display.gsub!(date.year.to_s, year_substitute)
|
105
|
+
end
|
106
|
+
display
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Edtf
|
4
|
+
module Humanize
|
5
|
+
module Language
|
6
|
+
module Default
|
7
|
+
module Interval
|
8
|
+
include Edtf::Humanize::Language::Default::Formats
|
9
|
+
|
10
|
+
extend self
|
11
|
+
|
12
|
+
def humanizer(date)
|
13
|
+
if date.from == :open || date.to == :open
|
14
|
+
open_interval(date)
|
15
|
+
else
|
16
|
+
"#{interval_prefix(date)}" \
|
17
|
+
"#{formatted_date(date.from)}" \
|
18
|
+
"#{interval_connector(date)}" \
|
19
|
+
"#{formatted_date(date.to)}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def open_interval(date)
|
26
|
+
if date.from == :open
|
27
|
+
open_start_interval(formatted_date: formatted_date(date.to),
|
28
|
+
precision: date.to.precision)
|
29
|
+
elsif date.to == :open
|
30
|
+
open_end_interval(formatted_date: formatted_date(date.from),
|
31
|
+
precision: date.from.precision)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# open/1980 => Jusqu'en 1980
|
36
|
+
def open_start_interval(formatted_date:, precision:)
|
37
|
+
case precision
|
38
|
+
when :year
|
39
|
+
I18n.t('edtf.terms.open_start_interval_with_year',
|
40
|
+
date: formatted_date,
|
41
|
+
default: "until #{formatted_date}")
|
42
|
+
when :month
|
43
|
+
I18n.t('edtf.terms.open_start_interval_with_month',
|
44
|
+
date: formatted_date,
|
45
|
+
default: "until #{formatted_date}")
|
46
|
+
when :day
|
47
|
+
I18n.t('edtf.terms.open_start_interval_with_day',
|
48
|
+
date: formatted_date,
|
49
|
+
default: "until #{formatted_date}")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# 1980/open => Depuis 1980
|
54
|
+
def open_end_interval(formatted_date:, precision:)
|
55
|
+
case precision
|
56
|
+
when :year
|
57
|
+
I18n.t('edtf.terms.open_end_interval_with_year',
|
58
|
+
date: formatted_date,
|
59
|
+
default: "since #{formatted_date}")
|
60
|
+
when :month
|
61
|
+
I18n.t('edtf.terms.open_end_interval_with_month',
|
62
|
+
date: formatted_date,
|
63
|
+
default: "since #{formatted_date}")
|
64
|
+
when :day
|
65
|
+
I18n.t('edtf.terms.open_end_interval_with_day',
|
66
|
+
date: formatted_date,
|
67
|
+
default: "since #{formatted_date}")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def formatted_date(date)
|
72
|
+
"#{apply_prefix_if_approximate(date)}" \
|
73
|
+
"#{date_format(date)}" \
|
74
|
+
"#{apply_suffix_if_approximate(date)}"
|
75
|
+
end
|
76
|
+
|
77
|
+
def interval_prefix(date)
|
78
|
+
case date.from.precision
|
79
|
+
when :year
|
80
|
+
I18n.t('edtf.terms.interval_prefix_year', default: '')
|
81
|
+
when :month
|
82
|
+
I18n.t('edtf.terms.interval_prefix_month', default: '')
|
83
|
+
when :day
|
84
|
+
I18n.t('edtf.terms.interval_prefix_day', default: '')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def interval_connector(date)
|
89
|
+
return interval_connector_open if date.to == :open
|
90
|
+
|
91
|
+
return interval_connector_approx if date.to.approximate.day ||
|
92
|
+
date.to.approximate.month ||
|
93
|
+
date.to.approximate.year
|
94
|
+
|
95
|
+
interval_connector_other(date)
|
96
|
+
end
|
97
|
+
|
98
|
+
def interval_connector_open
|
99
|
+
I18n.t('edtf.terms.interval_connector_open')
|
100
|
+
end
|
101
|
+
|
102
|
+
def interval_connector_approx
|
103
|
+
I18n.t('edtf.terms.interval_connector_approximate',
|
104
|
+
default: ' to ')
|
105
|
+
end
|
106
|
+
|
107
|
+
def interval_connector_other(date)
|
108
|
+
case date.to.precision
|
109
|
+
when :year
|
110
|
+
I18n.t('edtf.terms.interval_connector_year', default: ' to ')
|
111
|
+
when :month
|
112
|
+
I18n.t('edtf.terms.interval_connector_month', default: ' to ')
|
113
|
+
when :day
|
114
|
+
I18n.t('edtf.terms.interval_connector_day', default: ' to ')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# '198u/199u' => 1980s to 1990s
|
119
|
+
def apply_if_unspecified_year(date)
|
120
|
+
if date.respond_to?(:unspecified?) && date.unspecified?(:year)
|
121
|
+
return "#{date_precision(date)}" \
|
122
|
+
"#{I18n.t('edtf.terms.interval_unspecified_suffix',
|
123
|
+
default: 's')}"
|
124
|
+
end
|
125
|
+
|
126
|
+
date_precision(date)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Edtf
|
4
|
+
module Humanize
|
5
|
+
module Language
|
6
|
+
module Default
|
7
|
+
module IsoDate
|
8
|
+
include Edtf::Humanize::Language::Default::Formats
|
9
|
+
|
10
|
+
extend self
|
11
|
+
|
12
|
+
def humanizer(date)
|
13
|
+
"#{apply_prefix_if_approximate(date)}" \
|
14
|
+
"#{date_format(date)}" \
|
15
|
+
"#{apply_suffix_if_approximate(date)}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Edtf
|
4
|
+
module Humanize
|
5
|
+
module Language
|
6
|
+
module Default
|
7
|
+
module Season
|
8
|
+
include Edtf::Humanize::Language::Default::Formats
|
9
|
+
|
10
|
+
extend self
|
11
|
+
|
12
|
+
def humanizer(date)
|
13
|
+
"#{apply_prefix_if_approximate(date)}"\
|
14
|
+
"#{translate_season(date.season)} #{date.year}"\
|
15
|
+
"#{apply_suffix_if_approximate(date)}"\
|
16
|
+
"#{apply_if_uncertain(date)}"
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def translate_season(season)
|
22
|
+
I18n.translate!("date.seasons.#{season}")
|
23
|
+
rescue I18n::MissingTranslationData
|
24
|
+
season
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Edtf
|
4
|
+
module Humanize
|
5
|
+
module Language
|
6
|
+
module Default
|
7
|
+
module Set
|
8
|
+
include Edtf::Humanize::Language::Default::Formats
|
9
|
+
|
10
|
+
extend self
|
11
|
+
|
12
|
+
def humanizer(date)
|
13
|
+
format_set_entries(date).to_sentence(
|
14
|
+
words_connector:
|
15
|
+
I18n.t("edtf.terms.set_dates_connector_#{mode(date)}",
|
16
|
+
default: ', '),
|
17
|
+
last_word_connector:
|
18
|
+
I18n.t("edtf.terms.set_last_date_connector_#{mode(date)}",
|
19
|
+
default: default_word_connector(date)),
|
20
|
+
two_words_connector:
|
21
|
+
I18n.t("edtf.terms.set_two_dates_connector_#{mode(date)}",
|
22
|
+
default: default_word_connector(date))
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def default_word_connector(date)
|
29
|
+
mode(date) == 'inclusive' ? ' and ' : ' or '
|
30
|
+
end
|
31
|
+
|
32
|
+
def format_set_entries(dates)
|
33
|
+
dates.entries.map.with_index do |date, index|
|
34
|
+
"#{apply_if_earlier(dates, index)}"\
|
35
|
+
"#{apply_if_later(dates, index)}"\
|
36
|
+
"#{apply_prefix_if_approximate(date)}"\
|
37
|
+
"#{date_format(date)}"\
|
38
|
+
"#{apply_suffix_if_approximate(date)}"\
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# '[..1760-12-03]' => on or before December 3, 1760
|
43
|
+
def apply_if_earlier(dates, index)
|
44
|
+
return earlier_prefix(dates) if dates.earlier? && index.zero?
|
45
|
+
end
|
46
|
+
|
47
|
+
def earlier_prefix(dates)
|
48
|
+
I18n.t("edtf.terms.set_earlier_prefix_#{mode(dates)}",
|
49
|
+
default: earlier_prefix_default(dates))
|
50
|
+
end
|
51
|
+
|
52
|
+
def earlier_prefix_default(dates)
|
53
|
+
mode(dates) == 'inclusive' ? 'on and before ' : 'on or before '
|
54
|
+
end
|
55
|
+
|
56
|
+
# '[1760-12..]' => on or after December 1760
|
57
|
+
def apply_if_later(dates, index)
|
58
|
+
return later_prefix(dates) if dates.later? &&
|
59
|
+
(index + 1) == dates.size
|
60
|
+
end
|
61
|
+
|
62
|
+
def later_prefix(dates)
|
63
|
+
I18n.t("edtf.terms.set_later_prefix_#{mode(dates)}",
|
64
|
+
default: later_prefix_default(dates))
|
65
|
+
end
|
66
|
+
|
67
|
+
def later_prefix_default(dates)
|
68
|
+
mode(dates) == 'inclusive' ? 'on and after ' : 'on or after '
|
69
|
+
end
|
70
|
+
|
71
|
+
def mode(date)
|
72
|
+
date.choice? ? 'exclusive' : 'inclusive'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|