如何基于用户选择的语言切换天气应用中预定义的日期变量?
多语言切换实现方案
核心逻辑是把所有语言的静态文本抽离为统一配置对象,通过用户传入的语言标识动态读取对应资源,无需修改核心日期拼接逻辑:
// 多语言静态配置,新增语言直接在此处添加即可 const langConfig = { en: { months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], needOrdinalSuffix: true // 控制是否显示st/nd/rd/th后缀 }, akan: { months: ["Ɔpɛpɔn", "Ɔgyefoɔ", "Ɔbɛnem", "Oforisuo", "Kotonimma", "Ayɛwohomumɔ", "Kitawonsa", "Ɔsanaa", "Ɛbɔ", "Ahinime", "Obubuo", "Ɔpɛnimma"], days: ["Kwasiada", "Jowada", "Benada", "Wukuada", "Yawóada", "Fiada", "Memeneda"], needOrdinalSuffix: true }, hausa: { months: ["Janairu", "Faburairu", "Maris", "Afirilu", "Mayu", "Yuni", "Yuli", "Agusta", "Satumba", "Oktoba", "Nuwamba", "Disamba"], days: ["lahadi", "litinin", "Talata", "laraba", "Alhamis", "Jumma", "Asabar"], needOrdinalSuffix: true } } // 新增lang入参,为用户选择的语言标识,默认 fallback 到英语 const dateBuilder = (d, lang = 'en') => { // 读取对应语言配置,不支持的语言默认用英语 const { months, days, needOrdinalSuffix } = langConfig[lang] || langConfig.en; let day = days[d.getDay()]; let date = d.getDate(); let sup = ""; let month = months[d.getMonth()]; let year = d.getFullYear(); // 根据配置判断是否需要生成序数词后缀 if (needOrdinalSuffix) { if (date == 1 || date == 21 || date ==31) { sup = "st"; } else if (date == 2 || date == 22) { sup = "nd"; } else if (date == 3 || date == 23) { sup = "rd"; } else { sup = "th"; } } return `${day} ${date}${sup ? ' ' + sup : ''} ${month} ${year}` }
使用示例
// 英语日期 console.log(dateBuilder(new Date(), 'en')) // 阿坎语日期 console.log(dateBuilder(new Date(), 'akan')) // 豪萨语日期 console.log(dateBuilder(new Date(), 'hausa'))
后续扩展说明
- 新增支持语言只需在
langConfig中添加对应语言的配置项即可,不需要修改核心日期处理逻辑 - 若某类语言不需要序数词后缀,将对应配置的
needOrdinalSuffix设为false即可 - 可根据业务需求扩展更多配置项,比如日期拼接格式、不同语言的序数词规则等
内容的提问来源于stack exchange,提问作者StaFa
相关产品推荐
相关产品推荐

