mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-07-25 22:12:59 +00:00
Keep translation details out of startup path
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { getLanguage, requireApiVersion } from "@/deps";
|
||||
import { getLanguage, Notice, requireApiVersion } from "@/deps";
|
||||
import { createServiceFeature } from "@vrtmrz/livesync-commonlib/compat/interfaces/ServiceModule";
|
||||
import { SUPPORTED_I18N_LANGS, type I18N_LANGS } from "@/common/rosetta";
|
||||
import { $msg, __onMissingTranslation, setLang } from "@/common/translation";
|
||||
@@ -15,7 +15,40 @@ function tryGetLanguage(onError: (error: unknown) => void) {
|
||||
return "en";
|
||||
}
|
||||
|
||||
export const enableI18nFeature = createServiceFeature(async ({ services: { setting, API } }) => {
|
||||
class ObsidianLanguageAppliedNotice {
|
||||
private reminder: Notice | undefined;
|
||||
|
||||
show(openDetails: () => void): void {
|
||||
this.clear();
|
||||
let reminderAnchor: HTMLAnchorElement | undefined;
|
||||
const appliedMessage =
|
||||
$msg("dialog.yourLanguageAvailable")
|
||||
.split(/\r?\n\s*\r?\n/u, 1)[0]
|
||||
?.trim() ?? $msg("Display Language");
|
||||
const fragment = createFragment((documentFragment) => {
|
||||
documentFragment.createSpan({
|
||||
text: `${appliedMessage} `,
|
||||
});
|
||||
documentFragment.createEl("a", { text: $msg("Open the dialog") }, (anchor) => {
|
||||
reminderAnchor = anchor;
|
||||
anchor.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
this.clear();
|
||||
openDetails();
|
||||
});
|
||||
});
|
||||
});
|
||||
this.reminder = new Notice(fragment, 0);
|
||||
reminderAnchor?.closest<HTMLElement>(".notice")?.classList.add("livesync-language-applied-notice");
|
||||
}
|
||||
|
||||
clear(): void {
|
||||
this.reminder?.hide();
|
||||
this.reminder = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export const enableI18nFeature = createServiceFeature(async ({ services: { setting, API, appLifecycle } }) => {
|
||||
// Clear missing translation handler to avoid unnecessary warnings.
|
||||
__onMissingTranslation(() => {});
|
||||
let isChanged = false;
|
||||
@@ -36,26 +69,48 @@ export const enableI18nFeature = createServiceFeature(async ({ services: { setti
|
||||
// settings.displayLanguage = obsidianLanguage as I18N_LANGS;
|
||||
await setting.applyPartial({ displayLanguage: obsidianLanguage as I18N_LANGS });
|
||||
isChanged = true;
|
||||
setLang(settings.displayLanguage);
|
||||
setLang(obsidianLanguage as I18N_LANGS);
|
||||
} else if (settings.displayLanguage == "") {
|
||||
// settings.displayLanguage = "def";
|
||||
await setting.applyPartial({ displayLanguage: "def" });
|
||||
setLang(settings.displayLanguage);
|
||||
setLang("def");
|
||||
await setting.saveSettingData();
|
||||
}
|
||||
}
|
||||
if (isChanged) {
|
||||
const revert = $msg("dialog.yourLanguageAvailable.btnRevertToDefault");
|
||||
if (
|
||||
(await API.confirm.askSelectStringDialogue($msg(`dialog.yourLanguageAvailable`), ["OK", revert], {
|
||||
defaultAction: "OK",
|
||||
title: $msg(`dialog.yourLanguageAvailable.Title`),
|
||||
})) == revert
|
||||
) {
|
||||
await setting.applyPartial({ displayLanguage: "def" });
|
||||
setLang(settings.displayLanguage);
|
||||
}
|
||||
await setting.saveSettingData();
|
||||
const reminder = new ObsidianLanguageAppliedNotice();
|
||||
appLifecycle.onUnload.addHandler(() => {
|
||||
reminder.clear();
|
||||
return Promise.resolve(true);
|
||||
});
|
||||
reminder.show(() => {
|
||||
void (async () => {
|
||||
try {
|
||||
const revert = $msg("dialog.yourLanguageAvailable.btnRevertToDefault");
|
||||
if (
|
||||
(await API.confirm.askSelectStringDialogue(
|
||||
$msg(`dialog.yourLanguageAvailable`),
|
||||
["OK", revert],
|
||||
{
|
||||
defaultAction: "OK",
|
||||
title: $msg("Display Language"),
|
||||
}
|
||||
)) == revert
|
||||
) {
|
||||
await setting.applyPartial({ displayLanguage: "def" });
|
||||
setLang("def");
|
||||
await setting.saveSettingData();
|
||||
}
|
||||
} catch (error) {
|
||||
API.addLog(
|
||||
`Failed to open translation details: ${String(error)}`,
|
||||
LOG_LEVEL_VERBOSE,
|
||||
"i18n-language"
|
||||
);
|
||||
}
|
||||
})();
|
||||
});
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user