code wiki / _hdl_build / nx_cms_i18n_gate.nx

nx_cms_i18n_gate.nx source

↩ module page · 104 lines · 6717 B

1// nx_cms_i18n_gate.nx -- CMS MULTILINGUAL gate: land the missing WPML/Polylang class HONESTLY by proving 2// the sovereign RFC-4647 "Lookup" resolver over a real nx_cms_store bundle -- exact tag, region-truncated 3// fallback, multi-subtag progressive truncation (zh-Hant-TW -> zh), default-locale fallback, bare-field 4// fallback, locale isolation (no wrong-locale bleed), and an HONEST MISS (-1, never a silent wrong value 5// = the negative control). Appends "CMSGATE row=nx_cms_i18n i18n-multilingual ... verdict=PASS" to 6// knowledge/status/cms_gate.log ONLY if every assertion holds (no fake-green). Exit 0 iff all pass. 7// license_tier: ORIGINAL 8import "nx_cms_i18n.nx" 9import "nx_cms_store.nx" 10import "nx_syscalls.nx" 11 12func ig_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 13func ig_num(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=48+(m%10);m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 } 14func ig_cat(dst: *u8, off: i64, s: *u8) -> i64 { var o: i64=off; var k: i64=0; while s[k]!=(0 as u8){dst[o]=s[k];o=o+1;k=k+1} return o } 15func ig_catnum(dst: *u8, off: i64, v: i64) -> i64 { 16 var o: i64=off; let t: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; var k: i64=0 17 if m==0 {t[0]=48 as u8;k=1}; while m>0 {t[k]=(48+(m%10)) as u8; m=m/10; k=k+1} 18 var i: i64=0; while i<k {dst[o]=t[k-1-i]; o=o+1; i=i+1} return o 19} 20func ig_cpy(dst: *u8, src: *u8) -> i64 { var k: i64=0; while src[k]!=(0 as u8){dst[k]=src[k];k=k+1} return k } 21 22// compare exactly n bytes of buf to a NUL-terminated literal (literal must be exactly n long) 23func ig_streq(buf: *u8, n: i64, lit: *u8) -> i64 { 24 var i: i64=0 25 while i<n { if (buf[i] as i64) != (lit[i] as i64) { return 0 } i=i+1 } 26 if (lit[n] as i64) != 0 { return 0 } 27 return 1 28} 29 30func ig_row(id: i64, ok: i64, what: *u8) -> i64 { 31 ig_w("I18NROW " as *u8); ig_num(id); ig_w(" " as *u8) 32 if ok==1 { ig_w("PASS " as *u8) } else { ig_w("FAIL " as *u8) } 33 ig_w(what); ig_w("\n" as *u8) 34 return ok 35} 36 37func main() -> i64 { 38 var pass: i64 = 0 39 var rows: i64 = 0 40 var ok: i64 = 0 41 42 // ---- a real locale-tagged content bundle in the nx_cms_store record format (all ASCII) ---- 43 let store: *u8 = sys_mmap(8192) 44 let sn: i64 = ig_cpy(store, "@title.en\nWelcome\n@title.fr\nBienvenue\n@title.fr-CA\nWelcome-home-CA\n@title.zh\nHuanying\n@body.en\nHello world\n@slug\nmy-page\n" as *u8) 45 let out: *u8 = sys_mmap(256) 46 let tier: *i64 = sys_mmap(16) as *i64 47 48 // R0: exact tag -- fr-CA matches title.fr-CA verbatim (tier EXACT) 49 let r0: i64 = i18n_resolve(store, sn, "title" as *u8, "fr-CA" as *u8, "en" as *u8, out, 256, tier) 50 ok = 0; if r0 >= 0 { if ig_streq(out, r0, "Welcome-home-CA" as *u8) == 1 { if tier[0] == NX_I18N_EXACT { ok = 1 } } } 51 rows=rows+1; pass=pass+ig_row(0, ok, "exact: fr-CA -> title.fr-CA verbatim (tier EXACT)" as *u8) 52 53 // R1: region-truncated fallback -- fr-FR has no exact tag, drop region -> title.fr (tier TRUNC) 54 let r1: i64 = i18n_resolve(store, sn, "title" as *u8, "fr-FR" as *u8, "en" as *u8, out, 256, tier) 55 ok = 0; if r1 >= 0 { if ig_streq(out, r1, "Bienvenue" as *u8) == 1 { if tier[0] == NX_I18N_TRUNC { ok = 1 } } } 56 rows=rows+1; pass=pass+ig_row(1, ok, "truncate region: fr-FR -> title.fr (RFC4647 lookup, tier TRUNC)" as *u8) 57 58 // R2: multi-subtag progressive truncation -- zh-Hant-TW -> zh-Hant -> zh (tier TRUNC) 59 let r2: i64 = i18n_resolve(store, sn, "title" as *u8, "zh-Hant-TW" as *u8, "en" as *u8, out, 256, tier) 60 ok = 0; if r2 >= 0 { if ig_streq(out, r2, "Huanying" as *u8) == 1 { if tier[0] == NX_I18N_TRUNC { ok = 1 } } } 61 rows=rows+1; pass=pass+ig_row(2, ok, "multi-subtag: zh-Hant-TW -> zh-Hant -> zh (progressive truncation)" as *u8) 62 63 // R3: default-locale fallback -- de has no title.de and no region to drop -> default en (tier DEFAULT) 64 let r3: i64 = i18n_resolve(store, sn, "title" as *u8, "de" as *u8, "en" as *u8, out, 256, tier) 65 ok = 0; if r3 >= 0 { if ig_streq(out, r3, "Welcome" as *u8) == 1 { if tier[0] == NX_I18N_DEFAULT { ok = 1 } } } 66 rows=rows+1; pass=pass+ig_row(3, ok, "default fallback: de -> configured default en (tier DEFAULT)" as *u8) 67 68 // R4: bare-field fallback -- slug has no locale variants -> bare @slug (tier BARE) 69 let r4: i64 = i18n_resolve(store, sn, "slug" as *u8, "fr-CA" as *u8, "en" as *u8, out, 256, tier) 70 ok = 0; if r4 >= 0 { if ig_streq(out, r4, "my-page" as *u8) == 1 { if tier[0] == NX_I18N_BARE { ok = 1 } } } 71 rows=rows+1; pass=pass+ig_row(4, ok, "bare fallback: untagged @slug serves for any locale (tier BARE)" as *u8) 72 73 // R5 (neg control): a field that exists in NO tier returns NONE -- never a silent wrong value 74 let r5: i64 = i18n_resolve(store, sn, "nonexistent" as *u8, "en" as *u8, "en" as *u8, out, 256, tier) 75 ok = 0; if r5 == NX_I18N_NONE { if tier[0] == NX_I18N_NONE { ok = 1 } } 76 rows=rows+1; pass=pass+ig_row(5, ok, "honest miss: unknown field -> NONE, no silent wrong-locale value (neg ctrl)" as *u8) 77 78 // R6: locale isolation -- en resolves to its OWN value, no bleed from fr 79 let r6: i64 = i18n_resolve(store, sn, "title" as *u8, "en" as *u8, "fr" as *u8, out, 256, tier) 80 ok = 0; if r6 >= 0 { if ig_streq(out, r6, "Welcome" as *u8) == 1 { if tier[0] == NX_I18N_EXACT { ok = 1 } } } 81 rows=rows+1; pass=pass+ig_row(6, ok, "isolation: en -> Welcome (NOT Bienvenue); exact, no cross-locale bleed" as *u8) 82 83 // R7: key construction is correct 84 let kb: *u8 = sys_mmap(64) 85 let kl: i64 = i18n_key(kb, "title" as *u8, "fr-CA" as *u8) 86 ok = 0; if ig_streq(kb, kl, "title.fr-CA" as *u8) == 1 { ok = 1 } 87 rows=rows+1; pass=pass+ig_row(7, ok, "key construction: (title, fr-CA) -> 'title.fr-CA'" as *u8) 88 89 ig_w("CMS-I18N-GATE rows=" as *u8); ig_num(rows); ig_w(" pass=" as *u8); ig_num(pass); ig_w("\n" as *u8) 90 91 if pass == rows { 92 let line: *u8 = sys_mmap(256) 93 var off: i64 = ig_cat(line, 0, "CMSGATE row=nx_cms_i18n i18n-multilingual rows=" as *u8) 94 off = ig_catnum(line, off, rows) 95 off = ig_cat(line, off, " pass=" as *u8); off = ig_catnum(line, off, pass) 96 off = ig_cat(line, off, " verdict=PASS\n" as *u8) 97 let gf: i64 = sys_openat_append("knowledge/status/cms_gate.log" as *u8, 0x1a4) 98 if gf >= 0 { sys_write(gf, line, off); sys_close(gf) } 99 ig_w("CMS-I18N-GATE verdict=PASS -- i18n-multilingual recorded in cms_gate.log\n" as *u8) 100 sys_exit(0); return 0 101 } 102 ig_w("CMS-I18N-GATE verdict=FAIL -- NOT recorded (no fake-green)\n" as *u8) 103 sys_exit(1); return 1 104}