Skip to content

fix: complete i18n polish and channel batch selection behavior#4071

Open
yesbhautik wants to merge 9 commits intoQuantumNous:mainfrom
yesbhautik:basic-fixs
Open

fix: complete i18n polish and channel batch selection behavior#4071
yesbhautik wants to merge 9 commits intoQuantumNous:mainfrom
yesbhautik:basic-fixs

Conversation

@yesbhautik
Copy link
Copy Markdown

@yesbhautik yesbhautik commented Apr 3, 2026

Summary

  • Complete the localization sweep across backend/frontend language resources and UI copy, including fallback behavior and locale wiring improvements to reduce untranslated strings.
  • Localize confirmation dialogs and runtime message surfaces (including static modal actions and API-fed toasts) for consistent non-Chinese language UX.
  • Rework channel management batch selection with controlled row keys, robust tag-mode behavior, valid leaf-ID payload generation, and universal keyboard interactions (Cmd/Ctrl+A toggle, Shift range, Cmd/Ctrl multi-select).

Test plan

  • bunx eslint src/hooks/channels/useChannelsData.jsx src/components/table/channels/ChannelsTable.jsx src/components/table/channels/ChannelsColumnDefs.jsx
  • bun run build
  • E2E checks for channel batch selection flows: tag select/deselect, child deselect persistence, Cmd/Ctrl+A select-all + deselect-all toggle, and Shift+click range behavior from middle to top/bottom.

Allow auth pages to render background effects without bottom clipping near the footer. Update footer copy with multilingual linked New API and QuantumNous branding text for consistent localization.
…trings

- Convert 55 hardcoded Chinese UI strings to t() calls across 17 components
  (TwoFAVerification, DashboardSetting, SystemSetting, LanguageSelector,
  MarkdownRenderer, ThinkingContent, DebugPanel, MessageContent, etc.)
- Add curated English translations for all newly wrapped keys
- Fill missing translation entries for all locales (zh-TW, fr, ru, ja, vi)
  to reach 100% coverage across all 6 non-primary languages
- Replace same-as-source Chinese values in non-Chinese locale files with
  proper localized text
- Fix French plural _one forms missing {{count}} placeholder
- Improve i18n fallback chain: non-Chinese locales now fall back through
  English before Chinese; returnEmptyString=false prevents blank renders
Translate hardcoded user-facing strings across auth, channels, settings, and helper paths, and add missing English locale entries for newly used keys. Add a global i18n safeguard that falls back to English when non-Chinese locales still resolve to Chinese text to prevent mixed-language UI.
Localize remaining backend and frontend user-facing strings, wire native language/Semi locale mappings, and align translation resources across all supported locales. Normalize API-fed toast messages and tighten fallback guards so Japanese and other non-Chinese locales no longer leak mixed CN/EN text.
Keep the i18n sweep focused by dropping incidental bun lock updates and local dev ignore entries that were not required for localization behavior.
Exclude local Air and docker compose dev config files so personal environment artifacts do not appear as untracked changes.
Ensure static Semi modal confirms and Popconfirm instances inherit translated OK/Cancel labels so non-Chinese locales no longer show mixed Chinese button text.
Unify channel row selection into controlled key-based state so tag groups, leaf channels, and batch APIs stay consistent. Restore universal keyboard behavior by making Cmd/Ctrl+A toggle select-all/deselect-all and keeping Shift range selection anchored to the user's click flow.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 3, 2026

Important

Review skipped

Too many files!

This PR contains 245 files, which is 95 over the limit of 150.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c873b2b6-75a4-43ff-bf97-484929623b8f

📥 Commits

Reviewing files that changed from the base of the PR and between c9611c4 and acc8632.

