edtf-humanize 1.0.0 → 2.1.0
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 +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
|