如何在无日期对象时用JS将英文星期字符串本地化翻译?
解决仅用英文星期字符串实现本地化翻译的方案
你可以通过构建固定日期与英文星期的映射,借助Date.prototype.toLocaleDateString()完成翻译,无需依赖真实业务日期,具体实现如下:
1. 建立英文星期与固定日期的映射
找一段已知各日期对应星期的时间段(比如2024年1月1日是星期一),以此为基准创建映射表:
const weekDayDateMap = { monday: new Date(2024, 0, 1), // 2024-01-01 周一 tuesday: new Date(2024, 0, 2), // 2024-01-02 周二 wednesday: new Date(2024, 0, 3),// 2024-01-03 周三 thursday: new Date(2024, 0, 4), // 2024-01-04 周四 friday: new Date(2024, 0, 5), // 2024-01-05 周五 saturday: new Date(2024, 0, 6), // 2024-01-06 周六 sunday: new Date(2024, 0, 7) // 2024-01-07 周日 };
2. 编写翻译函数
封装一个函数,接收英文星期字符串和目标locale,通过映射表获取对应日期后调用本地化方法:
function translateWeekday(englishWeekday, targetLocale) { // 统一转小写,兼容首字母大写的输入格式 const normalizedDay = englishWeekday.toLowerCase(); // 无效输入直接返回原字符串 if (!weekDayDateMap[normalizedDay]) return englishWeekday; // 调用本地化方法,weekday参数可选'long'(全称)或'short'(简称) return weekDayDateMap[normalizedDay].toLocaleDateString(targetLocale, { weekday: 'long' }); }
3. 示例用法
// 翻译成简体中文 console.log(translateWeekday('monday', 'zh-CN')); // 输出:星期一 // 翻译成法语 console.log(translateWeekday('sunday', 'fr-FR')); // 输出:dimanche // 翻译成日语(简称) console.log(translateWeekday('friday', 'ja-JP', 'short')); // 输出:金曜日
原理说明
toLocaleDateString()只需要一个有效的Date对象,不需要关联业务场景的真实日期。我们利用固定日期的星期属性,让它作为"载体"触发本地化翻译逻辑,最终得到对应locale的星期名称。
内容的提问来源于stack exchange,提问作者user18890175
相关产品推荐
相关产品推荐

