Files
triliumnext-korean-patch/updates/2026-09-05/work/trilium/build-phase3.mjs
T

27 lines
2.9 KiB
JavaScript

import fs from 'node:fs';
import crypto from 'node:crypto';
const base='work/trilium', snapshot=process.env.TRILIUM_PHASE3_INPUT||'work/trilium-gitea/updates/2026-09-05/phase3-input';
const out=base+'/phase3';fs.mkdirSync(out,{recursive:true});
fs.cpSync(base+'/scoped/doc_notes/en',out+'/doc_notes/en',{recursive:true});
fs.cpSync(base+'/release/doc_notes/en',out+'/doc_notes/en',{recursive:true});
let main=fs.readFileSync(snapshot+'/main.cjs','utf8');
const original=main;
const replace=(from,to)=>{if(main.split(from).length!==2)throw Error('Patch point mismatch: '+from);main=main.replace(from,to);};
replace('jg=`assets/v${CR.version}-ko-20260905-r2`','jg=`assets/v${CR.version}-ko-20260913-r3`');
// Only shipped help titles are refreshed. Other customized hidden note names stay intact.
replace('r.restoreNames&&n.title!==t.title','(r.restoreNames||n.noteId.startsWith("_help_"))&&n.title!==t.title');
const ko={name:'ko',weekdays:['일요일','월요일','화요일','수요일','목요일','금요일','토요일'],weekdaysShort:['일','월','화','수','목','금','토'],weekdaysMin:['일','월','화','수','목','금','토'],months:Array.from({length:12},(_,i)=>(i+1)+'월'),monthsShort:Array.from({length:12},(_,i)=>(i+1)+'월'),formats:{LT:'A h:mm',LTS:'A h:mm:ss',L:'YYYY.MM.DD.',LL:'YYYY년 M월 D일',LLL:'YYYY년 M월 D일 A h:mm',LLLL:'YYYY년 M월 D일 dddd A h:mm'},relativeTime:{future:'%s 후',past:'%s 전',s:'몇 초',m:'1분',mm:'%d분',h:'1시간',hh:'%d시간',d:'하루',dd:'%d일',M:'한 달',MM:'%d개월',y:'일 년',yy:'%d년'}};
replace('ko:()=>Promise.resolve().then(()=>Xe(xvr()))','ko:()=>Promise.resolve().then(()=>({...'+JSON.stringify(ko)+',ordinal:n=>n+"일",meridiem:h=>h<12?"오전":"오후"}))');
for(const [en,kr]of [['SQL Console - ','SQL 콘솔 - '],['Script Launcher','스크립트 실행 도구'],['Note Launcher','노트 실행 도구'],['Widget Launcher','위젯 실행 도구'],['Spacer','간격']]){
const from='title:"'+en+'"';if(main.includes(from))replace(from,'title:"'+kr+'"');
}
fs.writeFileSync(out+'/main.cjs',main);
let calendar=fs.readFileSync(snapshot+'/ko.js','utf8');
for(const [from,to]of [['이전달','이전'],['다음달','다음'],['년도','연도'],['일정목록','일정 목록'],['더보기','더 보기'],['이벤트','일정']])calendar=calendar.replaceAll(from,to);
fs.writeFileSync(out+'/ko.js',calendar);
const hash=s=>crypto.createHash('sha256').update(s).digest('hex');
const manifest={previousMainSha256:hash(original),previousCalendarSha256:hash(fs.readFileSync(snapshot+'/ko.js')),files:{}};
function walk(dir,rel=''){for(const e of fs.readdirSync(dir,{withFileTypes:true})){const name=rel+e.name;if(e.isDirectory())walk(dir+'/'+e.name,name+'/');else manifest.files[name]=hash(fs.readFileSync(dir+'/'+e.name));}}
walk(out);delete manifest.files['manifest.json'];fs.writeFileSync(out+'/manifest.json',JSON.stringify(manifest,null,2));
console.log({packagedFiles:Object.keys(manifest.files).length,helpHtml:173,helpTitles:181});