refine ui

This commit is contained in:
2026-08-13 21:35:38 +09:00
parent bc59c0c785
commit d87bd4111e
6 changed files with 1671 additions and 833 deletions
+979 -1
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -12,7 +12,6 @@
<main id="app-main"></main>
</div>
<script src="js/i18n.js"></script>
<script src="js/cases.js"></script>
<script src="js/ahp.js"></script>
<script src="js/app.js"></script>
+412 -369
View File
File diff suppressed because it is too large Load Diff
-187
View File
@@ -1,187 +0,0 @@
const I18N = {
ko: {
appTitle: '스타트업 지원 심사 판단 실험',
langBtn: 'EN',
stepLabels: ['안내', '직관 판단', 'AHP 비교', '결과', '사후 설문'],
// Step 1
step1Title: '스타트업 지원 심사 판단 실험',
step1Intro: '당신은 스타트업 지원 프로그램의 심사위원입니다. 이 실험은 두 가지 판단 방식 — 인간의 직관과 AI 기반 의사결정 모델(AHP) — 을 비교 분석합니다. 15개의 스타트업 사례를 보고 지원금 지급 가능성을 평가한 뒤, 본인만의 평가 기준 가중치를 설정하게 됩니다.',
step1Notices: [
'정답은 없습니다. 느낌과 직관대로 판단해 주세요.',
'총 소요 시간은 약 20~25분입니다.',
'중간에 페이지를 나가면 데이터가 저장되지 않습니다.',
],
step1Q1: '학년',
step1Q1opts: ['1학년', '2학년', '3학년'],
startBtn: '실험 시작',
// Step 2
step2Instruction: '당신은 스타트업 지원 프로그램의 심사위원입니다. 아래 팀의 정보를 보고 지원금 지급 가능성을 직관적으로 평가하세요. 계산하지 말고 느낌대로 판단하세요.',
varNames: {
'안정성': '안정성',
'수익_가능성': '수익 가능성',
'자금_효율성': '자금 효율성',
'사업_계획_완성도': '사업 계획 완성도',
'사회적_가치': '사회적 가치',
},
judgmentLabel: '이 팀의 지원금 지급 가능성을 평가하세요',
judgmentScale: ['매우\n탈락', '탈락', '보통', '선발', '매우\n선발'],
btnNext: '다음',
// Step 3
step3Title: 'AHP 쌍대비교',
step3Instruction: '5개의 평가 기준 중 어느 것이 더 중요한지 비교해주세요. 왼쪽이 더 중요하면 슬라이더를 왼쪽으로, 오른쪽이 더 중요하면 오른쪽으로 움직이세요.',
ahpEqual: '두 기준이 동등하게 중요합니다',
ahpLeftMore: (crit, level) => `${crit}이(가) ${level} 더 중요합니다`,
ahpRightMore: (crit, level) => `${crit}이(가) ${level} 더 중요합니다`,
ahpLevels: { 3: '약간', 5: '꽤', 7: '매우', 9: '극히' },
crWarning: '판단에 약간의 모순이 감지되었습니다(CR > 0.10). 다시 입력하시겠습니까?',
btnRedo: '다시 입력',
btnContinue: '그대로 진행',
// Step 4
step4Title: '결과 비교',
weightsTitle: '나의 판단 기준 (AHP 가중치)',
tableTitle: '사례별 모델 vs 직관 비교',
colTeam: '팀',
colModelScore: '모델 점수',
colModelJudge: '모델 판단',
colIntuition: '직관 (1-5)',
colMatch: '일치',
colYes: '✓',
colNo: '✗',
colNeutral: '△',
totalMismatch: (n, t) => `총 불일치: ${n} / ${t}건 (보통 제외)`,
statsTitle: '핵심 통계',
statTotal: '전체 불일치율',
statBaseline: '베이스라인\n불일치율',
statSpike: '스파이크 사례\n불일치율',
statConflict: '충돌 사례\n불일치율',
statCR: 'CR (일관성 비율)',
select: '선발',
reject: '탈락',
neutral: '보통',
btnGoSurvey: '사후 설문으로 이동',
// Step 5
step5Title: '사후 설문',
step5Desc: '마지막으로 간단한 설문에 답해주세요.',
likertQ: [
'모델의 판단 결과를 보고 놀라웠다.',
'내 직관보다 모델의 판단이 더 합리적이라고 생각한다.',
'이 선발 결정을 모델에게 맡겨도 괜찮다고 생각한다.',
'이번 판단은 온전히 내 의지로 한 것이라고 느낀다.',
],
likertScale: ['전혀\n아니다', '아니다', '보통', '그렇다', '매우\n그렇다'],
openQ: '모델 판단과 직관이 달랐을 때 어떤 생각이 들었나요? (선택)',
openPh: '자유롭게 작성해 주세요...',
btnSubmit: '제출하기',
// Complete
completeTitle: '참여해 주셔서 감사합니다!',
completeDesc: '실험이 완료되었습니다.\n소중한 시간을 내어 참여해 주셔서 진심으로 감사드립니다.\n응답 데이터는 안전하게 저장되었습니다.',
alertFillAll: '모든 항목을 입력해 주세요.',
alertSelectJudgment: '먼저 판단을 선택해 주세요.',
leaveWarning: '실험이 완료되지 않았습니다. 나가시겠습니까?',
},
en: {
appTitle: 'Startup Funding Evaluation Experiment',
langBtn: '한국어',
stepLabels: ['Intro', 'Intuition', 'AHP', 'Results', 'Survey'],
step1Title: 'Startup Funding Evaluation Experiment',
step1Intro: 'You are a judge in a startup support program. This experiment compares two decision-making approaches — human intuition and an AI-based model (AHP). You will evaluate 15 startup cases and then set your own weighting criteria.',
step1Notices: [
'There are no right or wrong answers. Judge by your gut feeling.',
'The experiment takes approximately 2025 minutes.',
'Leaving the page mid-experiment will result in lost data.',
],
step1Q1: 'Grade',
step1Q1opts: ['Grade 1', 'Grade 2', 'Grade 3'],
startBtn: 'Start Experiment',
step2Instruction: 'You are a judge in a startup support program. Based on the team\'s information below, intuitively evaluate their funding potential. Do not calculate — go with your gut.',
varNames: {
'안정성': 'Stability',
'수익_가능성': 'Revenue Potential',
'자금_효율성': 'Capital Efficiency',
'사업_계획_완성도': 'Business Plan Quality',
'사회적_가치': 'Social Value',
},
judgmentLabel: 'Evaluate this team\'s funding potential',
judgmentScale: ['Strongly\nReject', 'Reject', 'Neutral', 'Fund', 'Strongly\nFund'],
btnNext: 'Next',
step3Title: 'AHP Pairwise Comparison',
step3Instruction: 'Compare which of the 5 criteria matters more. Move the slider left if the left criterion is more important, right if the right one is.',
ahpEqual: 'Both criteria are equally important',
ahpLeftMore: (crit, level) => `${crit} is ${level} more important`,
ahpRightMore: (crit, level) => `${crit} is ${level} more important`,
ahpLevels: { 3: 'somewhat', 5: 'considerably', 7: 'much', 9: 'extremely' },
crWarning: 'Some inconsistency detected (CR > 0.10). Would you like to redo the comparison?',
btnRedo: 'Redo',
btnContinue: 'Continue anyway',
step4Title: 'Results Comparison',
weightsTitle: 'Your Judgment Criteria (AHP Weights)',
tableTitle: 'Model vs. Intuition per Case',
colTeam: 'Team',
colModelScore: 'Model Score',
colModelJudge: 'Model',
colIntuition: 'Intuition (1-5)',
colMatch: 'Match',
colYes: '✓',
colNo: '✗',
colNeutral: '△',
totalMismatch: (n, tot) => `Total mismatches: ${n} / ${tot} (neutral excluded)`,
statsTitle: 'Key Statistics',
statTotal: 'Overall Mismatch Rate',
statBaseline: 'Baseline\nMismatch Rate',
statSpike: 'Spike Case\nMismatch Rate',
statConflict: 'Conflict Case\nMismatch Rate',
statCR: 'CR (Consistency Ratio)',
select: 'Fund',
reject: 'Reject',
neutral: 'Neutral',
btnGoSurvey: 'Go to Post-Survey',
step5Title: 'Post-Survey',
step5Desc: 'Please answer a few final questions.',
likertQ: [
'I was surprised by the model\'s judgment.',
'I think the model\'s judgment is more rational than my intuition.',
'I would be comfortable letting the model make these selection decisions.',
'I feel the decisions I made were entirely my own.',
],
likertScale: ['Strongly\nDisagree', 'Disagree', 'Neutral', 'Agree', 'Strongly\nAgree'],
openQ: 'What did you think when your intuition differed from the model? (Optional)',
openPh: 'Write freely...',
btnSubmit: 'Submit',
completeTitle: 'Thank you for participating!',
completeDesc: 'The experiment is complete.\nThank you sincerely for your time and participation.\nYour responses have been saved securely.',
alertFillAll: 'Please fill in all fields.',
alertSelectJudgment: 'Please make a judgment first.',
leaveWarning: 'The experiment is not complete. Are you sure you want to leave?',
},
};
let currentLang = 'ko';
function t(key, ...args) {
const val = I18N[currentLang][key];
if (typeof val === 'function') return val(...args);
return val ?? key;
}
function switchLang() {
currentLang = currentLang === 'ko' ? 'en' : 'ko';
document.documentElement.lang = currentLang;
if (typeof renderApp === 'function') renderApp();
}