3 - Began the work of internationalization.

This commit is contained in:
Caleb Campbell
2025-12-26 09:12:04 +11:00
parent aa09a2aaa2
commit 0275b5a439
10 changed files with 379 additions and 4 deletions

70
src/books/books.de.ts Normal file
View File

@@ -0,0 +1,70 @@
import { Book } from "./books.en";
export const BOOKS_DE: Book[] = [
{ name: "1. Mose", aliases: ["Genesis", "Gen", "1Mo"] },
{ name: "2. Mose", aliases: ["Exodus", "Ex", "2Mo"] },
{ name: "3. Mose", aliases: ["Levitikus", "Lev", "3Mo"] },
{ name: "4. Mose", aliases: ["Numeri", "Num", "4Mo"] },
{ name: "5. Mose", aliases: ["Deuteronomium", "Dtn", "5Mo"] },
{ name: "Josua", aliases: ["Jos", "Jos"] },
{ name: "Richter", aliases: ["Ri", "Richt"] },
{ name: "Rut", aliases: ["Rut", "Ru"] },
{ name: "1. Samuel", aliases: ["1Sam", "1Sa"] },
{ name: "2. Samuel", aliases: ["2Sam", "2Sa"] },
{ name: "1. Könige", aliases: ["1Kön", "1Kö"] },
{ name: "2. Könige", aliases: ["2Kön", "2Kö"] },
{ name: "1. Chronik", aliases: ["1Chr", "1Ch"] },
{ name: "2. Chronik", aliases: ["2Chr", "2Ch"] },
{ name: "Esra", aliases: ["Esr", "Esr"] },
{ name: "Nehemia", aliases: ["Neh", "Neh"] },
{ name: "Ester", aliases: ["Esther", "Est", "Est"] },
{ name: "Ijob", aliases: ["Hiob", "Ijob", "Hi"] },
{ name: "Psalmen", aliases: ["Psalter", "Ps"] },
{ name: "Sprüche", aliases: ["Sprüche Salomos", "Spr"] },
{ name: "Kohelet", aliases: ["Prediger", "Koh", "Pred"] },
{ name: "Hoheslied", aliases: ["Lied der Lieder", "Hld", "Hl"] },
{ name: "Jesaja", aliases: ["Jes"] },
{ name: "Jeremia", aliases: ["Jer"] },
{ name: "Klagelieder", aliases: ["Threni", "Klgl", "Kla"] },
{ name: "Ezechiel", aliases: ["Hesekiel", "Ez", "Hes"] },
{ name: "Daniel", aliases: ["Dan"] },
{ name: "Hosea", aliases: ["Hos", "Hos"] },
{ name: "Joel", aliases: ["Joe"] },
{ name: "Amos", aliases: ["Am", "Amos"] },
{ name: "Obadja", aliases: ["Ob", "Oba"] },
{ name: "Jona", aliases: ["Jon"] },
{ name: "Micha", aliases: ["Mi", "Mic"] },
{ name: "Nahum", aliases: ["Nah"] },
{ name: "Habakuk", aliases: ["Hab", "Hab"] },
{ name: "Zefanja", aliases: ["Zephanja", "Zef", "Zeph"] },
{ name: "Haggai", aliases: ["Hag"] },
{ name: "Sacharja", aliases: ["Sach"] },
{ name: "Maleachi", aliases: ["Mal"] },
{ name: "Matthäus", aliases: ["Mt"] },
{ name: "Markus", aliases: ["Mk"] },
{ name: "Lukas", aliases: ["Lk"] },
{ name: "Johannes", aliases: ["Joh"] },
{ name: "Apostelgeschichte", aliases: ["Taten der Apostel", "Apg"] },
{ name: "Römer", aliases: ["Röm", "Rö"] },
{ name: "1. Korinther", aliases: ["1Kor", "1Ko"] },
{ name: "2. Korinther", aliases: ["2Kor", "2Ko"] },
{ name: "Galater", aliases: ["Gal", "Gal"] },
{ name: "Epheser", aliases: ["Eph", "Eph"] },
{ name: "Philipper", aliases: ["Phil"] },
{ name: "Kolosser", aliases: ["Kol"] },
{ name: "1. Thessalonicher", aliases: ["1Thes", "1Th"] },
{ name: "2. Thessalonicher", aliases: ["2Thes", "2Th"] },
{ name: "1. Timotheus", aliases: ["1Tim", "1Ti"] },
{ name: "2. Timotheus", aliases: ["2Tim", "2Ti"] },
{ name: "Titus", aliases: ["Tit"] },
{ name: "Philemon", aliases: ["Phlm", "Phm"] },
{ name: "Hebräer", aliases: ["Hebr", "Heb"] },
{ name: "Jakobus", aliases: ["Jak", "Jak"] },
{ name: "1. Petrus", aliases: ["1Pet", "1Pe"] },
{ name: "2. Petrus", aliases: ["2Pet", "2Pe"] },
{ name: "1. Johannes", aliases: ["1Joh", "1Jo"] },
{ name: "2. Johannes", aliases: ["2Joh", "2Jo"] },
{ name: "3. Johannes", aliases: ["3Joh", "3Jo"] },
{ name: "Judas", aliases: ["Jud"] },
{ name: "Offenbarung", aliases: ["Apokalypse", "Off", "Apk"] },
];

