UNPKG

@hebcal/leyning

Version:

Torah Reading API for Parashat HaShavua and holidays

108 lines (105 loc) 4.46 kB
/*! @hebcal/leyning v9.5.4 */ import { makeSummaryFromParts, makeLeyningParts } from './summary.js'; import './locale.js'; import { formatVerseToHebrew } from './format.js'; import { Locale } from '@hebcal/core/dist/esm/locale'; /** * Translates an aliyah's book name and verse numbers to the target language. * Modifies the aliyah object in place. * @param aliyah - The aliyah object to translate * @param language - The target language code (e.g., 'he' for Hebrew) * @param translateBook - Whether to translate the book name (default true) */ function translateAliyah(aliyah, language) { if (language === 'he') { aliyah.k = Locale.gettext(aliyah.k, language); aliyah.b = formatVerseToHebrew(aliyah.b); aliyah.e = formatVerseToHebrew(aliyah.e); } return aliyah; } /** * Translates aliyah(s) - handles single Aliyah, arrays, and AliyotMap. * For non-English languages, translates book names and converts verse numbers to Hebrew numerals. * Returns a new translated copy, leaving the original unchanged. * @param aliyahOrArray - Single Aliyah, array of Aliyah objects, AliyotMap, or undefined * @param language - The target language code (e.g., 'he' for Hebrew) * @param translateBook - Whether to translate the book name (default true) * @returns Translated copy of the input, or undefined if input was undefined */ function translateAliyahOrArray(aliyahOrArray, language = 'en') { // Handle array of Aliyah objects if (Array.isArray(aliyahOrArray)) { const result = aliyahOrArray.map(aliyah => { const copy = { ...aliyah }; return translateAliyah(copy, language); }); return result; } // Handle single Aliyah object (has 'k' or 'b' property) if ('k' in aliyahOrArray || 'b' in aliyahOrArray) { const copy = { ...aliyahOrArray }; return translateAliyah(copy, language); } // Handle AliyotMap (Record<string, Aliyah>) const result = {}; for (const [key, aliyah] of Object.entries(aliyahOrArray)) { const copy = { ...aliyah }; result[key] = translateAliyah(copy, language); } return result; } /** * Translates a Leyning object to the target language. * @param leyning - The Leyning object to translate * @param language - The target language code (e.g., 'he' for Hebrew) * @returns The translated Leyning object * @example * const leyning: Leyning = { * seph: [{k: 'Genesis', b: '1:1', e: '1:5'}], * haft: [{k: 'Genesis', b: '1:6', e: '1:10'}], * megillah: [{k: 'Genesis', b: '1:11', e: '1:15'}], * fullkriyah: [{k: 'Genesis', b: '1:16', e: '1:20'}], * }; * const translatedLeyning = translateLeyning(leyning, 'he'); * @todo add reason translation */ function translateLeyning(leyning, language) { if (language === 'en') { return leyning; } if (leyning.seph) { leyning.sephardic = makeSummaryFromParts(leyning.seph, language); leyning.seph = translateAliyahOrArray(leyning.seph, language); } if (leyning.haft) { leyning.haftara = makeSummaryFromParts(leyning.haft, language); leyning.haft = translateAliyahOrArray(leyning.haft, language); } if (leyning.megillah) { const parts = makeLeyningParts(leyning.megillah); const megillahSummary = makeSummaryFromParts(parts, language); leyning.megillah = translateAliyahOrArray(leyning.megillah, language); leyning.summary = megillahSummary; } if (leyning.fullkriyah) { const parts = makeLeyningParts(leyning.fullkriyah); // TODO: add check for summary in those cases getLeyningForHolidayKey if (typeof leyning.fullkriyah['1'] === 'object') { leyning.summary = makeSummaryFromParts(parts, language); } leyning.fullkriyah = translateAliyahOrArray(leyning.fullkriyah, language); if (leyning.summaryParts) { leyning.summaryParts = translateAliyahOrArray(leyning.summaryParts, language); leyning.summary = makeSummaryFromParts(leyning.summaryParts, language); } } if (leyning.weekday) { const parts = makeLeyningParts(leyning.weekday); leyning.weekday = translateAliyahOrArray(leyning.weekday, language); leyning.summary = makeSummaryFromParts(parts, language); } return leyning; } export { translateAliyah, translateAliyahOrArray, translateLeyning }; //# sourceMappingURL=translate.js.map