Skip to content

Add Vietnamese#972

Merged
imaegoo merged 3 commits into
twikoojs:mainfrom
PhungDuyThinh:patch-1
May 29, 2026
Merged

Add Vietnamese#972
imaegoo merged 3 commits into
twikoojs:mainfrom
PhungDuyThinh:patch-1

Conversation

@PhungDuyThinh

@PhungDuyThinh PhungDuyThinh commented May 28, 2026

Copy link
Copy Markdown
Contributor

由 Sourcery 提供的摘要

在客户端 i18n 目录中添加越南语语言支持。

新功能:

  • 引入越南语(vi-VN)作为评论系统 UI 和管理面板的额外区域设置选项。
  • 为配置标签、帮助文本、通知和校验消息提供越南语翻译。
  • 为现有的通用 UI 字符串(分页、上传、“xx 时间前”标签等)增加越南语版本,以完善本地化覆盖。
Original summary in English

Summary by Sourcery

Add Vietnamese language support across the client i18n catalogue.

New Features:

  • Introduce Vietnamese (vi-VN) as an additional locale option for the comment system UI and admin panel.
  • Provide Vietnamese translations for configuration labels, help texts, notifications, and validation messages.
  • Extend existing generic UI strings (pagination, uploads, time-ago labels, etc.) with Vietnamese variants to complete localization coverage.

@sourcery-ai

sourcery-ai Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

审查者指南

通过将越南语翻译追加到所有现有的 i18n 字符串数组,并在客户端 i18n 配置中的受支持语言列表中记录新语言区域,将越南语(vi-VN)添加为新的 UI 语言。

文件级变更

Change Details Files
将越南语记录为受支持的语言区域,并相应扩展默认的 gravatar 帮助文本。
  • 在受支持语言区域的注释块中添加带贡献者说明的 vi-VN 条目。
  • DEFAULT_GRAVATAR 描述数组中追加一条越南语句子,用于描述默认头像行为。
src/client/utils/i18n/i18n.js
在每个 i18n 字符串数组的最后追加越南语翻译,以支持 vi-VN UI。
  • 对于管理端客户端标签(版本、配置分区、反垃圾、CAPTCHA、CDN、NSFW、S3、推送/IM、SMTP、限流、特性开关等),在数组末尾追加简洁的越南语翻译字符串。
  • 对于管理面板中的标签、按钮、占位符和警告(登录、导出/导入、凭据、密码、标题等),在每个翻译数组中添加越南语作为最后一个元素。
  • 对于终端用户 UI 字符串(评论计数、排序、展开/收起、标签、元数据输入、分页、提交操作、图片上传消息、相对时间),按正确顺序追加越南语翻译。
  • 确保大多数之前只包含中文、英文、乌兹别克语、日语和韩语的数组,现在在末尾也包含一条越南语翻译。
src/client/utils/i18n/i18n.js
为最近获得多语言支持的新 provider/secret-key 相关配置键添加越南语变体。
  • 对于较新的 CAPTCHA 相关键(TURNSTILE_SECRET_KEYGEETEST_CAPTCHA_KEYCAP_SECRET_KEY),在其描述数组中追加越南语条目,或在现有韩语文本之前添加一条重复的英文条目。
  • 对于 PUSHOO_CHANNELSMTP_SERVICE 的描述字符串,在数组末尾追加越南语说明文本。
src/client/utils/i18n/i18n.js

技巧与命令

