From ec06503104f28c9e8739f7302c4f9ae3f897d34a Mon Sep 17 00:00:00 2001 From: Jin <22962980+JYC333@users.noreply.github.com> Date: Sat, 29 Mar 2025 13:34:47 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20first=20week=20of?= =?UTF-8?q?=20year=20option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widgets/type_widgets/options/i18n/i18n.ts | 57 ++++++++++++++++++- src/public/translations/cn/translation.json | 8 ++- src/public/translations/en/translation.json | 5 ++ src/services/options_init.ts | 2 + src/services/options_interface.ts | 2 + 5 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/public/app/widgets/type_widgets/options/i18n/i18n.ts b/src/public/app/widgets/type_widgets/options/i18n/i18n.ts index e4324393d..fe0d47f7f 100644 --- a/src/public/app/widgets/type_widgets/options/i18n/i18n.ts +++ b/src/public/app/widgets/type_widgets/options/i18n/i18n.ts @@ -35,6 +35,35 @@ const TPL = ` +
+ +
+ + + + + +
+
+ +
+ + +
+
@@ -64,6 +93,16 @@ const TPL = ` .locale-options-container .option-row.centered { justify-content: center; } + + .locale-options-container .option-row [aria-labelledby="first-week-of-year-label"] { + display: flex; + flex-direction: column; + } + + .locale-options-container .option-row [aria-labelledby="first-week-of-year-label"] .tn-radio { + margin-left: 0; + white-space: nowrap; + } `; @@ -92,6 +131,17 @@ export default class LocalizationOptions extends OptionsWidget { const firstDayOfWeek = String(this.$widget.find(`input[name="first-day-of-week"]:checked`).val()); this.updateOption("firstDayOfWeek", firstDayOfWeek); }); + + this.$widget.find(`input[name="first-week-of-year"]`).on("change", () => { + const firstWeekOfYear = String(this.$widget.find(`input[name="first-week-of-year"]:checked`).val()); + this.updateOption("firstWeekOfYear", firstWeekOfYear); + }); + + this.$widget.find("#min-days-in-first-week").on("change", () => { + const minDays = String(this.$widget.find("#min-days-in-first-week").val()); + this.updateOption("minDaysInFirstWeek", minDays); + }); + this.$widget.find(".restart-app-button").on("click", utils.restartDesktopApp); } @@ -119,6 +169,11 @@ export default class LocalizationOptions extends OptionsWidget { this.$formattingLocaleSelect.val(options.formattingLocale); this.$widget.find(`input[name="first-day-of-week"][value="${options.firstDayOfWeek}"]`) - .prop("checked", "true"); + .prop("checked", "true"); + + this.$widget.find(`input[name="first-week-of-year"][value="${options.firstWeekOfYear || '0'}"]`) + .prop("checked", "true"); + + this.$widget.find("#min-days-in-first-week").val(options.minDaysInFirstWeek || "4"); } } diff --git a/src/public/translations/cn/translation.json b/src/public/translations/cn/translation.json index 5ac95e14f..7a582447b 100644 --- a/src/public/translations/cn/translation.json +++ b/src/public/translations/cn/translation.json @@ -1232,7 +1232,13 @@ "language": "语言", "first-day-of-the-week": "一周的第一天", "sunday": "周日", - "monday": "周一" + "monday": "周一", + "first-week-of-the-year": "一年的第一周", + "first-week-contains-first-day": "第一周包含一年的第一天", + "first-week-contains-first-thursday": "第一周包含一年的第一个周四", + "first-week-has-minimum-days": "第一周有最小天数", + "min-days-in-first-week": "第一周的最小天数", + "formatting-locale": "日期和数字格式" }, "backup": { "automatic_backup": "自动备份", diff --git a/src/public/translations/en/translation.json b/src/public/translations/en/translation.json index 13bb74dfd..b440d316d 100644 --- a/src/public/translations/en/translation.json +++ b/src/public/translations/en/translation.json @@ -1243,6 +1243,11 @@ "first-day-of-the-week": "First day of the week", "sunday": "Sunday", "monday": "Monday", + "first-week-of-the-year": "First week of the year", + "first-week-contains-first-day": "First week contains first day of the year", + "first-week-contains-first-thursday": "First week contains first Thursday of the year", + "first-week-has-minimum-days": "First week has minimum days", + "min-days-in-first-week": "Minimum days in first week", "formatting-locale": "Date & number format" }, "backup": { diff --git a/src/services/options_init.ts b/src/services/options_init.ts index 14967a6d6..52417bbb2 100644 --- a/src/services/options_init.ts +++ b/src/services/options_init.ts @@ -143,6 +143,8 @@ const defaultOptions: DefaultOption[] = [ { name: "locale", value: "en", isSynced: true }, { name: "formattingLocale", value: "en", isSynced: true }, { name: "firstDayOfWeek", value: "1", isSynced: true }, + { name: "firstWeekOfYear", value: "0", isSynced: true }, + { name: "minDaysInFirstWeek", value: "4", isSynced: true }, { name: "languages", value: "[]", isSynced: true }, // Code block configuration diff --git a/src/services/options_interface.ts b/src/services/options_interface.ts index cdd9184fb..07b89ebe2 100644 --- a/src/services/options_interface.ts +++ b/src/services/options_interface.ts @@ -85,6 +85,8 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions