You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:35:13