Flutter中日期数字无法转为马拉地语显示的技术求助
解决Flutter中马拉地语日期数字不转换的问题
问题分析
使用DateFormat('d MMMM, yyyy', "mr_IN")格式化日期时,仅月份转为马拉地语,但日期和年份的阿拉伯数字未替换为马拉地语字符。自定义的字符串替换扩展未生效,大概率是未正确调用扩展方法,或者扩展写法可以优化。
解决方案
方案1:修复并正确调用自定义扩展
先确保调用扩展方法,同时简化扩展的实现逻辑:
extension ExtendedString on String { String get toMarathi { const Map<String, String> digitMap = { '0': '०', '1': '१', '2': '२', '3': '३', '4': '४', '5': '५', '6': '६', '7': '७', '8': '८', '9': '९' }; String result = this; digitMap.forEach((arabic, marathi) { result = result.replaceAll(arabic, marathi); }); return result; } }
调用时需链式调用扩展方法:
DateTime currentDate = DateTime.now(); String todaysDate = DateFormat('d MMMM, yyyy', "mr_IN") .format(currentDate) .toMarathi; // 关键:添加.toMarathi调用扩展
方案2:使用NumberFormat单独处理数字部分
如果扩展方式不够优雅,可以拆分日期的日、月、年,分别处理数字本地化:
import 'package:intl/intl.dart'; DateTime currentDate = DateTime.now(); // 获取马拉地语月份 String marathiMonth = DateFormat('MMMM', "mr_IN").format(currentDate); // 用NumberFormat处理马拉地语数字 NumberFormat marathiNumberFormat = NumberFormat.decimalPattern("mr_IN"); String marathiDay = marathiNumberFormat.format(currentDate.day); String marathiYear = marathiNumberFormat.format(currentDate.year); // 拼接最终日期 String todaysDate = "$marathiDay $marathiMonth, $marathiYear";
验证结果
两种方案都能生成期望输出:
२० डिसेंबर, २०२२
内容的提问来源于stack exchange,提问作者smita
相关产品推荐
相关产品推荐

