diff --git a/src/i18n/de/common-labels.ts b/src/i18n/de/common-labels.ts new file mode 100644 index 0000000..a498a2d --- /dev/null +++ b/src/i18n/de/common-labels.ts @@ -0,0 +1,7 @@ +import { CommonLabels } from '../models'; + +export const COMMON_LABELS: CommonLabels = { + folderDoesNotExist: 'Ordner exsistiert nicht in dem Verzeichnis:', + settingsNotConfigured: + 'Die Einstellungen der Erweiterung "Lokale Parallelstellen" (Local Bible Ref) sind nicht eingerichtet. Bitte legen Sie den Pfad für die Bibeln fest, bevor Sie versuchen, auf Bibelabschnitte zu verweisen.', +}; diff --git a/src/i18n/de/index.ts b/src/i18n/de/index.ts index d4e766f..83a2db8 100644 --- a/src/i18n/de/index.ts +++ b/src/i18n/de/index.ts @@ -1,7 +1,9 @@ import { BOOKS } from './books'; -import { SETTINGS } from './settings'; +import { COMMON_LABELS } from './common-labels'; +import { SETTINGS_LABELS } from './settings-labels'; export const DE = { BOOKS, - SETTINGS, + COMMON: COMMON_LABELS, + SETTINGS: SETTINGS_LABELS, }; diff --git a/src/i18n/de/settings-labels.ts b/src/i18n/de/settings-labels.ts new file mode 100644 index 0000000..4955bea --- /dev/null +++ b/src/i18n/de/settings-labels.ts @@ -0,0 +1,86 @@ +import { PassageFormat } from 'src/passage-reference'; +import { SettingsLabels } from '../models'; +import { QuoteReferencePosition } from 'src/settings'; + +export const SETTINGS_LABELS: SettingsLabels = { + required: { + name: 'Erforderliche Einstellungen', + controls: { + biblesPath: { + name: 'Bibeldateien', + description: 'Pfad zu den Bibeldateien', + placeholder: 'z.B. Dateien/Bibel', + }, + }, + }, + + optional: { + name: 'Optionale Einstellungen', + controls: { + defaultVersion: { + name: 'Standardversion', + description: + 'Welche Bibelversion soll als Standardversion verwendet werden? Diese Abkürzung muss mit einem Ordner in dem oben angegebenen Pfad übereinstimmen.', + placeholder: 'z.B. Schl2000', + }, + defaultPassageFormat: { + name: 'Standard Bibelstellenformat', + description: + 'Welches Markdownformat soll für einen Bibelstelle standardmäßig ausgewählt werden?', + options: { + [PassageFormat.Manuscript]: 'Manuskript', + [PassageFormat.Paragraph]: 'Abschnitt', + [PassageFormat.Quote]: 'Zitat', + [PassageFormat.Callout]: 'Callout', + }, + }, + bibleFormat: { + name: 'Bibelformat', + description: + 'Der Formatierungsstil, den Sie für Ihre Vault-Bibeln verwenden. Local Bible Ref benötigt diesen, um Textpassagen korrekt zu analysieren.', + }, + }, + }, + + quoteFormat: { + name: 'Einstellungen für das Angebotsformat', + description: 'Einstellungen für das Zitatpassageformat.', + controls: { + includeReference: { + name: 'Referenz angeben', + description: 'Ob ein Verweis auf die Passage aufgenommen werden soll.', + }, + referencePosition: { + name: 'Referenzposition', + description: + 'Die Position der Bezugnahme im Verhältnis zum zitierten Text.', + options: { + [QuoteReferencePosition.Beginning]: 'Anfang', + [QuoteReferencePosition.End]: 'Ende', + }, + }, + linkToPassage: { + name: 'Link zur Passage', + description: + 'Ob Sie den Verweis auf die Passage in Ihrer Tresorbibel verlinken möchten.', + }, + }, + }, + + calloutFormat: { + name: 'Einstellungen für das Callout-Format', + description: 'Einstellungen für das Format des Callout-Passages.', + controls: { + calloutType: { + name: 'Callout-Typ', + description: + 'Die Art des Verweises, der für die Passage verwendet werden soll.', + }, + linkToPassage: { + name: 'Link zur Passage', + description: + 'Ob Sie den Verweis auf die Passage in Ihrer Tresorbibel verlinken möchten.', + }, + }, + }, +}; diff --git a/src/i18n/de/settings.ts b/src/i18n/de/settings.ts deleted file mode 100644 index 95c74df..0000000 --- a/src/i18n/de/settings.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { SettingsLabels } from '../models'; - -export const SETTINGS: SettingsLabels = { - required: { - name: 'Required Settings', - controls: { - biblesPath: { - name: 'Bible pathen', - description: 'The path to the folder containing your bibles.', - placeholder: 'e.g. Data/Bibles', - }, - }, - }, - - optional: { - name: 'Optional Settings', - controls: { - defaultVersion: { - name: 'Default version', - description: - 'The version to use by default - shorthand. This should correspond to a folder in the bibles folder selected above.', - placeholder: 'e.g. NIV', - }, - defaultPassageFormat: { - name: 'Default passage format', - description: 'The markdown format to use for passages by default.', - }, - bibleFormat: { - name: 'Bible format', - description: - 'The formatting style you use for your vault bibles. Local Bible Ref relies on this to parse passages correctly.', - }, - }, - }, - - quoteFormat: { - name: 'Quote Format Settings', - description: 'Settings for the quote passage format.', - controls: { - includeReference: { - name: 'Include reference', - description: 'Whether to include a reference to the passage.', - }, - referencePosition: { - name: 'Reference position', - description: - 'The position of the reference in relation to the quoted text.', - }, - linkToPassage: { - name: 'Link to passage', - description: - 'Whether to link the reference to the passage in your vault Bible.', - }, - }, - }, - - calloutFormat: { - name: 'Callout Format Settings', - description: 'Settings for the callout passage format.', - controls: { - calloutType: { - name: 'Callout type', - description: 'The type of callout to use for the passage.', - }, - linkToPassage: { - name: 'Link to passage', - description: - 'Whether to link the reference to the passage in your vault Bible.', - }, - }, - }, -}; diff --git a/src/i18n/en/common-labels.ts b/src/i18n/en/common-labels.ts new file mode 100644 index 0000000..4ae5a83 --- /dev/null +++ b/src/i18n/en/common-labels.ts @@ -0,0 +1,7 @@ +import { CommonLabels } from '../models'; + +export const COMMON_LABELS: CommonLabels = { + folderDoesNotExist: "Folder doesn't exist at path:", + settingsNotConfigured: + 'Local Bible Ref settings are not configured. Please set the bibles path before attempting to reference passages.', +}; diff --git a/src/i18n/en/index.ts b/src/i18n/en/index.ts index d9cf2fd..7a3805f 100644 --- a/src/i18n/en/index.ts +++ b/src/i18n/en/index.ts @@ -1,7 +1,9 @@ import { BOOKS } from './books'; -import { SETTINGS } from './settings'; +import { COMMON_LABELS } from './common-labels'; +import { SETTINGS_LABELS } from './settings-labels'; export const EN = { BOOKS, - SETTINGS, + COMMON: COMMON_LABELS, + SETTINGS: SETTINGS_LABELS, }; diff --git a/src/i18n/en/settings.ts b/src/i18n/en/settings-labels.ts similarity index 79% rename from src/i18n/en/settings.ts rename to src/i18n/en/settings-labels.ts index ad7fa04..4f9d0d5 100644 --- a/src/i18n/en/settings.ts +++ b/src/i18n/en/settings-labels.ts @@ -1,6 +1,8 @@ +import { PassageFormat } from 'src/passage-reference'; import { SettingsLabels } from '../models'; +import { QuoteReferencePosition } from 'src/settings'; -export const SETTINGS: SettingsLabels = { +export const SETTINGS_LABELS: SettingsLabels = { required: { name: 'Required Settings', controls: { @@ -24,6 +26,12 @@ export const SETTINGS: SettingsLabels = { defaultPassageFormat: { name: 'Default passage format', description: 'The markdown format to use for passages by default.', + options: { + [PassageFormat.Manuscript]: 'Manuscript', + [PassageFormat.Paragraph]: 'Paragraph', + [PassageFormat.Quote]: 'Quote', + [PassageFormat.Callout]: 'Callout', + }, }, bibleFormat: { name: 'Bible format', @@ -45,6 +53,10 @@ export const SETTINGS: SettingsLabels = { name: 'Reference position', description: 'The position of the reference in relation to the quoted text.', + options: { + [QuoteReferencePosition.Beginning]: 'Beginning', + [QuoteReferencePosition.End]: 'End', + }, }, linkToPassage: { name: 'Link to passage', diff --git a/src/i18n/models.ts b/src/i18n/models.ts index f9e05d8..f72cece 100644 --- a/src/i18n/models.ts +++ b/src/i18n/models.ts @@ -1,22 +1,37 @@ +import { PassageFormat } from 'src/passage-reference'; +import { QuoteReferencePosition } from 'src/settings'; + export interface Book { id: string; name: string; aliases: string[]; } +export interface CommonLabels { + folderDoesNotExist: string; + settingsNotConfigured: string; +} + export interface SettingsLabels { required: { name: string; controls: { - biblesPath: ControlWithPlaceholder; + biblesPath: TextControl; }; }; optional: { name: string; controls: { - defaultVersion: ControlWithPlaceholder; - defaultPassageFormat: Control; + defaultVersion: TextControl; + defaultPassageFormat: Control & { + options: { + [PassageFormat.Manuscript]: string; + [PassageFormat.Paragraph]: string; + [PassageFormat.Quote]: string; + [PassageFormat.Callout]: string; + }; + }; bibleFormat: Control; }; }; @@ -26,7 +41,12 @@ export interface SettingsLabels { description: string; controls: { includeReference: Control; - referencePosition: Control; + referencePosition: Control & { + options: { + [QuoteReferencePosition.Beginning]: string; + [QuoteReferencePosition.End]: string; + }; + }; linkToPassage: Control; }; }; @@ -46,6 +66,6 @@ interface Control { description: string; } -interface ControlWithPlaceholder extends Control { +interface TextControl extends Control { placeholder: string; } diff --git a/src/local-bible-ref-setting-tab.ts b/src/local-bible-ref-setting-tab.ts index 3af6e0a..8c7d890 100644 --- a/src/local-bible-ref-setting-tab.ts +++ b/src/local-bible-ref-setting-tab.ts @@ -16,11 +16,14 @@ import { SettingsLabels } from './i18n/models'; import { I18N } from './i18n'; // STILL TODO: -// - Need to add a 'common' labels internationalization file for non-settings labels. (e.g. notices) // - Need to sort out books in PassageReference to use I18N. +// - Need to sort out smallcaps 'Lord' in German. export default class LocalBibleRefSettingTab extends PluginSettingTab { + private readonly hiddenClass = 'local-bible-ref-hidden'; + private plugin: LocalBibleRefPlugin; + private folderDoesNotExistText = ''; private settingsLabels: SettingsLabels; constructor(app: App, plugin: LocalBibleRefPlugin) { @@ -29,10 +32,12 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { switch (getLanguage()) { case 'de': + this.folderDoesNotExistText = I18N.DE.COMMON.folderDoesNotExist; this.settingsLabels = I18N.DE.SETTINGS; break; case 'en': default: + this.folderDoesNotExistText = I18N.EN.COMMON.folderDoesNotExist; this.settingsLabels = I18N.EN.SETTINGS; break; } @@ -57,13 +62,9 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { .onChange(async (value) => { // toggle visibility of default version setting if (value) { - defaultVersionSetting.settingEl.removeClass( - 'local-bible-ref-hidden' - ); + defaultVersionSetting.settingEl.removeClass(this.hiddenClass); } else { - defaultVersionSetting.settingEl.addClass( - 'local-bible-ref-hidden' - ); + defaultVersionSetting.settingEl.addClass(this.hiddenClass); ( defaultVersionSetting.components[0] as TextComponent ).inputEl.value = ''; @@ -78,7 +79,8 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { biblesPathTimeout = window.setTimeout(async () => { if (!path) return; const exists = this.app.vault.getFolderByPath(path); - if (!exists) new Notice(`Folder doesn't exist at path: ${path}.`); + if (!exists) + new Notice(`${this.folderDoesNotExistText} ${path}.`); }, 1000); }); @@ -105,7 +107,8 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { const exists = this.app.vault.getFolderByPath( normalizePath(path) ); - if (!exists) new Notice(`Folder doesn't exist at path: ${path}.`); + if (!exists) + new Notice(`${this.folderDoesNotExistText} ${path}.`); }, 1000); }); @@ -113,9 +116,9 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { }); if (this.plugin.settings.biblesPath) { - defaultVersionSetting.settingEl.removeClass('local-bible-ref-hidden'); + defaultVersionSetting.settingEl.removeClass(this.hiddenClass); } else { - defaultVersionSetting.settingEl.addClass('local-bible-ref-hidden'); + defaultVersionSetting.settingEl.addClass(this.hiddenClass); } new Setting(containerEl) @@ -123,12 +126,7 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { .setDesc(optional.controls.defaultPassageFormat.description) .addDropdown((dropdown) => dropdown - .addOptions({ - manuscript: 'Manuscript', - paragraph: 'Paragraph', - quote: 'Quote', - callout: 'Callout', - }) + .addOptions(optional.controls.defaultPassageFormat.options) .setValue(this.plugin.settings.defaultPassageFormat) .onChange(async (value) => { this.plugin.settings.defaultPassageFormat = value as PassageFormat; @@ -166,17 +164,11 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { .onChange(async (value) => { // toggle visibility of other paragraph reference settings if (value) { - quoteRefPositionSetting.settingEl.removeClass( - 'local-bible-ref-hidden' - ); - quoteRefLinkSetting.settingEl.removeClass( - 'local-bible-ref-hidden' - ); + quoteRefPositionSetting.settingEl.removeClass(this.hiddenClass); + quoteRefLinkSetting.settingEl.removeClass(this.hiddenClass); } else { - quoteRefPositionSetting.settingEl.addClass( - 'local-bible-ref-hidden' - ); - quoteRefLinkSetting.settingEl.addClass('local-bible-ref-hidden'); + quoteRefPositionSetting.settingEl.addClass(this.hiddenClass); + quoteRefLinkSetting.settingEl.addClass(this.hiddenClass); } this.plugin.settings.quote.includeReference = value; @@ -189,10 +181,7 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { .setDesc(quoteFormat.controls.referencePosition.description) .addDropdown((dropdown) => dropdown - .addOptions({ - beginning: 'Beginning', - end: 'End', - }) + .addOptions(quoteFormat.controls.referencePosition.options) .setValue(this.plugin.settings.quote.referencePosition) .onChange(async (value) => { this.plugin.settings.quote.referencePosition = @@ -214,11 +203,11 @@ export default class LocalBibleRefSettingTab extends PluginSettingTab { ); if (this.plugin.settings.quote.includeReference) { - quoteRefPositionSetting.settingEl.removeClass('local-bible-ref-hidden'); - quoteRefLinkSetting.settingEl.removeClass('local-bible-ref-hidden'); + quoteRefPositionSetting.settingEl.removeClass(this.hiddenClass); + quoteRefLinkSetting.settingEl.removeClass(this.hiddenClass); } else { - quoteRefPositionSetting.settingEl.addClass('local-bible-ref-hidden'); - quoteRefLinkSetting.settingEl.addClass('local-bible-ref-hidden'); + quoteRefPositionSetting.settingEl.addClass(this.hiddenClass); + quoteRefLinkSetting.settingEl.addClass(this.hiddenClass); } new Setting(containerEl) diff --git a/src/passage-suggest.ts b/src/passage-suggest.ts index c1455da..2040e42 100644 --- a/src/passage-suggest.ts +++ b/src/passage-suggest.ts @@ -5,6 +5,7 @@ import { EditorSuggest, EditorSuggestContext, EditorSuggestTriggerInfo, + getLanguage, normalizePath, Notice, TFile, @@ -13,14 +14,26 @@ import { import { BibleFormat } from './local-bible-ref-setting-tab'; import PassageReference, { PassageFormat } from './passage-reference'; import LocalBibleRefSettings, { QuoteReferencePosition } from './settings'; +import { I18N } from './i18n'; export default class PassageSuggest extends EditorSuggest { private settings: LocalBibleRefSettings; + private settingsNotConfiguredText = ''; private noSettingsNotice: Notice; constructor(app: App, settings: LocalBibleRefSettings) { super(app); this.settings = settings; + + switch (getLanguage()) { + case 'de': + this.settingsNotConfiguredText = I18N.DE.COMMON.settingsNotConfigured; + break; + case 'en': + default: + this.settingsNotConfiguredText = I18N.EN.COMMON.settingsNotConfigured; + break; + } } onTrigger( @@ -35,10 +48,7 @@ export default class PassageSuggest extends EditorSuggest { // if no settings, alert user if (!this.settings.biblesPath) { if (!this.noSettingsNotice?.messageEl.isShown()) { - const noticeText = - 'Local Bible Ref settings are not ' + - 'configured. Please set the bibles path before ' + - 'attempting to reference passages.'; + const noticeText = this.settingsNotConfiguredText; this.noSettingsNotice = new Notice(noticeText); }