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

Flutter中timeago包locale无法从英文切换为阿拉伯语如何解决

解决Flutter timeago包阿拉伯语相对时间不生效问题

timeago默认仅加载英文本地化资源,阿拉伯语翻译需要手动注册对应语言消息后才能生效,和应用RTL布局适配没有关联,按以下步骤操作即可:

1. 确认依赖版本

优先使用官方最新稳定版timeago,避免老版本阿拉伯语本地化资源不全的问题,pubspec.yaml配置参考:

dependencies:
  timeago: ^3.6.1 # 可替换为当前官方最新稳定版

2. 手动注册阿拉伯语消息

在应用初始化阶段(如main函数执行runApp之前,或首页initState生命周期中)完成注册配置:

// 导入核心包和阿拉伯语消息包
import 'package:timeago/timeago.dart' as timeago;
import 'package:timeago/messages/ar_messages.dart';

void main() {
  // 注册阿拉伯语长格式消息(完整表述如“1 ساعة مضت”)
  timeago.setLocaleMessages('ar', timeago.ArMessages());
  // 可选:注册阿拉伯语短格式消息(缩写表述如“1 س قبل”)
  timeago.setLocaleMessages('ar_short', timeago.ArShortMessages());
  
  // 单语言场景可直接设置全局默认语言为阿拉伯语
  timeago.setDefaultLocale('ar');
  
  runApp(YourApp());
}

3. 调用输出阿拉伯语相对时间

单语言固定阿拉伯语场景

直接调用format方法即可输出阿拉伯语相对时间:

String relativeTime = timeago.format(DateTime.now().subtract(Duration(hours: 1)));
// 输出示例:منذ ساعة واحدة

多语言切换场景

无需固定全局默认语言,调用时手动指定locale参数即可:

String arRelativeTime = timeago.format(yourDateTime, locale: 'ar');
// 短格式调用
String arShortRelativeTime = timeago.format(yourDateTime, locale: 'ar_short');

异常排查

如果配置后仍然显示英文,检查以下两点:

  • 检查传入format方法的DateTime对象时区是否正确,避免时区偏移导致的格式异常
  • 确保注册消息和调用format方法时,用的是同一个timeago导入实例,不要混用局部导入和全局导入

内容的提问来源于stack exchange,提问作者Jack Ezt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:27:04