HarmonyOS IMKit 多语言
IMKit 的多语言分为两部分:可翻译文案(键值资源)与格式化结果(时间分割、未读角标、已读人数、发送状态)。IDL 只约束组件行为,本页给出跨端一致的键名约定与格式化函数映射。
契约预留
本平台尚未实现;键名与格式化契约与其它平台一致。
键名约定
IDL 不定义 i18n 资源;为保证多端一致,建议统一使用 imkit.<component>.<key> 命名,并以内置 zh-CN / en-US 为基线。
资源键约定
| 键(建议) | 中文基线 | 说明 |
|---|---|---|
conversationList.empty | 暂无会话 | 可由宿主资源覆盖 |
conversationList.loading | 加载中 | 可由宿主资源覆盖 |
chatView.inputPlaceholder | 输入消息 | 可由宿主资源覆盖 |
chatView.noMore | 没有更多消息 | 可由宿主资源覆盖 |
chatView.recalled | 消息已撤回 | 可由宿主资源覆盖 |
messageStatus.sending | 发送中 | 可由宿主资源覆盖 |
messageStatus.sent | 已发送 | 可由宿主资源覆盖 |
messageStatus.delivered | 已送达 | 可由宿主资源覆盖 |
messageStatus.read | 已读 | 可由宿主资源覆盖 |
messageStatus.failed | 发送失败 | 可由宿主资源覆盖 |
common.retry | 重试 | 可由宿主资源覆盖 |
common.cancel | 取消 | 可由宿主资源覆盖 |
common.confirm | 确定 | 可由宿主资源覆盖 |
格式化函数(跨端一致)
| 能力 | Web | Flutter | Android | Native | 规则 |
|---|---|---|---|---|---|
| 时间分割 | formatTime(timestamp, now, locale) | TimeSeparator.formatTime(ts, nowMs:) | IMKitTimeFormatter.format(context, ts, now) | im_kit_format_time(ts, now, out, len) | 当天 HH:mm;昨天;7 天内周X;更早日期 |
| 未读角标 | unreadBadgeText(count) | UnreadBadge.formatCount(count) | UnreadBadgeFormatter.format(unread, mention) | im_kit_unread_badge_text(count, out, len) | 0 隐藏;>99 显示 99+;免打扰灰点 |
| 已读文案 | messageStatusText(...) | MessageStatusIndicator.readText(...) | ReadCountFormatter.format(read, total) | im_kit_message_status_text(json, read, total, out, len) | 单聊 已读/未读;群聊 n/m |
| 发送状态 | messageStatusText(status) | MessageStatusIndicator 状态常量 | SendState 枚举 | im_kit_message_status_text(...) | 发送中 / 已发送 / 已送达 / 已读 / 失败 |
按端接入
| 平台 | locale 入口 | 资源覆盖 |
|---|---|---|
| Android | res/values/strings.xml / values-en/ | XML 资源覆盖;IMKitTimeFormatter 可注入 |
| Web | IMKit.setup({ locale: "en-US" }) | 文案键可通过宿主 i18n 框架注入;格式化函数支持 locale 参数 |
| Electron | 宿主 React i18n(如 i18next) | 组件 props 传入已翻译文案 / 格式化后的时间 |
| Flutter | MaterialApp(locale: ...) + localizationsDelegates | 使用 Flutter 本地化体系;格式化函数提供静态方法 |
| Native | im_kit_set_utc_offset_minutes + 宿主资源 | C ABI 输出格式化后的文案,翻译由宿主完成 |
| iOS | IMPTimeSeparator.formattedText() / NSLocalizedString | Bundle 本地化资源,随系统区域 |
| HarmonyOS | TimeSeparator.formattedText(),见 HarmonyOS 分区 | ArkUI 资源 |
格式化示例
ArkTS(契约预留)
// HarmonyOS 绑定为契约预留,以下为声明样例
const label: string = TimeSeparator.formattedText(timestampMs, nowMs);
const badge: string = UnreadBadge.formatCount(128); // '99+'
const readText: string = MessageStatusIndicator.readText(8, 12);提示:时间格式化函数均支持注入 now / now_ms,便于单元测试与固定时区。