mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-08-08 17:22:29 +08:00
fix: 🐛 fix ordinal locale
This commit is contained in:
parent
dc16b2cb26
commit
79a7513325
@ -8,6 +8,7 @@ import hoistedNoteService from "./hoisted_note.js";
|
|||||||
import type BNote from "../becca/entities/bnote.js";
|
import type BNote from "../becca/entities/bnote.js";
|
||||||
import optionService from "./options.js";
|
import optionService from "./options.js";
|
||||||
import { t } from "i18next";
|
import { t } from "i18next";
|
||||||
|
import i18next from "i18next";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import type { Dayjs } from "dayjs";
|
import type { Dayjs } from "dayjs";
|
||||||
import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
|
import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
|
||||||
@ -59,7 +60,24 @@ function getTimeUnitReplacements(timeUnit: TimeUnit): string[] {
|
|||||||
return units.slice(0, index + 1).flatMap(unit => baseReplacements[unit]);
|
return units.slice(0, index + 1).flatMap(unit => baseReplacements[unit]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getJournalNoteTitle(rootNote: BNote, timeUnit: TimeUnit, dateObj: Dayjs, number: number) {
|
async function ordinal(date: Dayjs, lng: string) {
|
||||||
|
const localeMap: Record<string, string> = {
|
||||||
|
'cn': 'zh-cn',
|
||||||
|
'tw': 'zh-tw'
|
||||||
|
};
|
||||||
|
|
||||||
|
const dayjsLocale = localeMap[lng] || lng;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await import(`dayjs/locale/${dayjsLocale}.js`);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(`Could not load locale ${dayjsLocale}`, err);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dayjs(date).locale(dayjsLocale).format('Do');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getJournalNoteTitle(rootNote: BNote, timeUnit: TimeUnit, dateObj: Dayjs, number: number) {
|
||||||
const patterns = {
|
const patterns = {
|
||||||
year: rootNote.getOwnedLabelValue("yearPattern") || "{year}",
|
year: rootNote.getOwnedLabelValue("yearPattern") || "{year}",
|
||||||
quarter: rootNote.getOwnedLabelValue("quarterPattern") || t('quarterNumber'),
|
quarter: rootNote.getOwnedLabelValue("quarterPattern") || t('quarterNumber'),
|
||||||
@ -72,6 +90,7 @@ function getJournalNoteTitle(rootNote: BNote, timeUnit: TimeUnit, dateObj: Dayjs
|
|||||||
const monthName = t(MONTH_TRANSLATION_IDS[dateObj.month()]);
|
const monthName = t(MONTH_TRANSLATION_IDS[dateObj.month()]);
|
||||||
const weekDay = t(WEEKDAY_TRANSLATION_IDS[dateObj.day()]);
|
const weekDay = t(WEEKDAY_TRANSLATION_IDS[dateObj.day()]);
|
||||||
const numberStr = number.toString();
|
const numberStr = number.toString();
|
||||||
|
const ordinalStr = await ordinal(dateObj, i18next.language);
|
||||||
|
|
||||||
const allReplacements: Record<string, string> = {
|
const allReplacements: Record<string, string> = {
|
||||||
// Common date formats
|
// Common date formats
|
||||||
@ -99,7 +118,7 @@ function getJournalNoteTitle(rootNote: BNote, timeUnit: TimeUnit, dateObj: Dayjs
|
|||||||
'{isoDate}': dateObj.format('YYYY-MM-DD'),
|
'{isoDate}': dateObj.format('YYYY-MM-DD'),
|
||||||
'{dateNumber}': numberStr,
|
'{dateNumber}': numberStr,
|
||||||
'{dateNumberPadded}': numberStr.padStart(2, '0'),
|
'{dateNumberPadded}': numberStr.padStart(2, '0'),
|
||||||
'{ordinal}': dateObj.format('Do'),
|
'{ordinal}': ordinalStr,
|
||||||
'{weekDay}': weekDay,
|
'{weekDay}': weekDay,
|
||||||
'{weekDay3}': weekDay.substring(0, 3),
|
'{weekDay3}': weekDay.substring(0, 3),
|
||||||
'{weekDay2}': weekDay.substring(0, 2)
|
'{weekDay2}': weekDay.substring(0, 2)
|
||||||
@ -192,7 +211,7 @@ function getQuarterNumberStr(date: Dayjs) {
|
|||||||
return `${date.year()}-Q${date.quarter()}`;
|
return `${date.year()}-Q${date.quarter()}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getQuarterNote(quarterStr: string, _rootNote: BNote | null = null): BNote {
|
async function getQuarterNote(quarterStr: string, _rootNote: BNote | null = null): Promise<BNote> {
|
||||||
const rootNote = _rootNote || getRootCalendarNote();
|
const rootNote = _rootNote || getRootCalendarNote();
|
||||||
|
|
||||||
quarterStr = quarterStr.trim().substring(0, 7);
|
quarterStr = quarterStr.trim().substring(0, 7);
|
||||||
@ -209,7 +228,7 @@ function getQuarterNote(quarterStr: string, _rootNote: BNote | null = null): BNo
|
|||||||
const quarterStartDate = dayjs().year(parseInt(yearStr)).month(firstMonth).date(1);
|
const quarterStartDate = dayjs().year(parseInt(yearStr)).month(firstMonth).date(1);
|
||||||
|
|
||||||
const yearNote = getYearNote(yearStr, rootNote);
|
const yearNote = getYearNote(yearStr, rootNote);
|
||||||
const noteTitle = getJournalNoteTitle(rootNote, 'quarter', quarterStartDate, quarterNumber);
|
const noteTitle = await getJournalNoteTitle(rootNote, 'quarter', quarterStartDate, quarterNumber);
|
||||||
|
|
||||||
sql.transactional(() => {
|
sql.transactional(() => {
|
||||||
quarterNote = createNote(yearNote, noteTitle);
|
quarterNote = createNote(yearNote, noteTitle);
|
||||||
@ -227,7 +246,7 @@ function getQuarterNote(quarterStr: string, _rootNote: BNote | null = null): BNo
|
|||||||
return quarterNote as unknown as BNote;
|
return quarterNote as unknown as BNote;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMonthNote(dateStr: string, _rootNote: BNote | null = null): BNote {
|
async function getMonthNote(dateStr: string, _rootNote: BNote | null = null): Promise<BNote> {
|
||||||
const rootNote = _rootNote || getRootCalendarNote();
|
const rootNote = _rootNote || getRootCalendarNote();
|
||||||
|
|
||||||
const monthStr = dateStr.substring(0, 7);
|
const monthStr = dateStr.substring(0, 7);
|
||||||
@ -242,12 +261,12 @@ function getMonthNote(dateStr: string, _rootNote: BNote | null = null): BNote {
|
|||||||
let monthParentNote;
|
let monthParentNote;
|
||||||
|
|
||||||
if (rootNote.hasLabel('enableQuarterNote')) {
|
if (rootNote.hasLabel('enableQuarterNote')) {
|
||||||
monthParentNote = getQuarterNote(getQuarterNumberStr(dayjs(dateStr)), rootNote);
|
monthParentNote = await getQuarterNote(getQuarterNumberStr(dayjs(dateStr)), rootNote);
|
||||||
} else {
|
} else {
|
||||||
monthParentNote = getYearNote(dateStr, rootNote);
|
monthParentNote = getYearNote(dateStr, rootNote);
|
||||||
}
|
}
|
||||||
|
|
||||||
const noteTitle = getJournalNoteTitle(rootNote, 'month', dayjs(dateStr), parseInt(monthNumber));
|
const noteTitle = await getJournalNoteTitle(rootNote, 'month', dayjs(dateStr), parseInt(monthNumber));
|
||||||
|
|
||||||
sql.transactional(() => {
|
sql.transactional(() => {
|
||||||
monthNote = createNote(monthParentNote, noteTitle);
|
monthNote = createNote(monthParentNote, noteTitle);
|
||||||
@ -354,7 +373,7 @@ function getWeekFirstDayNote(dateStr: string, rootNote: BNote | null = null) {
|
|||||||
return getDayNote(weekStartDate.format('YYYY-MM-DD'), rootNote);
|
return getDayNote(weekStartDate.format('YYYY-MM-DD'), rootNote);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getWeekNote(weekStr: string, _rootNote: BNote | null = null): BNote | null {
|
async function getWeekNote(weekStr: string, _rootNote: BNote | null = null): Promise<BNote | null> {
|
||||||
const rootNote = _rootNote || getRootCalendarNote();
|
const rootNote = _rootNote || getRootCalendarNote();
|
||||||
if (!rootNote.hasLabel('enableWeekNote')) {
|
if (!rootNote.hasLabel('enableWeekNote')) {
|
||||||
return null;
|
return null;
|
||||||
@ -379,10 +398,10 @@ function getWeekNote(weekStr: string, _rootNote: BNote | null = null): BNote | n
|
|||||||
const startMonth = startDate.month();
|
const startMonth = startDate.month();
|
||||||
const endMonth = endDate.month();
|
const endMonth = endDate.month();
|
||||||
|
|
||||||
const monthNote = getMonthNote(startDate.format('YYYY-MM-DD'), rootNote);
|
const monthNote = await getMonthNote(startDate.format('YYYY-MM-DD'), rootNote);
|
||||||
const noteTitle = getJournalNoteTitle(rootNote, 'week', startDate, weekNumber);
|
const noteTitle = await getJournalNoteTitle(rootNote, 'week', startDate, weekNumber);
|
||||||
|
|
||||||
sql.transactional(() => {
|
sql.transactional(async () => {
|
||||||
weekNote = createNote(monthNote, noteTitle);
|
weekNote = createNote(monthNote, noteTitle);
|
||||||
|
|
||||||
attributeService.createLabel(weekNote.noteId, WEEK_LABEL, weekStr);
|
attributeService.createLabel(weekNote.noteId, WEEK_LABEL, weekStr);
|
||||||
@ -396,7 +415,7 @@ function getWeekNote(weekStr: string, _rootNote: BNote | null = null): BNote | n
|
|||||||
|
|
||||||
// If the week spans different months, clone the week note in the other month as well
|
// If the week spans different months, clone the week note in the other month as well
|
||||||
if (startMonth !== endMonth) {
|
if (startMonth !== endMonth) {
|
||||||
const secondMonthNote = getMonthNote(endDate.format('YYYY-MM-DD'), rootNote);
|
const secondMonthNote = await getMonthNote(endDate.format('YYYY-MM-DD'), rootNote);
|
||||||
cloningService.cloneNoteToParentNote(weekNote.noteId, secondMonthNote.noteId);
|
cloningService.cloneNoteToParentNote(weekNote.noteId, secondMonthNote.noteId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -404,7 +423,7 @@ function getWeekNote(weekStr: string, _rootNote: BNote | null = null): BNote | n
|
|||||||
return weekNote as unknown as BNote;
|
return weekNote as unknown as BNote;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDayNote(dateStr: string, _rootNote: BNote | null = null): BNote {
|
async function getDayNote(dateStr: string, _rootNote: BNote | null = null): Promise<BNote> {
|
||||||
const rootNote = _rootNote || getRootCalendarNote();
|
const rootNote = _rootNote || getRootCalendarNote();
|
||||||
|
|
||||||
dateStr = dateStr.trim().substring(0, 10);
|
dateStr = dateStr.trim().substring(0, 10);
|
||||||
@ -418,13 +437,13 @@ function getDayNote(dateStr: string, _rootNote: BNote | null = null): BNote {
|
|||||||
let dateParentNote;
|
let dateParentNote;
|
||||||
|
|
||||||
if (rootNote.hasLabel('enableWeekNote')) {
|
if (rootNote.hasLabel('enableWeekNote')) {
|
||||||
dateParentNote = getWeekNote(getWeekNumberStr(dayjs(dateStr)), rootNote);
|
dateParentNote = await getWeekNote(getWeekNumberStr(dayjs(dateStr)), rootNote);
|
||||||
} else {
|
} else {
|
||||||
dateParentNote = getMonthNote(dateStr, rootNote);
|
dateParentNote = await getMonthNote(dateStr, rootNote);
|
||||||
}
|
}
|
||||||
|
|
||||||
const dayNumber = dateStr.substring(8, 10);
|
const dayNumber = dateStr.substring(8, 10);
|
||||||
const noteTitle = getJournalNoteTitle(rootNote, 'day', dayjs(dateStr), parseInt(dayNumber));
|
const noteTitle = await getJournalNoteTitle(rootNote, 'day', dayjs(dateStr), parseInt(dayNumber));
|
||||||
|
|
||||||
sql.transactional(() => {
|
sql.transactional(() => {
|
||||||
dateNote = createNote(dateParentNote as BNote, noteTitle);
|
dateNote = createNote(dateParentNote as BNote, noteTitle);
|
||||||
@ -454,7 +473,5 @@ export default {
|
|||||||
getWeekFirstDayNote,
|
getWeekFirstDayNote,
|
||||||
getDayNote,
|
getDayNote,
|
||||||
getTodayNote,
|
getTodayNote,
|
||||||
getJournalNoteTitle,
|
getJournalNoteTitle
|
||||||
getWeekStartDate,
|
|
||||||
getWeekNumberStr
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user