Zume Training: 52 languages of discipleship course, joined to 3,479 pins
The brief names zume.training every tick and an earlier pass recorded the list as unobtainable. That was wrong. robots.txt Disallows /api/ and the homepage switcher is client-rendered, both true, but robots.txt also DECLARES a sitemap, and the publisher maintains /articles/zume-languages for exactly this purpose. Neither is behind a Disallow. The real figure is 62 locales, not the ~40 estimated: 54 serve a landing page that answers 200. The two sources disagree in both directions - Dari and Pashto ship sites but are missing from the article's table, and eight table rows serve no page yet - so fetch-zume-index.mjs takes the union and then fetches every landing URL. A locale ships a link only if its own page answered. Naming and linking stay separate facts. Pashto is deliberately left unjoined: pus is a macrolanguage, the people-group data carries pbu, pbt and pst, and nothing the publisher gives selects one. Training is not Scripture and not film, so it sits in its own field and its own type and moves NO tier. Measured: the 52 joined languages reach 3,479 pins and 4.78bn people, and none of them are tier 0 - every Zume language already has Scripture or film. Folding training into the tiers would have cut the gap count without anyone having translated anything. The gap filter still cuts 12,379 features to 3,457. Both gates had a hole this exposed. The coverage gate harvested URLs from s, f and d only, so the 52 new URLs existed in no pin record it could see; and clause I checked Film, Scripture and Bible Stories by host but let any other type fall through unchecked. Both now cover training, and a poisoned row typed Scripture on zume.training is caught. The browser gate screened 3,550 links and silently ignored the new ones; it now screens all 3,602. Verified in a browser with a negative control: deu opens with a chip linking https://zume.training/de, kri opens with "not in Zume's 54" and no href, no page errors.
This commit is contained in:
parent
22a216a207
commit
2ed595c0f8
24 changed files with 2821 additions and 38 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
830
data/tables/zume-index.json
Normal file
830
data/tables/zume-index.json
Normal file
|
|
@ -0,0 +1,830 @@
|
|||
{
|
||||
"source": "https://zume.training/sitemap.xml + https://zume.training/articles/zume-languages",
|
||||
"fetched": "2026-09-24",
|
||||
"locales": 62,
|
||||
"live": 54,
|
||||
"codes": 52,
|
||||
"byIso": {
|
||||
"amh": {
|
||||
"locale": "am",
|
||||
"name": "Amharic",
|
||||
"url": "https://zume.training/am"
|
||||
},
|
||||
"arb": {
|
||||
"locale": "ar",
|
||||
"name": "Arabic",
|
||||
"url": "https://zume.training/ar"
|
||||
},
|
||||
"ajp": {
|
||||
"locale": "ar_jo",
|
||||
"name": "Arabic (Jordanian)",
|
||||
"url": "https://zume.training/ar_jo"
|
||||
},
|
||||
"aeb": {
|
||||
"locale": "ar_tn",
|
||||
"name": "Arabic (Tunisian)",
|
||||
"url": "https://zume.training/ar_tn"
|
||||
},
|
||||
"ase": {
|
||||
"locale": "asl",
|
||||
"name": "American Sign Language",
|
||||
"url": "https://zume.training/asl"
|
||||
},
|
||||
"bho": {
|
||||
"locale": "bho",
|
||||
"name": "Bhojpuri",
|
||||
"url": "https://zume.training/bho"
|
||||
},
|
||||
"ben": {
|
||||
"locale": "bn",
|
||||
"name": "Bengali (India)",
|
||||
"url": "https://zume.training/bn"
|
||||
},
|
||||
"bos": {
|
||||
"locale": "bs",
|
||||
"name": "Bosnian",
|
||||
"url": "https://zume.training/bs"
|
||||
},
|
||||
"deu": {
|
||||
"locale": "de",
|
||||
"name": "German",
|
||||
"url": "https://zume.training/de"
|
||||
},
|
||||
"eng": {
|
||||
"locale": "en",
|
||||
"name": "English",
|
||||
"url": "https://zume.training/en"
|
||||
},
|
||||
"spa": {
|
||||
"locale": "es",
|
||||
"name": "Spanish",
|
||||
"url": "https://zume.training/es"
|
||||
},
|
||||
"pes": {
|
||||
"locale": "fa",
|
||||
"name": "Persian/Farsi",
|
||||
"url": "https://zume.training/fa"
|
||||
},
|
||||
"fra": {
|
||||
"locale": "fr",
|
||||
"name": "French",
|
||||
"url": "https://zume.training/fr"
|
||||
},
|
||||
"guj": {
|
||||
"locale": "gu",
|
||||
"name": "Gujarati",
|
||||
"url": "https://zume.training/gu"
|
||||
},
|
||||
"hau": {
|
||||
"locale": "ha",
|
||||
"name": "Hausa",
|
||||
"url": "https://zume.training/ha"
|
||||
},
|
||||
"hin": {
|
||||
"locale": "hi",
|
||||
"name": "Hindi",
|
||||
"url": "https://zume.training/hi"
|
||||
},
|
||||
"hrv": {
|
||||
"locale": "hr",
|
||||
"name": "Croatian",
|
||||
"url": "https://zume.training/hr"
|
||||
},
|
||||
"hye": {
|
||||
"locale": "hy",
|
||||
"name": "Armenian",
|
||||
"url": "https://zume.training/hy"
|
||||
},
|
||||
"ind": {
|
||||
"locale": "id",
|
||||
"name": "Indonesian",
|
||||
"url": "https://zume.training/id"
|
||||
},
|
||||
"ita": {
|
||||
"locale": "it",
|
||||
"name": "Italian",
|
||||
"url": "https://zume.training/it"
|
||||
},
|
||||
"jpn": {
|
||||
"locale": "ja",
|
||||
"name": "Japanese",
|
||||
"url": "https://zume.training/ja"
|
||||
},
|
||||
"kan": {
|
||||
"locale": "kn",
|
||||
"name": "Kannada",
|
||||
"url": "https://zume.training/kn"
|
||||
},
|
||||
"kor": {
|
||||
"locale": "ko",
|
||||
"name": "Korean",
|
||||
"url": "https://zume.training/ko"
|
||||
},
|
||||
"ckb": {
|
||||
"locale": "ku",
|
||||
"name": "Kurdish",
|
||||
"url": "https://zume.training/ku"
|
||||
},
|
||||
"kir": {
|
||||
"locale": "ky",
|
||||
"name": "ky",
|
||||
"url": "https://zume.training/ky"
|
||||
},
|
||||
"lao": {
|
||||
"locale": "lo",
|
||||
"name": "Lao",
|
||||
"url": "https://zume.training/lo"
|
||||
},
|
||||
"mai": {
|
||||
"locale": "mai",
|
||||
"name": "Maithili",
|
||||
"url": "https://zume.training/mai"
|
||||
},
|
||||
"mal": {
|
||||
"locale": "ml",
|
||||
"name": "Malayalam",
|
||||
"url": "https://zume.training/ml"
|
||||
},
|
||||
"mar": {
|
||||
"locale": "mr",
|
||||
"name": "Marathi",
|
||||
"url": "https://zume.training/mr"
|
||||
},
|
||||
"zlm": {
|
||||
"locale": "ms",
|
||||
"name": "Malay",
|
||||
"url": "https://zume.training/ms"
|
||||
},
|
||||
"mya": {
|
||||
"locale": "my",
|
||||
"name": "Burmese",
|
||||
"url": "https://zume.training/my"
|
||||
},
|
||||
"npi": {
|
||||
"locale": "ne",
|
||||
"name": "Nepali",
|
||||
"url": "https://zume.training/ne"
|
||||
},
|
||||
"ory": {
|
||||
"locale": "or",
|
||||
"name": "Odia",
|
||||
"url": "https://zume.training/or"
|
||||
},
|
||||
"pan": {
|
||||
"locale": "pa",
|
||||
"name": "Punjabi",
|
||||
"url": "https://zume.training/pa"
|
||||
},
|
||||
"pnb": {
|
||||
"locale": "pa_pk",
|
||||
"name": "Punjabi (Western)",
|
||||
"url": "https://zume.training/pa_pk"
|
||||
},
|
||||
"pol": {
|
||||
"locale": "pl",
|
||||
"name": "Polish",
|
||||
"url": "https://zume.training/pl"
|
||||
},
|
||||
"prs": {
|
||||
"locale": "prs",
|
||||
"name": "prs",
|
||||
"url": "https://zume.training/prs"
|
||||
},
|
||||
"por": {
|
||||
"locale": "pt",
|
||||
"name": "Portuguese",
|
||||
"url": "https://zume.training/pt"
|
||||
},
|
||||
"ron": {
|
||||
"locale": "ro",
|
||||
"name": "Romanian",
|
||||
"url": "https://zume.training/ro"
|
||||
},
|
||||
"rus": {
|
||||
"locale": "ru",
|
||||
"name": "Russian",
|
||||
"url": "https://zume.training/ru"
|
||||
},
|
||||
"slv": {
|
||||
"locale": "sl",
|
||||
"name": "Slovenian",
|
||||
"url": "https://zume.training/sl"
|
||||
},
|
||||
"som": {
|
||||
"locale": "so",
|
||||
"name": "Somali",
|
||||
"url": "https://zume.training/so"
|
||||
},
|
||||
"swh": {
|
||||
"locale": "swa",
|
||||
"name": "Swahili",
|
||||
"url": "https://zume.training/swa"
|
||||
},
|
||||
"tam": {
|
||||
"locale": "ta",
|
||||
"name": "Tamil",
|
||||
"url": "https://zume.training/ta"
|
||||
},
|
||||
"tel": {
|
||||
"locale": "te",
|
||||
"name": "Telugu",
|
||||
"url": "https://zume.training/te"
|
||||
},
|
||||
"tha": {
|
||||
"locale": "th",
|
||||
"name": "Thai",
|
||||
"url": "https://zume.training/th"
|
||||
},
|
||||
"tur": {
|
||||
"locale": "tr",
|
||||
"name": "Turkish",
|
||||
"url": "https://zume.training/tr"
|
||||
},
|
||||
"urd": {
|
||||
"locale": "ur",
|
||||
"name": "Urdu",
|
||||
"url": "https://zume.training/ur"
|
||||
},
|
||||
"vie": {
|
||||
"locale": "vi",
|
||||
"name": "Vietnamese",
|
||||
"url": "https://zume.training/vi"
|
||||
},
|
||||
"yor": {
|
||||
"locale": "yo",
|
||||
"name": "Yoruba",
|
||||
"url": "https://zume.training/yo"
|
||||
},
|
||||
"cmn": {
|
||||
"locale": "zhcn",
|
||||
"name": "Chinese (Simplified)",
|
||||
"url": "https://zume.training/zhcn"
|
||||
},
|
||||
"yue": {
|
||||
"locale": "zhhk",
|
||||
"name": "Cantonese (Traditional)",
|
||||
"url": "https://zume.training/zhhk"
|
||||
}
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"locale": "am",
|
||||
"name": "Amharic",
|
||||
"native": "አማርኛ",
|
||||
"iso": "amh",
|
||||
"url": "https://zume.training/am",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"name": "Arabic",
|
||||
"native": "العربية",
|
||||
"iso": "arb",
|
||||
"url": "https://zume.training/ar",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar_jo",
|
||||
"name": "Arabic (Jordanian)",
|
||||
"native": "العربية - الأردن",
|
||||
"iso": "ajp",
|
||||
"url": "https://zume.training/ar_jo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar_ma",
|
||||
"name": "Arabic (Moroccan)",
|
||||
"native": "العربية - الأردن",
|
||||
"iso": "ary",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "ar_tn",
|
||||
"name": "Arabic (Tunisian)",
|
||||
"native": "العربية التونسية",
|
||||
"iso": "aeb",
|
||||
"url": "https://zume.training/ar_tn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "asl",
|
||||
"name": "American Sign Language",
|
||||
"native": "Sign Language",
|
||||
"iso": "ase",
|
||||
"url": "https://zume.training/asl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "az",
|
||||
"name": "Azerbaijani",
|
||||
"native": null,
|
||||
"iso": "azj",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "bg",
|
||||
"name": "Bulgarian",
|
||||
"native": "български език",
|
||||
"iso": "bul",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "bho",
|
||||
"name": "Bhojpuri",
|
||||
"native": "भोजपुरी",
|
||||
"iso": "bho",
|
||||
"url": "https://zume.training/bho",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "bn",
|
||||
"name": "Bengali (India)",
|
||||
"native": "বাংলা",
|
||||
"iso": "ben",
|
||||
"url": "https://zume.training/bn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "bs",
|
||||
"name": "Bosnian",
|
||||
"native": "Bosanski",
|
||||
"iso": "bos",
|
||||
"url": "https://zume.training/bs",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "de",
|
||||
"name": "German",
|
||||
"native": "Deutsch",
|
||||
"iso": "deu",
|
||||
"url": "https://zume.training/de",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "en",
|
||||
"name": "English",
|
||||
"native": null,
|
||||
"iso": "eng",
|
||||
"url": "https://zume.training/en",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "es",
|
||||
"name": "Spanish",
|
||||
"native": "Español",
|
||||
"iso": "spa",
|
||||
"url": "https://zume.training/es",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "fa",
|
||||
"name": "Persian/Farsi",
|
||||
"native": "فارسی",
|
||||
"iso": "pes",
|
||||
"url": "https://zume.training/fa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "fo",
|
||||
"name": "Faroese",
|
||||
"native": null,
|
||||
"iso": "fao",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"name": "French",
|
||||
"native": "Français",
|
||||
"iso": "fra",
|
||||
"url": "https://zume.training/fr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "gu",
|
||||
"name": "Gujarati",
|
||||
"native": "ગુજરાતી",
|
||||
"iso": "guj",
|
||||
"url": "https://zume.training/gu",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ha",
|
||||
"name": "Hausa",
|
||||
"native": null,
|
||||
"iso": "hau",
|
||||
"url": "https://zume.training/ha",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"name": "Hindi",
|
||||
"native": "हिन्दी",
|
||||
"iso": "hin",
|
||||
"url": "https://zume.training/hi",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hr",
|
||||
"name": "Croatian",
|
||||
"native": "Hrvatski",
|
||||
"iso": "hrv",
|
||||
"url": "https://zume.training/hr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hy",
|
||||
"name": "Armenian",
|
||||
"native": null,
|
||||
"iso": "hye",
|
||||
"url": "https://zume.training/hy",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "id",
|
||||
"name": "Indonesian",
|
||||
"native": "Bahasa Indonesia",
|
||||
"iso": "ind",
|
||||
"url": "https://zume.training/id",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "it",
|
||||
"name": "Italian",
|
||||
"native": "Italiano",
|
||||
"iso": "ita",
|
||||
"url": "https://zume.training/it",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ja",
|
||||
"name": "Japanese",
|
||||
"native": "日本語",
|
||||
"iso": "jpn",
|
||||
"url": "https://zume.training/ja",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "kn",
|
||||
"name": "Kannada",
|
||||
"native": "ಕನ್ನಡ",
|
||||
"iso": "kan",
|
||||
"url": "https://zume.training/kn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ko",
|
||||
"name": "Korean",
|
||||
"native": "한국어",
|
||||
"iso": "kor",
|
||||
"url": "https://zume.training/ko",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ku",
|
||||
"name": "Kurdish",
|
||||
"native": "کوردی",
|
||||
"iso": "ckb",
|
||||
"url": "https://zume.training/ku",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ky",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": "kir",
|
||||
"url": "https://zume.training/ky",
|
||||
"listed": false,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "lo",
|
||||
"name": "Lao",
|
||||
"native": "ພາສາລາວ",
|
||||
"iso": "lao",
|
||||
"url": "https://zume.training/lo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "lv",
|
||||
"name": "Latvian",
|
||||
"native": "Latviešu",
|
||||
"iso": "lvs",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "mai",
|
||||
"name": "Maithili",
|
||||
"native": "मैथिली",
|
||||
"iso": "mai",
|
||||
"url": "https://zume.training/mai",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ml",
|
||||
"name": "Malayalam",
|
||||
"native": "മലയാളം",
|
||||
"iso": "mal",
|
||||
"url": "https://zume.training/ml",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "mn",
|
||||
"name": "Mongolian",
|
||||
"native": "Монгол",
|
||||
"iso": "khk",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "mr",
|
||||
"name": "Marathi",
|
||||
"native": "मराठी",
|
||||
"iso": "mar",
|
||||
"url": "https://zume.training/mr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ms",
|
||||
"name": "Malay",
|
||||
"native": "Bahasa Malaysia",
|
||||
"iso": "zlm",
|
||||
"url": "https://zume.training/ms",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "my",
|
||||
"name": "Burmese",
|
||||
"native": "မြန်မာဘာသာ",
|
||||
"iso": "mya",
|
||||
"url": "https://zume.training/my",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ne",
|
||||
"name": "Nepali",
|
||||
"native": "नेपाली",
|
||||
"iso": "npi",
|
||||
"url": "https://zume.training/ne",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "or",
|
||||
"name": "Odia",
|
||||
"native": "ଓଡ଼ିଆ",
|
||||
"iso": "ory",
|
||||
"url": "https://zume.training/or",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pa",
|
||||
"name": "Punjabi",
|
||||
"native": "ਪੰਜਾਬੀ",
|
||||
"iso": "pan",
|
||||
"url": "https://zume.training/pa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pa_pk",
|
||||
"name": "Punjabi (Western)",
|
||||
"native": "ਪੰਜਾਬੀ (ਪੱਛਮੀ)",
|
||||
"iso": "pnb",
|
||||
"url": "https://zume.training/pa_pk",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pl",
|
||||
"name": "Polish",
|
||||
"native": "Polski",
|
||||
"iso": "pol",
|
||||
"url": "https://zume.training/pl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "prs",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": "prs",
|
||||
"url": "https://zume.training/prs",
|
||||
"listed": false,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pt",
|
||||
"name": "Portuguese",
|
||||
"native": "Português",
|
||||
"iso": "por",
|
||||
"url": "https://zume.training/pt",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pus",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": null,
|
||||
"url": "https://zume.training/pus",
|
||||
"listed": false,
|
||||
"sitemap": true,
|
||||
"why": "Pashto has three individual codes in the people-group data (pbu, pbt, pst) and the publisher gives nothing that selects one"
|
||||
},
|
||||
{
|
||||
"locale": "ro",
|
||||
"name": "Romanian",
|
||||
"native": "Română",
|
||||
"iso": "ron",
|
||||
"url": "https://zume.training/ro",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ru",
|
||||
"name": "Russian",
|
||||
"native": "Русский",
|
||||
"iso": "rus",
|
||||
"url": "https://zume.training/ru",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "sl",
|
||||
"name": "Slovenian",
|
||||
"native": "Slovenščina",
|
||||
"iso": "slv",
|
||||
"url": "https://zume.training/sl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "so",
|
||||
"name": "Somali",
|
||||
"native": "Soomaali",
|
||||
"iso": "som",
|
||||
"url": "https://zume.training/so",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "swa",
|
||||
"name": "Swahili",
|
||||
"native": "Kiswahili",
|
||||
"iso": "swh",
|
||||
"url": "https://zume.training/swa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ta",
|
||||
"name": "Tamil",
|
||||
"native": "தமிழ்",
|
||||
"iso": "tam",
|
||||
"url": "https://zume.training/ta",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "te",
|
||||
"name": "Telugu",
|
||||
"native": "తెలుగు",
|
||||
"iso": "tel",
|
||||
"url": "https://zume.training/te",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "th",
|
||||
"name": "Thai",
|
||||
"native": "ไทย",
|
||||
"iso": "tha",
|
||||
"url": "https://zume.training/th",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "tl",
|
||||
"name": "Tagalog",
|
||||
"native": null,
|
||||
"iso": "tgl",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "tr",
|
||||
"name": "Turkish",
|
||||
"native": "Türkçe",
|
||||
"iso": "tur",
|
||||
"url": "https://zume.training/tr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "uk",
|
||||
"name": "Ukrainian",
|
||||
"native": "Україна",
|
||||
"iso": "ukr",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "ur",
|
||||
"name": "Urdu",
|
||||
"native": "اردو",
|
||||
"iso": "urd",
|
||||
"url": "https://zume.training/ur",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "vi",
|
||||
"name": "Vietnamese",
|
||||
"native": "Tiếng Việt",
|
||||
"iso": "vie",
|
||||
"url": "https://zume.training/vi",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "yo",
|
||||
"name": "Yoruba",
|
||||
"native": "Yorùbá",
|
||||
"iso": "yor",
|
||||
"url": "https://zume.training/yo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhcn",
|
||||
"name": "Chinese (Simplified)",
|
||||
"native": "中文(简体)",
|
||||
"iso": "cmn",
|
||||
"url": "https://zume.training/zhcn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhhk",
|
||||
"name": "Cantonese (Traditional)",
|
||||
"native": "中文(繁體,香港)",
|
||||
"iso": "yue",
|
||||
"url": "https://zume.training/zhhk",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhtw",
|
||||
"name": "Chinese (Traditional)",
|
||||
"native": "中文(繁體)",
|
||||
"iso": "cmn",
|
||||
"url": "https://zume.training/zhtw",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -116,7 +116,7 @@ if (missing.length) add('D', `${missing.length} code(s) carry a resource but app
|
|||
// E — the table cannot invent a URL
|
||||
const known = new Set()
|
||||
for (const v of Object.values(codes)) {
|
||||
if (v.s) known.add(v.s); if (v.f) known.add(v.f)
|
||||
if (v.s) known.add(v.s); if (v.f) known.add(v.f); if (v.z) known.add(v.z)
|
||||
for (const d of v.d || []) known.add(d.u)
|
||||
}
|
||||
const invented = trows.filter((t) => t.resource_url && !known.has(t.resource_url))
|
||||
|
|
@ -133,6 +133,10 @@ for (const t of trows) {
|
|||
else if (t.type === 'Scripture' && film) typeBad.push(`Scripture on film host ${h}`)
|
||||
else if (t.type === 'Bible Stories' && !/(^|\.)git\.door43\.org$/i.test(h)) typeBad.push(`Bible Stories on ${h}`)
|
||||
else if (t.type === 'Bible Stories' && !/^Open Bible Stories/.test(t.resource || '')) typeBad.push(`Bible Stories named "${t.resource}"`)
|
||||
// Training is a COURSE, and the only publisher of it here is Zume. Without this the
|
||||
// type fell through every branch above and was checked by nothing at all.
|
||||
else if (t.type === 'Discipleship training' && !/(^|\.)zume\.training$/i.test(h)) typeBad.push(`Discipleship training on ${h}`)
|
||||
else if (/(^|\.)zume\.training$/i.test(h) && t.type !== 'Discipleship training') typeBad.push(`${t.type} on zume.training`)
|
||||
}
|
||||
if (typeBad.length) add('I', `${typeBad.length} row(s) whose type disagrees with their host (e.g. ${typeBad[0]})`)
|
||||
|
||||
|
|
@ -143,7 +147,7 @@ if (misTyped.length) add('H', `${misTyped.length} row(s) named "Open Bible Stori
|
|||
// G — no plain-http URL
|
||||
const httpUrls = []
|
||||
for (const [c, v] of Object.entries(codes)) {
|
||||
for (const u of [v.s, v.f, ...(v.d || []).map((d) => d.u)]) {
|
||||
for (const u of [v.s, v.f, v.z, ...(v.d || []).map((d) => d.u)]) {
|
||||
if (u && /^http:\/\//i.test(u)) httpUrls.push(`${c} ${u}`)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ import { fileURLToPath } from 'node:url'
|
|||
const BASE = (process.env.BASE_URL || process.argv[2] || 'http://127.0.0.1:4173').replace(/\/+$/, '')
|
||||
const GL = ['--use-gl=swiftshader', '--enable-unsafe-swiftshader', '--ignore-gpu-blocklist', '--enable-webgl', '--no-sandbox']
|
||||
// The screened publishers. Anything else is a doctrine failure, not a typo.
|
||||
const ALLOWED = /^(https:\/\/)?([a-z0-9-]+\.)*(ebible\.org|png\.bible|alkitab\.pw|git\.door43\.org|jesusfilm\.org|arc\.gt)(\/|$)/i
|
||||
const ALLOWED = /^(https:\/\/)?([a-z0-9-]+\.)*(ebible\.org|png\.bible|alkitab\.pw|git\.door43\.org|jesusfilm\.org|arc\.gt|zume\.training)(\/|$)/i
|
||||
|
||||
const HERE = dirname(fileURLToPath(import.meta.url))
|
||||
const REPO = resolve(HERE, '..')
|
||||
|
|
@ -141,7 +141,7 @@ try {
|
|||
const bad = []
|
||||
let scanned = 0
|
||||
for (const [c, v] of Object.entries(idx.codes || {})) {
|
||||
for (const u of [v.s, v.f, ...(v.d || []).map((d) => d.u)]) {
|
||||
for (const u of [v.s, v.f, v.z, ...(v.d || []).map((d) => d.u)]) {
|
||||
if (!u) continue
|
||||
scanned++
|
||||
if (!ALLOWED.test(u)) bad.push(`${c} -> ${u}`)
|
||||
|
|
|
|||
|
|
@ -51,9 +51,39 @@ all return an IDENTICAL 3,038-byte page titled "Client Challenge", and robots.tx
|
|||
returns that challenge HTML rather than a robots file — so their crawl policy cannot be read.
|
||||
Same shape as GRN. Needs an API agreement, not a scraper.
|
||||
|
||||
## zume.training — no list obtainable
|
||||
`/api/` is `Disallow`ed in their robots.txt, and the homepage exposes no language switcher
|
||||
even when rendered. The ~40-language list has to come from them.
|
||||
## zume.training — SOLVED, and the earlier note here was wrong
|
||||
This section previously said the language list was "no list obtainable". Both facts it
|
||||
rested on are true — `/api/` is `Disallow`ed in robots.txt, and the homepage's language
|
||||
switcher is client-rendered with no anchors to scrape — but the conclusion did not follow.
|
||||
Two public, explicitly-allowed sources carry the list:
|
||||
|
||||
- `https://zume.training/sitemap.xml`, which robots.txt itself **declares**, is a sitemap
|
||||
index with one per-locale sitemap for every locale that has public pages (54).
|
||||
- `https://zume.training/articles/zume-languages` is a page the publisher maintains for
|
||||
exactly this purpose: "All Zume languages (59)", with English name, native name and
|
||||
language code for each.
|
||||
|
||||
Neither is behind a `Disallow`, and the real figure is larger than the brief's estimate of
|
||||
~40: 62 distinct locales across the two sources, 54 of which serve a landing page that
|
||||
answers 200.
|
||||
|
||||
**The two sources disagree in both directions, so both are used.** Dari (`prs`) and Pashto
|
||||
(`pus`) ship public sites but are absent from the article's table; `ar_ma`, `az`, `bg`,
|
||||
`fo`, `lv`, `mn`, `tl` and `uk` are in the table but serve no page yet. `fetch-zume-index.mjs`
|
||||
takes the union and then **fetches every landing URL**, so a locale ships a link only if its
|
||||
own page actually answered — naming and linking are kept as separate facts rather than one
|
||||
assumed from the other.
|
||||
|
||||
**Pashto is deliberately not joined to any people group.** `pus` is a macrolanguage and the
|
||||
people-group data carries three individual codes (`pbu`, `pbt`, `pst`); nothing the publisher
|
||||
gives selects one, so per the standing rule the locale ships with its verified URL and no ISO
|
||||
code. Guessing would have attached a link to groups that may not read it.
|
||||
|
||||
**Zume moves no tier and shrinks no gap.** It is discipleship training, not Scripture and not
|
||||
film, so it is carried in its own field and typed "Discipleship training". Measured: its 52
|
||||
joined languages reach 3,479 pins and about 4.78bn people, and **none of them are tier 0** —
|
||||
every Zume language already has Scripture or film. Folding training into the tiers would have
|
||||
cut the gap count without anyone having translated anything.
|
||||
|
||||
## jesusfilm.org watch URLs — SOLVED, use the API's shareUrl
|
||||
`https://api.arclight.org/v2/media-components/1_jf-0-0/languages/<languageId>` returns a
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
/**
|
||||
* resources-map.vue — THE GOSPEL RESOURCES GLOBAL MAP.
|
||||
*
|
||||
* @description 12,379 people-group pins over a country choropleth: tap a pin for the Scripture, film and Bible-story links that exist in that group's own language with real URLs, tap a country for every group in it, search by group, language or ISO 639-3 code, and filter to the 3,457 groups where nothing was found.
|
||||
* @description 12,379 people-group pins over a country choropleth: tap a pin for the Scripture, film, Bible-story and Zume training links that exist in that group's own language with real URLs, tap a country for every group in it, search by group, language or ISO 639-3 code, and filter to the 3,457 groups where nothing was found.
|
||||
*
|
||||
* 12,379 people-group pins over a country choropleth, coloured by what each group has
|
||||
* in its OWN language: Scripture and film, something, or nothing found. Tap a pin for
|
||||
|
|
@ -381,6 +381,7 @@ function groupAt(i) {
|
|||
checked_pools: c.ck || '',
|
||||
unchecked_pools: c.un || '',
|
||||
is_sign: c.sg === 1,
|
||||
zume_url: c.z || '',
|
||||
scripture_title: c.sv || '',
|
||||
scripture_scope: c.ss || '',
|
||||
code_note: r[4] ? '' : 'This group has no ISO 639-3 code in the source, so no resource lookup is possible for it.',
|
||||
|
|
@ -973,6 +974,20 @@ useShadowStyles(
|
|||
<span v-if="!selectedGroup.door43.length" class="gm-chip meh">
|
||||
Open Bible Stories · none found
|
||||
</span>
|
||||
|
||||
<!-- Zume is DISCIPLESHIP TRAINING, not Scripture and not film, so it sits here
|
||||
as its own thing and moves no tier. The absent case names the denominator
|
||||
rather than saying "none found": Zume is one platform in 54 languages, not
|
||||
a pool that was searched exhaustively, and the two are not the same claim. -->
|
||||
<a v-if="selectedGroup.zume_url" class="gm-chip ok"
|
||||
:href="selectedGroup.zume_url" target="_blank" rel="noopener noreferrer"
|
||||
title="Zume Training publishes its discipleship course in this language — free, no account needed to read it.">
|
||||
Discipleship training · Zume
|
||||
</a>
|
||||
<span v-else class="gm-chip meh"
|
||||
title="Zume Training publishes in 54 languages and this is not one of them. That is a gap in one training platform, not a statement about every training resource.">
|
||||
Discipleship training · not in Zume's 54
|
||||
</span>
|
||||
</div>
|
||||
<p v-if="selectedGroup.scripture_title || selectedGroup.scripture_scope" class="gm-scope">
|
||||
<b>{{ selectedGroup.scripture_title || 'Scripture' }}</b>
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ const D43 = resolve(REPO, 'data/tables/door43-index.json')
|
|||
const EBIBLE = resolve(REPO, 'data/tables/ebible-index.json')
|
||||
const ARC = resolve(REPO, 'data/tables/arclight-index.json')
|
||||
const ARC_SHARE = resolve(REPO, 'data/tables/arclight-share-urls.json')
|
||||
const ZUME = resolve(REPO, 'data/tables/zume-index.json')
|
||||
|
||||
// Two entries with the same subject rendered as "Open Bible Stories Open Bible Stories"
|
||||
// — two links a reader cannot tell apart. 40 languages are in that state, because a
|
||||
|
|
@ -115,6 +116,14 @@ let share = {}
|
|||
try { share = JSON.parse(readFileSync(ARC_SHARE, 'utf8')).codes || {} } catch { share = {} }
|
||||
const filmUrl = (code, aa) => httpsify(share[code] || (aa ? aa.u : ''))
|
||||
|
||||
// Zume Training snapshot (scripts/fetch-zume-index.mjs). Same optional contract as above.
|
||||
// Zume is DISCIPLESHIP TRAINING, not Scripture and not film, so it is kept in its own
|
||||
// field and deliberately does NOT move a group's tier: the tiers and the gap list mean
|
||||
// "Scripture and/or film", and quietly folding a third kind of resource into them would
|
||||
// shrink the gap count without anyone having translated anything.
|
||||
let zume = {}
|
||||
try { zume = JSON.parse(readFileSync(ZUME, 'utf8')).byIso || {} } catch { zume = {} }
|
||||
|
||||
// codes: one entry per ISO 639-3 that actually carries something worth linking to.
|
||||
const codes = {}
|
||||
for (const r of res) {
|
||||
|
|
@ -279,6 +288,15 @@ for (const v of Object.values(codes)) {
|
|||
v.un = NOT_SCANNED
|
||||
}
|
||||
|
||||
// Attach Zume where the language matches. A code with no other resource still gets an
|
||||
// entry, because "training exists in your language" is a real answer to "what is there".
|
||||
let zumeCodes = 0, zumeNew = 0
|
||||
for (const [c, z] of Object.entries(zume)) {
|
||||
if (!codes[c]) { codes[c] = { l: z.name || '', ck: SCANNED, un: NOT_SCANNED }; zumeNew++ }
|
||||
codes[c].z = httpsify(z.url)
|
||||
zumeCodes++
|
||||
}
|
||||
|
||||
const num = (v) => { const n = Number(v); return Number.isFinite(n) ? n : null }
|
||||
const pins = []
|
||||
let joined = 0, withUrl = 0, noCoord = 0, liftedByD43 = 0
|
||||
|
|
@ -334,6 +352,7 @@ console.log(`door43 codes ${Object.keys(d43).length} (${d43Only} new)`)
|
|||
console.log(`ebible codes ${Object.keys(eb).length} (${ebOnly} new)`)
|
||||
console.log(`arclight codes ${Object.keys(arc).length} (${arcOnly} new, ${upgraded} upgraded to a real deep link)`)
|
||||
console.log(`share urls ${Object.keys(share).length}`)
|
||||
console.log(`zume languages ${zumeCodes} (${zumeNew} new codes; training only, tier unchanged)`)
|
||||
console.log(`named from cat ${catNamed} (no pin speaks them; named from a catalogue)`)
|
||||
console.log(`sign languages ${signCodes}`)
|
||||
console.log(`named-only ${namedOnly} (language named, no resource in any pool checked)`)
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ const SOURCE = (u) =>
|
|||
: /alkitab\.pw/i.test(u) ? 'eBible.org (mirror)'
|
||||
: /jesusfilm|arc\.gt/i.test(u) ? 'JESUS Film'
|
||||
: /door43/i.test(u) ? 'Door43 (unfoldingWord)'
|
||||
: /zume\.training/i.test(u) ? 'Zume Training'
|
||||
: 'other'
|
||||
|
||||
const out = []
|
||||
|
|
@ -95,6 +96,9 @@ for (const [code, c] of Object.entries(codes)) {
|
|||
// book list, not the subject label.
|
||||
add(d.s, /^Open Bible Stories/.test(d.s) ? 'Bible Stories' : 'Scripture', d.u, d.sc || '')
|
||||
}
|
||||
// Its own type. Zume is a discipleship COURSE, not a translation and not a film, and
|
||||
// filing it under Scripture would overstate what a reader gets by following the link.
|
||||
add('Zume Training', 'Discipleship training', c.z, 'Course in this language')
|
||||
}
|
||||
// biggest reach first — the link that serves the most people is the one to open.
|
||||
out.sort((a, b) => b.speakers - a.speakers || a.language.localeCompare(b.language))
|
||||
|
|
|
|||
221
plugin-designs/gospel-resources/scripts/fetch-zume-index.mjs
Normal file
221
plugin-designs/gospel-resources/scripts/fetch-zume-index.mjs
Normal file
|
|
@ -0,0 +1,221 @@
|
|||
#!/usr/bin/env node
|
||||
/**
|
||||
* fetch-zume-index.mjs — cache Zume Training's own language list as an ISO 639-3 index.
|
||||
*
|
||||
* WHY THIS EXISTS. The brief names zume.training explicitly and estimates ~40 languages.
|
||||
* An earlier pass recorded the list as unobtainable because /api/ is Disallow'ed in
|
||||
* robots.txt and the homepage's language switcher is client-rendered with no anchors.
|
||||
* Both of those are true and neither matters: robots.txt DECLARES a sitemap, and the
|
||||
* publisher maintains a page whose whole purpose is this list. Nothing here touches a
|
||||
* Disallow'ed path.
|
||||
*
|
||||
* TWO SOURCES, BECAUSE NEITHER IS COMPLETE ON ITS OWN:
|
||||
* 1. https://zume.training/sitemap.xml -> a per-locale sitemap for every locale that has
|
||||
* public pages. This is the set that can be LINKED to.
|
||||
* 2. https://zume.training/articles/zume-languages -> the publisher's own table of
|
||||
* English name, native name and language code ("All Zume languages (59)"). This is
|
||||
* the set that is NAMED, and it is where the real names come from.
|
||||
* They disagree in both directions: Dari and Pashto ship public sites but are missing from
|
||||
* the article's table, and several article rows have no public pages yet. So the union is
|
||||
* collected and every landing URL is then FETCHED — a locale ships a link only if its own
|
||||
* page actually answers 200. Naming and linking are kept as separate facts.
|
||||
*
|
||||
* DOCTRINE. Zume Training is discipleship material built on the 66-book canon and is named
|
||||
* in the brief as acceptable. Only zume.training URLs are emitted; no other host appears.
|
||||
*
|
||||
* THE ISO 639-3 MAP IS THE LOAD-BEARING PART, so every non-obvious entry is justified below
|
||||
* and the join key is checked against the codes the people-group data actually uses (which
|
||||
* are individual codes, never macrolanguages — 'ara', 'zho', 'kur', 'msa', 'nep', 'ori',
|
||||
* 'pus' and 'swa' are all absent from it).
|
||||
*
|
||||
* AMBIGUOUS LOCALES ARE NOT JOINED. 'pus' (Pashto) has three individual codes in the data
|
||||
* — pbu, pbt, pst — and the publisher gives nothing that picks one. Per the standing rule,
|
||||
* an unclear mapping is left out rather than guessed: the locale still ships with its
|
||||
* verified URL, it simply carries no ISO code and so attaches to no people group.
|
||||
*/
|
||||
import { writeFileSync } from 'node:fs'
|
||||
import { resolve, dirname } from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const HERE = dirname(fileURLToPath(import.meta.url))
|
||||
const OUT = resolve(HERE, '../../..', 'data/tables/zume-index.json')
|
||||
const ORIGIN = 'https://zume.training'
|
||||
const UA = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
|
||||
|
||||
/**
|
||||
* Zume locale -> ISO 639-3. Obvious two-letter codes are omitted from the comments;
|
||||
* the ones a reader would otherwise have to take on trust are justified here.
|
||||
*/
|
||||
const ISO = {
|
||||
asl: 'ase', // publisher names it "American Sign Language"
|
||||
am: 'amh',
|
||||
ar: 'arb', // the article states this row is Modern Standard Arabic
|
||||
ar_jo: 'ajp', // Jordanian -> South Levantine Arabic
|
||||
ar_ma: 'ary', // Moroccan
|
||||
ar_tn: 'aeb', // Tunisian
|
||||
hy: 'hye',
|
||||
az: 'azj', // Latin-script Azerbaijani of the republic -> North
|
||||
bn: 'ben',
|
||||
bho: 'bho',
|
||||
bs: 'bos',
|
||||
bg: 'bul',
|
||||
my: 'mya',
|
||||
zhhk: 'yue', // publisher names it "Cantonese (Traditional)", not a Mandarin variant
|
||||
zhcn: 'cmn', // Simplified script; the language is Mandarin
|
||||
zhtw: 'cmn', // Traditional script, same language -> both locales join one code
|
||||
hr: 'hrv',
|
||||
prs: 'prs', // Dari
|
||||
en: 'eng',
|
||||
fo: 'fao',
|
||||
fr: 'fra',
|
||||
de: 'deu',
|
||||
gu: 'guj',
|
||||
ha: 'hau',
|
||||
hi: 'hin',
|
||||
id: 'ind',
|
||||
it: 'ita',
|
||||
ja: 'jpn',
|
||||
kn: 'kan',
|
||||
ko: 'kor',
|
||||
ky: 'kir',
|
||||
ku: 'ckb', // native name is written in Arabic script and the article lists Kurdish as
|
||||
// right-to-left; that is Central Kurdish (Sorani), not Latin-script Kurmanji
|
||||
lo: 'lao',
|
||||
lv: 'lvs',
|
||||
mai: 'mai',
|
||||
ms: 'zlm', // "Bahasa Malaysia"; the people-group data carries zlm "Malay", not zsm
|
||||
ml: 'mal',
|
||||
mr: 'mar',
|
||||
mn: 'khk', // Mongolian of Mongolia -> Halh
|
||||
ne: 'npi',
|
||||
or: 'ory',
|
||||
fa: 'pes', // Persian/Farsi -> Western Farsi
|
||||
pl: 'pol',
|
||||
pt: 'por',
|
||||
pa: 'pan', // Eastern Punjabi
|
||||
pa_pk: 'pnb', // "Punjabi (Western)"
|
||||
ro: 'ron',
|
||||
ru: 'rus',
|
||||
sl: 'slv',
|
||||
so: 'som',
|
||||
es: 'spa',
|
||||
swa: 'swh',
|
||||
tl: 'tgl',
|
||||
ta: 'tam',
|
||||
te: 'tel',
|
||||
th: 'tha',
|
||||
tr: 'tur',
|
||||
uk: 'ukr',
|
||||
ur: 'urd',
|
||||
vi: 'vie',
|
||||
yo: 'yor',
|
||||
}
|
||||
|
||||
/** Locales deliberately left unjoined, with the reason recorded in the output. */
|
||||
const UNJOINED = {
|
||||
pus: 'Pashto has three individual codes in the people-group data (pbu, pbt, pst) and the publisher gives nothing that selects one',
|
||||
}
|
||||
|
||||
const get = async (url) => {
|
||||
const r = await fetch(url, { headers: { 'user-agent': UA }, redirect: 'follow' })
|
||||
if (!r.ok) throw new Error(`${r.status} ${url}`)
|
||||
return r.text()
|
||||
}
|
||||
|
||||
const locsIn = (xml) => [...xml.matchAll(/<loc>([^<]+)<\/loc>/g)].map((m) => m[1])
|
||||
|
||||
async function sitemapLocales() {
|
||||
const idx = await get(`${ORIGIN}/sitemap.xml`)
|
||||
const out = new Set()
|
||||
for (const u of locsIn(idx)) {
|
||||
const m = /\/sitemap\/([a-z_]{2,6})\.xml$/.exec(u)
|
||||
if (m) out.add(m[1])
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
/** The article's table is three <td> cells per row: English name, native name, code. */
|
||||
async function articleRows() {
|
||||
const html = await get(`${ORIGIN}/articles/zume-languages`)
|
||||
const cells = [...html.matchAll(/<td[^>]*>([\s\S]*?)<\/td>/g)].map((m) =>
|
||||
m[1].replace(/<[^>]*>/g, '').replace(/'/g, "'").replace(/&/g, '&').trim(),
|
||||
)
|
||||
const rows = []
|
||||
for (let i = 0; i + 2 < cells.length; i += 3) {
|
||||
const [name, native, code] = [cells[i], cells[i + 1], cells[i + 2]]
|
||||
if (/^[a-z_]{2,6}$/.test(code)) rows.push({ code, name, native })
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
/** A locale ships a link only if its own landing page answers 200. */
|
||||
async function resolves(url) {
|
||||
try {
|
||||
const r = await fetch(url, { headers: { 'user-agent': UA }, redirect: 'follow' })
|
||||
return r.status === 200
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const smap = await sitemapLocales()
|
||||
const rows = await articleRows()
|
||||
const named = new Map(rows.map((r) => [r.code, r]))
|
||||
|
||||
const all = [...new Set([...smap, ...named.keys()])].sort()
|
||||
const entries = []
|
||||
let live = 0
|
||||
|
||||
for (const code of all) {
|
||||
const url = `${ORIGIN}/${code}`
|
||||
const ok = await resolves(url)
|
||||
if (ok) live++
|
||||
const meta = named.get(code)
|
||||
const e = {
|
||||
locale: code,
|
||||
name: meta ? meta.name : null,
|
||||
native: meta && meta.native !== meta.name ? meta.native : null,
|
||||
iso: ISO[code] || null,
|
||||
url: ok ? url : null,
|
||||
listed: Boolean(meta),
|
||||
sitemap: smap.has(code),
|
||||
}
|
||||
if (!e.iso) e.why = UNJOINED[code] || 'no ISO 639-3 mapping recorded for this locale'
|
||||
entries.push(e)
|
||||
}
|
||||
|
||||
/** ISO 639-3 -> the single best Zume landing page for that language. */
|
||||
const byIso = {}
|
||||
for (const e of entries) {
|
||||
if (!e.iso || !e.url) continue
|
||||
const prev = byIso[e.iso]
|
||||
// zhcn and zhtw both resolve to cmn; prefer the locale the publisher named first
|
||||
if (!prev) byIso[e.iso] = { locale: e.locale, name: e.name || e.locale, url: e.url }
|
||||
}
|
||||
|
||||
const unjoined = entries.filter((e) => !e.iso).map((e) => e.locale)
|
||||
const dead = entries.filter((e) => !e.url).map((e) => e.locale)
|
||||
|
||||
writeFileSync(
|
||||
OUT,
|
||||
`${JSON.stringify(
|
||||
{
|
||||
source: `${ORIGIN}/sitemap.xml + ${ORIGIN}/articles/zume-languages`,
|
||||
fetched: new Date().toISOString().slice(0, 10),
|
||||
locales: entries.length,
|
||||
live,
|
||||
codes: Object.keys(byIso).length,
|
||||
byIso,
|
||||
entries,
|
||||
},
|
||||
null,
|
||||
1,
|
||||
)}\n`,
|
||||
)
|
||||
|
||||
console.log(
|
||||
`ZUME: ${entries.length} locales (${smap.size} in sitemap, ${rows.length} in the article), ` +
|
||||
`${live} with a landing page that answers 200, ${Object.keys(byIso).length} joined to ISO 639-3.`,
|
||||
)
|
||||
if (unjoined.length) console.log(`ZUME: not joined -> ${unjoined.join(', ')}`)
|
||||
if (dead.length) console.log(`ZUME: no live page -> ${dead.join(', ')}`)
|
||||
File diff suppressed because one or more lines are too long
2
public/assets/tables/people-group-pins.json
vendored
2
public/assets/tables/people-group-pins.json
vendored
File diff suppressed because one or more lines are too long
830
public/assets/tables/zume-index.json
vendored
Normal file
830
public/assets/tables/zume-index.json
vendored
Normal file
|
|
@ -0,0 +1,830 @@
|
|||
{
|
||||
"source": "https://zume.training/sitemap.xml + https://zume.training/articles/zume-languages",
|
||||
"fetched": "2026-09-24",
|
||||
"locales": 62,
|
||||
"live": 54,
|
||||
"codes": 52,
|
||||
"byIso": {
|
||||
"amh": {
|
||||
"locale": "am",
|
||||
"name": "Amharic",
|
||||
"url": "https://zume.training/am"
|
||||
},
|
||||
"arb": {
|
||||
"locale": "ar",
|
||||
"name": "Arabic",
|
||||
"url": "https://zume.training/ar"
|
||||
},
|
||||
"ajp": {
|
||||
"locale": "ar_jo",
|
||||
"name": "Arabic (Jordanian)",
|
||||
"url": "https://zume.training/ar_jo"
|
||||
},
|
||||
"aeb": {
|
||||
"locale": "ar_tn",
|
||||
"name": "Arabic (Tunisian)",
|
||||
"url": "https://zume.training/ar_tn"
|
||||
},
|
||||
"ase": {
|
||||
"locale": "asl",
|
||||
"name": "American Sign Language",
|
||||
"url": "https://zume.training/asl"
|
||||
},
|
||||
"bho": {
|
||||
"locale": "bho",
|
||||
"name": "Bhojpuri",
|
||||
"url": "https://zume.training/bho"
|
||||
},
|
||||
"ben": {
|
||||
"locale": "bn",
|
||||
"name": "Bengali (India)",
|
||||
"url": "https://zume.training/bn"
|
||||
},
|
||||
"bos": {
|
||||
"locale": "bs",
|
||||
"name": "Bosnian",
|
||||
"url": "https://zume.training/bs"
|
||||
},
|
||||
"deu": {
|
||||
"locale": "de",
|
||||
"name": "German",
|
||||
"url": "https://zume.training/de"
|
||||
},
|
||||
"eng": {
|
||||
"locale": "en",
|
||||
"name": "English",
|
||||
"url": "https://zume.training/en"
|
||||
},
|
||||
"spa": {
|
||||
"locale": "es",
|
||||
"name": "Spanish",
|
||||
"url": "https://zume.training/es"
|
||||
},
|
||||
"pes": {
|
||||
"locale": "fa",
|
||||
"name": "Persian/Farsi",
|
||||
"url": "https://zume.training/fa"
|
||||
},
|
||||
"fra": {
|
||||
"locale": "fr",
|
||||
"name": "French",
|
||||
"url": "https://zume.training/fr"
|
||||
},
|
||||
"guj": {
|
||||
"locale": "gu",
|
||||
"name": "Gujarati",
|
||||
"url": "https://zume.training/gu"
|
||||
},
|
||||
"hau": {
|
||||
"locale": "ha",
|
||||
"name": "Hausa",
|
||||
"url": "https://zume.training/ha"
|
||||
},
|
||||
"hin": {
|
||||
"locale": "hi",
|
||||
"name": "Hindi",
|
||||
"url": "https://zume.training/hi"
|
||||
},
|
||||
"hrv": {
|
||||
"locale": "hr",
|
||||
"name": "Croatian",
|
||||
"url": "https://zume.training/hr"
|
||||
},
|
||||
"hye": {
|
||||
"locale": "hy",
|
||||
"name": "Armenian",
|
||||
"url": "https://zume.training/hy"
|
||||
},
|
||||
"ind": {
|
||||
"locale": "id",
|
||||
"name": "Indonesian",
|
||||
"url": "https://zume.training/id"
|
||||
},
|
||||
"ita": {
|
||||
"locale": "it",
|
||||
"name": "Italian",
|
||||
"url": "https://zume.training/it"
|
||||
},
|
||||
"jpn": {
|
||||
"locale": "ja",
|
||||
"name": "Japanese",
|
||||
"url": "https://zume.training/ja"
|
||||
},
|
||||
"kan": {
|
||||
"locale": "kn",
|
||||
"name": "Kannada",
|
||||
"url": "https://zume.training/kn"
|
||||
},
|
||||
"kor": {
|
||||
"locale": "ko",
|
||||
"name": "Korean",
|
||||
"url": "https://zume.training/ko"
|
||||
},
|
||||
"ckb": {
|
||||
"locale": "ku",
|
||||
"name": "Kurdish",
|
||||
"url": "https://zume.training/ku"
|
||||
},
|
||||
"kir": {
|
||||
"locale": "ky",
|
||||
"name": "ky",
|
||||
"url": "https://zume.training/ky"
|
||||
},
|
||||
"lao": {
|
||||
"locale": "lo",
|
||||
"name": "Lao",
|
||||
"url": "https://zume.training/lo"
|
||||
},
|
||||
"mai": {
|
||||
"locale": "mai",
|
||||
"name": "Maithili",
|
||||
"url": "https://zume.training/mai"
|
||||
},
|
||||
"mal": {
|
||||
"locale": "ml",
|
||||
"name": "Malayalam",
|
||||
"url": "https://zume.training/ml"
|
||||
},
|
||||
"mar": {
|
||||
"locale": "mr",
|
||||
"name": "Marathi",
|
||||
"url": "https://zume.training/mr"
|
||||
},
|
||||
"zlm": {
|
||||
"locale": "ms",
|
||||
"name": "Malay",
|
||||
"url": "https://zume.training/ms"
|
||||
},
|
||||
"mya": {
|
||||
"locale": "my",
|
||||
"name": "Burmese",
|
||||
"url": "https://zume.training/my"
|
||||
},
|
||||
"npi": {
|
||||
"locale": "ne",
|
||||
"name": "Nepali",
|
||||
"url": "https://zume.training/ne"
|
||||
},
|
||||
"ory": {
|
||||
"locale": "or",
|
||||
"name": "Odia",
|
||||
"url": "https://zume.training/or"
|
||||
},
|
||||
"pan": {
|
||||
"locale": "pa",
|
||||
"name": "Punjabi",
|
||||
"url": "https://zume.training/pa"
|
||||
},
|
||||
"pnb": {
|
||||
"locale": "pa_pk",
|
||||
"name": "Punjabi (Western)",
|
||||
"url": "https://zume.training/pa_pk"
|
||||
},
|
||||
"pol": {
|
||||
"locale": "pl",
|
||||
"name": "Polish",
|
||||
"url": "https://zume.training/pl"
|
||||
},
|
||||
"prs": {
|
||||
"locale": "prs",
|
||||
"name": "prs",
|
||||
"url": "https://zume.training/prs"
|
||||
},
|
||||
"por": {
|
||||
"locale": "pt",
|
||||
"name": "Portuguese",
|
||||
"url": "https://zume.training/pt"
|
||||
},
|
||||
"ron": {
|
||||
"locale": "ro",
|
||||
"name": "Romanian",
|
||||
"url": "https://zume.training/ro"
|
||||
},
|
||||
"rus": {
|
||||
"locale": "ru",
|
||||
"name": "Russian",
|
||||
"url": "https://zume.training/ru"
|
||||
},
|
||||
"slv": {
|
||||
"locale": "sl",
|
||||
"name": "Slovenian",
|
||||
"url": "https://zume.training/sl"
|
||||
},
|
||||
"som": {
|
||||
"locale": "so",
|
||||
"name": "Somali",
|
||||
"url": "https://zume.training/so"
|
||||
},
|
||||
"swh": {
|
||||
"locale": "swa",
|
||||
"name": "Swahili",
|
||||
"url": "https://zume.training/swa"
|
||||
},
|
||||
"tam": {
|
||||
"locale": "ta",
|
||||
"name": "Tamil",
|
||||
"url": "https://zume.training/ta"
|
||||
},
|
||||
"tel": {
|
||||
"locale": "te",
|
||||
"name": "Telugu",
|
||||
"url": "https://zume.training/te"
|
||||
},
|
||||
"tha": {
|
||||
"locale": "th",
|
||||
"name": "Thai",
|
||||
"url": "https://zume.training/th"
|
||||
},
|
||||
"tur": {
|
||||
"locale": "tr",
|
||||
"name": "Turkish",
|
||||
"url": "https://zume.training/tr"
|
||||
},
|
||||
"urd": {
|
||||
"locale": "ur",
|
||||
"name": "Urdu",
|
||||
"url": "https://zume.training/ur"
|
||||
},
|
||||
"vie": {
|
||||
"locale": "vi",
|
||||
"name": "Vietnamese",
|
||||
"url": "https://zume.training/vi"
|
||||
},
|
||||
"yor": {
|
||||
"locale": "yo",
|
||||
"name": "Yoruba",
|
||||
"url": "https://zume.training/yo"
|
||||
},
|
||||
"cmn": {
|
||||
"locale": "zhcn",
|
||||
"name": "Chinese (Simplified)",
|
||||
"url": "https://zume.training/zhcn"
|
||||
},
|
||||
"yue": {
|
||||
"locale": "zhhk",
|
||||
"name": "Cantonese (Traditional)",
|
||||
"url": "https://zume.training/zhhk"
|
||||
}
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"locale": "am",
|
||||
"name": "Amharic",
|
||||
"native": "አማርኛ",
|
||||
"iso": "amh",
|
||||
"url": "https://zume.training/am",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"name": "Arabic",
|
||||
"native": "العربية",
|
||||
"iso": "arb",
|
||||
"url": "https://zume.training/ar",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar_jo",
|
||||
"name": "Arabic (Jordanian)",
|
||||
"native": "العربية - الأردن",
|
||||
"iso": "ajp",
|
||||
"url": "https://zume.training/ar_jo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar_ma",
|
||||
"name": "Arabic (Moroccan)",
|
||||
"native": "العربية - الأردن",
|
||||
"iso": "ary",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "ar_tn",
|
||||
"name": "Arabic (Tunisian)",
|
||||
"native": "العربية التونسية",
|
||||
"iso": "aeb",
|
||||
"url": "https://zume.training/ar_tn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "asl",
|
||||
"name": "American Sign Language",
|
||||
"native": "Sign Language",
|
||||
"iso": "ase",
|
||||
"url": "https://zume.training/asl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "az",
|
||||
"name": "Azerbaijani",
|
||||
"native": null,
|
||||
"iso": "azj",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "bg",
|
||||
"name": "Bulgarian",
|
||||
"native": "български език",
|
||||
"iso": "bul",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "bho",
|
||||
"name": "Bhojpuri",
|
||||
"native": "भोजपुरी",
|
||||
"iso": "bho",
|
||||
"url": "https://zume.training/bho",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "bn",
|
||||
"name": "Bengali (India)",
|
||||
"native": "বাংলা",
|
||||
"iso": "ben",
|
||||
"url": "https://zume.training/bn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "bs",
|
||||
"name": "Bosnian",
|
||||
"native": "Bosanski",
|
||||
"iso": "bos",
|
||||
"url": "https://zume.training/bs",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "de",
|
||||
"name": "German",
|
||||
"native": "Deutsch",
|
||||
"iso": "deu",
|
||||
"url": "https://zume.training/de",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "en",
|
||||
"name": "English",
|
||||
"native": null,
|
||||
"iso": "eng",
|
||||
"url": "https://zume.training/en",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "es",
|
||||
"name": "Spanish",
|
||||
"native": "Español",
|
||||
"iso": "spa",
|
||||
"url": "https://zume.training/es",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "fa",
|
||||
"name": "Persian/Farsi",
|
||||
"native": "فارسی",
|
||||
"iso": "pes",
|
||||
"url": "https://zume.training/fa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "fo",
|
||||
"name": "Faroese",
|
||||
"native": null,
|
||||
"iso": "fao",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"name": "French",
|
||||
"native": "Français",
|
||||
"iso": "fra",
|
||||
"url": "https://zume.training/fr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "gu",
|
||||
"name": "Gujarati",
|
||||
"native": "ગુજરાતી",
|
||||
"iso": "guj",
|
||||
"url": "https://zume.training/gu",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ha",
|
||||
"name": "Hausa",
|
||||
"native": null,
|
||||
"iso": "hau",
|
||||
"url": "https://zume.training/ha",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"name": "Hindi",
|
||||
"native": "हिन्दी",
|
||||
"iso": "hin",
|
||||
"url": "https://zume.training/hi",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hr",
|
||||
"name": "Croatian",
|
||||
"native": "Hrvatski",
|
||||
"iso": "hrv",
|
||||
"url": "https://zume.training/hr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hy",
|
||||
"name": "Armenian",
|
||||
"native": null,
|
||||
"iso": "hye",
|
||||
"url": "https://zume.training/hy",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "id",
|
||||
"name": "Indonesian",
|
||||
"native": "Bahasa Indonesia",
|
||||
"iso": "ind",
|
||||
"url": "https://zume.training/id",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "it",
|
||||
"name": "Italian",
|
||||
"native": "Italiano",
|
||||
"iso": "ita",
|
||||
"url": "https://zume.training/it",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ja",
|
||||
"name": "Japanese",
|
||||
"native": "日本語",
|
||||
"iso": "jpn",
|
||||
"url": "https://zume.training/ja",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "kn",
|
||||
"name": "Kannada",
|
||||
"native": "ಕನ್ನಡ",
|
||||
"iso": "kan",
|
||||
"url": "https://zume.training/kn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ko",
|
||||
"name": "Korean",
|
||||
"native": "한국어",
|
||||
"iso": "kor",
|
||||
"url": "https://zume.training/ko",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ku",
|
||||
"name": "Kurdish",
|
||||
"native": "کوردی",
|
||||
"iso": "ckb",
|
||||
"url": "https://zume.training/ku",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ky",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": "kir",
|
||||
"url": "https://zume.training/ky",
|
||||
"listed": false,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "lo",
|
||||
"name": "Lao",
|
||||
"native": "ພາສາລາວ",
|
||||
"iso": "lao",
|
||||
"url": "https://zume.training/lo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "lv",
|
||||
"name": "Latvian",
|
||||
"native": "Latviešu",
|
||||
"iso": "lvs",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "mai",
|
||||
"name": "Maithili",
|
||||
"native": "मैथिली",
|
||||
"iso": "mai",
|
||||
"url": "https://zume.training/mai",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ml",
|
||||
"name": "Malayalam",
|
||||
"native": "മലയാളം",
|
||||
"iso": "mal",
|
||||
"url": "https://zume.training/ml",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "mn",
|
||||
"name": "Mongolian",
|
||||
"native": "Монгол",
|
||||
"iso": "khk",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "mr",
|
||||
"name": "Marathi",
|
||||
"native": "मराठी",
|
||||
"iso": "mar",
|
||||
"url": "https://zume.training/mr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ms",
|
||||
"name": "Malay",
|
||||
"native": "Bahasa Malaysia",
|
||||
"iso": "zlm",
|
||||
"url": "https://zume.training/ms",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "my",
|
||||
"name": "Burmese",
|
||||
"native": "မြန်မာဘာသာ",
|
||||
"iso": "mya",
|
||||
"url": "https://zume.training/my",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ne",
|
||||
"name": "Nepali",
|
||||
"native": "नेपाली",
|
||||
"iso": "npi",
|
||||
"url": "https://zume.training/ne",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "or",
|
||||
"name": "Odia",
|
||||
"native": "ଓଡ଼ିଆ",
|
||||
"iso": "ory",
|
||||
"url": "https://zume.training/or",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pa",
|
||||
"name": "Punjabi",
|
||||
"native": "ਪੰਜਾਬੀ",
|
||||
"iso": "pan",
|
||||
"url": "https://zume.training/pa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pa_pk",
|
||||
"name": "Punjabi (Western)",
|
||||
"native": "ਪੰਜਾਬੀ (ਪੱਛਮੀ)",
|
||||
"iso": "pnb",
|
||||
"url": "https://zume.training/pa_pk",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pl",
|
||||
"name": "Polish",
|
||||
"native": "Polski",
|
||||
"iso": "pol",
|
||||
"url": "https://zume.training/pl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "prs",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": "prs",
|
||||
"url": "https://zume.training/prs",
|
||||
"listed": false,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pt",
|
||||
"name": "Portuguese",
|
||||
"native": "Português",
|
||||
"iso": "por",
|
||||
"url": "https://zume.training/pt",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pus",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": null,
|
||||
"url": "https://zume.training/pus",
|
||||
"listed": false,
|
||||
"sitemap": true,
|
||||
"why": "Pashto has three individual codes in the people-group data (pbu, pbt, pst) and the publisher gives nothing that selects one"
|
||||
},
|
||||
{
|
||||
"locale": "ro",
|
||||
"name": "Romanian",
|
||||
"native": "Română",
|
||||
"iso": "ron",
|
||||
"url": "https://zume.training/ro",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ru",
|
||||
"name": "Russian",
|
||||
"native": "Русский",
|
||||
"iso": "rus",
|
||||
"url": "https://zume.training/ru",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "sl",
|
||||
"name": "Slovenian",
|
||||
"native": "Slovenščina",
|
||||
"iso": "slv",
|
||||
"url": "https://zume.training/sl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "so",
|
||||
"name": "Somali",
|
||||
"native": "Soomaali",
|
||||
"iso": "som",
|
||||
"url": "https://zume.training/so",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "swa",
|
||||
"name": "Swahili",
|
||||
"native": "Kiswahili",
|
||||
"iso": "swh",
|
||||
"url": "https://zume.training/swa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ta",
|
||||
"name": "Tamil",
|
||||
"native": "தமிழ்",
|
||||
"iso": "tam",
|
||||
"url": "https://zume.training/ta",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "te",
|
||||
"name": "Telugu",
|
||||
"native": "తెలుగు",
|
||||
"iso": "tel",
|
||||
"url": "https://zume.training/te",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "th",
|
||||
"name": "Thai",
|
||||
"native": "ไทย",
|
||||
"iso": "tha",
|
||||
"url": "https://zume.training/th",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "tl",
|
||||
"name": "Tagalog",
|
||||
"native": null,
|
||||
"iso": "tgl",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "tr",
|
||||
"name": "Turkish",
|
||||
"native": "Türkçe",
|
||||
"iso": "tur",
|
||||
"url": "https://zume.training/tr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "uk",
|
||||
"name": "Ukrainian",
|
||||
"native": "Україна",
|
||||
"iso": "ukr",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "ur",
|
||||
"name": "Urdu",
|
||||
"native": "اردو",
|
||||
"iso": "urd",
|
||||
"url": "https://zume.training/ur",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "vi",
|
||||
"name": "Vietnamese",
|
||||
"native": "Tiếng Việt",
|
||||
"iso": "vie",
|
||||
"url": "https://zume.training/vi",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "yo",
|
||||
"name": "Yoruba",
|
||||
"native": "Yorùbá",
|
||||
"iso": "yor",
|
||||
"url": "https://zume.training/yo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhcn",
|
||||
"name": "Chinese (Simplified)",
|
||||
"native": "中文(简体)",
|
||||
"iso": "cmn",
|
||||
"url": "https://zume.training/zhcn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhhk",
|
||||
"name": "Cantonese (Traditional)",
|
||||
"native": "中文(繁體,香港)",
|
||||
"iso": "yue",
|
||||
"url": "https://zume.training/zhhk",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhtw",
|
||||
"name": "Chinese (Traditional)",
|
||||
"native": "中文(繁體)",
|
||||
"iso": "cmn",
|
||||
"url": "https://zume.training/zhtw",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
830
public/doxa-maps/assets/tables/zume-index.json
generated
Normal file
830
public/doxa-maps/assets/tables/zume-index.json
generated
Normal file
|
|
@ -0,0 +1,830 @@
|
|||
{
|
||||
"source": "https://zume.training/sitemap.xml + https://zume.training/articles/zume-languages",
|
||||
"fetched": "2026-09-24",
|
||||
"locales": 62,
|
||||
"live": 54,
|
||||
"codes": 52,
|
||||
"byIso": {
|
||||
"amh": {
|
||||
"locale": "am",
|
||||
"name": "Amharic",
|
||||
"url": "https://zume.training/am"
|
||||
},
|
||||
"arb": {
|
||||
"locale": "ar",
|
||||
"name": "Arabic",
|
||||
"url": "https://zume.training/ar"
|
||||
},
|
||||
"ajp": {
|
||||
"locale": "ar_jo",
|
||||
"name": "Arabic (Jordanian)",
|
||||
"url": "https://zume.training/ar_jo"
|
||||
},
|
||||
"aeb": {
|
||||
"locale": "ar_tn",
|
||||
"name": "Arabic (Tunisian)",
|
||||
"url": "https://zume.training/ar_tn"
|
||||
},
|
||||
"ase": {
|
||||
"locale": "asl",
|
||||
"name": "American Sign Language",
|
||||
"url": "https://zume.training/asl"
|
||||
},
|
||||
"bho": {
|
||||
"locale": "bho",
|
||||
"name": "Bhojpuri",
|
||||
"url": "https://zume.training/bho"
|
||||
},
|
||||
"ben": {
|
||||
"locale": "bn",
|
||||
"name": "Bengali (India)",
|
||||
"url": "https://zume.training/bn"
|
||||
},
|
||||
"bos": {
|
||||
"locale": "bs",
|
||||
"name": "Bosnian",
|
||||
"url": "https://zume.training/bs"
|
||||
},
|
||||
"deu": {
|
||||
"locale": "de",
|
||||
"name": "German",
|
||||
"url": "https://zume.training/de"
|
||||
},
|
||||
"eng": {
|
||||
"locale": "en",
|
||||
"name": "English",
|
||||
"url": "https://zume.training/en"
|
||||
},
|
||||
"spa": {
|
||||
"locale": "es",
|
||||
"name": "Spanish",
|
||||
"url": "https://zume.training/es"
|
||||
},
|
||||
"pes": {
|
||||
"locale": "fa",
|
||||
"name": "Persian/Farsi",
|
||||
"url": "https://zume.training/fa"
|
||||
},
|
||||
"fra": {
|
||||
"locale": "fr",
|
||||
"name": "French",
|
||||
"url": "https://zume.training/fr"
|
||||
},
|
||||
"guj": {
|
||||
"locale": "gu",
|
||||
"name": "Gujarati",
|
||||
"url": "https://zume.training/gu"
|
||||
},
|
||||
"hau": {
|
||||
"locale": "ha",
|
||||
"name": "Hausa",
|
||||
"url": "https://zume.training/ha"
|
||||
},
|
||||
"hin": {
|
||||
"locale": "hi",
|
||||
"name": "Hindi",
|
||||
"url": "https://zume.training/hi"
|
||||
},
|
||||
"hrv": {
|
||||
"locale": "hr",
|
||||
"name": "Croatian",
|
||||
"url": "https://zume.training/hr"
|
||||
},
|
||||
"hye": {
|
||||
"locale": "hy",
|
||||
"name": "Armenian",
|
||||
"url": "https://zume.training/hy"
|
||||
},
|
||||
"ind": {
|
||||
"locale": "id",
|
||||
"name": "Indonesian",
|
||||
"url": "https://zume.training/id"
|
||||
},
|
||||
"ita": {
|
||||
"locale": "it",
|
||||
"name": "Italian",
|
||||
"url": "https://zume.training/it"
|
||||
},
|
||||
"jpn": {
|
||||
"locale": "ja",
|
||||
"name": "Japanese",
|
||||
"url": "https://zume.training/ja"
|
||||
},
|
||||
"kan": {
|
||||
"locale": "kn",
|
||||
"name": "Kannada",
|
||||
"url": "https://zume.training/kn"
|
||||
},
|
||||
"kor": {
|
||||
"locale": "ko",
|
||||
"name": "Korean",
|
||||
"url": "https://zume.training/ko"
|
||||
},
|
||||
"ckb": {
|
||||
"locale": "ku",
|
||||
"name": "Kurdish",
|
||||
"url": "https://zume.training/ku"
|
||||
},
|
||||
"kir": {
|
||||
"locale": "ky",
|
||||
"name": "ky",
|
||||
"url": "https://zume.training/ky"
|
||||
},
|
||||
"lao": {
|
||||
"locale": "lo",
|
||||
"name": "Lao",
|
||||
"url": "https://zume.training/lo"
|
||||
},
|
||||
"mai": {
|
||||
"locale": "mai",
|
||||
"name": "Maithili",
|
||||
"url": "https://zume.training/mai"
|
||||
},
|
||||
"mal": {
|
||||
"locale": "ml",
|
||||
"name": "Malayalam",
|
||||
"url": "https://zume.training/ml"
|
||||
},
|
||||
"mar": {
|
||||
"locale": "mr",
|
||||
"name": "Marathi",
|
||||
"url": "https://zume.training/mr"
|
||||
},
|
||||
"zlm": {
|
||||
"locale": "ms",
|
||||
"name": "Malay",
|
||||
"url": "https://zume.training/ms"
|
||||
},
|
||||
"mya": {
|
||||
"locale": "my",
|
||||
"name": "Burmese",
|
||||
"url": "https://zume.training/my"
|
||||
},
|
||||
"npi": {
|
||||
"locale": "ne",
|
||||
"name": "Nepali",
|
||||
"url": "https://zume.training/ne"
|
||||
},
|
||||
"ory": {
|
||||
"locale": "or",
|
||||
"name": "Odia",
|
||||
"url": "https://zume.training/or"
|
||||
},
|
||||
"pan": {
|
||||
"locale": "pa",
|
||||
"name": "Punjabi",
|
||||
"url": "https://zume.training/pa"
|
||||
},
|
||||
"pnb": {
|
||||
"locale": "pa_pk",
|
||||
"name": "Punjabi (Western)",
|
||||
"url": "https://zume.training/pa_pk"
|
||||
},
|
||||
"pol": {
|
||||
"locale": "pl",
|
||||
"name": "Polish",
|
||||
"url": "https://zume.training/pl"
|
||||
},
|
||||
"prs": {
|
||||
"locale": "prs",
|
||||
"name": "prs",
|
||||
"url": "https://zume.training/prs"
|
||||
},
|
||||
"por": {
|
||||
"locale": "pt",
|
||||
"name": "Portuguese",
|
||||
"url": "https://zume.training/pt"
|
||||
},
|
||||
"ron": {
|
||||
"locale": "ro",
|
||||
"name": "Romanian",
|
||||
"url": "https://zume.training/ro"
|
||||
},
|
||||
"rus": {
|
||||
"locale": "ru",
|
||||
"name": "Russian",
|
||||
"url": "https://zume.training/ru"
|
||||
},
|
||||
"slv": {
|
||||
"locale": "sl",
|
||||
"name": "Slovenian",
|
||||
"url": "https://zume.training/sl"
|
||||
},
|
||||
"som": {
|
||||
"locale": "so",
|
||||
"name": "Somali",
|
||||
"url": "https://zume.training/so"
|
||||
},
|
||||
"swh": {
|
||||
"locale": "swa",
|
||||
"name": "Swahili",
|
||||
"url": "https://zume.training/swa"
|
||||
},
|
||||
"tam": {
|
||||
"locale": "ta",
|
||||
"name": "Tamil",
|
||||
"url": "https://zume.training/ta"
|
||||
},
|
||||
"tel": {
|
||||
"locale": "te",
|
||||
"name": "Telugu",
|
||||
"url": "https://zume.training/te"
|
||||
},
|
||||
"tha": {
|
||||
"locale": "th",
|
||||
"name": "Thai",
|
||||
"url": "https://zume.training/th"
|
||||
},
|
||||
"tur": {
|
||||
"locale": "tr",
|
||||
"name": "Turkish",
|
||||
"url": "https://zume.training/tr"
|
||||
},
|
||||
"urd": {
|
||||
"locale": "ur",
|
||||
"name": "Urdu",
|
||||
"url": "https://zume.training/ur"
|
||||
},
|
||||
"vie": {
|
||||
"locale": "vi",
|
||||
"name": "Vietnamese",
|
||||
"url": "https://zume.training/vi"
|
||||
},
|
||||
"yor": {
|
||||
"locale": "yo",
|
||||
"name": "Yoruba",
|
||||
"url": "https://zume.training/yo"
|
||||
},
|
||||
"cmn": {
|
||||
"locale": "zhcn",
|
||||
"name": "Chinese (Simplified)",
|
||||
"url": "https://zume.training/zhcn"
|
||||
},
|
||||
"yue": {
|
||||
"locale": "zhhk",
|
||||
"name": "Cantonese (Traditional)",
|
||||
"url": "https://zume.training/zhhk"
|
||||
}
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"locale": "am",
|
||||
"name": "Amharic",
|
||||
"native": "አማርኛ",
|
||||
"iso": "amh",
|
||||
"url": "https://zume.training/am",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar",
|
||||
"name": "Arabic",
|
||||
"native": "العربية",
|
||||
"iso": "arb",
|
||||
"url": "https://zume.training/ar",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar_jo",
|
||||
"name": "Arabic (Jordanian)",
|
||||
"native": "العربية - الأردن",
|
||||
"iso": "ajp",
|
||||
"url": "https://zume.training/ar_jo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ar_ma",
|
||||
"name": "Arabic (Moroccan)",
|
||||
"native": "العربية - الأردن",
|
||||
"iso": "ary",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "ar_tn",
|
||||
"name": "Arabic (Tunisian)",
|
||||
"native": "العربية التونسية",
|
||||
"iso": "aeb",
|
||||
"url": "https://zume.training/ar_tn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "asl",
|
||||
"name": "American Sign Language",
|
||||
"native": "Sign Language",
|
||||
"iso": "ase",
|
||||
"url": "https://zume.training/asl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "az",
|
||||
"name": "Azerbaijani",
|
||||
"native": null,
|
||||
"iso": "azj",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "bg",
|
||||
"name": "Bulgarian",
|
||||
"native": "български език",
|
||||
"iso": "bul",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "bho",
|
||||
"name": "Bhojpuri",
|
||||
"native": "भोजपुरी",
|
||||
"iso": "bho",
|
||||
"url": "https://zume.training/bho",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "bn",
|
||||
"name": "Bengali (India)",
|
||||
"native": "বাংলা",
|
||||
"iso": "ben",
|
||||
"url": "https://zume.training/bn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "bs",
|
||||
"name": "Bosnian",
|
||||
"native": "Bosanski",
|
||||
"iso": "bos",
|
||||
"url": "https://zume.training/bs",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "de",
|
||||
"name": "German",
|
||||
"native": "Deutsch",
|
||||
"iso": "deu",
|
||||
"url": "https://zume.training/de",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "en",
|
||||
"name": "English",
|
||||
"native": null,
|
||||
"iso": "eng",
|
||||
"url": "https://zume.training/en",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "es",
|
||||
"name": "Spanish",
|
||||
"native": "Español",
|
||||
"iso": "spa",
|
||||
"url": "https://zume.training/es",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "fa",
|
||||
"name": "Persian/Farsi",
|
||||
"native": "فارسی",
|
||||
"iso": "pes",
|
||||
"url": "https://zume.training/fa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "fo",
|
||||
"name": "Faroese",
|
||||
"native": null,
|
||||
"iso": "fao",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "fr",
|
||||
"name": "French",
|
||||
"native": "Français",
|
||||
"iso": "fra",
|
||||
"url": "https://zume.training/fr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "gu",
|
||||
"name": "Gujarati",
|
||||
"native": "ગુજરાતી",
|
||||
"iso": "guj",
|
||||
"url": "https://zume.training/gu",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ha",
|
||||
"name": "Hausa",
|
||||
"native": null,
|
||||
"iso": "hau",
|
||||
"url": "https://zume.training/ha",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hi",
|
||||
"name": "Hindi",
|
||||
"native": "हिन्दी",
|
||||
"iso": "hin",
|
||||
"url": "https://zume.training/hi",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hr",
|
||||
"name": "Croatian",
|
||||
"native": "Hrvatski",
|
||||
"iso": "hrv",
|
||||
"url": "https://zume.training/hr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "hy",
|
||||
"name": "Armenian",
|
||||
"native": null,
|
||||
"iso": "hye",
|
||||
"url": "https://zume.training/hy",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "id",
|
||||
"name": "Indonesian",
|
||||
"native": "Bahasa Indonesia",
|
||||
"iso": "ind",
|
||||
"url": "https://zume.training/id",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "it",
|
||||
"name": "Italian",
|
||||
"native": "Italiano",
|
||||
"iso": "ita",
|
||||
"url": "https://zume.training/it",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ja",
|
||||
"name": "Japanese",
|
||||
"native": "日本語",
|
||||
"iso": "jpn",
|
||||
"url": "https://zume.training/ja",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "kn",
|
||||
"name": "Kannada",
|
||||
"native": "ಕನ್ನಡ",
|
||||
"iso": "kan",
|
||||
"url": "https://zume.training/kn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ko",
|
||||
"name": "Korean",
|
||||
"native": "한국어",
|
||||
"iso": "kor",
|
||||
"url": "https://zume.training/ko",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ku",
|
||||
"name": "Kurdish",
|
||||
"native": "کوردی",
|
||||
"iso": "ckb",
|
||||
"url": "https://zume.training/ku",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ky",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": "kir",
|
||||
"url": "https://zume.training/ky",
|
||||
"listed": false,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "lo",
|
||||
"name": "Lao",
|
||||
"native": "ພາສາລາວ",
|
||||
"iso": "lao",
|
||||
"url": "https://zume.training/lo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "lv",
|
||||
"name": "Latvian",
|
||||
"native": "Latviešu",
|
||||
"iso": "lvs",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "mai",
|
||||
"name": "Maithili",
|
||||
"native": "मैथिली",
|
||||
"iso": "mai",
|
||||
"url": "https://zume.training/mai",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ml",
|
||||
"name": "Malayalam",
|
||||
"native": "മലയാളം",
|
||||
"iso": "mal",
|
||||
"url": "https://zume.training/ml",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "mn",
|
||||
"name": "Mongolian",
|
||||
"native": "Монгол",
|
||||
"iso": "khk",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "mr",
|
||||
"name": "Marathi",
|
||||
"native": "मराठी",
|
||||
"iso": "mar",
|
||||
"url": "https://zume.training/mr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ms",
|
||||
"name": "Malay",
|
||||
"native": "Bahasa Malaysia",
|
||||
"iso": "zlm",
|
||||
"url": "https://zume.training/ms",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "my",
|
||||
"name": "Burmese",
|
||||
"native": "မြန်မာဘာသာ",
|
||||
"iso": "mya",
|
||||
"url": "https://zume.training/my",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ne",
|
||||
"name": "Nepali",
|
||||
"native": "नेपाली",
|
||||
"iso": "npi",
|
||||
"url": "https://zume.training/ne",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "or",
|
||||
"name": "Odia",
|
||||
"native": "ଓଡ଼ିଆ",
|
||||
"iso": "ory",
|
||||
"url": "https://zume.training/or",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pa",
|
||||
"name": "Punjabi",
|
||||
"native": "ਪੰਜਾਬੀ",
|
||||
"iso": "pan",
|
||||
"url": "https://zume.training/pa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pa_pk",
|
||||
"name": "Punjabi (Western)",
|
||||
"native": "ਪੰਜਾਬੀ (ਪੱਛਮੀ)",
|
||||
"iso": "pnb",
|
||||
"url": "https://zume.training/pa_pk",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pl",
|
||||
"name": "Polish",
|
||||
"native": "Polski",
|
||||
"iso": "pol",
|
||||
"url": "https://zume.training/pl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "prs",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": "prs",
|
||||
"url": "https://zume.training/prs",
|
||||
"listed": false,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pt",
|
||||
"name": "Portuguese",
|
||||
"native": "Português",
|
||||
"iso": "por",
|
||||
"url": "https://zume.training/pt",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "pus",
|
||||
"name": null,
|
||||
"native": null,
|
||||
"iso": null,
|
||||
"url": "https://zume.training/pus",
|
||||
"listed": false,
|
||||
"sitemap": true,
|
||||
"why": "Pashto has three individual codes in the people-group data (pbu, pbt, pst) and the publisher gives nothing that selects one"
|
||||
},
|
||||
{
|
||||
"locale": "ro",
|
||||
"name": "Romanian",
|
||||
"native": "Română",
|
||||
"iso": "ron",
|
||||
"url": "https://zume.training/ro",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ru",
|
||||
"name": "Russian",
|
||||
"native": "Русский",
|
||||
"iso": "rus",
|
||||
"url": "https://zume.training/ru",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "sl",
|
||||
"name": "Slovenian",
|
||||
"native": "Slovenščina",
|
||||
"iso": "slv",
|
||||
"url": "https://zume.training/sl",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "so",
|
||||
"name": "Somali",
|
||||
"native": "Soomaali",
|
||||
"iso": "som",
|
||||
"url": "https://zume.training/so",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "swa",
|
||||
"name": "Swahili",
|
||||
"native": "Kiswahili",
|
||||
"iso": "swh",
|
||||
"url": "https://zume.training/swa",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "ta",
|
||||
"name": "Tamil",
|
||||
"native": "தமிழ்",
|
||||
"iso": "tam",
|
||||
"url": "https://zume.training/ta",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "te",
|
||||
"name": "Telugu",
|
||||
"native": "తెలుగు",
|
||||
"iso": "tel",
|
||||
"url": "https://zume.training/te",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "th",
|
||||
"name": "Thai",
|
||||
"native": "ไทย",
|
||||
"iso": "tha",
|
||||
"url": "https://zume.training/th",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "tl",
|
||||
"name": "Tagalog",
|
||||
"native": null,
|
||||
"iso": "tgl",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "tr",
|
||||
"name": "Turkish",
|
||||
"native": "Türkçe",
|
||||
"iso": "tur",
|
||||
"url": "https://zume.training/tr",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "uk",
|
||||
"name": "Ukrainian",
|
||||
"native": "Україна",
|
||||
"iso": "ukr",
|
||||
"url": null,
|
||||
"listed": true,
|
||||
"sitemap": false
|
||||
},
|
||||
{
|
||||
"locale": "ur",
|
||||
"name": "Urdu",
|
||||
"native": "اردو",
|
||||
"iso": "urd",
|
||||
"url": "https://zume.training/ur",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "vi",
|
||||
"name": "Vietnamese",
|
||||
"native": "Tiếng Việt",
|
||||
"iso": "vie",
|
||||
"url": "https://zume.training/vi",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "yo",
|
||||
"name": "Yoruba",
|
||||
"native": "Yorùbá",
|
||||
"iso": "yor",
|
||||
"url": "https://zume.training/yo",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhcn",
|
||||
"name": "Chinese (Simplified)",
|
||||
"native": "中文(简体)",
|
||||
"iso": "cmn",
|
||||
"url": "https://zume.training/zhcn",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhhk",
|
||||
"name": "Cantonese (Traditional)",
|
||||
"native": "中文(繁體,香港)",
|
||||
"iso": "yue",
|
||||
"url": "https://zume.training/zhhk",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
},
|
||||
{
|
||||
"locale": "zhtw",
|
||||
"name": "Chinese (Traditional)",
|
||||
"native": "中文(繁體)",
|
||||
"iso": "cmn",
|
||||
"url": "https://zume.training/zhtw",
|
||||
"listed": true,
|
||||
"sitemap": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/index.html
generated
2
public/doxa-maps/index.html
generated
File diff suppressed because one or more lines are too long
14
public/doxa-maps/manifest.json
generated
14
public/doxa-maps/manifest.json
generated
|
|
@ -556,7 +556,7 @@
|
|||
"bundle": "gospel-resources",
|
||||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"output": "doxa-maps/gospel-resources/gospel-resources.js",
|
||||
"integrity": "sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz",
|
||||
"integrity": "sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv",
|
||||
"elements": [
|
||||
"gospel-resources-map"
|
||||
],
|
||||
|
|
@ -576,7 +576,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -590,7 +590,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -604,7 +604,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/gospel-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -618,13 +618,13 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
"profile": "resources-map",
|
||||
"file": "resources-map.vue",
|
||||
"description": "12,379 people-group pins over a country choropleth: tap a pin for the Scripture, film and Bible-story links that exist in that group's own language with real URLs, tap a country for every group in it, search by group, language or ISO 639-3 code, and filter to the 3,457 groups where nothing was found.",
|
||||
"description": "12,379 people-group pins over a country choropleth: tap a pin for the Scripture, film, Bible-story and Zume training links that exist in that group's own language with real URLs, tap a country for every group in it, search by group, language or ISO 639-3 code, and filter to the 3,457 groups where nothing was found.",
|
||||
"element": "gospel-resources-map",
|
||||
"type": "single",
|
||||
"isMap": true,
|
||||
|
|
@ -632,7 +632,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-w0mZyUWVPLIZqK9qIJzxTqdT5PETy/KJhjTKxFHayHxCD3zjN/Ah+BGaQ52x1dAz\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-uwrH85RSM2vEAotqNQInLLXZl7ZYKd/Ah/DyxDA3Em61va9qbQHFtcKUwMy+P+gv\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in a new issue