Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Locales #453

Merged
merged 68 commits into from
Jul 31, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
f4b9ad8
Initial commit
cecton Jul 11, 2020
d150d93
Implement locales for format functions
cecton Jul 11, 2020
330edb6
WIP
cecton Jul 12, 2020
b4296af
WIP
cecton Jul 12, 2020
3777c97
Merge commit 130253ef2b914d300c1a0c6cff36cd3a5d846767 (no conflict)
cecton Jul 12, 2020
19f54ab
WIP
cecton Jul 12, 2020
870a7cc
WIP
cecton Jul 12, 2020
f27f6ce
WIP
cecton Jul 12, 2020
44e4fb1
WIP
cecton Jul 12, 2020
083575a
WIP
cecton Jul 12, 2020
9b7fd23
WIP
cecton Jul 12, 2020
61c17d7
WIP
cecton Jul 12, 2020
0213867
WIP
cecton Jul 12, 2020
1e6c086
WIP
cecton Jul 17, 2020
6de9c1a
WIP
cecton Jul 17, 2020
d10deae
WIP
cecton Jul 17, 2020
1f9648f
WIP
cecton Jul 17, 2020
26f3c77
WIP
cecton Jul 17, 2020
a65a2b3
WIP
cecton Jul 17, 2020
e4f16d7
WIP
cecton Jul 17, 2020
f32e4f2
WIP
cecton Jul 17, 2020
ee0853b
WIP
cecton Jul 17, 2020
3f2659e
WIP
cecton Jul 17, 2020
9085b05
WIP
cecton Jul 18, 2020
eacc085
WIP
cecton Jul 18, 2020
e6d601a
Update src/format/mod.rs
cecton Jul 18, 2020
aef41e9
Update src/format/mod.rs
cecton Jul 18, 2020
08be423
Update src/format/mod.rs
cecton Jul 18, 2020
a63d0cf
Update src/format/mod.rs
cecton Jul 18, 2020
12ca2c5
Update src/format/mod.rs
cecton Jul 18, 2020
3c02970
WIP
cecton Jul 19, 2020
72c960c
Update src/format/mod.rs
cecton Jul 19, 2020
be0cdd3
WIP
cecton Jul 19, 2020
048b144
WIP
cecton Jul 19, 2020
1acab1d
WIP
cecton Jul 19, 2020
2052de7
WIP
cecton Jul 19, 2020
1f2fd4f
WIP
cecton Jul 19, 2020
d786694
WIP
cecton Jul 19, 2020
1a80aa0
WIP
cecton Jul 19, 2020
3ef34a0
WIP
cecton Jul 19, 2020
3d52936
WIP
cecton Jul 19, 2020
e07be46
WIP
cecton Jul 19, 2020
5986e3a
WIP
cecton Jul 19, 2020
a417628
WIP
cecton Jul 19, 2020
9cb89fa
WIP
cecton Jul 19, 2020
5d1d9f1
WIP
cecton Jul 19, 2020
119c413
WIP
cecton Jul 19, 2020
790f9d5
Small clean-up
cecton Jul 19, 2020
87aa146
WIP
cecton Jul 24, 2020
2d9c1dc
Remove allow dead_code
cecton Jul 24, 2020
1dbb7fa
Merge commit 41345f10a1592ab9cc538a5cc7d7cad983d6a67c (no conflict)
cecton Jul 24, 2020
76fbfc2
Merge commit bfddc1e5fa9d40c1e9d9ab46fecb3bf7f39315e6 (conflicts)
cecton Jul 24, 2020
ffbb600
Merge branch 'locales' of github.com:cecton/chrono into locales
cecton Jul 24, 2020
dc66629
CLEANUP
cecton Jul 24, 2020
ab0c06a
WIP
cecton Jul 24, 2020
c7a491b
WIP
cecton Jul 24, 2020
16d29e4
Merge commit 53e63c3709332647811f1c738d5ba4a13980d439 (no conflict)
cecton Jul 24, 2020
ea3d20e
Update doc
cecton Jul 24, 2020
f6ecdcb
Revert "Update doc"
cecton Jul 26, 2020
2cdb6d3
Revert "WIP"
cecton Jul 26, 2020
05358ae
CLEANUP
cecton Jul 26, 2020
d1ae67b
WIP
cecton Jul 26, 2020
702c640
Merge commit 0579d2af083e3b73164fd799c424b0481c3823e7 (no conflict)
cecton Jul 26, 2020
90b3e8e
doc
cecton Jul 26, 2020
b6c5395
Doc comments
cecton Jul 26, 2020
6ebc477
Merge commit 38810a33bf4581adfc45a31156b77c3078cb04d7 (conflicts)
cecton Jul 30, 2020
6220e7f
Merge commit 370a20cb7130f9df53c2c50b1f965b58ba279729 (no conflict)
cecton Jul 30, 2020
bc96105
Rename locales feature to "unstable-locales" to make it easier to change
quodlibetor Jul 31, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
WIP
Forked at: aaee912
Parent branch: chronotope/main
  • Loading branch information
