@zhin.js/plugin-earthquake 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @zhin.js/plugin-earthquake
2
2
 
3
+ ## 0.1.4
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [eb8feeb]
8
+ - Updated dependencies [24a2b71]
9
+ - Updated dependencies [d0e1fac]
10
+ - @zhin.js/tool@1.1.11
11
+
12
+ ## 0.1.3
13
+
14
+ ### Patch Changes
15
+
16
+ - 53bc6a0: 官方工具插件与游戏支持中英文反馈、帮助和配置标签;提醒增加与中文对应的有限英文时间语法。聊天后台任务记录创建者当时语言,管理员任务记录项目语言,旧任务保持中文;多轮选择与游戏使用开始时语言,保留第三方内容和已生成报告。
17
+ - 66b6404: 让活动反馈、内容审核默认提示和后台任务通知保持发起操作或任务创建时的语言,并将语言沿现有 Host、精确投递目标与主动发送链传给适配器。
18
+
19
+ 显式配置的提示、用户及模型原文保持不变;审核默认提示仅在未配置模板时本地化,异步审核固定入队时语言,不修改审核规则、调度、权限或重试行为。
20
+
21
+ - Updated dependencies [53bc6a0]
22
+ - Updated dependencies [7595136]
23
+ - Updated dependencies [17d1301]
24
+ - @zhin.js/tool@1.1.10
25
+ - @zhin.js/skill@1.1.10
26
+
3
27
  ## 0.1.2
4
28
 
5
29
  ### Patch Changes
@@ -3,23 +3,25 @@ import { defineCommand } from 'zhin.js/command';
3
3
  import { renderRecentEarthquakes } from "../../lib/query-text.js";
4
4
  import { earthquakeServiceToken } from "../../lib/runtime.js";
5
5
  export default defineCommand({
6
- description: '查询最近的地震(CENC 中国地震台网 / USGS)',
6
+ alias: ['earthquake'],
7
+ preferredAliasI18n: { en: 'earthquake' },
8
+ description: '查询最近的地震(CENC 中国地震台网 / USGS)', descriptionI18n: { en: "Recent earthquakes from CENC or USGS" },
7
9
  params: {
8
- count: { type: 'integer', optional: true, min: 1, max: 20, description: '列出条数' },
10
+ count: { type: 'integer', optional: true, min: 1, max: 20, description: '列出条数', descriptionI18n: { en: "Number of results" } },
9
11
  },
10
12
  options: {
11
- min: { type: 'float', alias: 'm', min: 0, max: 10, description: '最小震级' },
12
- region: { type: 'string', alias: 'r', description: '地区关键词,如 四川、日本、中国' },
13
- hours: { type: 'integer', alias: 't', min: 1, max: 168, description: '时间范围(小时),默认 24' },
13
+ min: { type: 'float', alias: 'm', min: 0, max: 10, description: '最小震级', descriptionI18n: { en: "Minimum magnitude" } },
14
+ region: { type: 'string', alias: 'r', description: '地区关键词,如 四川、日本、中国', descriptionI18n: { en: "Region keywords, such as Sichuan, Japan or China" } },
15
+ hours: { type: 'integer', alias: 't', min: 1, max: 168, description: '时间范围(小时),默认 24', descriptionI18n: { en: "Time range in hours (default: 24)" } },
14
16
  },
15
17
  execution: { cooldownMs: 5_000, progressAfterMs: 3_000 },
16
- async execute({ params, options, use }) {
18
+ async execute({ params, options, use, locale }) {
17
19
  const service = use(earthquakeServiceToken);
18
20
  return renderRecentEarthquakes(service, {
19
21
  limit: params.count,
20
22
  minMagnitude: options.min,
21
23
  region: options.region,
22
24
  hours: options.hours,
23
- });
25
+ }, locale);
24
26
  },
25
27
  });
@@ -1,28 +1,31 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { messages as t } from "../../../lib/i18n.js";
2
3
  import { canManageConversation, defineCommand } from 'zhin.js/command';
3
4
  import { conversationError, extractConversation } from "../../../lib/conversation.js";
4
- import { SUBSCRIPTION_PERMISSION_DENIED_MESSAGE } from "../../../lib/permission.js";
5
5
  import { earthquakeServiceToken } from "../../../lib/runtime.js";
6
6
  import { parseSubscribeArgs } from "../../../lib/subscribe-args.js";
7
7
  import { SubscriptionLimitError } from "../../../lib/subscriptions.js";