View File

@@ -3,7 +3,7 @@ export interface Book {
aliases: string[];
}
export const BOOKS: Book[] = [
export const BOOKS_EN: Book[] = [
{ name: "Genesis", aliases: ["gen"] },
{ name: "Exodus", aliases: ["exo", "ex", "exod"] },
{ name: "Leviticus", aliases: ["lev"] },

70
src/i18n/de/books.ts Normal file
View File

@@ -0,0 +1,70 @@
import { Book } from "../models";
export const BOOKS_DE: Book[] = [
{ id: "gen", name: "1. Mose", aliases: ["Genesis", "Gen", "1Mo"] },
{ id: "exo", name: "2. Mose", aliases: ["Exodus", "Ex", "2Mo"] },
{ id: "lev", name: "3. Mose", aliases: ["Levitikus", "Lev", "3Mo"] },
{ id: "num", name: "4. Mose", aliases: ["Numeri", "Num", "4Mo"] },
{ id: "deu", name: "5. Mose", aliases: ["Deuteronomium", "Dtn", "5Mo"] },
{ id: "jos", name: "Josua", aliases: ["Jos", "Jos"] },
{ id: "jdg", name: "Richter", aliases: ["Ri", "Richt"] },
{ id: "rut", name: "Rut", aliases: ["Rut", "Ru"] },
{ id: "1sa", name: "1. Samuel", aliases: ["1Sam", "1Sa"] },
{ id: "2sa", name: "2. Samuel", aliases: ["2Sam", "2Sa"] },
{ id: "1ki", name: "1. Könige", aliases: ["1Kön", "1Kö"] },
{ id: "2ki", name: "2. Könige", aliases: ["2Kön", "2Kö"] },
{ id: "1ch", name: "1. Chronik", aliases: ["1Chr", "1Ch"] },
{ id: "2ch", name: "2. Chronik", aliases: ["2Chr", "2Ch"] },
{ id: "ezr", name: "Esra", aliases: ["Esr", "Esr"] },
{ id: "neh", name: "Nehemia", aliases: ["Neh", "Neh"] },
{ id: "est", name: "Ester", aliases: ["Esther", "Est", "Est"] },
{ id: "job", name: "Ijob", aliases: ["Hiob", "Ijob", "Hi"] },
{ id: "psa", name: "Psalmen", aliases: ["Psalter", "Ps"] },
{ id: "pro", name: "Sprüche", aliases: ["Sprüche Salomos", "Spr"] },
{ id: "ecc", name: "Kohelet", aliases: ["Prediger", "Koh", "Pred"] },
{ id: "sng", name: "Hoheslied", aliases: ["Lied der Lieder", "Hld", "Hl"] },
{ id: "isa", name: "Jesaja", aliases: ["Jes"] },
{ id: "jer", name: "Jeremia", aliases: ["Jer"] },
{ id: "lam", name: "Klagelieder", aliases: ["Threni", "Klgl", "Kla"] },
{ id: "ezk", name: "Ezechiel", aliases: ["Hesekiel", "Ez", "Hes"] },
{ id: "dan", name: "Daniel", aliases: ["Dan"] },
{ id: "hos", name: "Hosea", aliases: ["Hos", "Hos"] },
{ id: "jol", name: "Joel", aliases: ["Joe"] },
{ id: "amo", name: "Amos", aliases: ["Am", "Amos"] },
{ id: "oba", name: "Obadja", aliases: ["Ob", "Oba"] },
{ id: "jon", name: "Jona", aliases: ["Jon"] },
{ id: "mic", name: "Micha", aliases: ["Mi", "Mic"] },
{ id: "nam", name: "Nahum", aliases: ["Nah"] },
{ id: "hab", name: "Habakuk", aliases: ["Hab", "Hab"] },
{ id: "zep", name: "Zefanja", aliases: ["Zephanja", "Zef", "Zeph"] },
{ id: "hag", name: "Haggai", aliases: ["Hag"] },
{ id: "zec", name: "Sacharja", aliases: ["Sach"] },
{ id: "mal", name: "Maleachi", aliases: ["Mal"] },
{ id: "mat", name: "Matthäus", aliases: ["Mt"] },
{ id: "mrk", name: "Markus", aliases: ["Mk"] },
{ id: "luk", name: "Lukas", aliases: ["Lk"] },
{ id: "jhn", name: "Johannes", aliases: ["Joh"] },
{ id: "act", name: "Apostelgeschichte", aliases: ["Taten der Apostel", "Apg"] },
{ id: "rom", name: "Römer", aliases: ["Röm", "Rö"] },
{ id: "1co", name: "1. Korinther", aliases: ["1Kor", "1Ko"] },
{ id: "2co", name: "2. Korinther", aliases: ["2Kor", "2Ko"] },
{ id: "gal", name: "Galater", aliases: ["Gal", "Gal"] },
{ id: "eph", name: "Epheser", aliases: ["Eph", "Eph"] },
{ id: "php", name: "Philipper", aliases: ["Phil"] },
{ id: "col", name: "Kolosser", aliases: ["Kol"] },
{ id: "1th", name: "1. Thessalonicher", aliases: ["1Thes", "1Th"] },
{ id: "2th", name: "2. Thessalonicher", aliases: ["2Thes", "2Th"] },
{ id: "1ti", name: "1. Timotheus", aliases: ["1Tim", "1Ti"] },
{ id: "2ti", name: "2. Timotheus", aliases: ["2Tim", "2Ti"] },
{ id: "tit", name: "Titus", aliases: ["Tit"] },
{ id: "phm", name: "Philemon", aliases: ["Phlm", "Phm"] },
{ id: "heb", name: "Hebräer", aliases: ["Hebr", "Heb"] },
{ id: "jas", name: "Jakobus", aliases: ["Jak", "Jak"] },
{ id: "1pe", name: "1. Petrus", aliases: ["1Pet", "1Pe"] },
{ id: "2pe", name: "2. Petrus", aliases: ["2Pet", "2Pe"] },
{ id: "1jn", name: "1. Johannes", aliases: ["1Joh", "1Jo"] },
{ id: "2jn", name: "2. Johannes", aliases: ["2Joh", "2Jo"] },
{ id: "3jn", name: "3. Johannes", aliases: ["3Joh", "3Jo"] },
{ id: "jud", name: "Judas", aliases: ["Jud"] },
{ id: "rev", name: "Offenbarung", aliases: ["Apokalypse", "Off", "Apk"] },
];

65
src/i18n/de/settings.ts Normal file
View File

@@ -0,0 +1,65 @@
import { Settings } from "../models";
export const SETTINGS: Settings = {
required: {
name: 'Required Settings',
controls: {
biblesPath: {
name: 'Bibles path',
description: 'The path to the folder containing your 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.'
},
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.'
}
}
}
}

70
src/i18n/en/books.ts Normal file
View File

@@ -0,0 +1,70 @@
import { Book } from "../models";
export const BOOKS: Book[] = [
{ id: "gen", name: "Genesis", aliases: ["gen"] },
{ id: "exo", name: "Exodus", aliases: ["exo", "ex", "exod"] },
{ id: "lev", name: "Leviticus", aliases: ["lev"] },
{ id: "num", name: "Numbers", aliases: ["num"] },
{ id: "deu", name: "Deuteronomy", aliases: ["deu", "deut"] },
{ id: "jos", name: "Joshua", aliases: ["jos", "josh"] },
{ id: "jdg", name: "Judges", aliases: ["jdg", "judg"] },
{ id: "rut", name: "Ruth", aliases: ["rut"] },
{ id: "1sa", name: "1 Samuel", aliases: ["1sa", "1samuel", "1 sam", "1st sam", "1st samuel", "first samuel"] },
{ id: "2sa", name: "2 Samuel", aliases: ["2sa", "2samuel", "2 sam", "2nd sam", "2nd samuel", "second samuel"] },
{ id: "1ki", name: "1 Kings", aliases: ["1ki", "1kings", "1 kgs", "1st kgs", "1st kings", "first kings"] },
{ id: "2ki", name: "2 Kings", aliases: ["2ki", "2kings", "2 kgs", "2nd kgs", "2nd kings", "second kings"] },
{ id: "1ch", name: "1 Chronicles", aliases: ["1ch", "1chronicles", "1 chr", "1st chr", "1st chronicles", "first chronicles"] },
{ id: "2ch", name: "2 Chronicles", aliases: ["2ch", "2chronicles", "2 chr", "2nd chr", "2nd chronicles", "second chronicles"] },
{ id: "ezr", name: "Ezra", aliases: ["ezr"] },
{ id: "neh", name: "Nehemiah", aliases: ["neh"] },
{ id: "est", name: "Esther", aliases: ["est", "esth"] },
{ id: "job", name: "Job", aliases: ["job"] },
{ id: "psa", name: "Psalms", aliases: ["psa", "ps", "psalm"] },
{ id: "pro", name: "Proverbs", aliases: ["pro", "prov"] },
{ id: "ecc", name: "Ecclesiastes", aliases: ["ecc", "eccl"] },
{ id: "sng", name: "Song of Songs", aliases: ["sng", "Song of Solomon", "song"] },
{ id: "isa", name: "Isaiah", aliases: ["isa"] },
{ id: "jer", name: "Jeremiah", aliases: ["jer"] },
{ id: "lam", name: "Lamentations", aliases: ["lam"] },
{ id: "ezk", name: "Ezekiel", aliases: ["ezk", "ezek"] },
{ id: "dan", name: "Daniel", aliases: ["dan"] },
{ id: "hos", name: "Hosea", aliases: ["hos"] },
{ id: "jol", name: "Joel", aliases: ["jol"] },
{ id: "amo", name: "Amos", aliases: ["amo"] },
{ id: "oba", name: "Obadiah", aliases: ["oba", "obad"] },
{ id: "jon", name: "Jonah", aliases: ["jon"] },
{ id: "mic", name: "Micah", aliases: ["mic"] },
{ id: "nam", name: "Nahum", aliases: ["nam"] },
{ id: "hab", name: "Habakkuk", aliases: ["hab"] },
{ id: "zep", name: "Zephaniah", aliases: ["zep", "zeph"] },
{ id: "hag", name: "Haggai", aliases: ["hag"] },
{ id: "zec", name: "Zechariah", aliases: ["zec", "zech"] },
{ id: "mal", name: "Malachi", aliases: ["mal"] },
{ id: "mat", name: "Matthew", aliases: ["mat", "matt"] },
{ id: "mrk", name: "Mark", aliases: ["mrk"] },
{ id: "luk", name: "Luke", aliases: ["luk"] },
{ id: "jhn", name: "John", aliases: ["jhn"] },
{ id: "act", name: "Acts", aliases: ["act"] },
{ id: "rom", name: "Romans", aliases: ["rom"] },
{ id: "1co", name: "1 Corinthians", aliases: ["1co", "1corinthians", "1 cor", "1st cor", "1st corinthians", "first corinthians"] },
{ id: "2co", name: "2 Corinthians", aliases: ["2co", "2corinthians", "2 cor", "2nd cor", "2nd corinthians", "second corinthians"] },
{ id: "gal", name: "Galatians", aliases: ["gal"] },
{ id: "eph", name: "Ephesians", aliases: ["eph"] },
{ id: "php", name: "Philippians", aliases: ["php", "phil"] },
{ id: "col", name: "Colossians", aliases: ["col"] },
{ id: "1th", name: "1 Thessalonians", aliases: ["1th", "1thessalonians", "1 thess", "1st thess", "1st thessalonians", "first thessalonians"] },
{ id: "2th", name: "2 Thessalonians", aliases: ["2th", "2thessalonians", "2 thess", "2nd thess", "2nd thessalonians", "second thessalonians"] },
{ id: "1ti", name: "1 Timothy", aliases: ["1ti", "1timothy", "1 tim", "1st tim", "1st timothy", "first timothy"] },
{ id: "2ti", name: "2 Timothy", aliases: ["2ti", "2timothy", "2 tim", "2nd tim", "2nd timothy", "second timothy"] },
{ id: "tit", name: "Titus", aliases: ["tit"] },
{ id: "phm", name: "Philemon", aliases: ["phm", "phlm"] },
{ id: "heb", name: "Hebrews", aliases: ["heb"] },
{ id: "jas", name: "James", aliases: ["jas"] },
{ id: "1pe", name: "1 Peter", aliases: ["1pe", "1peter", "1 pet", "1st pet", "1st peter", "first peter"] },
{ id: "2pe", name: "2 Peter", aliases: ["2pe", "2peter", "2 pet", "2nd pet", "2nd peter", "second peter"] },
{ id: "1jn", name: "1 John", aliases: ["1jn", "1john", "1st john", "first john"] },
{ id: "2jn", name: "2 John", aliases: ["2jn", "2john", "2nd john", "second john"] },
{ id: "3jn", name: "3 John", aliases: ["3jn", "3john", "3rd john", "third john"] },
{ id: "jud", name: "Jude", aliases: ["jud"] },
{ id: "rev", name: "Revelation", aliases: ["rev"] },
];

7
src/i18n/en/index.ts Normal file
View File

@@ -0,0 +1,7 @@
import { BOOKS } from "./books";
import { SETTINGS } from "./settings";
export const EN = {
BOOKS,
SETTINGS,
}

67
src/i18n/en/settings.ts Normal file
View File

@@ -0,0 +1,67 @@
import { Settings } from "../models";
export const SETTINGS: Settings = {
required: {
name: 'Required Settings',
controls: {
biblesPath: {
name: 'Bibles path',
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.'
}
}
}
}

5
src/i18n/index.ts Normal file
View File

@@ -0,0 +1,5 @@
import { EN } from "./en";
export const I18N = {
EN,
}

21
src/i18n/models.ts Normal file
View File

@@ -0,0 +1,21 @@
export interface Book {
id: string;
name: string;
aliases: string[];
}
export interface Settings {
[key: string]: SettingsGroup
}
interface SettingsGroup {
name: string;
description?: string;
controls: { [key: string]: Control };
}
interface Control {
name: string;
description?: string;
placeholder?: string;
}

View File

@@ -1,4 +1,4 @@
import { Book, BOOKS } from "./books";
import { Book, BOOKS_EN } from "./books/books.en";
export default class PassageReference implements ChapterReference, PassageOptions {
startChapter: number;
@@ -52,7 +52,7 @@ export default class PassageReference implements ChapterReference, PassageOption
/** Builds the passage matching regular expression. */
static get regExp(): RegExp {
let regExpString = "^\\-\\- ?(";
regExpString += BOOKS.map(
regExpString += BOOKS_EN.map(
(b) => `${b.name}|${b.aliases.join("|")}`
).join("|");
regExpString += ") ?(\\d{1,3}(?::\\d{1,3})?" +
@@ -149,7 +149,7 @@ export default class PassageReference implements ChapterReference, PassageOption
/** Retrieves a book based on its alias. */
private static getBook(alias: string): Book | undefined {
alias = alias.toLowerCase();
return BOOKS.find((book) => {
return BOOKS_EN.find((book) => {
const aliases = book.aliases.map((a) => a.toLowerCase());
if (book.name.toLowerCase() === alias) return book;
if (aliases.includes(alias)) return book;