React-Native中使用Moment格式化时间为vi越南语本地化格式问题
React Native 中 Moment 越南语本地化适配方案
问题根因
写法有两个核心错误,导致越南语格式化不生效:
- 调用顺序完全错了:
format()是Moment实例的最终输出方法,执行完返回的就是普通字符串,你把.locale('vi')写在它后面,调用的是JS原生字符串的locale()方法,和Moment的语言配置没有关系,根本不会生效。 - 没导入越南语语言包:Moment默认只内置英文(en)语言包,不手动导入vi语言包的话,就算调用顺序写对了,也会自动回退到英文输出。
- 另外你贴的示例代码里
format的模板字符串缺少闭合单引号,属于笔误,实际编写时记得补上。
正确实现步骤
- 导入越南语语言包
如果仅单个页面需要越南语格式化,在对应业务文件顶部导入即可;如果全局都要用到越南语,直接在项目入口文件(App.js/index.js)导入:
import moment from 'moment'; // 导入越南语语言包 import 'moment/locale/vi';
- 调整方法调用顺序
把.locale('vi')移到format()之前调用,同时注意格式化占位符:要输出tháng 9这种带月份前缀的完整格式,需要用MMMM占位符,原来的MMM在越南语规则下是月份缩写,不符合预期。修正后的代码:
moment('2022-09-02T02:00:00+00:00') .local() .locale('vi') // 必须在format前调用,设置当前实例语言为越南语 .format('dddd, DD MMMM');
可选全局配置
如果项目所有日期格式化默认都用越南语,导入语言包后可以直接全局设置默认语言,后续不用每次调用都重复写.locale('vi'):
// 入口文件添加全局配置 moment.locale('vi');
结果验证
以上代码运行后会直接输出你期望的结果:
Thứ 7, 02 tháng 9
内容的提问来源于stack exchange,提问作者Thang
相关产品推荐
相关产品推荐