与 Sourcery 交互

  • 触发新的审查: 在 Pull Request 中评论 @sourcery-ai review
  • 继续讨论: 直接回复 Sourcery 的审查评论。
  • 从审查评论生成 GitHub Issue: 回复 Sourcery 的某条审查评论,要求其根据该评论创建一个 issue。你也可以直接回复该评论并写上 @sourcery-ai issue 来从中创建 issue。
  • 生成 Pull Request 标题: 在 Pull Request 标题的任意位置写上 @sourcery-ai 即可随时生成标题。你也可以在 Pull Request 中评论 @sourcery-ai title 来(重新)生成标题。
  • 生成 Pull Request 摘要: 在 Pull Request 正文任意位置写上 @sourcery-ai summary,即可在指定位置生成 PR 摘要。你也可以在 Pull Request 中评论 @sourcery-ai summary 来(重新)生成摘要。
  • 生成审查者指南: 在 Pull Request 中评论 @sourcery-ai guide,即可随时(重新)生成审查者指南。
  • 一次性解决所有 Sourcery 评论: 在 Pull Request 中评论 @sourcery-ai resolve,即可将所有 Sourcery 评论标记为已解决。如果你已经处理了所有评论且不希望再看到它们,这会很有用。
  • 取消所有 Sourcery 审查: 在 Pull Request 中评论 @sourcery-ai dismiss,即可取消所有现有的 Sourcery 审查。尤其适用于你想从头开始一次新的审查——别忘了再评论 @sourcery-ai review 来触发新的审查!

自定义你的使用体验

访问你的 仪表盘 以:

  • 启用或禁用审查功能,例如 Sourcery 生成的 Pull Request 摘要、审查者指南等。
  • 更改审查语言。
  • 添加、删除或编辑自定义审查说明。
  • 调整其他审查设置。

获取帮助

Original review guide in English

Reviewer's Guide

Adds Vietnamese (vi-VN) as a new UI language by appending Vietnamese translations to all existing i18n string arrays and documenting the new locale in the supported language list in the client i18n configuration.

File-Level Changes

Change Details Files
Document Vietnamese as a supported locale and extend the default gravatar help text accordingly.
  • Add 'vi-VN' entry with contributor note in the supported locales comment block.
  • Extend the DEFAULT_GRAVATAR description array with a Vietnamese sentence describing the default avatar behavior.
src/client/utils/i18n/i18n.js
Append Vietnamese translations as the last entry of each i18n string array to support the vi-VN UI.
  • For admin client labels (versions, config sections, anti-spam, CAPTCHA, CDN, NSFW, S3, push/IM, SMTP, limits, feature toggles, etc.), append a concise Vietnamese translation string as the final array element.
  • For management panel labels, buttons, placeholders, and warnings (login, export/import, credentials, passwords, titles, etc.), add Vietnamese as the last element in each translation array.
  • For end-user UI strings (comment counts, sorting, expansion/collapse, tags, meta inputs, pagination, submit actions, image upload messages, relative time), append Vietnamese translations in the correct order.
  • Ensure most arrays that previously contained Chinese, English, Uzbek, Japanese, and Korean now also contain a Vietnamese translation at the end.
src/client/utils/i18n/i18n.js
Add Vietnamese variants for new provider/secret-key related config keys that recently gained multi-language support.
  • For newer CAPTCHA-related keys (TURNSTILE_SECRET_KEY, GEETEST_CAPTCHA_KEY, CAP_SECRET_KEY), extend their description arrays with Vietnamese or duplicated English entries followed by existing Korean text.
  • For PUSHOO_CHANNEL and SMTP_SERVICE description strings, append Vietnamese guidance text at the end of the array.
src/client/utils/i18n/i18n.js

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

嗨,我发现了 6 个问题,并留下了一些总体反馈:

  • 由于在新增的越南语条目前缺少逗号,若干模板字符串数组现在在语法上是无效的(例如 _DEFAULT_GRAVATAR_HIGHLIGHT_THEME_HIGHLIGHT_PLUGIN_IMAGE_CDN_PUSHOO_CHANNEL_SMTP_SERVICE),这会在运行时导致 i18n 模块出错。
  • 请确保每个翻译数组的元素数量和语言顺序与文档中声明的语言列表保持一致(zh-CN, zh-HK, zh-TW, en, uz-UZ, ja-JP, ko-KR, vi-VN);目前有若干条目(例如 ADMIN_CONFIG_CAPTCHA_TURNSTILE_SECRET_KEY_GEETEST_CAPTCHA_KEY_CAP_SECRET_KEY_QCLOUD_SECRET_KEY_MAIL_TEMPLATE_MAIL_TEMPLATE_ADMIN)增加的是多条英文/韩文字符串,而不是单个越南语字符串,这会导致语言不对齐。
  • 对于你已经添加了越南语的键,请再次检查:确保每个数组末尾(右方括号前)只新增一个越南语字符串,而不是插入到中间,否则会改变既有语言的顺序,破坏那些依赖数组索引进行语言映射的调用方。
