Localize all timestamps (#21440)
Following * #21410 We are now able to localize all timestamps. Some examples: `short-date` format, French, user profile page:  `date-time` format, Portuguese, mirror repository settings page:  Signed-off-by: Yarden Shoham <hrsi88@gmail.com> Signed-off-by: Yarden Shoham <hrsi88@gmail.com> Co-authored-by: Gusted <williamzijl7@hotmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
parent
683c9af89f
commit
acdb92ad42
20 changed files with 49 additions and 27 deletions
|
@ -1,7 +1,10 @@
|
|||
import {prettyNumber} from '../utils.js';
|
||||
|
||||
const {lang} = document.documentElement;
|
||||
|
||||
const dateFormatter = new Intl.DateTimeFormat(lang, {year: 'numeric', month: 'long', day: 'numeric'});
|
||||
const shortDateFormatter = new Intl.DateTimeFormat(lang, {year: 'numeric', month: 'short', day: 'numeric'});
|
||||
const dateTimeFormatter = new Intl.DateTimeFormat(lang, {year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric'});
|
||||
|
||||
export function initFormattingReplacements() {
|
||||
// replace english formatted numbers with locale-specific separators
|
||||
|
@ -13,9 +16,28 @@ export function initFormattingReplacements() {
|
|||
}
|
||||
}
|
||||
|
||||
// for each <time></time> tag, if it has the data-format="date" attribute, format
|
||||
// the text according to the user's chosen locale
|
||||
for (const timeElement of document.querySelectorAll('time[data-format="date"]')) {
|
||||
timeElement.textContent = dateFormatter.format(new Date(timeElement.dateTime));
|
||||
// for each <time></time> tag, if it has the data-format attribute, format
|
||||
// the text according to the user's chosen locale and formatter.
|
||||
formatAllTimeElements();
|
||||
}
|
||||
|
||||
function formatAllTimeElements() {
|
||||
const timeElements = document.querySelectorAll('time[data-format]');
|
||||
for (const timeElement of timeElements) {
|
||||
const formatter = getFormatter(timeElement.dataset.format);
|
||||
timeElement.textContent = formatter.format(new Date(timeElement.dateTime));
|
||||
}
|
||||
}
|
||||
|
||||
function getFormatter(format) {
|
||||
switch (format) {
|
||||
case 'date':
|
||||
return dateFormatter;
|
||||
case 'short-date':
|
||||
return shortDateFormatter;
|
||||
case 'date-time':
|
||||
return dateTimeFormatter;
|
||||
default:
|
||||
throw new Error('Unknown format');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue