Add Korean Japanese and English user interfaces

This commit is contained in:
2026-10-15 18:21:17 +09:00
parent 8fb8c203f0
commit b831003e7d
41 changed files with 3074 additions and 351 deletions

View File

@@ -70,6 +70,14 @@ try {
`for(let i=0;i<60;i++){try{const r=await fetch('http://127.0.0.1:${port}/api/health');if(r.ok){console.log('ready');break}}catch{}if(i===59)throw Error('not ready');await new Promise(r=>setTimeout(r,250))}`,
);
wait();
if (process.env.HOP_CHECK_LANGUAGES === '1') {
assert.equal(
node(
`const base='http://127.0.0.1:${port}';for(const language of ['en','ja']){const headers={Origin:'https://hop.test','Content-Type':'application/json','Accept-Language':language};const created=await fetch(base+'/api/guest/session',{method:'POST',headers,body:'{}'});const session=await created.json();if(!created.ok||session.defaultLanguage!==language)throw Error('wrong initial language');const cookie=created.headers.get('set-cookie').split(';')[0];const invalid=await fetch(base+'/api/device/me',{method:'PATCH',headers:{...headers,Cookie:cookie,'X-CSRF-Token':session.csrfToken},body:JSON.stringify({name:''})});const body=await invalid.json();if(body.code!=='VALIDATION_ERROR'||/[가-힣]/.test(body.message))throw Error('untranslated system message');}const manifest=await(await fetch(base+'/manifest.ja.webmanifest')).json();if(manifest.lang!=='ja')throw Error('missing localized manifest');console.log('languages ready');`,
),
'languages ready',
);
}
const state = JSON.parse(
node(
`const base='http://127.0.0.1:${port}';const r=await fetch(base+'/api/guest/session',{method:'POST',headers:{Origin:'https://hop.test','Content-Type':'application/json'},body:'{}'});if(!r.ok)throw Error('session failed');const session=await r.json(),cookie=r.headers.get('set-cookie').split(';')[0];if(!r.headers.get('set-cookie').includes('Secure'))throw Error('insecure cookie');const renamed=await fetch(base+'/api/device/me',{method:'PATCH',headers:{Origin:'https://hop.test',Cookie:cookie,'X-CSRF-Token':session.csrfToken,'Content-Type':'application/json'},body:JSON.stringify({name:'Docker 저장 검증'})});if(!renamed.ok)throw Error('rename failed');console.log(JSON.stringify({cookie,id:session.device.id}));`,