给 AI 工具的提示词
Please address the comments from this code review:

## Overall Comments
- Several of the template-literal arrays are now syntactically invalid because the new Vietnamese entries are added without a comma after the previous element (e.g. `_DEFAULT_GRAVATAR`, `_HIGHLIGHT_THEME`, `_HIGHLIGHT_PLUGIN`, `_IMAGE_CDN`, `_PUSHOO_CHANNEL`, `_SMTP_SERVICE`), which will break the i18n module at runtime.
- Please ensure each translation array keeps a consistent element count and language order matching the documented locales (zh-CN, zh-HK, zh-TW, en, uz-UZ, ja-JP, ko-KR, vi-VN); several entries (e.g. `ADMIN_CONFIG_CAPTCHA`, `_TURNSTILE_SECRET_KEY`, `_GEETEST_CAPTCHA_KEY`, `_CAP_SECRET_KEY`, `_QCLOUD_SECRET_KEY`, `_MAIL_TEMPLATE`, `_MAIL_TEMPLATE_ADMIN`) currently add extra English/Korean strings instead of a single Vietnamese string, which will misalign languages.
- For keys where you added Vietnamese, double-check that you added exactly one Vietnamese string at the end of each array (before closing bracket) rather than inserting it in the middle, to avoid shifting existing languages and breaking consumers that rely on index-based language mapping.

## Individual Comments

### Comment 1
<location path="src/client/utils/i18n/i18n.js" line_range="567-568" />
<code_context>
     `Аватар тўлдирувчиси. Стандарт (агар бўш қолдирилса): «идентификатор». Қуйидагилардан танланг: ${defaultGravatar.join(', ')}`,
     `デフォルトのプロフィール画像表示。デフォルト(空欄時)は "initials" で、選択肢は:${defaultGravatar.join('、')} です`,
     `프로필 기본 이미지. 기본값(비워둘 경우): "initials". 사용 가능 스타일: ${defaultGravatar.join(', ')}`
+    `Ảnh đại diện mặc định. Mặc định (để trống): "initials".`
   ],
   [S.ACI + '_EMOTION_CDN']: [
</code_context>
<issue_to_address>
**issue (bug_risk):** Add commas between the template literal entries in the DEFAULT_GRAVATAR array to avoid a syntax error.

In `[S.ACI + '_DEFAULT_GRAVATAR']`, the new Korean and Vietnamese template literals are missing commas between them and before the closing bracket, which makes the array invalid and breaks module parsing. Please add commas after both the Korean and Vietnamese entries.
</issue_to_address>

### Comment 2
<location path="src/client/utils/i18n/i18n.js" line_range="657-658" />
<code_context>
     `Плагин подсветки кода, опционально: ${highlightPlugins.join(',')}, соответственно: показывать язык кода, показывать кнопку копирования кода. Вы можете установить несколько опций одновременно, если вы хотите не добавлять плагин подсветки кода, установите значение none. по умолчанию: none.`,
     `コード・ハイライト・プラグイン。オプション: ${highlightPlugins.join(',')}, それぞれ: コード言語の表示、コード・コピー・ボタンの表示。複数のオプションを同時に設定できますが、コード・ハイライト・プラグインを追加したくない場合は、noneに設定してください。`,
     `코드 하이라이트 추가 기능. 선택 가능: ${highlightPlugins.join(', ')}. (코드 언어 표시, 복사 버튼) 여러 기능을 동시에 설정할 수 있으며, 추가하지 않으려면 none으로 설정하세요. 기본값: none.`
+    `Plugin tô sáng code. Để không dùng plugin, đặt thành none. Mặc định: none.`
   ],
   [S.ACI + '_IMAGE_CDN']: [
</code_context>
<issue_to_address>
**issue (bug_risk):** Add missing commas between HIGHLIGHT_PLUGIN array items.

In the `[S.ACI + '_HIGHLIGHT_PLUGIN']` array, the new Korean and Vietnamese template literals also need commas after each entry (including before the closing bracket), otherwise this will result in a syntax error.
</issue_to_address>

### Comment 3
<location path="src/client/utils/i18n/i18n.js" line_range="667-668" />
<code_context>
     `Расм юклаш учун расм тўшаги. Қуйидагилардан танланг: ${imageBedServices.join(', ')}`,
     `画像のアップロードに使用する画像ホスティングサービス。次のうちから選択してください:${imageBedServices.join('、')}`,
     `댓글 이미지 업로드 기능에 사용될 호스팅 서비스. 사용 가능 목록: ${imageBedServices.join(', ')}`
+    `Dịch vụ lưu trữ ảnh khi tải lên bình luận.`
   ],
   // 翻译来自 Deepseek
</code_context>
<issue_to_address>
**issue (bug_risk):** Insert commas between IMAGE_CDN template literal entries.

The Vietnamese template literal needs commas on both sides so the array stays valid. Please add a comma after the Korean entry and another after the Vietnamese entry.
</issue_to_address>

### Comment 4
<location path="src/client/utils/i18n/i18n.js" line_range="676-679" />
<code_context>
     `IMAGE_CDN томонидан белгиланган расм тўшаги URL. Агар сизнинг IMAGE_CDN шулардан бири бўлса: ${customImageBedServices.join(', ')}`, // 乌兹别克语
     `IMAGE_CDNで設定した画像ホスティングサービスのURL。IMAGE_CDNが以下のいずれかの場合は入力が必要です:${customImageBedServices.join('、')}`, // 日语
-    '이미지 저장소 URL. IMAGE_CDN 설정이 다음 중 하나인 경우 필요합니다: ${customImageBedServices.join(', ')}'
+    '이미지 저장소 URL. IMAGE_CDN 설정이 다음 중 하나인 경우 필요합니다: ${customImageBedServices.join(', ')}',
+    'URL của dịch vụ lưu trữ ảnh. Bắt buộc nếu IMAGE_CDN là một trong các giá trị tùy chỉnh.'
   ],
</code_context>
<issue_to_address>
**suggestion (bug_risk):** Use a template literal instead of a normal string where ${customImageBedServices.join(...)} is intended to interpolate.

This Korean string uses single quotes, so `${customImageBedServices.join(', ')}` will appear literally instead of being interpolated like in the other entries. To keep behavior consistent, switch this to a template literal with backticks so the expression evaluates at runtime.

```suggestion
    `IMAGE_CDN томонидан белгиланган расм тўшаги URL. Агар сизнинг IMAGE_CDN шулардан бири бўлса: ${customImageBedServices.join(', ')}`, // 乌兹别克语
    `IMAGE_CDNで設定した画像ホスティングサービスのURL。IMAGE_CDNが以下のいずれかの場合は入力が必要です:${customImageBedServices.join('、')}`, // 日语
    `이미지 저장소 URL. IMAGE_CDN 설정이 다음 중 하나인 경우 필요합니다: ${customImageBedServices.join(', ')}`,
    'URL của dịch vụ lưu trữ ảnh. Bắt buộc nếu IMAGE_CDN là một trong các giá trị tùy chỉnh.'
```
</issue_to_address>

### Comment 5
<location path="src/client/utils/i18n/i18n.js" line_range="986-987" />
<code_context>
     `ИМ билдиришномаси суриш канали. Қўллаб-қувватлаш: ${pushooChannels.join(', ')}`,
     `即時メッセージプッシュプラットフォームの名前。${pushooChannels.join('、')} などに対応しています。`,
     `실시간 알림을 받을 서비스 설정. 지원: ${pushooChannels.join(', ')}`
+    `Kênh gửi thông báo IM tức thì.`
   ],
   [S.ACI + '_PUSHOO_TOKEN']: [
</code_context>
<issue_to_address>
**issue (bug_risk):** Add missing commas between Pushoo channel description entries.

Between the new Korean and Vietnamese template literals in `[S.ACI + '_PUSHOO_CHANNEL']`, and after the Vietnamese entry, commas are missing, making the array invalid. Please add commas so each element is properly separated.
</issue_to_address>

### Comment 6
<location path="src/client/utils/i18n/i18n.js" line_range="1177-1178" />
<code_context>
     `Электрон почта хабарномаси учун электрон почта хизмати провайдери. Қўллаб-қувватлаш: ${smtpServices.join(', ')}`,
     `メール通知メールボックスサービスプロバイダ。サポート: ${smtpServices.join(',')}.`,
     `알림 발송 이메일 서비스 선택. 지원 목록: ${smtpServices.join(', ')}`
+    `Nhà cung cấp dịch vụ email gửi thông báo.`
   ],
   [S.ACI + '_SMTP_USER']: [
</code_context>
<issue_to_address>
**issue (bug_risk):** Separate SMTP_SERVICE template literals with commas.

The `[S.ACI + '_SMTP_SERVICE']` array has the same issue: the new Vietnamese template literal is missing a comma after the Korean entry, so the array will not parse. Please add the missing comma between these entries (and before the closing bracket if needed).
</issue_to_address>

Sourcery 对开源项目免费使用——如果你觉得这些评审有帮助,欢迎分享 ✨
帮我变得更有用!请在每条评论上点 👍 或 👎,我会根据这些反馈改进后续评审。
Original comment in English

Hey - I've found 6 issues, and left some high level feedback:

  • Several of the template-literal arrays are now syntactically invalid because the new Vietnamese entries are added without a comma after the previous element (e.g. _DEFAULT_GRAVATAR, _HIGHLIGHT_THEME, _HIGHLIGHT_PLUGIN, _IMAGE_CDN, _PUSHOO_CHANNEL, _SMTP_SERVICE), which will break the i18n module at runtime.
  • Please ensure each translation array keeps a consistent element count and language order matching the documented locales (zh-CN, zh-HK, zh-TW, en, uz-UZ, ja-JP, ko-KR, vi-VN); several entries (e.g. ADMIN_CONFIG_CAPTCHA, _TURNSTILE_SECRET_KEY, _GEETEST_CAPTCHA_KEY, _CAP_SECRET_KEY, _QCLOUD_SECRET_KEY, _MAIL_TEMPLATE, _MAIL_TEMPLATE_ADMIN) currently add extra English/Korean strings instead of a single Vietnamese string, which will misalign languages.
  • For keys where you added Vietnamese, double-check that you added exactly one Vietnamese string at the end of each array (before closing bracket) rather than inserting it in the middle, to avoid shifting existing languages and breaking consumers that rely on index-based language mapping.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- Several of the template-literal arrays are now syntactically invalid because the new Vietnamese entries are added without a comma after the previous element (e.g. `_DEFAULT_GRAVATAR`, `_HIGHLIGHT_THEME`, `_HIGHLIGHT_PLUGIN`, `_IMAGE_CDN`, `_PUSHOO_CHANNEL`, `_SMTP_SERVICE`), which will break the i18n module at runtime.
- Please ensure each translation array keeps a consistent element count and language order matching the documented locales (zh-CN, zh-HK, zh-TW, en, uz-UZ, ja-JP, ko-KR, vi-VN); several entries (e.g. `ADMIN_CONFIG_CAPTCHA`, `_TURNSTILE_SECRET_KEY`, `_GEETEST_CAPTCHA_KEY`, `_CAP_SECRET_KEY`, `_QCLOUD_SECRET_KEY`, `_MAIL_TEMPLATE`, `_MAIL_TEMPLATE_ADMIN`) currently add extra English/Korean strings instead of a single Vietnamese string, which will misalign languages.
- For keys where you added Vietnamese, double-check that you added exactly one Vietnamese string at the end of each array (before closing bracket) rather than inserting it in the middle, to avoid shifting existing languages and breaking consumers that rely on index-based language mapping.

## Individual Comments

### Comment 1
<location path="src/client/utils/i18n/i18n.js" line_range="567-568" />
<code_context>
     `Аватар тўлдирувчиси. Стандарт (агар бўш қолдирилса): «идентификатор». Қуйидагилардан танланг: ${defaultGravatar.join(', ')}`,
     `デフォルトのプロフィール画像表示。デフォルト(空欄時)は "initials" で、選択肢は:${defaultGravatar.join('、')} です`,
     `프로필 기본 이미지. 기본값(비워둘 경우): "initials". 사용 가능 스타일: ${defaultGravatar.join(', ')}`
+    `Ảnh đại diện mặc định. Mặc định (để trống): "initials".`
   ],
   [S.ACI + '_EMOTION_CDN']: [
</code_context>
<issue_to_address>
**issue (bug_risk):** Add commas between the template literal entries in the DEFAULT_GRAVATAR array to avoid a syntax error.

In `[S.ACI + '_DEFAULT_GRAVATAR']`, the new Korean and Vietnamese template literals are missing commas between them and before the closing bracket, which makes the array invalid and breaks module parsing. Please add commas after both the Korean and Vietnamese entries.
</issue_to_address>

### Comment 2
<location path="src/client/utils/i18n/i18n.js" line_range="657-658" />
<code_context>
     `Плагин подсветки кода, опционально: ${highlightPlugins.join(',')}, соответственно: показывать язык кода, показывать кнопку копирования кода. Вы можете установить несколько опций одновременно, если вы хотите не добавлять плагин подсветки кода, установите значение none. по умолчанию: none.`,
     `コード・ハイライト・プラグイン。オプション: ${highlightPlugins.join(',')}, それぞれ: コード言語の表示、コード・コピー・ボタンの表示。複数のオプションを同時に設定できますが、コード・ハイライト・プラグインを追加したくない場合は、noneに設定してください。`,
     `코드 하이라이트 추가 기능. 선택 가능: ${highlightPlugins.join(', ')}. (코드 언어 표시, 복사 버튼) 여러 기능을 동시에 설정할 수 있으며, 추가하지 않으려면 none으로 설정하세요. 기본값: none.`
+    `Plugin tô sáng code. Để không dùng plugin, đặt thành none. Mặc định: none.`
   ],
   [S.ACI + '_IMAGE_CDN']: [
</code_context>
<issue_to_address>
**issue (bug_risk):** Add missing commas between HIGHLIGHT_PLUGIN array items.

In the `[S.ACI + '_HIGHLIGHT_PLUGIN']` array, the new Korean and Vietnamese template literals also need commas after each entry (including before the closing bracket), otherwise this will result in a syntax error.
</issue_to_address>

### Comment 3
<location path="src/client/utils/i18n/i18n.js" line_range="667-668" />
<code_context>
     `Расм юклаш учун расм тўшаги. Қуйидагилардан танланг: ${imageBedServices.join(', ')}`,
     `画像のアップロードに使用する画像ホスティングサービス。次のうちから選択してください:${imageBedServices.join('、')}`,
     `댓글 이미지 업로드 기능에 사용될 호스팅 서비스. 사용 가능 목록: ${imageBedServices.join(', ')}`
+    `Dịch vụ lưu trữ ảnh khi tải lên bình luận.`
   ],
   // 翻译来自 Deepseek