8
8
  export default defineCommand({
9
- description: '在当前会话订阅地震速报:地震 订阅 [最小震级] [地区...](群聊限群主、管理员或机器人主人)',
9
+ alias: ['earthquake subscribe'],
10
+ preferredAliasI18n: { en: 'earthquake subscribe' },
11
+ description: '在当前会话订阅地震速报:地震 订阅 [最小震级] [地区...](群聊限群主、管理员或机器人主人)', descriptionI18n: { en: "Subscribe this conversation to earthquake alerts (group owner, administrator or bot master required in groups)" },
10
12
  params: {
11
- filters: { type: 'word', rest: true, description: '可选:最小震级与地区关键词,如 5 四川 云南' },
13
+ filters: { type: 'word', rest: true, description: '可选:最小震级与地区关键词,如 5 四川 云南', descriptionI18n: { en: "Optional minimum magnitude and region keywords, such as 5 Sichuan Yunnan" } },
12
14
  },
13
- async execute({ params, input, use, adapter, scene, sender }) {
15
+ async execute({ params, input, use, adapter, scene, sender, locale, formatCommand }) {
14
16
  const service = use(earthquakeServiceToken);
15
17
  const target = extractConversation(input);
16
18
  if (!target)
17
- return conversationError(input);
19
+ return conversationError(input, locale);
18
20
  if (!canManageConversation({ adapter, scene, sender }))
19
- return SUBSCRIPTION_PERMISSION_DENIED_MESSAGE;
20
- const parsed = parseSubscribeArgs(params.filters ?? []);
21
+ return t(locale, 'denied');
22
+ const parsed = parseSubscribeArgs(params.filters ?? [], locale);
21
23
  if ('error' in parsed)
22
24
  return parsed.error;
23
25
  const minMagnitude = parsed.minMagnitude ?? service.config.defaultMinMagnitude;
24
26
  try {
25
27
  const { created } = await service.store.upsert({
28
+ locale,
26
29
  adapter: target.adapter,
27
30
  endpointKey: target.endpointKey,
28
31
  conversationKind: target.conversationKind,
@@ -32,19 +35,21 @@ export default defineCommand({
32
35
  createdBy: target.senderId,
33
36
  createdAt: new Date().toISOString(),
34
37
  });
35
- const regionText = parsed.regions.length > 0 ? parsed.regions.join('、') : '全球';
38
+ const regionText = parsed.regions.length > 0 ? parsed.regions.join(locale === 'en' ? ', ' : '、') : t(locale, 'global');
36
39
  const lines = [
37
- `${created ? '已订阅' : '已更新订阅'}:M${minMagnitude.toFixed(1)} 以上,地区:${regionText}`,
40
+ t(locale, created ? 'subscribed' : 'updated', { magnitude: minMagnitude.toFixed(1), regions: regionText }),
38
41
  ];
39
42
  if (!service.canPush) {
40
- lines.push('⚠️ 当前运行环境没有出站发送能力,订阅已保存但暂时不会推送');
43
+ lines.push(t(locale, 'noPush'));
41
44
  }
42
- lines.push('取消订阅请发送:地震 退订');
45
+ const command = formatCommand('地震 退订');
46
+ if (command !== undefined)
47
+ lines.push(t(locale, 'unsubscribeHint', { command }));
43
48
  return lines.join('\n');
44
49
  }
45
50
  catch (error) {
46
51
  if (error instanceof SubscriptionLimitError)
47
- return error.message;
52
+ return t(locale, 'limit', { limit: error.limit });
48
53
  throw error;
49
54
  }
50
55
  },
@@ -1,37 +1,43 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { messages as t } from "../../../lib/i18n.js";
2
3
  import { defineCommand } from 'zhin.js/command';
3
4
  import { conversationError, extractConversation } from "../../../lib/conversation.js";
4
5
  import { formatEventTime, sourceLabel } from "../../../lib/format.js";
5
6
  import { earthquakeServiceToken } from "../../../lib/runtime.js";
6
7
  import { subscriptionKey } from "../../../lib/subscriptions.js";
7
8
  export default defineCommand({
8
- description: '查看当前会话的地震订阅与数据源状态',
9
- async execute({ input, use }) {
9
+ alias: ['earthquake status'],
10
+ preferredAliasI18n: { en: 'earthquake status' },
11
+ description: '查看当前会话的地震订阅与数据源状态', descriptionI18n: { en: "View this conversation's earthquake subscription and data source status" },
12
+ async execute({ input, use, locale, formatCommand }) {
10
13
  const service = use(earthquakeServiceToken);
11
14
  const target = extractConversation(input);
12
15
  if (!target)
13
- return conversationError(input);
16
+ return conversationError(input, locale);
14
17
  const subscription = await service.store.get(subscriptionKey(target));
15
18
  const timezone = service.config.timezone;
16
19
  const lines = [];
17
20
  if (subscription) {
18
- const regionText = subscription.regions.length > 0 ? subscription.regions.join('、') : '全球';
19
- lines.push(`本会话订阅:M${subscription.minMagnitude.toFixed(1)} 以上,地区:${regionText}`);
21
+ const regionText = subscription.regions.length > 0 ? subscription.regions.join(locale === 'en' ? ', ' : '、') : t(locale, 'global');
22
+ lines.push(t(locale, 'subscription', { magnitude: subscription.minMagnitude.toFixed(1), regions: regionText }));
20
23
  }
21
24
  else {
22
- lines.push('本会话未订阅。订阅示例:地震 订阅 5 中国');
25
+ lines.push(t(locale, 'emptyStatus'));
26
+ const command = formatCommand('地震 订阅');
27
+ if (command !== undefined)
28
+ lines.push(t(locale, 'example', { command: `${command} 5 ${locale === 'en' ? 'China' : '中国'}` }));
23
29
  }
24
- lines.push('数据源:');
30
+ lines.push(t(locale, 'dataSources'));
25
31
  for (const health of service.health()) {
26
- let status = '正常';
32
+ let status = t(locale, 'healthy');
27
33
  if (health.coolingDownUntil > 0) {
28
- status = `冷却至 ${formatEventTime(health.coolingDownUntil, timezone)}`;
34
+ status = t(locale, 'coolUntil', { time: formatEventTime(health.coolingDownUntil, timezone) });
29
35
  }
30
36
  else if (health.consecutiveFailures > 0) {
31
- status = `连续失败 ${health.consecutiveFailures} 次`;
37
+ status = t(locale, 'failures', { count: health.consecutiveFailures });
32
38
  }
33
39
  else if (health.lastSuccessAt === undefined) {
34
- status = '尚未请求';
40
+ status = t(locale, 'notRequested');
35
41
  }
36
42
  const reason = health.lastError ? `(${health.lastError})` : '';
37
43
  lines.push(`- ${sourceLabel(health.id)}:${status}${reason}`);
@@ -1,19 +1,21 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { messages as t } from "../../../lib/i18n.js";
2
3
  import { canManageConversation, defineCommand } from 'zhin.js/command';
3
4
  import { conversationError, extractConversation } from "../../../lib/conversation.js";
4
- import { SUBSCRIPTION_PERMISSION_DENIED_MESSAGE } from "../../../lib/permission.js";
5
5
  import { earthquakeServiceToken } from "../../../lib/runtime.js";
6
6
  import { subscriptionKey } from "../../../lib/subscriptions.js";
7
7
  export default defineCommand({
8
- description: '取消当前会话的地震速报订阅(群聊限群主、管理员或机器人主人)',
9
- async execute({ input, use, adapter, scene, sender }) {
8
+ alias: ['earthquake unsubscribe'],
9
+ preferredAliasI18n: { en: 'earthquake unsubscribe' },
10
+ description: '取消当前会话的地震速报订阅(群聊限群主、管理员或机器人主人)', descriptionI18n: { en: "Unsubscribe this conversation from earthquake alerts (group owner, administrator or bot master required in groups)" },
11
+ async execute({ input, use, adapter, scene, sender, locale }) {
10
12
  const service = use(earthquakeServiceToken);
11
13
  const target = extractConversation(input);
12
14
  if (!target)
13
- return conversationError(input);
15
+ return conversationError(input, locale);
14
16
  if (!canManageConversation({ adapter, scene, sender }))
15
- return SUBSCRIPTION_PERMISSION_DENIED_MESSAGE;
17
+ return t(locale, 'denied');
16
18
  const removed = await service.store.remove(subscriptionKey(target));
17
- return removed ? '已取消本会话的地震速报订阅' : '本会话没有地震速报订阅';
19
+ return t(locale, removed ? 'removed' : 'notSubscribed');
18
20
  },
19
21
  });
@@ -1,3 +1,4 @@
1
+ import type { Locale } from 'zhin.js/i18n';
1
2
  import type { ConversationKind } from './subscriptions.js';
2
3
  export interface ConversationTarget {
3
4
  readonly adapter: string;
@@ -8,7 +9,7 @@ export interface ConversationTarget {
8
9
  }
9
10
  export declare const CONVERSATION_REQUIRED_MESSAGE = "\u8BF7\u5728\u673A\u5668\u4EBA\u79C1\u804A\u3001\u7FA4\u804A\u6216\u9891\u9053\u4E2D\u4F7F\u7528\u6B64\u547D\u4EE4";
10
11
  export declare const THREAD_UNSUPPORTED_MESSAGE = "\u6682\u4E0D\u652F\u6301\u5728\u8BDD\u9898\uFF0F\u5B50\u9891\u9053\u5185\u8BA2\u9605\uFF0C\u8BF7\u5728\u4E3B\u4F1A\u8BDD\u4E2D\u4F7F\u7528";
11
- export declare function conversationError(input: unknown): string;
12
+ export declare function conversationError(input: unknown, locale?: Locale): string;
12
13
  /** Returns null when the input has no complete, un-threaded conversation address. */
13
14
  export declare function extractConversation(input: unknown): ConversationTarget | null;
14
15
  //# sourceMappingURL=conversation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,6BAA6B,uHAAwB,CAAC;AACnE,eAAO,MAAM,0BAA0B,+IAA4B,CAAC;AAYpE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGxD;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAuB7E"}
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,6BAA6B,uHAAwB,CAAC;AACnE,eAAO,MAAM,0BAA0B,+IAA4B,CAAC;AAYpE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAE,MAAgB,GAAG,MAAM,CAGlF;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAuB7E"}
@@ -1,3 +1,4 @@
1
+ import { messages as t } from './i18n.js';
1
2
  /**
2
3
  * Extracts a push destination from the public Message fields of a command input.
3
4
  * Platform-agnostic: only adapter name, endpoint, conversation kind/id and sender id.
@@ -14,10 +15,10 @@ function isThreaded(input) {
14
15
  return false;
15
16
  return conversation.parent !== undefined || conversation.threadId !== undefined;
16
17
  }
17
- export function conversationError(input) {
18
+ export function conversationError(input, locale = 'zh-CN') {
18
19
  if (isRecord(input) && isThreaded(input))
19
- return THREAD_UNSUPPORTED_MESSAGE;
20
- return CONVERSATION_REQUIRED_MESSAGE;
20
+ return t(locale, 'noThread');
21
+ return t(locale, 'conversation');
21
22
  }
22
23
  /** Returns null when the input has no complete, un-threaded conversation address. */
23
24
  export function extractConversation(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAWtD,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAEpE,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,UAAU,CAAC,KAA8B;IAChD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,0BAA0B,CAAC;IAC5E,OAAO,6BAA6B,CAAC;AACvC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC9E,sFAAsF;IACtF,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC3F,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,OAAO;QACL,OAAO;QACP,WAAW;QACX,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,YAAY,CAAC,EAAE;QAC/B,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;AAC1C;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAWtD,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAEpE,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,UAAU,CAAC,KAA8B;IAChD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,SAAiB,OAAO;IACxE,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvE,OAAO,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACnC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC9E,sFAAsF;IACtF,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC3F,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,OAAO;QACL,OAAO;QACP,WAAW;QACX,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,YAAY,CAAC,EAAE;QAC/B,QAAQ;KACT,CAAC;AACJ,CAAC"}
package/lib/format.d.ts CHANGED
@@ -1,11 +1,13 @@
1
+ import type { Locale } from 'zhin.js/i18n';
1
2
  import type { EarthquakeEvent, SourceOutcome } from './types.js';
2
3
  export declare function sourceLabel(source: string): string;
3
4
  export declare function formatEventTime(time: number, timezone: string): string;
4
5
  /** One event in 2–3 lines: headline, time/depth, sources (+ link when available). */
5
- export declare function formatEvent(event: EarthquakeEvent, timezone: string): string;
6
- export declare function formatSourceWarnings(outcomes: readonly SourceOutcome[]): string | undefined;
6
+ export declare function formatEvent(event: EarthquakeEvent, timezone: string, locale?: Locale): string;
7
+ export declare function formatSourceWarnings(outcomes: readonly SourceOutcome[], locale?: Locale): string | undefined;
7
8
  export declare function formatEventList(options: {
8
9
  readonly title: string;
10
+ readonly locale?: Locale;
9
11
  readonly events: readonly EarthquakeEvent[];
10
12
  readonly timezone: string;
11
13
  readonly hiddenCount?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOjE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAatE;AAMD,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe5E;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,GAAG,SAAS,CAQ3F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;CACnD,GAAG,MAAM,CAUT"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOjE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAatE;AAMD,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAgB,GAAG,MAAM,CAetG;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,MAAM,GAAE,MAAgB,GAAG,MAAM,GAAG,SAAS,CAQrH;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;CACnD,GAAG,MAAM,CAUT"}
package/lib/format.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { messages as t } from './i18n.js';
1
2
  /** Plain-text rendering, safe for every adapter (no markup, no platform segments). */
2
3
  import { eventMagnitude } from './filters.js';
3
4
  const SOURCE_LABELS = Object.freeze({
@@ -25,37 +26,37 @@ function formatMagnitude(value) {
25
26
  return value.toFixed(1);
26
27
  }
27
28
  /** One event in 2–3 lines: headline, time/depth, sources (+ link when available). */
28
- export function formatEvent(event, timezone) {
29
+ export function formatEvent(event, timezone, locale = 'zh-CN') {
29
30
  const primary = event.primary;
30
31
  const headline = `M${formatMagnitude(eventMagnitude(event))} ${primary.location}`;
31
32
  const details = [`${formatEventTime(primary.time, timezone)} (${timezone})`];
32
33
  if (primary.depthKm !== undefined) {
33
- details.push(`深度 ${Math.round(primary.depthKm)} km`);
34
+ details.push(t(locale, 'depth', { depth: Math.round(primary.depthKm) }));
34
35
  }
35
36
  details.push(`${primary.latitude.toFixed(2)}, ${primary.longitude.toFixed(2)}`);
36
37
  const sources = event.reports.map((report) => `${sourceLabel(report.source)} M${formatMagnitude(report.magnitude)}`);
37
- const lines = [headline, ` ${details.join(' · ')}`, ` 来源:${sources.join(' / ')}`];
38
+ const lines = [headline, ` ${details.join(' · ')}`, ` ${t(locale, 'sources', { sources: sources.join(' / ') })}`];
38
39
  const link = event.reports.find((report) => report.url)?.url;
39
40
  if (link) {
40
41
  lines.push(` ${link}`);
41
42
  }
42
43
  return lines.join('\n');
43
44
  }
44
- export function formatSourceWarnings(outcomes) {
45
+ export function formatSourceWarnings(outcomes, locale = 'zh-CN') {
45
46
  const failed = outcomes.filter((outcome) => !outcome.ok);
46
47
  if (failed.length === 0)
47
48
  return undefined;
48
49
  const parts = failed.map((outcome) => {
49
- const reason = outcome.skipped ? '冷却中' : outcome.error ?? '失败';
50
+ const reason = outcome.skipped ? t(locale, 'cooling') : outcome.error ?? t(locale, 'failed');
50
51
  return `${sourceLabel(outcome.source)}(${reason})`;
51
52
  });
52
- return `⚠️ 部分数据源不可用:${parts.join(';')}`;
53
+ return t(locale, 'sourceWarning', { sources: parts.join(locale === 'en' ? '; ' : ';') });
53
54
  }
54
55
  export function formatEventList(options) {
55
- const blocks = options.events.map((event, index) => `${index + 1}. ${formatEvent(event, options.timezone)}`);
56
+ const blocks = options.events.map((event, index) => `${index + 1}. ${formatEvent(event, options.timezone, options.locale)}`);
56
57
  const lines = [options.title, ...blocks];
57
58
  if (options.hiddenCount && options.hiddenCount > 0) {
58
- lines.push(`……另有 ${options.hiddenCount} 条未展示`);
59
+ lines.push(t(options.locale ?? 'zh-CN', 'hidden', { count: options.hiddenCount }));
59
60
  }
60
61
  for (const extra of options.footer ?? []) {
61
62
  if (extra)
package/lib/format.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,aAAa,GAAqC,MAAM,CAAC,MAAM,CAAC;IACpE,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAC5D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACjD,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjH,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AACnG,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,WAAW,CAAC,KAAsB,EAAE,QAAgB;IAClE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAClF,MAAM,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC;IAC7E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrH,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC7D,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAkC;IACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;QAC/D,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,OAAO,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAM/B;IACC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7G,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,WAAW,OAAO,CAAC,CAAC;IACjD,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;AAC1C,sFAAsF;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,aAAa,GAAqC,MAAM,CAAC,MAAM,CAAC;IACpE,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAC5D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACjD,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjH,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AACnG,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,WAAW,CAAC,KAAsB,EAAE,QAAgB,EAAE,SAAiB,OAAO;IAC5F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAClF,MAAM,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC;IAC7E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrH,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpH,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC7D,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAkC,EAAE,SAAiB,OAAO;IAC/F,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7F,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAO/B;IACC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7H,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
package/lib/i18n.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const messages: (locale: import("zhin.js").Locale | undefined, key: "sources" | "emptyStatus" | "depth" | "cooling" | "failed" | "sourceWarning" | "hidden" | "header" | "stale" | "empty" | "list" | "unavailable" | "order" | "longRegion" | "maxRegions" | "conversation" | "noThread" | "denied" | "global" | "subscribed" | "updated" | "noPush" | "unsubscribeHint" | "limit" | "removed" | "notSubscribed" | "subscription" | "example" | "dataSources" | "healthy" | "notRequested" | "coolUntil" | "failures" | "alert" | "alerts" | "rateLimited", values?: import("zhin.js").MessageValues) => string;
2
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,QAAQ,kkBAqCnB,CAAC"}
package/lib/i18n.js ADDED
@@ -0,0 +1,40 @@
1
+ import { createMessages } from 'zhin.js/i18n';
2
+ export const messages = createMessages({
3
+ emptyStatus: { 'zh-CN': '本会话未订阅。', en: 'This conversation is not subscribed.' },
4
+ depth: { 'zh-CN': "深度 {depth} km", en: "Depth {depth} km" },
5
+ sources: { 'zh-CN': "来源:{sources}", en: "Sources: {sources}" },
6
+ cooling: { 'zh-CN': "冷却中", en: "Cooling down" },
7
+ failed: { 'zh-CN': "失败", en: "Failed" },
8
+ sourceWarning: { 'zh-CN': "⚠️ 部分数据源不可用:{sources}", en: "⚠️ Some sources are unavailable: {sources}" },
9
+ hidden: { 'zh-CN': "……另有 {count} 条未展示", en: "… {count} more not shown" },
10
+ header: { 'zh-CN': "最近 {hours} 小时{scope} M{magnitude} 以上地震", en: "Earthquakes M{magnitude}+ in the last {hours} hours {scope}" },
11
+ stale: { 'zh-CN': "⚠️ 数据源暂不可用,以下为上次成功获取的数据", en: "⚠️ Sources are unavailable. Showing the last successfully retrieved data." },
12
+ empty: { 'zh-CN': "{header}:暂无记录", en: "{header}: no records" },
13
+ list: { 'zh-CN': "{header}(共 {count} 条):", en: "{header} ({count} total):" },
14
+ unavailable: { 'zh-CN': "暂时无法获取地震数据,请稍后再试。", en: "Earthquake data is unavailable. Try again later." },
15
+ order: { 'zh-CN': "最小震级请写在地区之前", en: "Place the minimum magnitude before the regions." },
16
+ longRegion: { 'zh-CN': "地区关键词过长:{region}…", en: "Region keyword is too long: {region}…" },
17
+ maxRegions: { 'zh-CN': "最多设置 {count} 个地区关键词", en: "Use at most {count} region keywords." },
18
+ conversation: { 'zh-CN': "请在机器人私聊、群聊或频道中使用此命令", en: "Use this command in a private chat, group or channel with the bot." },
19
+ noThread: { 'zh-CN': "暂不支持在话题/子频道内订阅,请在主会话中使用", en: "Subscriptions in threads or subchannels are not supported. Use the main conversation." },
20
+ denied: { 'zh-CN': "只有群主、群管理员或机器人主人可以在群聊中修改地震订阅;私聊中可以直接订阅本会话。", en: "Only a group owner, administrator or bot master may change group earthquake subscriptions. Private chats can subscribe their own conversation." },
21
+ global: { 'zh-CN': "全球", en: "Worldwide" },
22
+ subscribed: { 'zh-CN': "已订阅:M{magnitude} 以上,地区:{regions}", en: "Subscribed: M{magnitude}+, regions: {regions}" },
23
+ updated: { 'zh-CN': "已更新订阅:M{magnitude} 以上,地区:{regions}", en: "Subscription updated: M{magnitude}+, regions: {regions}" },
24
+ noPush: { 'zh-CN': "⚠️ 当前运行环境没有出站发送能力,订阅已保存但暂时不会推送", en: "⚠️ Outbound delivery is unavailable. The subscription is saved, but cannot send alerts yet." },
25
+ unsubscribeHint: { 'zh-CN': "取消订阅请发送:{command}", en: "To unsubscribe, send: {command}" },
26
+ limit: { 'zh-CN': "订阅总数已达上限({limit}),请联系管理员调整 maxSubscriptions", en: "Subscription limit reached ({limit}). Ask an administrator to adjust maxSubscriptions." },
27
+ removed: { 'zh-CN': "已取消本会话的地震速报订阅", en: "Earthquake alerts unsubscribed for this conversation." },
28
+ notSubscribed: { 'zh-CN': "本会话没有地震速报订阅", en: "This conversation has no earthquake subscription." },
29
+ subscription: { 'zh-CN': "本会话订阅:M{magnitude} 以上,地区:{regions}", en: "Conversation subscription: M{magnitude}+, regions: {regions}" },
30
+ example: { 'zh-CN': "订阅示例:{command}", en: "Subscription example: {command}" },
31
+ dataSources: { 'zh-CN': "数据源:", en: "Data sources:" },
32
+ healthy: { 'zh-CN': "正常", en: "Healthy" },
33
+ notRequested: { 'zh-CN': "尚未请求", en: "Not requested yet" },
34
+ coolUntil: { 'zh-CN': "冷却至 {time}", en: "Cooling down until {time}" },
35
+ failures: { 'zh-CN': "连续失败 {count} 次", en: "{count} consecutive failures" },
36
+ alert: { 'zh-CN': "🌏 地震速报", en: "🌏 Earthquake alert" },
37
+ alerts: { 'zh-CN': "🌏 地震速报({count} 条)", en: "🌏 Earthquake alerts ({count})" },
38
+ rateLimited: { 'zh-CN': "(推送限流期间另有 {count} 条地震未推送)", en: "({count} other earthquakes were not sent due to the delivery rate limit.)" },
39
+ });
40
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { Locale } from 'zhin.js/i18n';
1
2
  import type { EarthquakeService } from './service.js';
2
3
  export interface QueryTextOptions {
3
4
  readonly limit?: number;
@@ -7,5 +8,5 @@ export interface QueryTextOptions {
7
8
  }
8
9
  export declare const DEFAULT_QUERY_HOURS = 24;
9
10
  export declare const MAX_QUERY_HOURS = 168;
10
- export declare function renderRecentEarthquakes(service: EarthquakeService, options: QueryTextOptions): Promise<string>;
11
+ export declare function renderRecentEarthquakes(service: EarthquakeService, options: QueryTextOptions, locale?: Locale): Promise<string>;
11
12
  //# sourceMappingURL=query-text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-text.d.ts","sourceRoot":"","sources":["../src/query-text.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BpH"}
1
+ {"version":3,"file":"query-text.d.ts","sourceRoot":"","sources":["../src/query-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B9I"}
package/lib/query-text.js CHANGED
@@ -1,9 +1,10 @@
1
+ import { messages as t } from './i18n.js';
1
2
  /** Shared query rendering for the `地震` command and the Agent tool. */
2
3
  import { formatEventList, formatSourceWarnings } from './format.js';
3
4
  import { EarthquakeUnavailableError } from './service.js';
4
5
  export const DEFAULT_QUERY_HOURS = 24;
5
6
  export const MAX_QUERY_HOURS = 168;
6
- export async function renderRecentEarthquakes(service, options) {
7
+ export async function renderRecentEarthquakes(service, options, locale = 'zh-CN') {
7
8
  const config = service.config;
8
9
  const limit = Math.min(20, Math.max(1, Math.round(options.limit ?? config.queryLimit)));
9
10
  const minMagnitude = options.minMagnitude ?? config.queryMinMagnitude;
@@ -13,14 +14,15 @@ export async function renderRecentEarthquakes(service, options) {
13
14
  try {
14
15
  const result = await service.queryRecent({ limit, minMagnitude, regions, hours });
15
16
  const scope = region ? `「${region}」` : '';
16
- const header = `最近 ${hours} 小时${scope} M${minMagnitude.toFixed(1)} 以上地震`;
17
- const warning = formatSourceWarnings(result.outcomes);
18
- const staleNote = result.stale ? '⚠️ 数据源暂不可用,以下为上次成功获取的数据' : undefined;
17
+ const header = t(locale, 'header', { hours, scope, magnitude: minMagnitude.toFixed(1) });
18
+ const warning = formatSourceWarnings(result.outcomes, locale);
19
+ const staleNote = result.stale ? t(locale, 'stale') : undefined;
19
20
  if (result.events.length === 0) {
20
- return [`${header}:暂无记录`, staleNote, warning].filter(Boolean).join('\n');
21
+ return [t(locale, 'empty', { header }), staleNote, warning].filter(Boolean).join('\n');
21
22
  }
22
23
  return formatEventList({
23
- title: `${header}(共 ${result.total} 条):`,
24
+ locale,
25
+ title: t(locale, 'list', { header, count: result.total }),
24
26
  events: result.events,
25
27
  timezone: config.timezone,
26
28
  hiddenCount: result.total - result.events.length,
@@ -29,7 +31,7 @@ export async function renderRecentEarthquakes(service, options) {
29
31
  }
30
32
  catch (error) {
31
33
  if (error instanceof EarthquakeUnavailableError) {
32
- return `暂时无法获取地震数据,请稍后再试。\n${error.message}`;
34
+ return [t(locale, 'unavailable'), formatSourceWarnings(error.outcomes, locale)].filter(Boolean).join('\n');
33
35
  }
34
36
  throw error;
35
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query-text.js","sourceRoot":"","sources":["../src/query-text.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAS1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAA0B,EAAE,OAAyB;IACjG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,iBAAiB,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACvG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,KAAK,MAAM,KAAK,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACzE,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,MAAM,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,eAAe,CAAC;YACrB,KAAK,EAAE,GAAG,MAAM,MAAM,MAAM,CAAC,KAAK,MAAM;YACxC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM;YAChD,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,0BAA0B,EAAE,CAAC;YAChD,OAAO,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"query-text.js","sourceRoot":"","sources":["../src/query-text.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/lib/service.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { resolveLocale } from 'zhin.js/i18n';
2
+ import { messages as t } from './i18n.js';
1
3
  import { mergeReports, SeenEventLog } from './dedupe.js';
2
4
  import { matchesFilter } from './filters.js';
3
5
  import { formatEventList, formatSourceWarnings } from './format.js';
@@ -197,7 +199,7 @@ export class EarthquakeService {
197
199
  this.#rateLimitedCounts.set(key, (this.#rateLimitedCounts.get(key) ?? 0) + matching.length);
198
200
  continue;
199
201
  }
200
- const content = this.#formatPush(matching, this.#rateLimitedCounts.get(key) ?? 0);
202
+ const content = this.#formatPush(matching, this.#rateLimitedCounts.get(key) ?? 0, resolveLocale(subscription.locale));
201
203
  this.#rateLimitedCounts.delete(key);
202
204
  try {
203
205
  await this.#push(subscription, content);
@@ -210,15 +212,16 @@ export class EarthquakeService {
210
212
  }
211
213
  return { status: 'ok', outcomes, newEvents: fresh.length, pushed, rateLimited, failedPushes };
212
214
  }
213
- #formatPush(events, previouslyRateLimited) {
215
+ #formatPush(events, previouslyRateLimited, locale) {
214
216
  const limit = this.config.maxEventsPerMessage;
215
217
  const shown = events.slice(0, limit);
216
- const title = events.length === 1 ? '🌏 地震速报' : `🌏 地震速报(${events.length} 条)`;
218
+ const title = events.length === 1 ? t(locale, 'alert') : t(locale, 'alerts', { count: events.length });
217
219
  const footer = previouslyRateLimited > 0
218
- ? `(推送限流期间另有 ${previouslyRateLimited} 条地震未推送,可发送「地震」查看)`
220
+ ? t(locale, 'rateLimited', { count: previouslyRateLimited })
219
221
  : undefined;
220
222
  return formatEventList({
221
223
  title,
224
+ locale,
222
225
  events: shown,
223
226
  timezone: this.config.timezone,
224
227
  hiddenCount: events.length - shown.length,
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
+ import type { Locale } from 'zhin.js/i18n';
1
2
  export interface SubscribeArgs {
2
3
  readonly minMagnitude?: number;
3
4
  readonly regions: readonly string[];
4
5
  }
5
6
  export declare function parseMagnitudeToken(token: string): number | undefined;
6
- export declare function parseSubscribeArgs(tokens: readonly string[]): SubscribeArgs | {
7
+ export declare function parseSubscribeArgs(tokens: readonly string[], locale?: Locale): SubscribeArgs | {
7
8
  readonly error: string;
8
9
  };
9
10
  //# sourceMappingURL=subscribe-args.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe-args.d.ts","sourceRoot":"","sources":["../src/subscribe-args.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAID,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMrE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAsBxG"}
1
+ {"version":3,"file":"subscribe-args.d.ts","sourceRoot":"","sources":["../src/subscribe-args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQ3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAID,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMrE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,GAAE,MAAgB,GAAG,aAAa,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAsBlI"}
@@ -1,3 +1,4 @@
1
+ import { messages as t } from './i18n.js';
1
2
  /**
2
3
  * Parses `地震 订阅 [最小震级] [地区...]` arguments.
3
4
  * The first token may be a magnitude such as `5`, `5.5`, `M5` or `5级`; the rest are regions.
@@ -13,7 +14,7 @@ export function parseMagnitudeToken(token) {
13
14
  return undefined;
14
15
  return value;
15
16
  }
16
- export function parseSubscribeArgs(tokens) {
17
+ export function parseSubscribeArgs(tokens, locale = 'zh-CN') {
17
18
  const cleaned = tokens.map((token) => token.trim()).filter((token) => token.length > 0);
18
19
  let minMagnitude;
19
20
  const regions = [];
@@ -24,16 +25,16 @@ export function parseSubscribeArgs(tokens) {
24
25
  continue;
25
26
  }
26
27
  if (magnitude !== undefined) {
27
- return { error: '最小震级请写在地区之前,例如:地震 订阅 5 四川 云南' };
28
+ return { error: t(locale, 'order') };
28
29
  }
29
30
  if (token.length > 20) {
30
- return { error: `地区关键词过长:${token.slice(0, 20)}…` };
31
+ return { error: t(locale, 'longRegion', { region: token.slice(0, 20) }) };
31
32
  }
32
33
  if (!regions.includes(token))
33
34
  regions.push(token);
34
35
  }
35
36
  if (regions.length > MAX_REGIONS_PER_SUBSCRIPTION) {
36
- return { error: `最多设置 ${MAX_REGIONS_PER_SUBSCRIPTION} 个地区关键词` };
37
+ return { error: t(locale, 'maxRegions', { count: MAX_REGIONS_PER_SUBSCRIPTION }) };
37
38
  }
38
39
  return { minMagnitude, regions };
39
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe-args.js","sourceRoot":"","sources":["../src/subscribe-args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAO3D,MAAM,eAAe,GAAG,oCAAoC,CAAC;AAE7D,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,SAAS,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAyB;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxF,IAAI,YAAgC,CAAC;IACrC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC3C,YAAY,GAAG,SAAS,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;QACnD,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtB,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,4BAA4B,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,QAAQ,4BAA4B,SAAS,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"subscribe-args.js","sourceRoot":"","sources":["../src/subscribe-args.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,MAAM,WAAW,CAAC;AAC1C;;;GAGG;AACH,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAO3D,MAAM,eAAe,GAAG,oCAAoC,CAAC;AAE7D,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,SAAS,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAyB,EAAE,SAAiB,OAAO;IACpF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxF,IAAI,YAAgC,CAAC;IACrC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC3C,YAAY,GAAG,SAAS,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,4BAA4B,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC"}
@@ -1,5 +1,7 @@
1
+ import { type Locale } from 'zhin.js/i18n';
1
2
  export type ConversationKind = 'private' | 'group' | 'channel';
2
3
  export interface EarthquakeSubscription {
4
+ readonly locale?: Locale;
3
5
  readonly adapter: string;
4
6
  readonly endpointKey: string;
5
7
  readonly conversationKind: ConversationKind;
@@ -31,6 +33,7 @@ export declare class SubscriptionStore {
31
33
  remove(key: string): Promise<boolean>;
32
34
  }
33
35
  export declare class SubscriptionLimitError extends Error {
36
+ readonly limit: number;
34
37
  constructor(limit: number);
35
38
  }
36
39
  //# sourceMappingURL=subscriptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,GAAG,aAAa,GAAG,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,MAAM,CAE/I;AA6BD,wBAAgB,iBAAiB,IAAI,aAAa,CAUjD;AAED,qBAAa,iBAAiB;;gBAKhB,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE;IAK1E,IAAI,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAWzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAKnE,4DAA4D;IACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAkBpF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAoB5C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,KAAK,EAAE,MAAM;CAI1B"}
1
+ {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAW1D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,GAAG,aAAa,GAAG,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,MAAM,CAE/I;AA8BD,wBAAgB,iBAAiB,IAAI,aAAa,CAUjD;AAED,qBAAa,iBAAiB;;gBAKhB,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE;IAK1E,IAAI,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAWzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAKnE,4DAA4D;IACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAkBpF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAoB5C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM;CAK1B"}
@@ -1,3 +1,4 @@
1
+ import { resolveLocale } from 'zhin.js/i18n';
1
2
  /**
2
3
  * Conversation subscriptions, one per conversation.
3
4
  *
@@ -30,6 +31,7 @@ function parseStoredSubscription(value) {
30
31
  : [];
31
32
  return {
32
33
  adapter,
34
+ locale: resolveLocale(value.locale),
33
35
  endpointKey,
34
36
  conversationKind: value.conversationKind,
35
37
  conversationId,
@@ -87,7 +89,7 @@ export class SubscriptionStore {
87
89
  all.push(subscription);
88
90
  }
89
91
  else {
90
- all[index] = subscription;
92
+ all[index] = { ...subscription, locale: resolveLocale(all[index]?.locale) };
91
93
  }
92
94
  await this.#write(all);
93
95
  return { created: index === -1 };
@@ -114,9 +116,11 @@ export class SubscriptionStore {
114
116
  }
115
117
  }
116
118
  export class SubscriptionLimitError extends Error {
119
+ limit;
117
120
  constructor(limit) {
118
121
  super(`订阅总数已达上限(${limit}),请联系管理员调整 maxSubscriptions`);
119
122
  this.name = 'SubscriptionLimitError';
123
+ this.limit = limit;
120
124
  }
121
125
  }
122
126
  //# sourceMappingURL=subscriptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/plugin-earthquake",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Earthquake query and group alert plugin for Zhin.js — CENC + USGS, magnitude/region subscriptions (Plugin Runtime)",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -41,21 +41,21 @@
41
41
  },
42
42
  "license": "MIT",
43
43
  "dependencies": {
44
- "@zhin.js/skill": "1.1.9",
45
- "@zhin.js/tool": "1.1.9"
44
+ "@zhin.js/skill": "1.1.10",
45
+ "@zhin.js/tool": "1.1.11"
46
46
  },
47
47
  "devDependencies": {
48
48
  "typescript": "^6.0.3",
49
49
  "vitest": "^4.1.10",
50
50
  "zod": "^4.4.3",
51
- "@zhin.js/command": "1.1.10",
52
- "@zhin.js/testing": "1.0.5",
53
- "zhin.js": "1.1.15"
51
+ "@zhin.js/command": "1.1.11",
52
+ "@zhin.js/testing": "1.0.6",
53
+ "zhin.js": "1.1.17"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "zod": "^4.0.0",
57
- "@zhin.js/command": "^1.1.10",
58
- "zhin.js": "^1.1.15"
57
+ "@zhin.js/command": "^1.1.11",
58
+ "zhin.js": "^1.1.17"
59
59
  },
60
60
  "peerDependenciesMeta": {
61
61
  "@zhin.js/command": {
package/plugin.js CHANGED
@@ -1,4 +1,5 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { resolveLocale } from 'zhin.js/i18n';
2
3
  import { databaseHostToken, definePlugin, logger, outboundHostToken, scheduleHostToken, } from 'zhin.js';
3
4
  import { assertEarthquakeTimezone, resolveEarthquakeConfig, } from "./lib/config.js";
4
5
  import { earthquakeServiceToken } from "./lib/runtime.js";
@@ -43,6 +44,7 @@ export default definePlugin({
43
44
  id: subscription.conversationId,
44
45
  },
45
46
  content,
47
+ locale: resolveLocale(subscription.locale),
46
48
  });
47
49
  };
48
50
  }
package/schema.json CHANGED
@@ -18,7 +18,12 @@
18
18
  "default": [
19
19
  "cenc",
20
20
  "usgs"
21
- ]
21
+ ],
22
+ "x-i18n": {
23
+ "en": {
24
+ "description": "Enabled data sources in priority order. The first source supplies location text when merging the same earthquake; other sources cover a failed source."
25
+ }
26
+ }
22
27
  },
23
28
  "cencUrls": {
24
29
  "type": "array",
@@ -33,7 +38,12 @@
33
38
  "default": [
34
39
  "https://api.wolfx.jp/cenc_eqlist.json",
35
40
  "https://ceic.ac.cn/data/data.json"
36
- ]
41
+ ],
42
+ "x-i18n": {
43
+ "en": {
44
+ "description": "CENC catalog URLs, tried in order (primary followed by mirrors). HTTPS only, up to 5 URLs."
45
+ }
46
+ }
37
47
  },
38
48
  "usgsFeed": {
39
49
  "type": "string",
@@ -48,24 +58,44 @@
48
58
  "1.0_hour",
49
59
  "1.0_day"
50
60
  ],
51
- "default": "2.5_day"
61
+ "default": "2.5_day",
62
+ "x-i18n": {
63
+ "en": {
64
+ "description": "USGS GeoJSON summary feed name (minimum-magnitude_time-range)."
65
+ }
66
+ }
52
67
  },
53
68
  "pollCron": {
54
69
  "type": "string",
55
70
  "description": "订阅轮询频率(6 段 Cron:秒 分 时 日 月 周)",
56
- "default": "0 */2 * * * *"
71
+ "default": "0 */2 * * * *",
72
+ "x-i18n": {
73
+ "en": {
74
+ "description": "Subscription polling schedule (6-field cron: second, minute, hour, day, month, weekday)."
75
+ }
76
+ }
57
77
  },
58
78
  "timezone": {
59
79
  "type": "string",
60
80
  "description": "显示发震时刻使用的 IANA 时区",
61
- "default": "Asia/Shanghai"
81
+ "default": "Asia/Shanghai",
82
+ "x-i18n": {
83
+ "en": {
84
+ "description": "IANA timezone used to display earthquake times."
85
+ }
86
+ }
62
87
  },
63
88
  "requestTimeoutMs": {
64
89
  "type": "number",
65
90
  "description": "单次 HTTP 请求超时(毫秒)",
66
91
  "default": 10000,
67
92
  "minimum": 1000,
68
- "maximum": 60000
93
+ "maximum": 60000,
94
+ "x-i18n": {
95
+ "en": {
96
+ "description": "HTTP request timeout in milliseconds."
97
+ }
98
+ }
69
99
  },
70
100
  "maxRetries": {
71
101
  "type": "number",
@@ -73,35 +103,60 @@
73
103
  "default": 2,
74
104
  "minimum": 0,
75
105
  "maximum": 5,
76
- "multipleOf": 1
106
+ "multipleOf": 1,
107
+ "x-i18n": {
108
+ "en": {
109
+ "description": "Retries for network errors, timeouts, HTTP 429 and 5xx, excluding the initial request."
110
+ }
111
+ }
77
112
  },
78
113
  "retryBaseDelayMs": {
79
114
  "type": "number",
80
115
  "description": "指数退避的首次等待(毫秒),每次重试翻倍并加入随机抖动",
81
116
  "default": 1000,
82
117
  "minimum": 100,
83
- "maximum": 10000
118
+ "maximum": 10000,
119
+ "x-i18n": {
120
+ "en": {
121
+ "description": "Initial exponential-backoff delay in milliseconds; doubles for each retry with random jitter."
122
+ }
123
+ }
84
124
  },
85
125
  "retryMaxDelayMs": {
86
126
  "type": "number",
87
127
  "description": "单次退避或 Retry-After 等待上限(毫秒);服务端要求更久时本轮放弃并冷却该数据源",
88
128
  "default": 30000,
89
129
  "minimum": 1000,
90
- "maximum": 120000
130
+ "maximum": 120000,
131
+ "x-i18n": {
132
+ "en": {
133
+ "description": "Maximum backoff or Retry-After wait in milliseconds. Longer server waits abandon this round and cool down the source."
134
+ }
135
+ }
91
136
  },
92
137
  "defaultMinMagnitude": {
93
138
  "type": "number",
94
139
  "description": "订阅未指定震级时使用的最小震级",
95
140
  "default": 5,
96
141
  "minimum": 0,
97
- "maximum": 10
142
+ "maximum": 10,
143
+ "x-i18n": {
144
+ "en": {
145
+ "description": "Minimum magnitude for subscriptions that do not specify one."
146
+ }
147
+ }
98
148
  },
99
149
  "queryMinMagnitude": {
100
150
  "type": "number",
101
151
  "description": "「地震」查询未指定震级时使用的最小震级",
102
152
  "default": 3,
103
153
  "minimum": 0,
104
- "maximum": 10
154
+ "maximum": 10,
155
+ "x-i18n": {
156
+ "en": {
157
+ "description": "Minimum magnitude for earthquake queries that do not specify one."
158
+ }
159
+ }
105
160
  },
106
161
  "queryLimit": {
107
162
  "type": "number",
@@ -109,14 +164,24 @@
109
164
  "default": 5,
110
165
  "minimum": 1,
111
166
  "maximum": 20,
112
- "multipleOf": 1
167
+ "multipleOf": 1,
168
+ "x-i18n": {
169
+ "en": {
170
+ "description": "Default number of earthquake query results."
171
+ }
172
+ }
113
173
  },
114
174
  "maxEventAgeMinutes": {
115
175
  "type": "number",
116
176
  "description": "只推送发震时间在此分钟数以内的地震,避免推送迟到或重放的旧事件",
117
177
  "default": 60,
118
178
  "minimum": 5,
119
- "maximum": 1440
179
+ "maximum": 1440,
180
+ "x-i18n": {
181
+ "en": {
182
+ "description": "Only notify about earthquakes from the last specified number of minutes, avoiding delayed or replayed old events."
183
+ }
184
+ }
120
185
  },
121
186
  "pushLimit": {
122
187
  "type": "number",
@@ -124,14 +189,24 @@
124
189
  "default": 3,
125
190
  "minimum": 1,
126
191
  "maximum": 60,
127
- "multipleOf": 1
192
+ "multipleOf": 1,
193
+ "x-i18n": {
194
+ "en": {
195
+ "description": "Maximum notification messages per conversation in one rate-limit window."
196
+ }
197
+ }
128
198
  },
129
199
  "pushWindowMinutes": {
130
200
  "type": "number",
131
201
  "description": "推送限流窗口长度(分钟)",
132
202
  "default": 10,
133
203
  "minimum": 1,
134
- "maximum": 1440
204
+ "maximum": 1440,
205
+ "x-i18n": {
206
+ "en": {
207
+ "description": "Notification rate-limit window in minutes."
208
+ }
209
+ }
135
210
  },
136
211
  "maxEventsPerMessage": {
137
212
  "type": "number",
@@ -139,7 +214,12 @@
139
214
  "default": 5,
140
215
  "minimum": 1,
141
216
  "maximum": 10,
142
- "multipleOf": 1
217
+ "multipleOf": 1,
218
+ "x-i18n": {
219
+ "en": {
220
+ "description": "Maximum earthquakes listed in one notification; the remainder is summarized as a count."
221
+ }
222
+ }
143
223
  },
144
224
  "maxSubscriptions": {
145
225
  "type": "number",
@@ -147,7 +227,12 @@
147
227
  "default": 100,
148
228
  "minimum": 1,
149
229
  "maximum": 1000,
150
- "multipleOf": 1
230
+ "multipleOf": 1,
231
+ "x-i18n": {
232
+ "en": {
233
+ "description": "Maximum subscriptions across this instance, at most one per conversation."
234
+ }
235
+ }
151
236
  }
152
237
  }
153
238
  }
@@ -14,6 +14,6 @@ export default defineAgentTool({
14
14
  keywords: ['地震', '震级', '余震', '地震速报', 'earthquake', 'quake', 'seismic'],
15
15
  tags: ['地震', '查询', '实时'],
16
16
  async execute({ limit, minMagnitude, region, hours }, context) {
17
- return renderRecentEarthquakes(context.use(earthquakeServiceToken), { limit, minMagnitude, region, hours });
17
+ return renderRecentEarthquakes(context.use(earthquakeServiceToken), { limit, minMagnitude, region, hours }, context.locale);
18
18
  },
19
19
  });