Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(module): add support for Romanian, Turkish, Twin languages #598

Merged
merged 7 commits into from
Dec 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/browser/utils.browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,17 @@ import F from '../locales/fr-FR/text.json';
import I from '../locales/it-IT/text.json';
import J from '../locales/ja-JP/text.json';
import K from '../locales/uk-UA/text.json';
import M from '../locales/ro-RO/text.json';
import MG from '../locales/mg-MG/text.json';
import P from '../locales/pl-PL/text.json';
import S from '../locales/es-ES/text.json';
import T from '../locales/pt-BR/text.json';
import TG from '../locales/tl-PH/text.json';
import TK from '../locales/tr-TR/text.json';
import TND from '../locales/mg-TND/text.json';
import TNK from '../locales/mg-TNK/text.json';
import TTM from '../locales/mg-TTM/text.json';
import TW from '../locales/tw-TW/text.json';
import U from '../locales/ru-RU/text.json';
import VZ from '../locales/mg-VZ/text.json';
import X from '../locales/de-DE/text.json';
Expand All @@ -24,6 +27,6 @@ declare global {
}

window.jw_epub_parser = {
languages: { E, F, I, J, K, MG, P, S, T, TG, TND, TNK, TTM, U, VZ, X },
languages: { E, F, I, J, K, M, MG, P, S, T, TG, TK, TND, TNK, TTM, TW, U, VZ, X },
path: path,
};
4 changes: 2 additions & 2 deletions src/common/html_utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ export const getWStudyDate = (htmlItem: HTMLElement) => {
};