</code_context>
<issue_to_address>
**issue (bug_risk):** Insert commas between IMAGE_CDN template literal entries.

The Vietnamese template literal needs commas on both sides so the array stays valid. Please add a comma after the Korean entry and another after the Vietnamese entry.
</issue_to_address>

### Comment 4
<location path="src/client/utils/i18n/i18n.js" line_range="676-679" />
<code_context>
     `IMAGE_CDN томонидан белгиланган расм тўшаги URL. Агар сизнинг IMAGE_CDN шулардан бири бўлса: ${customImageBedServices.join(', ')}`, // 乌兹别克语
     `IMAGE_CDNで設定した画像ホスティングサービスのURL。IMAGE_CDNが以下のいずれかの場合は入力が必要です:${customImageBedServices.join('、')}`, // 日语
-    '이미지 저장소 URL. IMAGE_CDN 설정이 다음 중 하나인 경우 필요합니다: ${customImageBedServices.join(', ')}'
+    '이미지 저장소 URL. IMAGE_CDN 설정이 다음 중 하나인 경우 필요합니다: ${customImageBedServices.join(', ')}',
+    'URL của dịch vụ lưu trữ ảnh. Bắt buộc nếu IMAGE_CDN là một trong các giá trị tùy chỉnh.'
   ],
