Print the Chinese prayer packet in one script

The app's Chinese is Simplified, and so were 39 keys of the packet's zh
block. The other 18 were Traditional - page 1's subtitle, the list
header, the card labels, and the whole prayer wheel and all twelve
prayer points - so a Chinese packet switched script partway through.
The block had been extended by matching the neighbouring line, which
was itself the drift; the missing-map sentence added in 74e5c4b0d
followed that same neighbour and is corrected here too.

Converted with a real converter (zhconv, MediaWiki's tables), not a
hand-picked character list: it converts characters (為 to 为, 禱 to 祷)
and mainland vocabulary (列印 to 打印), and a hand list had found only
17 of the 18 keys. A second pass changes nothing, so the block is
Simplified by the converter's own definition. 祂 is kept. The block
carries no licensed scripture - Mark 5 falls back to English there - so
only prayer prose and labels changed.

check-i18n-parity's zh arm walked the app catalogues and never the
packet's, which is how 18 keys drifted unseen. It now walks the packet
block as well; pointed at the block before this commit it fails with 41
values, and passes after. Its character set remains a floor, as it says.
This commit is contained in:
Doxa Maps 2026-09-29 00:47:51 +00:00
parent 2367c2ef64
commit bad51cef2b
2 changed files with 49 additions and 43 deletions

View file

@ -130,6 +130,12 @@ const zhTrad = []
else if (o && typeof o === 'object') for (const [k, v] of Object.entries(o)) walk(v, p ? `${p}.${k}` : k, area)
}
if (existsSync(join(ROOT, 'zh'))) for (const a of areas) { const p = join(ROOT, 'zh', a); if (existsSync(p)) walk(JSON.parse(readFileSync(p, 'utf8')), '', a) }
// ★ AND THE PACKET'S OWN CATALOGUE. The printed prayer packet reads packet-strings.json, not these
// areas, so its zh block was outside this arm entirely — and drifted to 18 Traditional keys (the
// whole wheel and all 12 prayer points among them) while this arm stayed green. A Chinese packet
// then switched script partway through the document.
const PACKET = join(ROOT, '..', '..', 'scripts', 'posters', 'packet-strings.json')
if (existsSync(PACKET)) { const zhp = JSON.parse(readFileSync(PACKET, 'utf8')).zh; if (zhp) walk(zhp, '', 'packet-strings') }
}
if (zhTrad.length) {
console.log(`\nI18N-PARITY: FAIL — ${zhTrad.length} zh value(s) contain Traditional-only characters; zh is Simplified:`)

View file

@ -2261,46 +2261,46 @@
},
"zh": {
"map_page_kicker": "未得之民",
"map_page_sub": "為 {count} 個未得之民的禱告名單",
"map_unavailable": "此禱告名單的地圖未包含在本次列印中。",
"map_page_sub": "为 {count} 个未得之民的祷告名单",
"map_unavailable": "此祷告名单的地图未包含在本次打印中。",
"map_page_series": "UPG 100 的 {k} 份祷告名单之一",
"list_header": "{count} 之中的 {from}–{to} · 按名為他們禱告",
"list_header": "{count} 之中的 {from}–{to} · 按名为他们祷告",
"people_suffix": "人",
"no_photo": "沒有照片",
"deck_title": "禱告卡",
"card_country": "國家",
"no_photo": "没有照片",
"deck_title": "祷告卡",
"card_country": "国家",
"card_population": "人口",
"card_language": "語言",
"card_language": "语言",
"card_religion": "宗教",
"card_cta": "為他們禱告",
"points_title": "12 個禱告要點",
"points_intro": "與神同在一小時,每個要點五分鐘。為這份禱告冊中的族群禱告這十二個要點。",
"points_attrib": "禱告節奏取材自 Metacamp · metacamp.org",
"wheel_title": "禱告輪",
"wheel_intro": "與神同在一小時?比你想的容易。把它分成五分鐘一段,每一段專注其中一個要點。",
"wheel_minutes": "分鐘",
"wheel_attrib": "禱告輪 · Metacamp 第一單元 · metacamp.org",
"privacy_note": "標記位置為概略位置 · 族群所在地已於資料來源處作概化處理以保護隱私",
"card_cta": "为他们祷告",
"points_title": "12 个祷告要点",
"points_intro": "与神同在一小时,每个要点五分钟。为这份祷告册中的族群祷告这十二个要点。",
"points_attrib": "祷告节奏取材自 Metacamp · metacamp.org",
"wheel_title": "祷告轮",
"wheel_intro": "与神同在一小时?比你想的容易。把它分成五分钟一段,每一段专注其中一个要点。",
"wheel_minutes": "分钟",
"wheel_attrib": "祷告轮 · Metacamp 第一单元 · metacamp.org",
"privacy_note": "标记位置为概略位置 · 族群所在地已于资料来源处作概化处理以保护隐私",
"rhythms": {
"praise": "讚美",
"praise": "赞美",
"wait": "等候",
"confess": "認罪",
"read": "讀神的話",
"confess": "认罪",
"read": "读神的话",
"ask": "祈求",
"intercede": "代禱",
"pray_word": "以神的話禱告",
"thank": "感謝",
"intercede": "代祷",
"pray_word": "以神的话祷告",
"thank": "感谢",
"sing": "歌唱",
"meditate": "默想",
"listen": "聆聽",
"praise_end": "讚美"
"listen": "聆听",
"praise_end": "赞美"
},
"points": [
{
"n": 1,
"rhythm": "praise",
"sub": "兩個十字架的福音",
"text": "願他們接受基督為王,藉著祂的十字架得赦免——也背起自己的十字架,甘願在逼迫之地受苦。願羔羊得著祂受苦的賞賜,從我開始。",
"sub": "两个十字架的福音",
"text": "愿他们接受基督为王,借着祂的十字架得赦免——也背起自己的十字架,甘愿在逼迫之地受苦。愿羔羊得着祂受苦的赏赐,从我开始。",
"refs": [
"Matthew 27:27",
"Matthew 16:24–25"
@ -2309,8 +2309,8 @@
{
"n": 2,
"rhythm": "wait",
"sub": "聖靈與釋放",
"text": "願他們被聖靈充滿,成為剛強的見證人;不至孤單;受水和聖靈的洗;一切邪惡的轄制都被打破。願鄰近族群中的信徒被興起作工人。",
"sub": "圣灵与释放",
"text": "愿他们被圣灵充满,成为刚强的见证人;不至孤单;受水和圣灵的洗;一切邪恶的辖制都被打破。愿邻近族群中的信徒被兴起作工人。",
"refs": [
"Acts 1:8",
"John 14:26"
@ -2320,7 +2320,7 @@
"n": 3,
"rhythm": "confess",
"sub": "",
"text": "我們承認自己的不信,以為這事對神太難。願祂重新點燃我們對普世未得之民的愛與信心。",
"text": "我们承认自己的不信,以为这事对神太难。愿祂重新点燃我们对普世未得之民的爱与信心。",
"refs": [
"John 3:16",
"1 John 1:9"
@ -2329,8 +2329,8 @@
{
"n": 4,
"rhythm": "read",
"sub": "天父的愛",
"text": "願他們得救,並知道天父愛他們——也願神藉著他們,把救恩帶給他們的家人、朋友、鄰舍、同事、同學,以及他們所認識的每一個人。",
"sub": "天父的爱",
"text": "愿他们得救,并知道天父爱他们——也愿神借着他们,把救恩带给他们的家人、朋友、邻舍、同事、同学,以及他们所认识的每一个人。",
"refs": [
"Mark 5:1–20",
"Acts 16:31"
@ -2340,8 +2340,8 @@
{
"n": 5,
"rhythm": "ask",
"sub": "洗禮",
"text": "願當地有新的受洗者,並且每一位受洗的人都被裝備去為別人施洗,不斷繁增。",
"sub": "洗礼",
"text": "愿当地有新的受洗者,并且每一位受洗的人都被装备去为别人施洗,不断繁增。",
"refs": [
"Acts 16",
"Acts 10"
@ -2350,8 +2350,8 @@
{
"n": 6,
"rhythm": "intercede",
"sub": "工人與牧人",
"text": "願工人被差派去深愛一群素未謀面的人;也願好牧人從他們中間被興起。",
"sub": "工人与牧人",
"text": "愿工人被差派去深爱一群素未谋面的人;也愿好牧人从他们中间被兴起。",
"refs": [
"Luke 10:2",
"John 10:11–15"
@ -2360,8 +2360,8 @@
{
"n": 7,
"rhythm": "pray_word",
"sub": "平安之子與平安之家",
"text": "願工人與當地帶領者尋得那樂意接待的人和平安之家,並好好門訓他們。",
"sub": "平安之子与平安之家",
"text": "愿工人与当地带领者寻得那乐意接待的人和平安之家,并好好门训他们。",
"refs": [
"Luke 10:5–7",
"Matthew 10:5–14"
@ -2371,7 +2371,7 @@
"n": 8,
"rhythm": "thank",
"sub": "安息",
"text": "感謝神所賜的安息;願他們在基督裡進入那安息,也願他們的屬靈家庭是安全的地方。",
"text": "感谢神所赐的安息;愿他们在基督里进入那安息,也愿他们的属灵家庭是安全的地方。",
"refs": [
"Mark 4:26–29",
"Hebrews 4:9–11"
@ -2381,7 +2381,7 @@
"n": 9,
"rhythm": "sing",
"sub": "",
"text": "願這族群充滿敬拜者——處處敬拜,在自由中,也在捆鎖中。",
"text": "愿这族群充满敬拜者——处处敬拜,在自由中,也在捆锁中。",
"refs": [
"Acts 16:25–26",
"Colossians 3:16"
@ -2390,8 +2390,8 @@
{
"n": 10,
"rhythm": "meditate",
"sub": "聖餐",
"text": "願他們一同領受聖餐,深深體會祂的死、埋葬與復活的份量。",
"sub": "圣餐",
"text": "愿他们一同领受圣餐,深深体会祂的死、埋葬与复活的分量。",
"refs": [
"Matthew 26:26–30",
"1 Corinthians 11:23–26"
@ -2401,7 +2401,7 @@
"n": 11,
"rhythm": "listen",
"sub": "彼此守望",
"text": "不只願他們聆聽,更願他們身邊有人幫助他們讀神的話、禱告、委身群體,並在苦難中正確回應——抵擋那在全世界追逼信徒的仇敵。",
"text": "不只愿他们聆听,更愿他们身边有人帮助他们读神的话、祷告、委身群体,并在苦难中正确回应——抵挡那在全世界追逼信徒的仇敌。",
"refs": [
"1 Peter 5:6–11",
"Hebrews 10:24–25"
@ -2411,7 +2411,7 @@
"n": 12,
"rhythm": "praise_end",
"sub": "大 · 更大 · 最大",
"text": "先行讚美——為著得救的人;更大的,為著不斷繁增的屬靈家庭;最大的,為著獻上的生命,以及被興起的本地植堂者,無論代價如何,都在整個族群中繁增健康的教會。",
"text": "先行赞美——为着得救的人;更大的,为着不断繁增的属灵家庭;最大的,为着献上的生命,以及被兴起的本地植堂者,无论代价如何,都在整个族群中繁增健康的教会。",
"refs": [
"Acts 2:42–47",
"Matthew 28:19–20"