From 6d0f8c2559cf41ffe95e577f088a9aa9cc96e8f2 Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Sun, 26 Oct 2025 20:32:24 +0100 Subject: [PATCH] Prune obsolete ignore entries in translations sync Updated sync_translations.py to detect and optionally remove ignore entries referencing non-existent keys in the reference translation. Cleaned up scripts/ignore_locales.toml by removing many obsolete ignore entries, reducing maintenance overhead and improving accuracy. --- .github/scripts/sync_translations.py | 66 ++- scripts/ignore_locales.toml | 761 --------------------------- 2 files changed, 56 insertions(+), 771 deletions(-) diff --git a/.github/scripts/sync_translations.py b/.github/scripts/sync_translations.py index 61b2621fd..466867f5e 100644 --- a/.github/scripts/sync_translations.py +++ b/.github/scripts/sync_translations.py @@ -493,7 +493,9 @@ def main() -> None: candidate_ignore = (script_root / IGNORE_LOCALES_FILE).resolve() if candidate_ignore.exists(): ignore_file_path = candidate_ignore - ignore_locales_map, ignore_header_lines, ignore_order = load_ignore_locales(ignore_file_path) + ignore_locales_map, ignore_header_lines, ignore_order = load_ignore_locales( + ignore_file_path + ) ignore_locales_modified = False # Resolve the reference path. First try under branch root, then fall back to raw path. @@ -507,6 +509,32 @@ def main() -> None: if not ref_path.exists(): raise SystemExit(f"Reference file not found: {ref_path}") + # Pre-load the reference so we can identify valid translation paths (used for + # trimming ignore entries that no longer exist in the reference). + ref_data, _ = read_json_with_duplicates(ref_path) + reference_leaf_paths = set(collect_leaf_paths(ref_data, "")) + + # Track ignore entries that reference non-existent keys in the reference + # translation so we can report (and optionally prune) them. + invalid_ignore_entries: dict[str, list[str]] = {} + + for locale_key, ignored_paths in list(ignore_locales_map.items()): + current_ignored = set(ignored_paths) + invalid_entries = sorted( + path for path in current_ignored if path not in reference_leaf_paths + ) + if not invalid_entries: + continue + invalid_ignore_entries[locale_key] = invalid_entries + if args.check or args.dry_run: + continue + updated_ignore = current_ignored - set(invalid_entries) + if updated_ignore: + ignore_locales_map[locale_key] = updated_ignore + else: + ignore_locales_map.pop(locale_key, None) + ignore_locales_modified = True + # Build the targets list. If CI passed a single space-separated string, split it. files_list: List[Path] = [] if args.files: @@ -560,19 +588,37 @@ def main() -> None: except ValueError: locale_segment = None if locale_segment is None: - locale_segment = target_rel_path.parent.name if target_rel_path.parent else None + locale_segment = ( + target_rel_path.parent.name if target_rel_path.parent else None + ) locale_key = locale_segment.replace("-", "_") if locale_segment else "" existing_ignore = ignore_locales_map.get(locale_key, set()) ignored_paths = set(existing_ignore) if existing_ignore else set() - stats, success, dupes, total_ref_leaves, translated_ignored_paths = process_file( - ref_path, - target_path, - prune=args.prune, - dry_run=args.dry_run, - check_only=args.check, - backup=args.backup, - ignored_paths=ignored_paths, + invalid_for_locale = invalid_ignore_entries.get(locale_key, []) + if invalid_for_locale: + if args.check or args.dry_run: + report.append( + "- Ignore entries referencing missing reference keys: " + + f"`{', '.join(invalid_for_locale)}` (update `scripts/ignore_locales.toml`)" + ) + else: + report.append( + "- Removed ignore entries referencing missing reference keys: " + + f"`{', '.join(invalid_for_locale)}`" + ) + ignored_paths -= set(invalid_for_locale) + + stats, success, dupes, total_ref_leaves, translated_ignored_paths = ( + process_file( + ref_path, + target_path, + prune=args.prune, + dry_run=args.dry_run, + check_only=args.check, + backup=args.backup, + ignored_paths=ignored_paths, + ) ) total_added += stats.added diff --git a/scripts/ignore_locales.toml b/scripts/ignore_locales.toml index 3a2961a8e..4ca48b887 100644 --- a/scripts/ignore_locales.toml +++ b/scripts/ignore_locales.toml @@ -2,48 +2,13 @@ # The structure mirrors scripts/ignore_translation.toml and is consumed by # .github/scripts/sync_translations.py. -[ar_AR] -ignore = [ - 'lang.div', - 'lang.dzo', - 'lang.que', -] - [az_AZ] ignore = [ - 'lang.afr', - 'lang.bre', - 'lang.div', - 'lang.epo', - 'lang.guj', - 'lang.hin', - 'lang.kan', - 'lang.mal', - 'lang.mar', - 'lang.mlt', - 'lang.mri', - 'lang.msa', - 'lang.nep', - 'lang.ori', - 'lang.pan', - 'lang.san', - 'lang.sin', - 'lang.slk', - 'lang.snd', - 'lang.sun', - 'lang.tam', - 'lang.tat', - 'lang.urd', - 'lang.yor', 'language.direction', ] [bg_BG] ignore = [ - 'lang.div', - 'lang.dzo', - 'lang.iku', - 'lang.que', 'language.direction', ] @@ -55,139 +20,18 @@ ignore = [ [ca_CA] ignore = [ 'adminUserSettings.admin', - 'lang.amh', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.fao', - 'lang.fry', - 'lang.guj', - 'lang.hin', - 'lang.iku', - 'lang.kan', - 'lang.kaz', - 'lang.lao', - 'lang.mar', - 'lang.mri', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.que', - 'lang.snd', - 'lang.swa', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgk', - 'lang.tgl', - 'lang.tir', - 'lang.uzb', - 'lang.uzb_cyrl', 'language.direction', 'watermark.type.1', ] [cs_CZ] ignore = [ - 'lang.amh', - 'lang.asm', - 'lang.bod', - 'lang.bos', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.frk', - 'lang.gla', - 'lang.guj', - 'lang.iku', - 'lang.jav', - 'lang.kan', - 'lang.kat', - 'lang.khm', - 'lang.kir', - 'lang.lao', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.msa', - 'lang.nor', - 'lang.oci', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.que', - 'lang.san', - 'lang.sin', - 'lang.snd', - 'lang.sun', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgl', - 'lang.tha', - 'lang.tir', - 'lang.uig', - 'lang.urd', - 'lang.uzb', - 'lang.uzb_cyrl', - 'lang.yor', 'language.direction', 'text', ] [da_DK] ignore = [ - 'lang.afr', - 'lang.amh', - 'lang.ben', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.frk', - 'lang.guj', - 'lang.hin', - 'lang.iku', - 'lang.jav', - 'lang.kan', - 'lang.khm', - 'lang.lao', - 'lang.lat', - 'lang.ltz', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.msa', - 'lang.nep', - 'lang.oci', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.que', - 'lang.san', - 'lang.sin', - 'lang.slk_frak', - 'lang.snd', - 'lang.sun', - 'lang.swa', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgk', - 'lang.tgl', - 'lang.tha', - 'lang.tir', - 'lang.ton', - 'lang.uig', - 'lang.urd', - 'lang.uzb', - 'lang.yor', 'language.direction', ] @@ -195,103 +39,30 @@ ignore = [ ignore = [ 'AddStampRequest.alphabet', 'AddStampRequest.position', - 'PDFToBook.selectText.1', - 'adminUserSettings.team', 'alphabet', - 'audit.dashboard.modal.id', - 'audit.dashboard.status', - 'audit.dashboard.tab.dashboard', - 'audit.dashboard.tab.export', - 'audit.dashboard.table.details', - 'audit.dashboard.table.id', 'certSign.name', 'endpointStatistics.top10', 'endpointStatistics.top20', 'fileChooser.dragAndDrop', - 'home.pipeline.title', - 'lang.afr', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.guj', - 'lang.hin', - 'lang.iku', - 'lang.kan', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.nep', - 'lang.ori', - 'lang.pan', - 'lang.que', - 'lang.san', - 'lang.snd', - 'lang.tam', - 'lang.tel', - 'lang.tgl', - 'lang.tir', - 'lang.urd', - 'lang.yor', 'language.direction', 'legal.impressum', 'licenses.version', 'pipeline.title', 'pipelineOptions.pipelineHeader', 'pro', - 'redact.zoom', - 'scannerEffect.quality.medium', 'sponsor', - 'team.status', 'text', 'validateSignature.cert.version', - 'validateSignature.status', 'watermark.type.1', ] [el_GR] ignore = [ - 'lang.ceb', - 'lang.dzo', - 'lang.iku', - 'lang.ori', - 'lang.pan', - 'lang.que', - 'lang.sin', - 'lang.uig', - 'lang.uzb_cyrl', 'language.direction', ] [es_ES] ignore = [ - 'error', - 'lang.asm', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.fil', - 'lang.frm', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.lao', - 'lang.mal', - 'lang.mar', - 'lang.oci', - 'lang.ori', - 'lang.pan', - 'lang.san', - 'lang.snd', - 'lang.sun', - 'lang.tam', - 'lang.tel', - 'lang.tir', - 'lang.urd', - 'lang.uzb', - 'lang.yor', 'language.direction', 'no', 'showJS.tags', @@ -299,23 +70,6 @@ ignore = [ [eu_ES] ignore = [ - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.mal', - 'lang.pan', - 'lang.que', - 'lang.san', - 'lang.slv', - 'lang.snd', - 'lang.sqi', - 'lang.tat', - 'lang.tir', - 'lang.yor', 'language.direction', ] @@ -328,66 +82,21 @@ ignore = [ 'AddStampRequest.alphabet', 'AddStampRequest.position', 'AddStampRequest.rotation', - 'PDFToBook.selectText.1', 'adminUserSettings.actions', 'alphabet', 'compare.document.1', 'compare.document.2', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.eus', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.kaz', - 'lang.khm', - 'lang.lao', - 'lang.ltz', - 'lang.mal', - 'lang.mar', - 'lang.oci', - 'lang.ori', - 'lang.que', - 'lang.san', - 'lang.snd', - 'lang.swa', - 'lang.tel', - 'lang.tgl', - 'lang.tir', - 'lang.yor', 'language.direction', 'licenses.license', 'licenses.module', 'licenses.nav', 'licenses.version', - 'pdfOrganiser.mode', 'pipeline.title', 'watermark.type.2', ] [ga_IE] ignore = [ - 'lang.ceb', - 'lang.cos', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.guj', - 'lang.hat', - 'lang.iku', - 'lang.lao', - 'lang.oci', - 'lang.ori', - 'lang.pan', - 'lang.sin', - 'lang.snd', - 'lang.sun', - 'lang.tgk', - 'lang.tir', - 'lang.uig', 'language.direction', ] @@ -398,40 +107,14 @@ ignore = [ [hr_HR] ignore = [ - 'PDFToBook.selectText.1', - 'home.pipeline.title', - 'lang.bod', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.dzo', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.lao', - 'lang.mri', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.que', - 'lang.san', - 'lang.snd', - 'lang.tam', - 'lang.tel', - 'lang.tgl', - 'lang.tir', 'language.direction', 'showJS.tags', ] [hu_HU] ignore = [ - 'audit.dashboard.export.json', - 'audit.dashboard.modal.id', - 'audit.dashboard.table.id', 'endpointStatistics.top10', 'endpointStatistics.top20', - 'home.pipeline.title', 'language.direction', 'pipeline.title', 'pipelineOptions.pipelineHeader', @@ -441,85 +124,16 @@ ignore = [ [id_ID] ignore = [ - 'lang.aze', - 'lang.aze_cyrl', - 'lang.bre', - 'lang.cat', - 'lang.ceb', - 'lang.chr', - 'lang.cym', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.eus', - 'lang.fao', - 'lang.frk', - 'lang.guj', - 'lang.hin', - 'lang.iku', - 'lang.kan', - 'lang.kaz', - 'lang.kir', - 'lang.lao', - 'lang.lat', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.que', - 'lang.slk_frak', - 'lang.snd', - 'lang.sun', - 'lang.swa', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgk', - 'lang.tgl', - 'lang.tha', - 'lang.tir', - 'lang.uig', - 'lang.urd', - 'lang.uzb', - 'lang.uzb_cyrl', - 'lang.yor', 'language.direction', ] [it_IT] ignore = [ - 'lang.asm', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.fao', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.lao', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.que', - 'lang.snd', - 'lang.swa', - 'lang.tam', - 'lang.tel', - 'lang.tgl', - 'lang.urd', - 'lang.yor', 'language.direction', 'no', 'password', 'pipeline.title', 'pipelineOptions.pipelineHeader', - 'removePassword.selectText.2', 'showJS.tags', 'sponsor', ] @@ -531,15 +145,11 @@ ignore = [ [ko_KR] ignore = [ - 'lang.fao', - 'lang.pus', - 'lang.sun', 'language.direction', ] [ml_IN] ignore = [ - 'lang.iku', 'language.direction', ] @@ -552,37 +162,6 @@ ignore = [ ignore = [ 'compare.document.1', 'compare.document.2', - 'lang.afr', - 'lang.asm', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.dzo', - 'lang.epo', - 'lang.fao', - 'lang.guj', - 'lang.hin', - 'lang.iku', - 'lang.kan', - 'lang.lao', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.oci', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.que', - 'lang.sin', - 'lang.snd', - 'lang.sun', - 'lang.swa', - 'lang.tam', - 'lang.tel', - 'lang.tgl', - 'lang.ton', - 'lang.urd', - 'lang.yor', 'language.direction', 'navbar.allTools', 'sponsor', @@ -590,52 +169,8 @@ ignore = [ [no_NB] ignore = [ - 'PDFToBook.selectText.1', 'adminUserSettings.admin', 'info', - 'lang.afr', - 'lang.amh', - 'lang.ben', - 'lang.bos', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.dan_frak', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.guj', - 'lang.hin', - 'lang.iku', - 'lang.kan', - 'lang.khm', - 'lang.lao', - 'lang.lat', - 'lang.ltz', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.msa', - 'lang.nep', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.que', - 'lang.san', - 'lang.slk_frak', - 'lang.snd', - 'lang.swa', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgk', - 'lang.tgl', - 'lang.tha', - 'lang.tir', - 'lang.ton', - 'lang.uig', - 'lang.urd', - 'lang.yor', 'language.direction', 'oops', 'sponsor', @@ -643,149 +178,27 @@ ignore = [ [pl_PL] ignore = [ - 'PDFToBook.selectText.1', - 'lang.afr', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.cos', - 'lang.div', - 'lang.dzo', - 'lang.fao', - 'lang.frk', - 'lang.guj', - 'lang.hat', - 'lang.iku', - 'lang.kan', - 'lang.khm', - 'lang.lao', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.nep', - 'lang.oci', - 'lang.ori', - 'lang.pus', - 'lang.que', - 'lang.snd', - 'lang.sun', - 'lang.swa', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgl', - 'lang.tir', - 'lang.uig', - 'lang.urd', 'language.direction', ] [pt_BR] ignore = [ - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.fao', - 'lang.fil', - 'lang.frk', - 'lang.fry', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.kir', - 'lang.mar', - 'lang.ori', - 'lang.pan', - 'lang.que', - 'lang.snd', - 'lang.tat', - 'lang.tel', - 'lang.tgl', - 'lang.tir', - 'lang.uig', - 'lang.uzb', - 'lang.yid', 'language.direction', 'pipelineOptions.pipelineHeader', ] [pt_PT] ignore = [ - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.fao', - 'lang.fil', - 'lang.frk', - 'lang.fry', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.kir', - 'lang.mar', - 'lang.ori', - 'lang.pan', - 'lang.que', - 'lang.snd', - 'lang.tat', - 'lang.tel', - 'lang.tgl', - 'lang.tir', - 'lang.uig', - 'lang.uzb', - 'lang.yid', 'language.direction', ] [ro_RO] ignore = [ - 'lang.amh', - 'lang.asm', - 'lang.bod', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.cos', - 'lang.deu_frak', - 'lang.div', - 'lang.dzo', - 'lang.est', - 'lang.fao', - 'lang.glg', - 'lang.guj', - 'lang.iku', - 'lang.jav', - 'lang.kan', - 'lang.lao', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.nep', - 'lang.oci', - 'lang.ori', - 'lang.pan', - 'lang.pus', - 'lang.slk_frak', - 'lang.snd', - 'lang.sun', - 'lang.swa', - 'lang.tam', - 'lang.tel', - 'lang.tgl', - 'lang.tir', - 'lang.urd', - 'lang.yor', 'language.direction', ] [ru_RU] ignore = [ - 'lang.iku', - 'lang.pus', 'language.direction', ] @@ -793,25 +206,6 @@ ignore = [ ignore = [ 'adminUserSettings.admin', 'info', - 'lang.ceb', - 'lang.chr', - 'lang.dzo', - 'lang.epo', - 'lang.iku', - 'lang.kaz', - 'lang.mar', - 'lang.ori', - 'lang.pan', - 'lang.que', - 'lang.san', - 'lang.sin', - 'lang.snd', - 'lang.tat', - 'lang.tel', - 'lang.tgl', - 'lang.tir', - 'lang.urd', - 'lang.uzb', 'language.direction', 'navbar.sections.security', 'text', @@ -820,106 +214,28 @@ ignore = [ [sl_SI] ignore = [ - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.eus', - 'lang.fao', - 'lang.frk', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.lao', - 'lang.mar', - 'lang.mri', - 'lang.oci', - 'lang.ori', - 'lang.pan', - 'lang.que', - 'lang.slk', - 'lang.snd', - 'lang.sun', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgk', - 'lang.tgl', - 'lang.tir', - 'lang.urd', - 'lang.uzb', - 'lang.yor', 'language.direction', ] [sr_LATN_RS] ignore = [ - 'audit.dashboard.modal.id', - 'audit.dashboard.status', - 'audit.dashboard.table.id', 'endpointStatistics.top', 'endpointStatistics.top10', 'endpointStatistics.top20', 'font', 'info', - 'lang.div', - 'lang.epo', - 'lang.hin', - 'lang.iku', - 'lang.mar', - 'lang.san', - 'lang.snd', - 'lang.tel', - 'lang.tgl', - 'lang.urd', 'language.direction', 'pro', 'showJS.tags', - 'team.status', - 'validateSignature.status', ] [sv_SE] ignore = [ - 'lang.ben', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.dzo', - 'lang.epo', - 'lang.guj', - 'lang.hin', - 'lang.kan', - 'lang.lao', - 'lang.lat', - 'lang.mal', - 'lang.mri', - 'lang.ori', - 'lang.pan', - 'lang.que', - 'lang.san', - 'lang.slk_frak', - 'lang.snd', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tir', - 'lang.urd', - 'lang.yor', 'language.direction', ] [th_TH] ignore = [ - 'lang.dzo', - 'lang.kir', - 'lang.pan', - 'lang.sin', - 'lang.slk_frak', - 'lang.tir', - 'lang.uzb_cyrl', 'language.direction', 'pipelineOptions.pipelineHeader', 'showJS.tags', @@ -927,93 +243,16 @@ ignore = [ [tr_TR] ignore = [ - 'lang.afr', - 'lang.bre', - 'lang.ceb', - 'lang.chr', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.fao', - 'lang.guj', - 'lang.kan', - 'lang.lao', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.msa', - 'lang.ori', - 'lang.pus', - 'lang.que', - 'lang.sin', - 'lang.slk', - 'lang.slk_frak', - 'lang.snd', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgk', - 'lang.tgl', - 'lang.tir', - 'lang.urd', - 'lang.yor', 'language.direction', ] [uk_UA] ignore = [ - 'lang.iku', 'language.direction', ] [vi_VN] ignore = [ - 'lang.amh', - 'lang.asm', - 'lang.aze', - 'lang.aze_cyrl', - 'lang.bos', - 'lang.bre', - 'lang.cat', - 'lang.ceb', - 'lang.chr', - 'lang.cos', - 'lang.div', - 'lang.dzo', - 'lang.epo', - 'lang.eus', - 'lang.fao', - 'lang.glg', - 'lang.guj', - 'lang.iku', - 'lang.kan', - 'lang.kaz', - 'lang.kir', - 'lang.lat', - 'lang.ltz', - 'lang.mal', - 'lang.mar', - 'lang.mri', - 'lang.msa', - 'lang.ori', - 'lang.pus', - 'lang.que', - 'lang.sin', - 'lang.slk', - 'lang.slk_frak', - 'lang.snd', - 'lang.swa', - 'lang.syr', - 'lang.tam', - 'lang.tat', - 'lang.tel', - 'lang.tgk', - 'lang.tir', - 'lang.uig', - 'lang.uzb', - 'lang.uzb_cyrl', - 'lang.yid', - 'lang.yor', 'language.direction', 'pipelineOptions.pipelineHeader', 'showJS.tags',