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}