cecton committed Jul 17, 2020
commit 1e6c086751348ab05b64c106961b3a4392f6148e
8 changes: 4 additions & 4 deletions src/date.rs
Original file line number Diff line number Diff line change
Expand Up @@ -301,21 +301,21 @@ where
/// Formats the date with the specified formatting items.
#[cfg(any(all(feature = "locales", any(feature = "alloc", feature = "std")), test))]
#[inline]
pub fn format_localized_with_items<'a, I, B>(&self, items: I) -> DelayedFormatLocalized<I>
pub fn format_localized_with_items<'a, I, B>(&self, items: I, locale: impl Into<String>) -> DelayedFormatLocalized<I>
where
I: Iterator<Item = B> + Clone,
B: Borrow<Item<'a>>,
{
DelayedFormatLocalized::new_with_offset(Some(self.naive_local()), None, &self.offset, items)
DelayedFormatLocalized::new_with_offset(Some(self.naive_local()), None, &self.offset, items, locale)
}

/// Formats the date with the specified format string.
/// See the [`format::strftime` module](./format/strftime/index.html)
/// on the supported escape sequences.
#[cfg(any(all(feature = "locales", any(feature = "alloc", feature = "std")), test))]
#[inline]
pub fn format_localized<'a>(&self, fmt: &'a str) -> DelayedFormatLocalized<StrftimeItems<'a>> {
self.format_localized_with_items(StrftimeItems::new(fmt))
pub fn format_localized<'a>(&self, fmt: &'a str, locale: impl Into<String>) -> DelayedFormatLocalized<StrftimeItems<'a>> {
self.format_localized_with_items(StrftimeItems::new(fmt), locale)
}
}

Expand Down
7 changes: 4 additions & 3 deletions src/datetime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,7 @@ where
/// Formats the combined date and time with the specified formatting items.
#[cfg(any(all(feature = "locales", any(feature = "alloc", feature = "std")), test))]
#[inline]
pub fn format_localized_with_items<'a, I, B>(&self, items: I) -> DelayedFormatLocalized<I>
pub fn format_localized_with_items<'a, I, B>(&self, items: I, locale: impl Into<String>) -> DelayedFormatLocalized<I>
where
I: Iterator<Item = B> + Clone,
B: Borrow<Item<'a>>,
Expand All @@ -510,6 +510,7 @@ where
Some(local.time()),
&self.offset,
items,
locale,
)
}

Expand All @@ -518,8 +519,8 @@ where
/// on the supported escape sequences.
#[cfg(any(all(feature = "locales", any(feature = "alloc", feature = "std")), test))]
#[inline]
pub fn format_localized<'a>(&self, fmt: &'a str) -> DelayedFormatLocalized<StrftimeItems<'a>> {
self.format_localized_with_items(StrftimeItems::new(fmt))
pub fn format_localized<'a>(&self, fmt: &'a str, locale: impl Into<String>) -> DelayedFormatLocalized<StrftimeItems<'a>> {
self.format_localized_with_items(StrftimeItems::new(fmt), locale)
}
}

