dramaling-vocab-learning/frontend/lib/utils/cefrUtils.ts

38 lines
1.2 KiB
TypeScript

// CEFR等級映射
export const getCEFRToLevel = (cefr: string): number => {
const mapping: { [key: string]: number } = {
'A1': 20, 'A2': 35, 'B1': 50, 'B2': 65, 'C1': 80, 'C2': 95
}
return mapping[cefr] || 50
}
// 根據CEFR等級獲取複習類型
export const getReviewTypesByCEFR = (userCEFR: string, wordCEFR: string): string[] => {
const userLevel = getCEFRToLevel(userCEFR)
const wordLevel = getCEFRToLevel(wordCEFR)
const difficulty = wordLevel - userLevel
if (userCEFR === 'A1') {
return ['flip-memory', 'vocab-choice']
} else if (difficulty < -10) {
return ['sentence-reorder', 'sentence-fill']
} else if (difficulty >= -10 && difficulty <= 10) {
return ['sentence-fill', 'sentence-reorder']
} else {
return ['flip-memory', 'vocab-choice']
}
}
// 模式標籤映射
export const getModeLabel = (mode: string): string => {
const labels: { [key: string]: string } = {
'flip-memory': '翻卡記憶',
'vocab-choice': '詞彙選擇',
'sentence-fill': '例句填空',
'sentence-reorder': '例句重組',
'vocab-listening': '詞彙聽力',
'sentence-listening': '例句聽力',
'sentence-speaking': '例句口說'
}
return labels[mode] || mode
}