feat(options/language): store list of languages

This commit is contained in:
Elian Doran 2025-03-02 21:58:40 +02:00
parent bc787213f4
commit e7d2be4663
No known key found for this signature in database
4 changed files with 25 additions and 4 deletions

View File

@ -28,15 +28,33 @@ export default class LanguageOptions extends OptionsWidget {
this.$languagesContainer = this.$widget.find(".options-languages"); this.$languagesContainer = this.$widget.find(".options-languages");
} }
async save() {
const enabledLanguages: string[] = [];
this.$languagesContainer.find("input:checked").each((i, el) => {
const languageId = $(el).attr("data-language-id");
if (languageId) {
enabledLanguages.push(languageId);
}
});
await this.updateOption("languages", JSON.stringify(enabledLanguages));
}
async optionsLoaded(options: OptionMap) { async optionsLoaded(options: OptionMap) {
const availableLocales = await server.get<Locale[]>("options/locales"); const availableLocales = await server.get<Locale[]>("options/locales");
const enabledLanguages = (JSON.parse(options.languages) as string[]);
this.$languagesContainer.empty(); this.$languagesContainer.empty();
for (const locale of availableLocales) { for (const locale of availableLocales) {
const checkbox = $(`<label class="tn-checkbox">`) const checkbox = $('<input type="checkbox" class="form-check-input">')
.append($('<input type="checkbox" class="form-check-input">')) .attr("data-language-id", locale.id)
.prop("checked", enabledLanguages.includes(locale.id));
const wrapper = $(`<label class="tn-checkbox">`)
.append(checkbox)
.on("change", () => this.save())
.append(locale.name); .append(locale.name);
this.$languagesContainer.append($("<li>").append(checkbox)); this.$languagesContainer.append($("<li>").append(wrapper));
} }
} }

View File

@ -71,6 +71,7 @@ const ALLOWED_OPTIONS = new Set([
"editedNotesOpenInRibbon", "editedNotesOpenInRibbon",
"locale", "locale",
"firstDayOfWeek", "firstDayOfWeek",
"languages",
"textNoteEditorType", "textNoteEditorType",
"textNoteEditorMultilineToolbar", "textNoteEditorMultilineToolbar",
"layoutOrientation", "layoutOrientation",

View File

@ -124,7 +124,7 @@ const defaultOptions: DefaultOption[] = [
{ name: "highlightsList", value: '["bold","italic","underline","color","bgColor"]', isSynced: true }, { name: "highlightsList", value: '["bold","italic","underline","color","bgColor"]', isSynced: true },
{ name: "checkForUpdates", value: "true", isSynced: true }, { name: "checkForUpdates", value: "true", isSynced: true },
{ name: "disableTray", value: "false", isSynced: false }, { name: "disableTray", value: "false", isSynced: false },
{ name: "eraseUnusedAttachmentsAfterSeconds", value: "2592000", isSynced: true }, // default 30 days { name: "eraseUnusedAttachmentsAfterSeconds", value: "2592000", isSynced: true }, // default 30 days
{ name: "eraseUnusedAttachmentsAfterTimeScale", value: "86400", isSynced: true }, // default 86400 seconds = Day { name: "eraseUnusedAttachmentsAfterTimeScale", value: "86400", isSynced: true }, // default 86400 seconds = Day
{ name: "customSearchEngineName", value: "DuckDuckGo", isSynced: true }, { name: "customSearchEngineName", value: "DuckDuckGo", isSynced: true },
{ name: "customSearchEngineUrl", value: "https://duckduckgo.com/?q={keyword}", isSynced: true }, { name: "customSearchEngineUrl", value: "https://duckduckgo.com/?q={keyword}", isSynced: true },
@ -134,6 +134,7 @@ const defaultOptions: DefaultOption[] = [
// Internationalization // Internationalization
{ name: "locale", value: "en", isSynced: true }, { name: "locale", value: "en", isSynced: true },
{ name: "firstDayOfWeek", value: "1", isSynced: true }, { name: "firstDayOfWeek", value: "1", isSynced: true },
{ name: "languages", value: "[]", isSynced: true },
// Code block configuration // Code block configuration
{ {

View File

@ -71,6 +71,7 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions<KeyboardActi
eraseUnusedAttachmentsAfterSeconds: number; eraseUnusedAttachmentsAfterSeconds: number;
eraseUnusedAttachmentsAfterTimeScale: number; eraseUnusedAttachmentsAfterTimeScale: number;
firstDayOfWeek: number; firstDayOfWeek: number;
languages: string;
initialized: boolean; initialized: boolean;
isPasswordSet: boolean; isPasswordSet: boolean;