Expand Down
8 changes: 6 additions & 2 deletions src/format/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -813,6 +813,8 @@ pub struct DelayedFormatLocalized<I> {
off: Option<(String, FixedOffset)>,
/// An iterator returning formatting items.
items: I,
/// Locale used for text.
locale: String,
}

#[cfg(any(feature = "alloc", feature = "std", test))]
Expand All @@ -822,8 +824,9 @@ impl<'a, I: Iterator<Item = B> + Clone, B: Borrow<Item<'a>>> DelayedFormatLocali
date: Option<NaiveDate>,
time: Option<NaiveTime>,
items: I,
locale: impl Into<String>,
) -> DelayedFormatLocalized<I> {
DelayedFormatLocalized { date: date, time: time, off: None, items: items }
DelayedFormatLocalized { date: date, time: time, off: None, items: items, locale: locale.into() }
}

/// Makes a new `DelayedFormat` value out of local date and time and UTC offset.
Expand All @@ -832,12 +835,13 @@ impl<'a, I: Iterator<Item = B> + Clone, B: Borrow<Item<'a>>> DelayedFormatLocali
time: Option<NaiveTime>,
offset: &Off,
items: I,
locale: impl Into<String>,
) -> DelayedFormatLocalized<I>
where
Off: Offset + fmt::Display,
{
let name_and_diff = (offset.to_string(), offset.fix());
DelayedFormatLocalized { date: date, time: time, off: Some(name_and_diff), items: items }
DelayedFormatLocalized { date: date, time: time, off: Some(name_and_diff), items: items, locale: locale.into() }
}
}

Expand Down
114 changes: 57 additions & 57 deletions src/format/strftime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -527,75 +527,75 @@ fn test_strftime_docs_localized() {
let dt = FixedOffset::east(34200).ymd(2001, 7, 8).and_hms_nano(0, 34, 59, 1_026_490_708);

// date specifiers
assert_eq!(dt.format_localized("%Y").to_string(), "2001");
assert_eq!(dt.format_localized("%C").to_string(), "20");
assert_eq!(dt.format_localized("%y").to_string(), "01");
assert_eq!(dt.format_localized("%m").to_string(), "07");
assert_eq!(dt.format_localized("%b").to_string(), "Jul");
assert_eq!(dt.format_localized("%B").to_string(), "July");
assert_eq!(dt.format_localized("%h").to_string(), "Jul");
assert_eq!(dt.format_localized("%d").to_string(), "08");
assert_eq!(dt.format_localized("%e").to_string(), " 8");
assert_eq!(dt.format_localized("%e").to_string(), dt.format_localized("%_d").to_string());
assert_eq!(dt.format_localized("%a").to_string(), "Sun");
assert_eq!(dt.format_localized("%A").to_string(), "Sunday");
assert_eq!(dt.format_localized("%w").to_string(), "0");
assert_eq!(dt.format_localized("%u").to_string(), "7");
assert_eq!(dt.format_localized("%U").to_string(), "28");
assert_eq!(dt.format_localized("%W").to_string(), "27");
assert_eq!(dt.format_localized("%G").to_string(), "2001");
assert_eq!(dt.format_localized("%g").to_string(), "01");
assert_eq!(dt.format_localized("%V").to_string(), "27");
assert_eq!(dt.format_localized("%j").to_string(), "189");
assert_eq!(dt.format_localized("%D").to_string(), "07/08/01");
assert_eq!(dt.format_localized("%x").to_string(), "07/08/01");
assert_eq!(dt.format_localized("%F").to_string(), "2001-07-08");
assert_eq!(dt.format_localized("%v").to_string(), " 8-Jul-2001");
assert_eq!(dt.format_localized("%Y", "POSIX").to_string(), "2001");
assert_eq!(dt.format_localized("%C", "POSIX").to_string(), "20");
assert_eq!(dt.format_localized("%y", "POSIX").to_string(), "01");
assert_eq!(dt.format_localized("%m", "POSIX").to_string(), "07");
assert_eq!(dt.format_localized("%b", "POSIX").to_string(), "Jul");
assert_eq!(dt.format_localized("%B", "POSIX").to_string(), "July");
assert_eq!(dt.format_localized("%h", "POSIX").to_string(), "Jul");
assert_eq!(dt.format_localized("%d", "POSIX").to_string(), "08");
assert_eq!(dt.format_localized("%e", "POSIX").to_string(), " 8");
assert_eq!(dt.format_localized("%e", "POSIX").to_string(), dt.format_localized("%_d", "POSIX").to_string());
assert_eq!(dt.format_localized("%a", "POSIX").to_string(), "Sun");
assert_eq!(dt.format_localized("%A", "POSIX").to_string(), "Sunday");
assert_eq!(dt.format_localized("%w", "POSIX").to_string(), "0");
assert_eq!(dt.format_localized("%u", "POSIX").to_string(), "7");
assert_eq!(dt.format_localized("%U", "POSIX").to_string(), "28");
assert_eq!(dt.format_localized("%W", "POSIX").to_string(), "27");
assert_eq!(dt.format_localized("%G", "POSIX").to_string(), "2001");
assert_eq!(dt.format_localized("%g", "POSIX").to_string(), "01");
assert_eq!(dt.format_localized("%V", "POSIX").to_string(), "27");
assert_eq!(dt.format_localized("%j", "POSIX").to_string(), "189");
assert_eq!(dt.format_localized("%D", "POSIX").to_string(), "07/08/01");
assert_eq!(dt.format_localized("%x", "POSIX").to_string(), "07/08/01");
assert_eq!(dt.format_localized("%F", "POSIX").to_string(), "2001-07-08");
assert_eq!(dt.format_localized("%v", "POSIX").to_string(), " 8-Jul-2001");

// time specifiers
assert_eq!(dt.format_localized("%H").to_string(), "00");
assert_eq!(dt.format_localized("%k").to_string(), " 0");
assert_eq!(dt.format_localized("%k").to_string(), dt.format_localized("%_H").to_string());
assert_eq!(dt.format_localized("%I").to_string(), "12");
assert_eq!(dt.format_localized("%l").to_string(), "12");
assert_eq!(dt.format_localized("%l").to_string(), dt.format_localized("%_I").to_string());
assert_eq!(dt.format_localized("%P").to_string(), "am");
assert_eq!(dt.format_localized("%p").to_string(), "AM");
assert_eq!(dt.format_localized("%M").to_string(), "34");
assert_eq!(dt.format_localized("%S").to_string(), "60");
assert_eq!(dt.format_localized("%f").to_string(), "026490708");
assert_eq!(dt.format_localized("%.f").to_string(), ".026490708");
assert_eq!(dt.format_localized("%H", "POSIX").to_string(), "00");
assert_eq!(dt.format_localized("%k", "POSIX").to_string(), " 0");
assert_eq!(dt.format_localized("%k", "POSIX").to_string(), dt.format_localized("%_H", "POSIX").to_string());
assert_eq!(dt.format_localized("%I", "POSIX").to_string(), "12");
assert_eq!(dt.format_localized("%l", "POSIX").to_string(), "12");
assert_eq!(dt.format_localized("%l", "POSIX").to_string(), dt.format_localized("%_I", "POSIX").to_string());
assert_eq!(dt.format_localized("%P", "POSIX").to_string(), "am");
assert_eq!(dt.format_localized("%p", "POSIX").to_string(), "AM");
assert_eq!(dt.format_localized("%M", "POSIX").to_string(), "34");
assert_eq!(dt.format_localized("%S", "POSIX").to_string(), "60");
assert_eq!(dt.format_localized("%f", "POSIX").to_string(), "026490708");
assert_eq!(dt.format_localized("%.f", "POSIX").to_string(), ".026490708");
assert_eq!(
dt.with_nanosecond(1_026_490_000).unwrap().format_localized("%.f").to_string(),
dt.with_nanosecond(1_026_490_000).unwrap().format_localized("%.f", "POSIX").to_string(),
".026490"
);
assert_eq!(dt.format_localized("%.3f").to_string(), ".026");
assert_eq!(dt.format_localized("%.6f").to_string(), ".026490");
assert_eq!(dt.format_localized("%.9f").to_string(), ".026490708");
assert_eq!(dt.format_localized("%3f").to_string(), "026");
assert_eq!(dt.format_localized("%6f").to_string(), "026490");
assert_eq!(dt.format_localized("%9f").to_string(), "026490708");
assert_eq!(dt.format_localized("%R").to_string(), "00:34");
assert_eq!(dt.format_localized("%T").to_string(), "00:34:60");
assert_eq!(dt.format_localized("%X").to_string(), "00:34:60");
assert_eq!(dt.format_localized("%r").to_string(), "12:34:60 AM");
assert_eq!(dt.format_localized("%.3f", "POSIX").to_string(), ".026");
assert_eq!(dt.format_localized("%.6f", "POSIX").to_string(), ".026490");
assert_eq!(dt.format_localized("%.9f", "POSIX").to_string(), ".026490708");
assert_eq!(dt.format_localized("%3f", "POSIX").to_string(), "026");
assert_eq!(dt.format_localized("%6f", "POSIX").to_string(), "026490");
assert_eq!(dt.format_localized("%9f", "POSIX").to_string(), "026490708");
assert_eq!(dt.format_localized("%R", "POSIX").to_string(), "00:34");
assert_eq!(dt.format_localized("%T", "POSIX").to_string(), "00:34:60");
assert_eq!(dt.format_localized("%X", "POSIX").to_string(), "00:34:60");
assert_eq!(dt.format_localized("%r", "POSIX").to_string(), "12:34:60 AM");

// time zone specifiers
//assert_eq!(dt.format_localized("%Z").to_string(), "ACST");
assert_eq!(dt.format_localized("%z").to_string(), "+0930");
assert_eq!(dt.format_localized("%:z").to_string(), "+09:30");
//assert_eq!(dt.format_localized("%Z", "POSIX").to_string(), "ACST");
assert_eq!(dt.format_localized("%z", "POSIX").to_string(), "+0930");
assert_eq!(dt.format_localized("%:z", "POSIX").to_string(), "+09:30");

// date & time specifiers
assert_eq!(dt.format_localized("%c").to_string(), "Sun Jul 8 00:34:60 2001");
assert_eq!(dt.format_localized("%+").to_string(), "2001-07-08T00:34:60.026490708+09:30");
assert_eq!(dt.format_localized("%c", "POSIX").to_string(), "Sun Jul 8 00:34:60 2001");
assert_eq!(dt.format_localized("%+", "POSIX").to_string(), "2001-07-08T00:34:60.026490708+09:30");
assert_eq!(
dt.with_nanosecond(1_026_490_000).unwrap().format_localized("%+").to_string(),
dt.with_nanosecond(1_026_490_000).unwrap().format_localized("%+", "POSIX").to_string(),
"2001-07-08T00:34:60.026490+09:30"
);
assert_eq!(dt.format_localized("%s").to_string(), "994518299");
assert_eq!(dt.format_localized("%s", "POSIX").to_string(), "994518299");

// special specifiers
assert_eq!(dt.format_localized("%t").to_string(), "\t");
assert_eq!(dt.format_localized("%n").to_string(), "\n");
assert_eq!(dt.format_localized("%%").to_string(), "%");
assert_eq!(dt.format_localized("%t", "POSIX").to_string(), "\t");
assert_eq!(dt.format_localized("%n", "POSIX").to_string(), "\n");
assert_eq!(dt.format_localized("%%", "POSIX").to_string(), "%");
}