export const getWSTudySongs = async ({ htmlItem, zip }: { htmlItem: HTMLElement; zip: JSZip }) => {
const articleLink = htmlItem.nextElementSibling.querySelector('a')!.getAttribute('href') as string;
const articleLink = htmlItem.nextElementSibling!.querySelector('a')!.getAttribute('href') as string;
const article = await getHTMLWTArticleDoc(zip, articleLink);

if (article) {
Expand Down Expand Up @@ -166,7 +166,7 @@ export const getWStudyTitle = (htmlItem: HTMLElement) => {
const h2 = htmlItem.querySelector('h2');

if (h2 === null) {
const articleLink = htmlItem.nextElementSibling.querySelector('a')!;
const articleLink = htmlItem.nextElementSibling!.querySelector('a')!;
result = articleLink.textContent.replace(/\u00A0/g, ' '); // remove non-breaking space;;
}

Expand Down
8 changes: 4 additions & 4 deletions src/common/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -278,14 +278,14 @@ export const parseWSchedule = (article: HTMLElement, content: HTMLElement, wLang
const openingSongText = pubRefs.at(0)!;
weekItem.w_study_opening_song = extractSongNumber(openingSongText.textContent);

let concludingSongText = pubRefs.at(-1);
let concludingSongText = <HTMLElement>pubRefs.at(-1);

if (pubRefs.length === 2) {
const blockTeach = content.querySelector('.blockTeach');
concludingSongText = blockTeach!.nextElementSibling;
concludingSongText = blockTeach!.nextElementSibling!;
}

weekItem.w_study_concluding_song = extractSongNumber(concludingSongText!.textContent);
weekItem.w_study_concluding_song = extractSongNumber(concludingSongText.textContent);

return weekItem;
};
Expand Down Expand Up @@ -323,7 +323,7 @@ const parseWEpub = async ({
const studyArticles = getWStudyArticles(htmlItem);

for (const [_, studyArticle] of studyArticles.entries()) {
const articleLink = studyArticle.nextElementSibling.querySelector('a')!.getAttribute('href') as string;
const articleLink = studyArticle.nextElementSibling!.querySelector('a')!.getAttribute('href') as string;
const content = await getHTMLWTArticleDoc(epubContents, articleLink);

const weekItem = parseWSchedule(studyArticle, content, epubLang);
Expand Down
3 changes: 3 additions & 0 deletions src/locales/languages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@ export default [
{ locale: 'it-IT', code: 'I' },
{ locale: 'ja-JP', code: 'J' },
{ locale: 'uk-UA', code: 'K' },
{ locale: 'ro-RO', code: 'M' },
{ locale: 'mg-MG', code: 'MG' },
{ locale: 'pl-PL', code: 'P' },
{ locale: 'es-ES', code: 'S' },
{ locale: 'pt-BR', code: 'T' },
{ locale: 'tl-PH', code: 'TG' },
{ locale: 'tr-TR', code: 'TK' },
{ locale: 'mg-TND', code: 'TND' },
{ locale: 'mg-TNK', code: 'TNK' },
{ locale: 'mg-TTM', code: 'TTM' },
{ locale: 'tw-TW', code: 'TW' },
{ locale: 'uk-UA', code: 'U' },
{ locale: 'mg-VZ', code: 'VZ' },
{ locale: 'de-DE', code: 'X' },
Expand Down
5 changes: 4 additions & 1 deletion src/node/utils.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,17 @@ import F from '../locales/fr-FR/text.json' assert { type: 'json' };
import I from '../locales/it-IT/text.json' assert { type: 'json' };
import J from '../locales/ja-JP/text.json' assert { type: 'json' };
import K from '../locales/uk-UA/text.json' assert { type: 'json' };
import M from '../locales/ro-RO/text.json' assert { type: 'json' };
import MG from '../locales/mg-MG/text.json' assert { type: 'json' };
import P from '../locales/pl-PL/text.json' assert { type: 'json' };
import S from '../locales/es-ES/text.json' assert { type: 'json' };
import T from '../locales/pt-BR/text.json' assert { type: 'json' };
import TG from '../locales/tl-PH/text.json' assert { type: 'json' };
import TK from '../locales/tr-TR/text.json' assert { type: 'json' };
import TND from '../locales/mg-TND/text.json' assert { type: 'json' };
import TNK from '../locales/mg-TNK/text.json' assert { type: 'json' };
import TTM from '../locales/mg-TTM/text.json' assert { type: 'json' };
import TW from '../locales/tw-TW/text.json' assert { type: 'json' };
import U from '../locales/ru-RU/text.json' assert { type: 'json' };
import VZ from '../locales/mg-VZ/text.json' assert { type: 'json' };
import X from '../locales/de-DE/text.json' assert { type: 'json' };
Expand All @@ -23,7 +26,7 @@ declare global {
}

global.jw_epub_parser = {
languages: { E, F, I, J, K, MG, P, S, T, TG, TND, TNK, TTM, U, VZ, X },
languages: { E, F, I, J, K, M, MG, P, S, T, TG, TK, TND, TNK, TTM, TW, U, VZ, X },
path: path,
readFile: readFile,
};
2 changes: 2 additions & 0 deletions test/enhancedParsing/list.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
{ "language": "I", "issue": "202309" },
{ "language": "J", "issue": "202309" },
{ "language": "K", "issue": "202309" },
{ "language": "M", "issue": "202309" },
{ "language": "MG", "issue": "202309" },
{ "language": "S", "issue": "202309" },
{ "language": "TG", "issue": "202309" },
{ "language": "TK", "issue": "202309" },
{ "language": "TND", "issue": "202309" },
{ "language": "TNK", "issue": "202309" },
{ "language": "U", "issue": "202309" },
Expand Down
257 changes: 257 additions & 0 deletions test/fixtures/mwb_M_202309.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,257 @@
export default [
{
mwb_week_date: '2023/09/04',
mwb_week_date_locale: '4-10 septembrie',
mwb_weekly_bible_reading: 'ESTERA 1, 2',
mwb_song_first: 137,
mwb_tgw_talk: '„Străduiește-te să fii modest la fel ca Estera”',
mwb_tgw_bread: 'Es 1:13-22 (th lecția 10)',
mwb_ayf_count: 3,
mwb_ayf_part1:
'Discuție. Se va viziona materialul Vizita inițială – Regat (Mt 6:9, 10). La fiecare pauză acesta va fi oprit, iar auditoriul va răspunde la întrebările afișate.',
mwb_ayf_part1_time: 5,
mwb_ayf_part1_type: 'Vizita inițială – Material video',
mwb_ayf_part2:
'Folosește subiectul conversației-model. Oferă broșura Bucură-te pentru totdeauna de viață!. (th lecția 1)',
mwb_ayf_part2_time: 3,
mwb_ayf_part2_type: 'Vizita inițială',
mwb_ayf_part3: 'w20.11 12-14 ¶3-7 – Tema: Ajutor de la Isus și de la îngeri. (th lecția 14)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Cuvântare',
mwb_song_middle: 106,
mwb_lc_count: 2,
mwb_lc_part1: 'Ce spun alți tineri – Înfățișare',
mwb_lc_part1_time: 5,
mwb_lc_part1_content:
'Discuție. Se va viziona materialul. Apoi auditoriul va răspunde la următoarele întrebări: De ce poate fi greu să avem un punct de vedere echilibrat cu privire la propria înfățișare?',
mwb_lc_part2: 'Realizări organizatorice',
mwb_lc_part2_time: 10,
mwb_lc_part2_content: 'Se va viziona materialul Realizări organizatorice pentru luna septembrie.',
mwb_lc_cbs: 'lff lecția 56 și note explicative 6 și 7',
mwb_song_conclude: 101,
},
{
mwb_week_date: '2023/09/11',
mwb_week_date_locale: '11-17 septembrie',
mwb_weekly_bible_reading: 'ESTERA 3-5',
mwb_song_first: 85,
mwb_tgw_talk: '„Ajută-i pe alții să-și folosească la maximum potențialul”',
mwb_tgw_bread: 'Es 3:1-12 (th lecția 2)',
mwb_ayf_count: 3,
mwb_ayf_part1:
'Discuție. Se va viziona materialul Vizita ulterioară – Regat (Mt 14:19, 20). La fiecare pauză, acesta va fi oprit, iar auditoriul va răspunde la întrebările afișate.',
mwb_ayf_part1_time: 5,
mwb_ayf_part1_type: 'Vizita ulterioară – Material video',
mwb_ayf_part2:
'Începe cu subiectul conversației-model. Prezintă programul nostru de studiere a Bibliei și oferă o carte de vizită „Curs biblic gratuit”. (th lecția 16)',
mwb_ayf_part2_time: 3,
mwb_ayf_part2_type: 'Vizita ulterioară',
mwb_ayf_part3: 'lff lecția 12, introducere și punctele 1-3 (th lecția 15)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Studiu biblic',
mwb_song_middle: 65,
mwb_lc_count: 2,
mwb_lc_part1: 'Cum poți să devii prietenul lui Iehova – Vrem să fim ca Estera',
mwb_lc_part1_time: 5,
mwb_lc_part1_content:
'Discuție. Se va viziona materialul. Apoi, dacă este posibil, invită câțiva copii, aleși dinainte, să răspundă la următoarea întrebare: În ce fel ai dori să imiți curajul Esterei?',
mwb_lc_part2: 'Necesități locale',
mwb_lc_part2_time: 10,
mwb_lc_cbs: 'lff lecția 57',
mwb_song_conclude: 125,
},
{
mwb_week_date: '2023/09/18',
mwb_week_date_locale: '18-24 septembrie',
mwb_weekly_bible_reading: 'ESTERA 6-8',
mwb_song_first: 115,
mwb_tgw_talk: '„O lecție de comunicare eficientă”',
mwb_tgw_bread: 'Es 8:9-17 (th lecția 5)',
mwb_ayf_count: 3,
mwb_ayf_part1:
'Începe cu subiectul conversației-model. Depășește o obiecție des întâlnită în teritoriul tău. (th lecția 3)',
mwb_ayf_part1_time: 3,
mwb_ayf_part1_type: 'Vizita inițială',
mwb_ayf_part2:
'Începe cu subiectul conversației-model. Invită persoana la o întrunire a congregației. Prezintă și analizează materialul video Ce activități se desfășoară la o sală a Regatului? (nu se va viziona materialul). (th lecția 12)',
mwb_ayf_part2_time: 4,
mwb_ayf_part2_type: 'Vizita ulterioară',
mwb_ayf_part3:
'w22.01 10, 11 ¶8-10 – Tema: Să predăm cu eficiență, la fel ca Iacov – Predă în mod simplu. (th lecția 17)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Cuvântare',
mwb_song_middle: 148,
mwb_lc_count: 1,
mwb_lc_part1: '„Încrede-te în Iehova când ai de-a face cu bullyingul”',
mwb_lc_part1_time: 15,
mwb_lc_part1_content: 'Discuție și material video.',
mwb_lc_cbs: 'lff lecția 58',
mwb_song_conclude: 124,
},
{
mwb_week_date: '2023/09/25',
mwb_week_date_locale: '25 septembrie – 1 octombrie',
mwb_weekly_bible_reading: 'ESTERA 9, 10',
mwb_song_first: 102,
mwb_tgw_talk: '„El și-a folosit autoritatea în mod neegoist”',
mwb_tgw_bread: 'Es 9:1-14 (th lecția 11)',
mwb_ayf_count: 3,
mwb_ayf_part1: 'Folosește subiectul conversației-model. (th lecția 6)',
mwb_ayf_part1_time: 2,
mwb_ayf_part1_type: 'Vizita inițială',
mwb_ayf_part2:
'Începe cu subiectul conversației-model. Oferă broșura Bucură-te pentru totdeauna de viață! și arată cum se desfășoară un studiu biblic. (th lecția 13)',
mwb_ayf_part2_time: 5,
mwb_ayf_part2_type: 'Vizita ulterioară',
mwb_ayf_part3: 'lff lecția 12, „Aprofundează” și punctul 4 (th lecția 19)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Studiu biblic',
mwb_song_middle: 117,
mwb_lc_count: 1,
mwb_lc_part1: '„Păstori care lucrează în folosul poporului lui Iehova”',
mwb_lc_part1_time: 15,
mwb_lc_part1_content: 'Discuție și material video.',
mwb_lc_cbs: 'lff lecția 59, punctele 1-5',
mwb_song_conclude: 55,
},
{
mwb_week_date: '2023/10/02',
mwb_week_date_locale: '2-8 octombrie',
mwb_weekly_bible_reading: 'IOV 1-3',
mwb_song_first: 141,
mwb_tgw_talk: '„Continuă să arăți cât de mult îl iubești pe Iehova”',
mwb_tgw_bread: 'Iov 3:1-26 (th lecția 12)',
mwb_ayf_count: 3,
mwb_ayf_part1:
'Începe cu subiectul conversației-model. Vorbește-i persoanei despre site-ul nostru și oferă-i o carte de vizită cu jw.org. (th lecția 9)',
mwb_ayf_part1_time: 3,
mwb_ayf_part1_type: 'Vizita inițială',
mwb_ayf_part2:
'Folosește subiectul conversației-model. Prezintă și analizează materialul video De ce să studiați Biblia? (nu se va viziona materialul). (th lecția 20)',
mwb_ayf_part2_time: 4,
mwb_ayf_part2_type: 'Vizita ulterioară',
mwb_ayf_part3:
'w22.01 11, 12 ¶11-14 – Tema: Să predăm cu eficiență, la fel ca Iacov – Fii realist și umil. (th lecția 18)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Cuvântare',
mwb_song_middle: 21,
mwb_lc_count: 2,
mwb_lc_part1: 'Credeam că fac totul cum trebuie',
mwb_lc_part1_time: 10,
mwb_lc_part1_content:
'Discuție. Se va viziona materialul. Apoi auditoriul va răspunde la următoarele întrebări: În ce sens credea fratele Birdwell că făcea „totul cum trebuie”?',
mwb_lc_part2: '„Folosiți pagina principală a site-ului JW.ORG în lucrarea de predicare”',
mwb_lc_part2_time: 5,
mwb_lc_part2_content: 'Discuție.',
mwb_lc_cbs: 'lff lecția 59, punctul 6; rezumat, recapitulare și obiectiv',
mwb_song_conclude: 129,
},
{
mwb_week_date: '2023/10/09',
mwb_week_date_locale: '9-15 octombrie',
mwb_weekly_bible_reading: 'IOV 4, 5',
mwb_song_first: 121,
mwb_tgw_talk: '„Nu te lăsa influențat de informații false”',
mwb_tgw_bread: 'Iov 5:1-27 (th lecția 10)',
mwb_ayf_count: 3,
mwb_ayf_part1: 'Folosește subiectul conversației-model. (th lecția 4)',
mwb_ayf_part1_time: 2,
mwb_ayf_part1_type: 'Vizita inițială',
mwb_ayf_part2:
'Începe cu subiectul conversației-model. Arată-i persoanei cum să găsească informații pe site-ul jw.org. (th lecția 15)',
mwb_ayf_part2_time: 5,
mwb_ayf_part2_type: 'Vizita ulterioară',
mwb_ayf_part3: 'lff lecția 16, punctul 5 (th lecția 16)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Studiu biblic',
mwb_song_middle: 78,
mwb_lc_count: 1,
mwb_lc_part1: 'Necesități locale',
mwb_lc_part1_time: 15,
mwb_lc_cbs: 'lff lecția 60',
mwb_song_conclude: 38,
},
{
mwb_week_date: '2023/10/16',
mwb_week_date_locale: '16-22 octombrie',
mwb_weekly_bible_reading: 'IOV 6, 7',
mwb_song_first: 33,
mwb_tgw_talk: '„Când simți că viața nu mai are niciun rost”',
mwb_tgw_bread: 'Iov 6:1-21 (th lecția 2)',
mwb_ayf_count: 3,
mwb_ayf_part1: 'Începe cu subiectul conversației-model. Depășește o obiecție des întâlnită. (th lecția 7)',
mwb_ayf_part1_time: 3,
mwb_ayf_part1_type: 'Vizita inițială',
mwb_ayf_part2:
'Începe cu subiectul conversației-model. Oferă o publicație din secțiunea „Instrumente de predare”. (th lecția 11)',
mwb_ayf_part2_time: 4,
mwb_ayf_part2_type: 'Vizita ulterioară',
mwb_ayf_part3:
'w22.01 12, 13 ¶15-18 – Tema: Să predăm cu eficiență, la fel ca Iacov – Folosește ilustrări eficiente. (th lecția 8)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Cuvântare',
mwb_song_middle: 144,
mwb_lc_count: 1,
mwb_lc_part1: '„Iehova «îi salvează pe cei cu spiritul zdrobit»”',
mwb_lc_part1_time: 15,
mwb_lc_part1_content: 'Discuție și material video.',
mwb_lc_cbs: 'lff recapitulare – partea a IV-a',
mwb_song_conclude: 143,
},
{
mwb_week_date: '2023/10/23',
mwb_week_date_locale: '23-29 octombrie',
mwb_weekly_bible_reading: 'IOV 8-10',
mwb_song_first: 107,
mwb_tgw_talk: '„Iubirea loială a lui Iehova ne ocrotește de minciunile lui Satan”',
mwb_tgw_bread: 'Iov 9:20-35 (th lecția 11)',
mwb_ayf_count: 3,
mwb_ayf_part1:
'Începe cu subiectul conversației-model. Oferă o publicație din secțiunea „Instrumente de predare”. (th lecția 17)',
mwb_ayf_part1_time: 3,
mwb_ayf_part1_type: 'Vizita inițială',
mwb_ayf_part2:
'Începe cu subiectul conversației-model. Oferă broșura Bucură-te pentru totdeauna de viață! și analizează pe scurt secțiunea „Cum poți trage foloase din aceste lecții biblice”. (th lecția 3)',
mwb_ayf_part2_time: 4,
mwb_ayf_part2_type: 'Vizita ulterioară',
mwb_ayf_part3: 'lff lecția 16, punctul 6 și „Unii oameni spun” (th lecția 14)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Studiu biblic',
mwb_song_middle: 109,
mwb_lc_count: 2,
mwb_lc_part1: '„Să-i ajutăm pe oamenii nereligioși să-l cunoască pe Creator”',
mwb_lc_part1_time: 10,
mwb_lc_part1_content: 'Discuție și material video.',
mwb_lc_part2: 'Necesități locale',
mwb_lc_part2_time: 5,
mwb_lc_cbs: 'bt, „Scrisoare din partea Corpului de Guvernare” și cap. 1 ¶1-7',
mwb_song_conclude: 64,
},
{
mwb_week_date: '2023/10/30',
mwb_week_date_locale: '30 octombrie – 5 noiembrie',
mwb_weekly_bible_reading: 'IOV 11, 12',
mwb_song_first: 87,
mwb_tgw_talk: '„Trei modalități de a dobândi înțelepciune și de a trage foloase de pe urma ei”',
mwb_tgw_bread: 'Iov 12:1-25 (th lecția 5)',
mwb_ayf_count: 3,
mwb_ayf_part1:
'Începe cu subiectul conversației-model. Prezintă programul nostru de studiere a Bibliei și oferă o carte de vizită „Curs biblic gratuit”. (th lecția 1)',
mwb_ayf_part1_time: 4,
mwb_ayf_part1_type: 'Vizita inițială',
mwb_ayf_part2:
'Începe cu subiectul conversației-model. Invită persoana la o întrunire a congregației. Apoi prezintă și analizează materialul video Ce activități se desfășoară la o sală a Regatului? (nu se va viziona materialul). (th lecția 13)',
mwb_ayf_part2_time: 3,
mwb_ayf_part2_type: 'Vizita ulterioară',
mwb_ayf_part3: 'lff lecția 12, rezumat, recapitulare și obiectiv (th lecția 19)',
mwb_ayf_part3_time: 5,
mwb_ayf_part3_type: 'Studiu biblic',
mwb_song_middle: 135,
mwb_lc_count: 1,
mwb_lc_part1: '„Părinți, ajutați-vă copiii să dobândească înțelepciune divină”',
mwb_lc_part1_time: 15,
mwb_lc_part1_content: 'Discuție și material video.',
mwb_lc_cbs: 'bt cap. 1 ¶8-15, chenarul de la p. 12',
mwb_song_conclude: 3,
},
];
Loading