frontend-i18n.test.js 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import assert from 'node:assert/strict';
  2. import { test } from 'node:test';
  3. import {
  4. DEFAULT_LOCALE,
  5. createTranslator,
  6. normalizeLocale,
  7. supportedLocales
  8. } from '../src/frontend/i18n/index.js';
  9. test('uses Chinese as the default locale and normalizes supported aliases', () => {
  10. assert.equal(DEFAULT_LOCALE, 'zh-CN');
  11. assert.deepEqual(supportedLocales, ['zh-CN', 'en-US']);
  12. assert.equal(normalizeLocale(), 'zh-CN');
  13. assert.equal(normalizeLocale('zh'), 'zh-CN');
  14. assert.equal(normalizeLocale('en'), 'en-US');
  15. assert.equal(normalizeLocale('fr-FR'), 'zh-CN');
  16. });
  17. test('translates known UI keys and falls back safely', () => {
  18. const zh = createTranslator('zh-CN');
  19. const en = createTranslator('en-US');
  20. assert.equal(zh('common.refresh'), '刷新');
  21. assert.equal(en('common.refresh'), 'Refresh');
  22. assert.equal(zh('auth.loginTitle'), '登录控制台');
  23. assert.equal(en('auth.loginTitle'), 'Sign in to console');
  24. assert.equal(zh('auth.forgotPassword'), '忘记密码?');
  25. assert.equal(en('auth.resetPasswordTitle'), 'Reset password');
  26. assert.equal(en('missing.translation.key'), 'missing.translation.key');
  27. });
  28. test('uses localized Chinese labels for the main navigation', () => {
  29. const zh = createTranslator('zh-CN');
  30. assert.equal(zh('nav.dashboard'), '仪表盘');
  31. assert.equal(zh('nav.domains'), '发信域名');
  32. assert.equal(zh('nav.dnsApi'), 'DNS API');
  33. assert.equal(zh('nav.smtp'), 'SMTP 凭据');
  34. assert.equal(zh('nav.tokens'), 'API Token');
  35. assert.equal(zh('nav.logs'), '发送记录');
  36. assert.equal(zh('nav.webhooks'), 'Webhooks');
  37. assert.equal(zh('nav.admin'), '管理员');
  38. assert.equal(zh('nav.settings'), '系统设置');
  39. });
  40. test('nav group chrome strings exist', () => {
  41. const zh = createTranslator('zh-CN');
  42. const en = createTranslator('en-US');
  43. assert.equal(zh('nav.group.overview'), '概览');
  44. assert.equal(zh('nav.group.delivery'), '投递');
  45. assert.equal(zh('nav.group.system'), '系统');
  46. assert.equal(en('nav.group.overview'), 'Overview');
  47. assert.equal(en('nav.group.delivery'), 'Delivery');
  48. assert.equal(en('nav.group.system'), 'System');
  49. });
  50. test('translates admin panel labels', () => {
  51. const zh = createTranslator('zh-CN');
  52. const en = createTranslator('en-US');
  53. assert.equal(zh('admin.title'), '管理员面板');
  54. assert.equal(zh('admin.users'), '用户');
  55. assert.equal(zh('admin.resources'), '资源');
  56. assert.equal(zh('admin.auditLogs'), '审计日志');
  57. assert.equal(zh('settings.deliveryChecks'), '发信环境检查');
  58. assert.equal(en('admin.title'), 'Admin Panel');
  59. assert.equal(en('settings.deliveryChecks'), 'Sending Environment Checks');
  60. });
  61. test('translates smtp login credential labels separately from outbound relays', () => {
  62. const zh = createTranslator('zh-CN');
  63. const en = createTranslator('en-US');
  64. assert.equal(zh('smtp.loginCredentialsTitle'), '发信登录凭据');
  65. assert.equal(zh('smtpRelay.title'), '高级:外部 SMTP 出口');
  66. assert.equal(en('smtp.loginCredentialsTitle'), 'Sending login credentials');
  67. assert.equal(en('smtpRelay.title'), 'Advanced: external SMTP relays');
  68. });
  69. test('translates webhook page chrome strings', () => {
  70. const zh = createTranslator('zh-CN');
  71. const en = createTranslator('en-US');
  72. assert.equal(zh('webhooks.title'), 'Webhooks');
  73. assert.equal(zh('webhooks.secretCreatedWarning'), '完整密钥只会显示这一次。关闭后无法再次查看,请立即复制并保存到安全位置。');
  74. assert.equal(zh('webhooks.eventSent'), '已送达');
  75. assert.equal(zh('webhooks.replay'), '重放');
  76. assert.equal(zh('webhooks.domainOverrideHelp'), '若某域名对某一事件存在任何已启用的端点,则该事件不会再投递到账号级端点。');
  77. assert.equal(en('webhooks.title'), 'Webhooks');
  78. assert.equal(en('webhooks.create'), 'Create webhook');
  79. assert.equal(en('webhooks.statusDead'), 'Dead');
  80. assert.equal(en('actions.webhookCreated'), 'Webhook created');
  81. });