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");
}
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) {
const availableLocales = await server.get<Locale[]>("options/locales");
const enabledLanguages = (JSON.parse(options.languages) as string[]);
this.$languagesContainer.empty();
for (const locale of availableLocales) {
const checkbox = $(`<label class="tn-checkbox">`)
.append($('<input type="checkbox" class="form-check-input">'))
const checkbox = $('<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);
this.$languagesContainer.append($("<li>").append(checkbox));
this.$languagesContainer.append($("<li>").append(wrapper));
}
}

View File

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

View File

@ -124,7 +124,7 @@ const defaultOptions: DefaultOption[] = [
{ name: "highlightsList", value: '["bold","italic","underline","color","bgColor"]', isSynced: true },
{ name: "checkForUpdates", value: "true", isSynced: true },
{ 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: "customSearchEngineName", value: "DuckDuckGo", isSynced: true },
{ name: "customSearchEngineUrl", value: "https://duckduckgo.com/?q={keyword}", isSynced: true },
@ -134,6 +134,7 @@ const defaultOptions: DefaultOption[] = [
// Internationalization
{ name: "locale", value: "en", isSynced: true },
{ name: "firstDayOfWeek", value: "1", isSynced: true },
{ name: "languages", value: "[]", isSynced: true },
// Code block configuration
{

View File

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