diff --git a/README.md b/README.md index a2cb5a43..c525fd77 100644 --- a/README.md +++ b/README.md @@ -114,9 +114,10 @@ Currently, we only support enhanced parsing for the following languages: ```bash Chinese Mandarin (Simplified), Chinese Mandarin (Traditional) Dutch -Enlish +English French German +Haitian Creole Italian Japanese Korean diff --git a/crowdin.yml b/crowdin.yml index 0d5f22e2..dcfa7c85 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,4 +1,4 @@ -'pull_request_title': 'feat(localize): updated translation from Crowdin' +'pull_request_title': 'fix(locales): updated translation from Crowdin' 'pull_request_labels': ['crowdin'] files: diff --git a/src/browser/utils.browser.ts b/src/browser/utils.browser.ts index fa71b397..f2666c91 100644 --- a/src/browser/utils.browser.ts +++ b/src/browser/utils.browser.ts @@ -2,6 +2,7 @@ import * as path from 'path-browserify'; import CH from '../locales/cmn-Hant/text.json'; import CHS from '../locales/ch-CHS/text.json'; +import CR from '../locales/ht-HT/text.json'; import E from '../locales/en/text.json'; import F from '../locales/fr-FR/text.json'; import FI from '../locales/fi-FI/text.json'; @@ -15,6 +16,7 @@ import O from '../locales/nl-NL/text.json'; import P from '../locales/pl-PL/text.json'; import PGW from '../locales/wes-PGW/text.json'; import S from '../locales/es-ES/text.json'; +import ST from '../locales/et-EE/text.json'; import SV from '../locales/sl-SI/text.json'; import SW from '../locales/sw-KE/text.json'; import T from '../locales/pt-BR/text.json'; @@ -40,6 +42,7 @@ window.jw_epub_parser = { languages: { CH, CHS, + CR, E, F, FI, @@ -53,6 +56,7 @@ window.jw_epub_parser = { P, PGW, S, + ST, SV, SW, T, diff --git a/src/common/date_parser.ts b/src/common/date_parser.ts index b5cc1730..ac9fb75e 100644 --- a/src/common/date_parser.ts +++ b/src/common/date_parser.ts @@ -1,6 +1,7 @@ import { JWEPUBParserError } from '../classes/error.js'; import { WDateParsing, WDateParsingResult, LangRegExp, MWBDateParsingResult, MWBDateParsing } from '../types/index.js'; import { getMonthNames } from './language_rules.js'; +import overrides from './override.js'; const dateRangeSeparator = `\\s? bis |[-–—]| do | — | – \\s?`; const wordWithDiacritics = `\\p{L}+|\\p{L}+\\p{M}*`; @@ -75,6 +76,7 @@ const mwbDatePatterns: LangRegExp = { P: new RegExp(mwbDatePatternP, 'giu'), PGW: new RegExp(mwbDatePatternE, 'giu'), S: new RegExp(mwbDatePatternS, 'giu'), + ST: new RegExp(mwbDatePatternX, 'giu'), SV: new RegExp(mwbDatePatternX, 'giu'), SW: new RegExp(mwbDatePatternE, 'giu'), T: new RegExp(mwbDatePatternT, 'giu'), @@ -255,6 +257,7 @@ const wDatePatterns: LangRegExp = { P: new RegExp(wDatePatternP, 'giu'), PGW: new RegExp(wDatePatternE, 'giu'), S: new RegExp(wDatePatternS, 'giu'), + ST: new RegExp(wDatePatternX, 'giu'), SV: new RegExp(wDatePatternX, 'giu'), SW: new RegExp(wDatePatternE, 'giu'), T: new RegExp(wDatePatternT, 'giu'), @@ -340,22 +343,34 @@ const wDateParsing: WDateParsing = { // #endregion export const extractWTStudyDate = (src: string, lang: string) => { - const srcClean = src + src = src .trim() .replace(' ', ' ') .replace('​', '') .replace('⁠', '') .replace(/\u200F/g, ''); + let finalSrc = src; + + const overrideLang = overrides[lang]; + + if (overrideLang) { + const overrideSrc = overrideLang[src]; + + if (overrideSrc) { + finalSrc = overrideSrc; + } + } + const datePattern = wDatePatterns[lang] || wDatePatterns.common; - const match = srcClean.match(datePattern); + const match = finalSrc.match(datePattern); if (!match) { - throw new JWEPUBParserError('wtstudy', `Parsing failed for Watchtower Study Date. The input was: ${src}`); + throw new JWEPUBParserError('wtstudy', `Parsing failed for Watchtower Study Date. The input was: ${finalSrc}`); } - const groups = Array.from(datePattern.exec(srcClean)!); + const groups = Array.from(datePattern.exec(finalSrc)!); const parseDataFunc = wDateParsing[lang] || wDateParsing.common; diff --git a/src/common/override.ts b/src/common/override.ts new file mode 100644 index 00000000..76126c7d --- /dev/null +++ b/src/common/override.ts @@ -0,0 +1,13 @@ +import { Override } from '../types'; + +const overrides: Override = { + PGW: { + 'Fine-Fine Things Wey You See for Bible': 'Fine-Fine Things Wey You See for Bible: (10 min.)', + }, + ST: { + 'Seda artiklit uuritakse vahemikus 28. oktoobrist 3.novembrini 2024.': + 'Seda artiklit uuritakse vahemikus 28. oktoobrist 3. novembrini 2024.', + }, +}; + +export default overrides; diff --git a/src/common/parsing_rules.ts b/src/common/parsing_rules.ts index f85e4a4b..01ce6e11 100644 --- a/src/common/parsing_rules.ts +++ b/src/common/parsing_rules.ts @@ -1,6 +1,7 @@ import { JWEPUBParserError } from '../classes/error.js'; import { LangRegExp } from '../types/index.js'; import { getPartMinutesSeparatorVariations } from './language_rules.js'; +import overrides from './override.js'; export const extractSongNumber = (src: string) => { const parseNum = src.match(/(\d+)/); @@ -19,8 +20,16 @@ export const extractSongNumber = (src: string) => { export const extractSourceEnhanced = (src: string, lang: string) => { const variations = getPartMinutesSeparatorVariations(lang); - if (src === 'Fine-Fine Things Wey You See for Bible' && lang === 'PGW') { - src = 'Fine-Fine Things Wey You See for Bible: (10 min.)'; + let finalSrc = src; + + const overrideLang = overrides[lang]; + + if (overrideLang) { + const overrideSrc = overrideLang[src]; + + if (overrideSrc) { + finalSrc = overrideSrc; + } } // separate minutes from title @@ -45,13 +54,13 @@ export const extractSourceEnhanced = (src: string, lang: string) => { const langPattern = firstPattern[lang] || firstPattern.common; - const matchFirstPattern = src.match(langPattern); + const matchFirstPattern = finalSrc.match(langPattern); if (!matchFirstPattern) { - throw new JWEPUBParserError('jw-epub-parser', `Parsing failed. The input was: ${src}`); + throw new JWEPUBParserError('jw-epub-parser', `Parsing failed. The input was: ${finalSrc}`); } - const groupsFirstPattern = Array.from(langPattern.exec(src)!); + const groupsFirstPattern = Array.from(langPattern.exec(finalSrc)!); const fulltitle = groupsFirstPattern.at(1)!.trim(); const time = +groupsFirstPattern.at(2)!.trim(); diff --git a/src/locales/et-EE/text.json b/src/locales/et-EE/text.json index 2744f4a8..5fc12300 100644 --- a/src/locales/et-EE/text.json +++ b/src/locales/et-EE/text.json @@ -1,15 +1,15 @@ { - "januaryVariations": "Jaanuar|jaanuarini|jaanuarist", - "februaryVariations": "Veebruar|veebruarini|veebruarist", - "marchVariations": "Märts|märtsini|märtsist", - "aprilVariations": "Aprill|aprillini|aprillist", - "mayVariations": "Mai|maini|maist", - "juneVariations": "Juuni|juunini", - "julyVariations": "Juuli|juulini|juulist", - "augustVariations": "August|augustini|augustist", - "septemberVariations": "September|septembrini|septembrist", - "octoberVariations": "Oktoober|oktoobrini|oktoobrist", - "novemberVariations": "November|novembrini|novembrist", - "decemberVariations": "Detsember|detsembrini|detsembrist", - "partMinutesSeparatorVariations": "min" + "januaryVariations": "Jaanuar|jaanuarini|jaanuarist", + "februaryVariations": "Veebruar|veebruarini|veebruarist", + "marchVariations": "Märts|märtsini|märtsist", + "aprilVariations": "Aprill|aprillini|aprillist", + "mayVariations": "Mai|maini|maist", + "juneVariations": "Juuni|juunini", + "julyVariations": "Juuli|juulini|juulist", + "augustVariations": "August|augustini|augustist", + "septemberVariations": "September|septembrini|septembrist", + "octoberVariations": "Oktoober|oktoobrini|oktoobrist", + "novemberVariations": "November|novembrini|novembrist", + "decemberVariations": "Detsember|detsembrini|detsembrist", + "partMinutesSeparatorVariations": "min" } diff --git a/src/locales/languages.ts b/src/locales/languages.ts index 3114061f..fc5ff999 100644 --- a/src/locales/languages.ts +++ b/src/locales/languages.ts @@ -28,4 +28,6 @@ export default [ { locale: 'wes-PGW', code: 'PGW' }, { locale: 'sl-SI', code: 'SV' }, { locale: 'sw-KE', code: 'SW' }, + { locale: 'et-EE', code: 'ST' }, + { locale: 'ht-HT', code: 'CR' }, ]; diff --git a/src/node/utils.node.ts b/src/node/utils.node.ts index 810c2bc6..4b6b24a1 100644 --- a/src/node/utils.node.ts +++ b/src/node/utils.node.ts @@ -3,6 +3,7 @@ import { readFile } from 'fs/promises'; import CH from '../locales/cmn-Hant/text.json' assert { type: 'json' }; import CHS from '../locales/ch-CHS/text.json' assert { type: 'json' }; +import CR from '../locales/ht-HT/text.json' assert { type: 'json' }; import E from '../locales/en/text.json' assert { type: 'json' }; import F from '../locales/fr-FR/text.json' assert { type: 'json' }; import FI from '../locales/fi-FI/text.json' assert { type: 'json' }; @@ -16,6 +17,7 @@ import O from '../locales/nl-NL/text.json' assert { type: 'json' }; import P from '../locales/pl-PL/text.json' assert { type: 'json' }; import PGW from '../locales/wes-PGW/text.json' assert { type: 'json' }; import S from '../locales/es-ES/text.json' assert { type: 'json' }; +import ST from '../locales/et-EE/text.json' assert { type: 'json' }; import SV from '../locales/sl-SI/text.json' assert { type: 'json' }; import SW from '../locales/sw-KE/text.json' assert { type: 'json' }; import T from '../locales/pt-BR/text.json' assert { type: 'json' }; @@ -39,6 +41,7 @@ global.jw_epub_parser = { languages: { CH, CHS, + CR, E, F, FI, @@ -52,6 +55,7 @@ global.jw_epub_parser = { P, PGW, S, + ST, SV, SW, T, diff --git a/src/types/index.ts b/src/types/index.ts index 45bc3c9a..7eb08ece 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -81,3 +81,9 @@ export type MWBDateParsingResult = [month: string, date: string]; export type MWBDateParsing = { [lang: string]: (groups: string[]) => MWBDateParsingResult; }; + +export type Override = { + [language: string]: { + [src: string]: string; + }; +}; diff --git a/test/enhancedParsing/list.json b/test/enhancedParsing/list.json index 4bf882eb..d7d2db45 100644 --- a/test/enhancedParsing/list.json +++ b/test/enhancedParsing/list.json @@ -22,5 +22,6 @@ { "language": "Z", "issue": "202411" }, { "language": "PGW", "issue": "202411" }, { "language": "SV", "issue": "202411" }, - { "language": "SW", "issue": "202411" } + { "language": "SW", "issue": "202411" }, + { "language": "CR", "issue": "202411" } ] diff --git a/test/fixtures/mwb_CR_202411.js b/test/fixtures/mwb_CR_202411.js new file mode 100644 index 00000000..a67b9fdf --- /dev/null +++ b/test/fixtures/mwb_CR_202411.js @@ -0,0 +1,304 @@ +export default [ + { + mwb_week_date: '2024/11/04', + mwb_week_date_locale: '4-10 NOVANM', + mwb_weekly_bible_reading: 'SÒM 105', + mwb_song_first: 3, + mwb_tgw_talk: '“Li sonje alyans li te fè a pou toutan”', + mwb_tgw_talk_title: '1. “Li sonje alyans li te fè a pou toutan”', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 105:​24-45 (th leson 5)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 4, + mwb_ayf_part1: 'KAY AN KAY. Moun nou rankontre nan kay la okipe. (lmd leson 2 pwen 5)', + mwb_ayf_part1_time: 1, + mwb_ayf_part1_type: 'Fason pou w kòmanse konvèsasyon', + mwb_ayf_part1_title: '4. Fason pou w kòmanse konvèsasyon', + mwb_ayf_part2: + 'KAY AN KAY. Fini konvèsasyon an ak yon pawòl pozitif lè moun nan kòmanse fè diskisyon. (lmd leson 4 pwen 5)', + mwb_ayf_part2_time: 2, + mwb_ayf_part2_type: 'Fason pou w kòmanse konvèsasyon', + mwb_ayf_part2_title: '5. Fason pou w kòmanse konvèsasyon', + mwb_ayf_part3: 'KAY AN KAY. Ofri moun nan yon peryodik sou yon sijè ki te deja enterese l. (lmd leson 8 pwen 3)', + mwb_ayf_part3_time: 4, + mwb_ayf_part3_type: 'Pousuiv enterè moun yo', + mwb_ayf_part3_title: '6. Pousuiv enterè moun yo', + mwb_ayf_part4: + 'TEMWAYAJ ENFÒMÈL. Pale ak moun nan konsènan aplikasyon JW Library a, epi ede l telechaje l. (lmd leson 9 pwen 5)', + mwb_ayf_part4_time: 4, + mwb_ayf_part4_type: 'Pousuiv enterè moun yo', + mwb_ayf_part4_title: '7. Pousuiv enterè moun yo', + mwb_song_middle: 84, + mwb_lc_count: 1, + mwb_lc_part1: 'Demontre lanmou pou Pitit Gason Jewova a', + mwb_lc_part1_time: 15, + mwb_lc_part1_title: '8. Demontre lanmou pou Pitit Gason Jewova a', + mwb_lc_part1_content: 'Konvèsasyon.', + mwb_lc_cbs: 'bt chap. 17 § 13-19', + mwb_lc_cbs_title: '9. Etid biblik kongregasyon an', + mwb_song_conclude: 97, + }, + { + mwb_week_date: '2024/11/11', + mwb_week_date_locale: '11-17 NOVANM', + mwb_weekly_bible_reading: 'SÒM 106', + mwb_song_first: 36, + mwb_tgw_talk: '“Yo te bliye Bondye, Sovè yo a”', + mwb_tgw_talk_title: '1. “Yo te bliye Bondye, Sovè yo a”', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 106:​21-48 (th leson 10)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 2, + mwb_ayf_part1: 'Konvèsasyon. Pase VIDEYO a, epi mande moun yo fè kòmantè sou lmd leson 11 pwen 1-2.', + mwb_ayf_part1_time: 7, + mwb_ayf_part1_type: 'Anseye yon fason ki senp — Sa Jezi te fè', + mwb_ayf_part1_title: '4. Anseye yon fason ki senp — Sa Jezi te fè', + mwb_ayf_part2: 'Konvèsasyon ki baze sou lmd leson 11 pwen 3-5 ak “Gade tou.”', + mwb_ayf_part2_time: 8, + mwb_ayf_part2_type: 'Anseye yon fason ki senp — Imite Jezi', + mwb_ayf_part2_title: '5. Anseye yon fason ki senp — Imite Jezi', + mwb_song_middle: 78, + mwb_lc_count: 1, + mwb_lc_part1: 'Bezwen kongregasyon an', + mwb_lc_part1_time: 15, + mwb_lc_part1_title: '6. Bezwen kongregasyon an', + mwb_lc_cbs: 'bt chap. 18 § 1-5, Kare p. 142, 144', + mwb_lc_cbs_title: '7. Etid biblik kongregasyon an', + mwb_song_conclude: 77, + }, + { + mwb_week_date: '2024/11/18', + mwb_week_date_locale: '18-24 NOVANM', + mwb_weekly_bible_reading: 'SÒM 107-108', + mwb_song_first: 7, + mwb_tgw_talk: '“Di Jewova mèsi paske li bon”', + mwb_tgw_talk_title: '1. “Di Jewova mèsi paske li bon”', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 107:​1-28 (th leson 5)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 3, + mwb_ayf_part1: 'TEMWAYAJ ENFÒMÈL. (lmd leson 1 pwen 4)', + mwb_ayf_part1_time: 3, + mwb_ayf_part1_type: 'Fason pou w kòmanse konvèsasyon', + mwb_ayf_part1_title: '4. Fason pou w kòmanse konvèsasyon', + mwb_ayf_part2: + 'TEMWAYAJ ENFÒMÈL. Pale ak moun nan konsènan pwogram etid Labib nou an, epi bay moun nan yon kat etid Labib. (lmd leson 9 pwen 3)', + mwb_ayf_part2_time: 4, + mwb_ayf_part2_type: 'Pousuiv enterè moun yo', + mwb_ayf_part2_title: '5. Pousuiv enterè moun yo', + mwb_ayf_part3: 'ijwyp 90 — Tèm: Ki jan m ka evite gen panse ki negatif? (th leson 14)', + mwb_ayf_part3_time: 5, + mwb_ayf_part3_type: 'Diskou', + mwb_ayf_part3_title: '6. Diskou', + mwb_song_middle: 46, + mwb_lc_count: 1, + mwb_lc_part1: 'Nou chante pou n di Jewova mèsi', + mwb_lc_part1_time: 15, + mwb_lc_part1_title: '7. Nou chante pou n di Jewova mèsi', + mwb_lc_part1_content: 'Konvèsasyon.', + mwb_lc_cbs: 'bt chap. 18 § 6-15', + mwb_lc_cbs_title: '8. Etid biblik kongregasyon an', + mwb_song_conclude: 73, + }, + { + mwb_week_date: '2024/11/25', + mwb_week_date_locale: '25 NOVANM–1 DESANM', + mwb_weekly_bible_reading: 'SÒM 109-112', + mwb_song_first: 14, + mwb_tgw_talk: 'Ann soutni Jezi, Wa nou an!', + mwb_tgw_talk_title: '1. Ann soutni Jezi, Wa nou an!', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 109:​1-26 (th leson 2)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 3, + mwb_ayf_part1: 'KAY AN KAY. Sèvi ak yon feyè pou w kòmanse yon konvèsasyon. (lmd leson 4 pwen 3)', + mwb_ayf_part1_time: 2, + mwb_ayf_part1_type: 'Fason pou w kòmanse konvèsasyon', + mwb_ayf_part1_title: '4. Fason pou w kòmanse konvèsasyon', + mwb_ayf_part2: 'Demonstrasyon. ijwfq 23 — Tèm: Poukisa Temwen Jewova yo pa al nan lagè? (lmd leson 4 pwen 4)', + mwb_ayf_part2_time: 5, + mwb_ayf_part2_type: 'Esplike kwayans ou', + mwb_ayf_part2_title: '5. Esplike kwayans ou', + mwb_ayf_part3: 'lff leson 15 pwen 6 ak ribrik Gen moun ki di (lmd leson 11 pwen 3)', + mwb_ayf_part3_time: 5, + mwb_ayf_part3_type: 'Fason pou w fè disip', + mwb_ayf_part3_title: '6. Fason pou w fè disip', + mwb_song_middle: 72, + mwb_lc_count: 1, + mwb_lc_part1: 'Ki jan nou ka soutni Wayòm nan fidèlman?', + mwb_lc_part1_time: 15, + mwb_lc_part1_title: '7. Ki jan nou ka soutni Wayòm nan fidèlman?', + mwb_lc_part1_content: 'Konvèsasyon.', + mwb_lc_cbs: 'bt chap. 18 § 16-24', + mwb_lc_cbs_title: '8. Etid biblik kongregasyon an', + mwb_song_conclude: 75, + }, + { + mwb_week_date: '2024/12/02', + mwb_week_date_locale: '2-8 DESANM', + mwb_weekly_bible_reading: 'SÒM 113-118', + mwb_song_first: 127, + mwb_tgw_talk: 'Ki sa n ka bay Jewova?', + mwb_tgw_talk_title: '1. Ki sa n ka bay Jewova?', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 116:1–117:2 (th leson 2)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 2, + mwb_ayf_part1: 'Konvèsasyon. Pase VIDEYO a, epi mande moun yo fè kòmantè sou lmd leson 12 pwen 1-2.', + mwb_ayf_part1_time: 7, + mwb_ayf_part1_type: 'Montre w gen kouraj — Sa Jezi te fè', + mwb_ayf_part1_title: '4. Montre w gen kouraj — Sa Jezi te fè', + mwb_ayf_part2: 'Konvèsasyon ki baze sou lmd leson 12 pwen 3-5 ak “Gade tou.”', + mwb_ayf_part2_time: 8, + mwb_ayf_part2_type: 'Montre w gen kouraj — Imite Jezi', + mwb_ayf_part2_title: '5. Montre w gen kouraj — Imite Jezi', + mwb_song_middle: 60, + mwb_lc_count: 1, + mwb_lc_part1: 'Bezwen kongregasyon an', + mwb_lc_part1_time: 15, + mwb_lc_part1_title: '6. Bezwen kongregasyon an', + mwb_lc_cbs: 'bt chap. 19 § 1-5, kare p. 149-150', + mwb_lc_cbs_title: '7. Etid biblik kongregasyon an', + mwb_song_conclude: 29, + }, + { + mwb_week_date: '2024/12/09', + mwb_week_date_locale: '9-15 DESANM', + mwb_weekly_bible_reading: 'SÒM 119:​1-56', + mwb_song_first: 124, + mwb_tgw_talk: '“Ki jan yon jèn gason ka mennen yon vi ki pwòp?”', + mwb_tgw_talk_title: '1. “Ki jan yon jèn gason ka mennen yon vi ki pwòp?”', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 119:​1-32 (th leson 5)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 3, + mwb_ayf_part1: + 'TEMWAYAJ ENFÒMÈL. Kòmanse yon konvèsasyon ak yon moun ou rankontre nan lari pandan w nan predikasyon kay an kay. (lmd leson 1 pwen 4)', + mwb_ayf_part1_time: 3, + mwb_ayf_part1_type: 'Fason pou w kòmanse konvèsasyon', + mwb_ayf_part1_title: '4. Fason pou w kòmanse konvèsasyon', + mwb_ayf_part2: + 'KAY AN KAY. Nan konvèsasyon anvan an, moun nan te di li fèk gen yon moun pa l ki mouri. (lmd leson 9 pwen 3)', + mwb_ayf_part2_time: 4, + mwb_ayf_part2_type: 'Pousuiv enterè moun yo', + mwb_ayf_part2_title: '5. Pousuiv enterè moun yo', + mwb_ayf_part3: 'ijwyp 83 — Tèm: Ki jan m ka reziste lè m jwenn tantasyon? (th leson 20)', + mwb_ayf_part3_time: 5, + mwb_ayf_part3_type: 'Diskou', + mwb_ayf_part3_title: '6. Diskou', + mwb_song_middle: 40, + mwb_lc_count: 2, + mwb_lc_part1: 'Sa òganizasyon an akonpli ki pou mwa desanm nan', + mwb_lc_part1_time: 10, + mwb_lc_part1_title: '7. Sa òganizasyon an akonpli ki pou mwa desanm nan', + mwb_lc_part1_content: 'Pase VIDEYO a.', + mwb_lc_part2: 'Bezwen kongregasyon an', + mwb_lc_part2_time: 5, + mwb_lc_part2_title: '8. Bezwen kongregasyon an', + mwb_lc_cbs: 'bt chap. 19 § 6-13', + mwb_lc_cbs_title: '9. Etid biblik kongregasyon an', + mwb_song_conclude: 21, + }, + { + mwb_week_date: '2024/12/16', + mwb_week_date_locale: '16-22 DESANM', + mwb_weekly_bible_reading: 'SÒM 119:​57-120', + mwb_song_first: 129, + mwb_tgw_talk: 'Fason pou n andire lè n jwenn pwoblèm', + mwb_tgw_talk_title: '1. Fason pou n andire lè n jwenn pwoblèm', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 119:​57-80 (th leson 12)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 3, + mwb_ayf_part1: + 'KAY AN KAY. Montre moun ou rankontre nan kay la sit nou an, epi ba l yon kat jw.org. (lmd leson 2 pwen 5)', + mwb_ayf_part1_time: 3, + mwb_ayf_part1_type: 'Fason pou w kòmanse konvèsasyon', + mwb_ayf_part1_title: '4. Fason pou w kòmanse konvèsasyon', + mwb_ayf_part2: + 'TEMWAYAJ ENFÒMÈL. Envite moun nan vin suiv diskou piblik la. Prezante videyo Ki sa yo fè nan yon Sal Wayòm? nan (lmd leson 8 pwen 3)', + mwb_ayf_part2_time: 4, + mwb_ayf_part2_type: 'Pousuiv enterè moun yo', + mwb_ayf_part2_title: '5. Pousuiv enterè moun yo', + mwb_ayf_part3: 'Demonstrasyon. ijwbq 157 — Tèm: Ki sa Bib la di sou katastwòf natirèl? (lmd leson 3 pwen 3)', + mwb_ayf_part3_time: 5, + mwb_ayf_part3_type: 'Esplike kwayans ou', + mwb_ayf_part3_title: '6. Esplike kwayans ou', + mwb_song_middle: 128, + mwb_lc_count: 1, + mwb_lc_part1: 'Jewova ede nou andire', + mwb_lc_part1_time: 15, + mwb_lc_part1_title: '7. Jewova ede nou andire', + mwb_lc_part1_content: 'Konvèsasyon.', + mwb_lc_cbs: 'bt chap. 19 § 14-20, kare p. 152', + mwb_lc_cbs_title: '8. Etid biblik kongregasyon an', + mwb_song_conclude: 32, + }, + { + mwb_week_date: '2024/12/23', + mwb_week_date_locale: '23-29 DESANM', + mwb_weekly_bible_reading: 'SÒM 119:​121-176', + mwb_song_first: 31, + mwb_tgw_talk: 'Fason nou ka evite tristès ki pa nesesè', + mwb_tgw_talk_title: '1. Fason nou ka evite tristès ki pa nesesè', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 119:​121-152 (th leson 2)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 3, + mwb_ayf_part1: 'KAY AN KAY. (lmd leson 1 pwen 5)', + mwb_ayf_part1_time: 3, + mwb_ayf_part1_type: 'Fason pou w kòmanse konvèsasyon', + mwb_ayf_part1_title: '4. Fason pou w kòmanse konvèsasyon', + mwb_ayf_part2: + 'KAY AN KAY. Montre yon moun fason pou l jwenn enfòmasyon ki ta ka enterese l sou jw.org. (lmd leson 8 pwen 3)', + mwb_ayf_part2_time: 4, + mwb_ayf_part2_type: 'Pousuiv enterè moun yo', + mwb_ayf_part2_title: '5. Pousuiv enterè moun yo', + mwb_ayf_part3: 'Pale ak yon etidyan Labib ki pa asiste reyinyon yo regilyèman. (lmd leson 12 pwen 4)', + mwb_ayf_part3_time: 5, + mwb_ayf_part3_type: 'Fason pou w fè disip', + mwb_ayf_part3_title: '6. Fason pou w fè disip', + mwb_song_middle: 121, + mwb_lc_count: 1, + mwb_lc_part1: 'Pa kite lajan lakòz nou soufri pou granmesi', + mwb_lc_part1_time: 15, + mwb_lc_part1_title: '7. Pa kite lajan lakòz nou soufri pou granmesi', + mwb_lc_part1_content: 'Konvèsasyon.', + mwb_lc_cbs: 'bt chap. 20 § 1-7, ak entwodiksyon seksyon 7', + mwb_lc_cbs_title: '8. Etid biblik kongregasyon an', + mwb_song_conclude: 101, + }, + { + mwb_week_date: '2024/12/30', + mwb_week_date_locale: '30 DESANM–5 JANVYE', + mwb_weekly_bible_reading: 'SÒM 120-126', + mwb_song_first: 144, + mwb_tgw_talk: 'Yo te simen ak dlo nan je, men, yo te rekòlte ak kè kontan', + mwb_tgw_talk_title: '1. Yo te simen ak dlo nan je, men, yo te rekòlte ak kè kontan', + mwb_tgw_gems_title: '2. Trezò espirityèl', + mwb_tgw_bread: 'Sm 124:1–126:6 (th leson 5)', + mwb_tgw_bread_title: '3. Lekti Labib', + mwb_ayf_count: 3, + mwb_ayf_part1: 'TEMWAYAJ PIBLIK. (lmd leson 3 pwen 5)', + mwb_ayf_part1_time: 3, + mwb_ayf_part1_type: 'Fason pou w kòmanse konvèsasyon', + mwb_ayf_part1_title: '4. Fason pou w kòmanse konvèsasyon', + mwb_ayf_part2: 'KAY AN KAY. Nan dènye vizit la, moun nan te montre l gen dout sou Bib la. (lmd leson 9 pwen 5)', + mwb_ayf_part2_time: 4, + mwb_ayf_part2_type: 'Pousuiv enterè moun yo', + mwb_ayf_part2_title: '5. Pousuiv enterè moun yo', + mwb_ayf_part3: 'lff leson 16 entwodiksyon ak pwen 1-3 (lmd leson 11 pwen 3)', + mwb_ayf_part3_time: 5, + mwb_ayf_part3_type: 'Fason pou w fè disip', + mwb_ayf_part3_title: '6. Fason pou w fè disip', + mwb_song_middle: 155, + mwb_lc_count: 1, + mwb_lc_part1: 'Pran plezi nan pwomès Bondye fè yo', + mwb_lc_part1_time: 15, + mwb_lc_part1_title: '7. Pran plezi nan pwomès Bondye fè yo', + mwb_lc_part1_content: 'Konvèsasyon.', + mwb_lc_cbs: 'bt chap. 20 § 8-12, kare p. 161', + mwb_lc_cbs_title: '8. Etid biblik kongregasyon an', + mwb_song_conclude: 58, + }, +]; diff --git a/test/fixtures/w_CR_202411.js b/test/fixtures/w_CR_202411.js new file mode 100644 index 00000000..c1058213 --- /dev/null +++ b/test/fixtures/w_CR_202411.js @@ -0,0 +1,30 @@ +export default [ + { + w_study_date: '2025/01/06', + w_study_date_locale: 'Atik etid no 44: Semèn 6-12 janvye 2025', + w_study_title: 'Fason n ka andire enjistis yo fè nou', + w_study_opening_song: 33, + w_study_concluding_song: 38, + }, + { + w_study_date: '2025/01/13', + w_study_date_locale: 'Atik etid no 45: Semèn 13-19 janvye 2025', + w_study_title: 'Sa n ka aprann nan dènye pawòl yon seri mesye ki te fidèl te di', + w_study_opening_song: 138, + w_study_concluding_song: 129, + }, + { + w_study_date: '2025/01/20', + w_study_date_locale: 'Atik etid no 46: Semèn 20-26 janvye 2025', + w_study_title: 'Frè n yo, èske n ap chèche vin sèvitè ministeryèl?', + w_study_opening_song: 49, + w_study_concluding_song: 17, + }, + { + w_study_date: '2025/01/27', + w_study_date_locale: 'Atik etid no 47: Semèn 27 janvye 2025–2 fevriye 2025', + w_study_title: 'Frè n yo, èske n ap chèche vin ansyen?', + w_study_opening_song: 103, + w_study_concluding_song: 101, + }, +];