📒 Files selected for processing (245)
  • .gitignore
  • common/email.go
  • common/init.go
  • common/pprof.go
  • common/totp.go
  • common/utils.go
  • controller/channel-billing.go
  • controller/channel-test.go
  • controller/channel.go
  • controller/channel_affinity_cache.go
  • controller/channel_upstream_update.go
  • controller/channel_upstream_update_test.go
  • controller/checkin.go
  • controller/codex_oauth.go
  • controller/codex_usage.go
  • controller/console_migrate.go
  • controller/custom_oauth.go
  • controller/deployment.go
  • controller/group.go
  • controller/log.go
  • controller/midjourney.go
  • controller/misc.go
  • controller/model_meta.go
  • controller/model_sync.go
  • controller/option.go
  • controller/passkey.go
  • controller/performance.go
  • controller/playground.go
  • controller/prefill_group.go
  • controller/pricing.go
  • controller/ratio_config.go
  • controller/ratio_sync.go
  • controller/relay.go
  • controller/secure_verification.go
  • controller/setup.go
  • controller/subscription.go
  • controller/subscription_payment_creem.go
  • controller/subscription_payment_epay.go
  • controller/subscription_payment_stripe.go
  • controller/telegram.go
  • controller/token.go
  • controller/topup.go
  • controller/topup_creem.go
  • controller/topup_stripe.go
  • controller/topup_waffo.go
  • controller/twofa.go
  • controller/usedata.go
  • controller/user.go
  • controller/vendor_meta.go
  • controller/wechat.go
  • dto/video.go
  • i18n/keys.go
  • i18n/locales/en.yaml
  • i18n/locales/zh-CN.yaml
  • i18n/locales/zh-TW.yaml
  • logger/logger.go
  • middleware/auth.go
  • middleware/email-verification-rate-limit.go
  • middleware/model-rate-limit.go
  • middleware/secure_verification.go
  • middleware/turnstile-check.go
  • model/ability.go
  • model/channel_cache.go
  • model/checkin.go
  • model/log.go
  • model/main.go
  • model/passkey.go
  • model/pricing_default.go
  • model/redemption.go
  • model/subscription.go
  • model/token.go
  • model/topup.go
  • model/twofa.go
  • model/usedata.go
  • model/user.go
  • relay/channel/gemini/relay-gemini.go
  • relay/channel/ollama/relay-ollama.go
  • relay/channel/task/jimeng/adaptor.go
  • relay/helper/price.go
  • relay/image_handler.go
  • relay/mjproxy_handler.go
  • service/billing.go
  • service/billing_session.go
  • service/channel.go
  • service/channel_affinity.go
  • service/error.go
  • service/group.go
  • service/passkey/service.go
  • service/passkey/session.go
  • service/quota.go
  • service/task_billing.go
  • service/task_polling.go
  • service/text_quota.go
  • setting/chat.go
  • setting/console_setting/validation.go
  • setting/operation_setting/payment_setting_old.go
  • setting/user_usable_group.go
  • web/i18next.config.js
  • web/src/components/auth/LoginForm.jsx
  • web/src/components/auth/PasswordResetConfirm.jsx
  • web/src/components/auth/PasswordResetForm.jsx
  • web/src/components/auth/RegisterForm.jsx
  • web/src/components/auth/TwoFAVerification.jsx
  • web/src/components/common/markdown/MarkdownRenderer.jsx
  • web/src/components/common/ui/CardTable.jsx
  • web/src/components/common/ui/JSONEditor.jsx
  • web/src/components/layout/Footer.jsx
  • web/src/components/layout/NoticeModal.jsx
  • web/src/components/layout/PageLayout.jsx
  • web/src/components/layout/SiderBar.jsx
  • web/src/components/layout/headerbar/HeaderLogo.jsx
  • web/src/components/layout/headerbar/LanguageSelector.jsx
  • web/src/components/layout/headerbar/NewYearButton.jsx
  • web/src/components/playground/CodeViewer.jsx
  • web/src/components/playground/CustomRequestEditor.jsx
  • web/src/components/playground/DebugPanel.jsx
  • web/src/components/playground/MessageContent.jsx
  • web/src/components/playground/ParameterControl.jsx
  • web/src/components/playground/SSEViewer.jsx
  • web/src/components/playground/ThinkingContent.jsx
  • web/src/components/settings/ChannelSelectorModal.jsx
  • web/src/components/settings/ChatsSetting.jsx
  • web/src/components/settings/CustomOAuthSetting.jsx
  • web/src/components/settings/DashboardSetting.jsx
  • web/src/components/settings/DrawingSetting.jsx
  • web/src/components/settings/ModelDeploymentSetting.jsx
  • web/src/components/settings/ModelSetting.jsx
  • web/src/components/settings/OperationSetting.jsx
  • web/src/components/settings/OtherSetting.jsx
  • web/src/components/settings/PaymentSetting.jsx
  • web/src/components/settings/PerformanceSetting.jsx
  • web/src/components/settings/PersonalSetting.jsx
  • web/src/components/settings/RateLimitSetting.jsx
  • web/src/components/settings/RatioSetting.jsx
  • web/src/components/settings/SystemSetting.jsx
  • web/src/components/settings/personal/cards/AccountManagement.jsx
  • web/src/components/settings/personal/cards/CheckinCalendar.jsx
  • web/src/components/settings/personal/cards/NotificationSettings.jsx
  • web/src/components/settings/personal/cards/PreferencesSettings.jsx
  • web/src/components/settings/personal/components/TwoFASetting.jsx
  • web/src/components/settings/personal/components/UserInfoHeader.jsx
  • web/src/components/setup/components/steps/DatabaseStep.jsx
  • web/src/components/setup/components/steps/UsageModeStep.jsx
  • web/src/components/table/channels/ChannelsColumnDefs.jsx
  • web/src/components/table/channels/ChannelsTable.jsx
  • web/src/components/table/channels/ChannelsTabs.jsx
  • web/src/components/table/channels/modals/ColumnSelectorModal.jsx
  • web/src/components/table/channels/modals/EditChannelModal.jsx
  • web/src/components/table/channels/modals/EditTagModal.jsx
  • web/src/components/table/channels/modals/MultiKeyManageModal.jsx
  • web/src/components/table/channels/modals/OllamaModelModal.jsx
  • web/src/components/table/channels/modals/ParamOverrideEditorModal.jsx
  • web/src/components/table/mj-logs/MjLogsColumnDefs.jsx
  • web/src/components/table/model-deployments/DeploymentsColumnDefs.jsx
  • web/src/components/table/model-deployments/modals/CreateDeploymentModal.jsx
  • web/src/components/table/model-deployments/modals/ExtendDurationModal.jsx
  • web/src/components/table/model-deployments/modals/UpdateConfigModal.jsx
  • web/src/components/table/model-deployments/modals/ViewDetailsModal.jsx
  • web/src/components/table/model-deployments/modals/ViewLogsModal.jsx
  • web/src/components/table/model-pricing/layout/header/PricingVendorIntro.jsx
  • web/src/components/table/models/modals/EditModelModal.jsx
  • web/src/components/table/models/modals/EditVendorModal.jsx
  • web/src/components/table/models/modals/MissingModelsModal.jsx
  • web/src/components/table/models/modals/PrefillGroupManagement.jsx
  • web/src/components/table/models/modals/SyncWizardModal.jsx
  • web/src/components/table/redemptions/modals/EditRedemptionModal.jsx
  • web/src/components/table/subscriptions/SubscriptionsColumnDefs.jsx
  • web/src/components/table/subscriptions/modals/AddEditSubscriptionModal.jsx
  • web/src/components/table/task-logs/TaskLogsColumnDefs.jsx
  • web/src/components/table/task-logs/TaskLogsTable.jsx
  • web/src/components/table/task-logs/modals/AudioPreviewModal.jsx
  • web/src/components/table/task-logs/modals/ColumnSelectorModal.jsx
  • web/src/components/table/tokens/TokensColumnDefs.jsx
  • web/src/components/table/tokens/index.jsx
  • web/src/components/table/tokens/modals/EditTokenModal.jsx
  • web/src/components/table/usage-logs/UsageLogsActions.jsx
  • web/src/components/table/usage-logs/modals/ChannelAffinityUsageCacheModal.jsx
  • web/src/components/table/users/UsersColumnDefs.jsx
  • web/src/components/table/users/modals/AddUserModal.jsx
  • web/src/components/table/users/modals/EditUserModal.jsx
  • web/src/components/table/users/modals/UserSubscriptionsModal.jsx
  • web/src/components/topup/RechargeCard.jsx
  • web/src/components/topup/index.jsx
  • web/src/components/topup/modals/PaymentConfirmModal.jsx
  • web/src/components/topup/modals/SubscriptionPurchaseModal.jsx
  • web/src/constants/channel.constants.js
  • web/src/helpers/api.js
  • web/src/helpers/dashboard.jsx
  • web/src/helpers/render.jsx
  • web/src/helpers/secureApiCall.js
  • web/src/helpers/utils.jsx
  • web/src/hooks/channels/useChannelsData.jsx
  • web/src/hooks/chat/useTokenKeys.js
  • web/src/hooks/common/useUserPermissions.js
  • web/src/hooks/dashboard/useDashboardCharts.jsx
  • web/src/hooks/dashboard/useDashboardData.js
  • web/src/hooks/mj-logs/useMjLogsData.js
  • web/src/hooks/model-deployments/useDeploymentsData.jsx
  • web/src/hooks/model-deployments/useModelDeploymentSettings.js
  • web/src/hooks/model-pricing/useModelPricingData.jsx
  • web/src/hooks/models/useModelsData.jsx
  • web/src/hooks/playground/useApiRequest.jsx
  • web/src/hooks/playground/useDataLoader.js
  • web/src/hooks/playground/useMessageActions.jsx
  • web/src/hooks/redemptions/useRedemptionsData.jsx
  • web/src/hooks/task-logs/useTaskLogsData.js
  • web/src/hooks/tokens/useTokensData.jsx
  • web/src/hooks/usage-logs/useUsageLogsData.jsx
  • web/src/hooks/users/useUsersData.jsx
  • web/src/i18n/i18n.js
  • web/src/i18n/language.js
  • web/src/i18n/locales/en.json
  • web/src/i18n/locales/fr.json
  • web/src/i18n/locales/ja.json
  • web/src/i18n/locales/ru.json
  • web/src/i18n/locales/vi.json
  • web/src/i18n/locales/zh-CN.json
  • web/src/i18n/locales/zh-TW.json
  • web/src/index.jsx
  • web/src/pages/About/index.jsx
  • web/src/pages/Chat/index.jsx
  • web/src/pages/Chat2Link/index.jsx
  • web/src/pages/Home/index.jsx
  • web/src/pages/Playground/index.jsx
  • web/src/pages/Setting/Dashboard/SettingsAPIInfo.jsx
  • web/src/pages/Setting/Dashboard/SettingsAnnouncements.jsx
  • web/src/pages/Setting/Dashboard/SettingsFAQ.jsx
  • web/src/pages/Setting/Dashboard/SettingsUptimeKuma.jsx
  • web/src/pages/Setting/Drawing/SettingsDrawing.jsx
  • web/src/pages/Setting/Model/SettingGlobalModel.jsx
  • web/src/pages/Setting/Model/SettingModelDeployment.jsx
  • web/src/pages/Setting/Operation/SettingsChannelAffinity.jsx
  • web/src/pages/Setting/Operation/SettingsHeaderNavModules.jsx
  • web/src/pages/Setting/Operation/SettingsLog.jsx
  • web/src/pages/Setting/Operation/SettingsSidebarModulesAdmin.jsx
  • web/src/pages/Setting/Payment/SettingsGeneralPayment.jsx
  • web/src/pages/Setting/Payment/SettingsPaymentGateway.jsx
  • web/src/pages/Setting/Payment/SettingsPaymentGatewayCreem.jsx
  • web/src/pages/Setting/Payment/SettingsPaymentGatewayStripe.jsx
  • web/src/pages/Setting/Payment/SettingsPaymentGatewayWaffo.jsx
  • web/src/pages/Setting/Performance/SettingsPerformance.jsx
  • web/src/pages/Setting/Ratio/ModelRatioSettings.jsx
  • web/src/pages/Setting/Ratio/ModelRationNotSetEditor.jsx
  • web/src/pages/Setting/Ratio/UpstreamRatioSync.jsx
  • web/src/services/secureVerification.js

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Merge upstream main into the contribution branch to clear PR conflict status. Resolve locale and settings conflicts by preserving both i18n additions and the latest quota display settings UI behavior.
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.

1 participant