</code_context>
<issue_to_address>
**suggestion (bug_risk):** Use a template literal instead of a normal string where ${customImageBedServices.join(...)} is intended to interpolate.

This Korean string uses single quotes, so `${customImageBedServices.join(', ')}` will appear literally instead of being interpolated like in the other entries. To keep behavior consistent, switch this to a template literal with backticks so the expression evaluates at runtime.

```suggestion
    `IMAGE_CDN томонидан белгиланган расм тўшаги URL. Агар сизнинг IMAGE_CDN шулардан бири бўлса: ${customImageBedServices.join(', ')}`, // 乌兹别克语
    `IMAGE_CDNで設定した画像ホスティングサービスのURL。IMAGE_CDNが以下のいずれかの場合は入力が必要です:${customImageBedServices.join('、')}`, // 日语
    `이미지 저장소 URL. IMAGE_CDN 설정이 다음 중 하나인 경우 필요합니다: ${customImageBedServices.join(', ')}`,
    'URL của dịch vụ lưu trữ ảnh. Bắt buộc nếu IMAGE_CDN là một trong các giá trị tùy chỉnh.'
```
</issue_to_address>

### Comment 5
<location path="src/client/utils/i18n/i18n.js" line_range="986-987" />
<code_context>
     `ИМ билдиришномаси суриш канали. Қўллаб-қувватлаш: ${pushooChannels.join(', ')}`,
     `即時メッセージプッシュプラットフォームの名前。${pushooChannels.join('、')} などに対応しています。`,
     `실시간 알림을 받을 서비스 설정. 지원: ${pushooChannels.join(', ')}`
+    `Kênh gửi thông báo IM tức thì.`
   ],
   [S.ACI + '_PUSHOO_TOKEN']: [
</code_context>
<issue_to_address>
**issue (bug_risk):** Add missing commas between Pushoo channel description entries.

Between the new Korean and Vietnamese template literals in `[S.ACI + '_PUSHOO_CHANNEL']`, and after the Vietnamese entry, commas are missing, making the array invalid. Please add commas so each element is properly separated.
</issue_to_address>

### Comment 6
<location path="src/client/utils/i18n/i18n.js" line_range="1177-1178" />
<code_context>
     `Электрон почта хабарномаси учун электрон почта хизмати провайдери. Қўллаб-қувватлаш: ${smtpServices.join(', ')}`,
     `メール通知メールボックスサービスプロバイダ。サポート: ${smtpServices.join(',')}.`,
     `알림 발송 이메일 서비스 선택. 지원 목록: ${smtpServices.join(', ')}`
+    `Nhà cung cấp dịch vụ email gửi thông báo.`
   ],
   [S.ACI + '_SMTP_USER']: [
</code_context>
<issue_to_address>
**issue (bug_risk):** Separate SMTP_SERVICE template literals with commas.

The `[S.ACI + '_SMTP_SERVICE']` array has the same issue: the new Vietnamese template literal is missing a comma after the Korean entry, so the array will not parse. Please add the missing comma between these entries (and before the closing bracket if needed).
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread src/client/utils/i18n/i18n.js Outdated
Comment thread src/client/utils/i18n/i18n.js Outdated
Comment thread src/client/utils/i18n/i18n.js Outdated
Comment thread src/client/utils/i18n/i18n.js
Comment thread src/client/utils/i18n/i18n.js Outdated
Comment thread src/client/utils/i18n/i18n.js Outdated
@imaegoo imaegoo merged commit 6a64fc8 into twikoojs:main May 29, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants