Skip to content

feat(i18n): translate Soloist, new key rows and the remaining strings - #962

Merged
LargeModGames merged 1 commit into
mainfrom
feat/l10n-zh-remaining
Oct 30, 2026
Merged

LargeModGames merged 1 commit into
mainfrom
feat/l10n-zh-remaining

Conversation

@2570165831

@2570165831 2570165831 commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The last Chinese translation PR (refs #726). It fills the strings that were still English in the Simplified (zh-Hans) and Traditional (zh-Hant) tables, so what stays in English now is only names: Spotify, YouTube, Qobuz, Subsonic, Apple Music, the Winamp and Outrun screens, "English" in the language list, and the quit command.

  • Soloist playback engine: its settings rows and buttons, the offer and pairing popups, and the status messages (settings/zh_*.rs, popups.rs, status_infra.rs).
  • Key rows and help: jump to start, jump to end, Listening Party, and the help row for a setting's button.
  • Two English pieces the tables could not reach, which needed a small code change. English output stays as it was:
    • The Soloist audio quality choices are now mapped in option_label. The stored value is unchanged.
    • The expiry unit comes from Soloist's log as days, hours or minutes. soloist_expiry_unit now translates it, and an unknown unit stays as logged.
  • Wording:
    • zh-Hant choose_sources now says 來源, like the rest of that table.
    • stopped_following gets back the clause about your own playback having the speaker.
    • Normal is 标准 / 標準, the word Spotify's Traditional Chinese help page uses for that tier.
  • Tests:
    • Two assertions in src/gui/protocol.rs compared a table with itself and now compare with the Chinese text.
    • gui/e2e/localization.shot.ts now sends a later Discover update after the stale Settings message, waits for it to show, then checks the page is still zh-Hans. This proves the stale message was handled, as CodeRabbit suggested on feat(i18n): complete Chinese GUI statistics and social views #956.
    • Two new tests cover the expiry unit and the quality choices.
  • gui/src/bindings/ is regenerated.

Testing

macOS (aarch64), on top of bf9ce8e4:

  • cargo fmt --all --check: clean. cargo clippy -- -D warnings: clean on slim (telemetry,tui) and default, and with --locked --features soloist, which is what compiles the changed line in src/core/app/soloist.rs.
  • cargo test: slim 1806 passed; default 2316 passed, 8 ignored; default plus soloist (--locked) 2393 passed, 8 ignored; the gui feature set with the five sources 2226 passed, 30 ignored.
  • gui/: npm test 551 passed (61 files); npm run typecheck, npm run lint and npm run format:check clean.
  • Playwright scenes (e2e/*.shot.ts): 60 passed in the installed Google Chrome (channel: "chrome"). Firefox and WebKit were not run locally.

Not run: the Linux-only all-sources leg (PipeWire), which CI covers. I did not run the Soloist engine itself, so the new text has not been seen on a live Soloist session.

Additional notes

A native-speaker review of the wording is welcome; any fix is a one-line change in the table.

Summary by CodeRabbit

  • Localization
    • Expanded Simplified and Traditional Chinese translations across settings, help text, popups, playback status, and Soloist expiry messages.
    • Added localized labels for Soloist audio-quality options and additional settings and keyboard shortcuts.
    • Updated Traditional Chinese onboarding wording and clarified messages shown after stopping following a host.
    • Expiry durations now display localized units.

Fill the last strings of the Chinese tables: the Soloist playback engine,
the jump-to-start, jump-to-end and Listening Party key rows, and one help row.

Soloist's quality choices and its expiry unit reached the page as raw English,
so they get their own table entries. English output does not change.

Also use the same word for sources in zh-Hant, restore the lost clause in
stopped_following, and replace test assertions that compared a table with
itself.
@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between bf9ce8e and 15d34a6.

Files ignored due to path filters: 3
  • gui/src/bindings/InfraStatusStrings.ts is excluded by !gui/src/bindings/**
  • gui/src/bindings/SettingsStrings.ts is excluded by !gui/src/bindings/**
  • gui/src/bindings/strings.json is excluded by !gui/src/bindings/**
Files selected for processing: 14
  • gui/e2e/localization.shot.ts
  • gui/src/localization.test.tsx
  • src/core/app/soloist.rs
  • src/core/i18n/gui/zh_hans.rs
  • src/core/i18n/gui/zh_hant.rs
  • src/core/i18n/help.rs
  • src/core/i18n/popups.rs
  • src/core/i18n/settings.rs
  • src/core/i18n/settings/en.rs
  • src/core/i18n/settings/zh_hans.rs
  • src/core/i18n/settings/zh_hant.rs
  • src/core/i18n/status_infra.rs
  • src/core/i18n/tests.rs
  • src/gui/protocol.rs

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.

Walkthrough

This change adds Chinese translations for settings, Soloist status and pairing text, and GUI messages. It localizes Soloist expiry units, updates the Traditional Chinese source-selection label, and adds tests for localization and stale settings-message handling.

Changes: Localization Updates

Layer / File(s) Summary
Settings labels and options
src/core/i18n/settings.rs, src/core/i18n/settings/*, src/core/i18n/tests.rs
Adds English and Chinese Soloist audio-quality labels and Chinese settings labels and descriptions. The option mapping returns localized quality labels, with tests for selected labels.
Soloist status and expiry units
src/core/app/soloist.rs, src/core/i18n/status_infra.rs, src/core/i18n/tests.rs
Maps Soloist expiry units to localized strings and adds Chinese Soloist status and playback-engine messages. The expiry notice uses the unit mapping.
Soloist popup and help text
src/core/i18n/popups.rs, src/core/i18n/help.rs
Adds Simplified and Traditional Chinese text for Soloist offer and pairing popups, plus settings-button help text.
GUI messages and localization assertions
src/core/i18n/gui/zh_*.rs, gui/e2e/localization.shot.ts, gui/src/localization.test.tsx, src/gui/protocol.rs
Updates Chinese GUI messages and the Traditional Chinese source-selection heading. Tests assert the updated heading and explicit Chinese strings.

Stale Settings Message Test

Layer / File(s) Summary
Verify newer Discover update
gui/e2e/localization.shot.ts
The test sends a Discover message after a stale Settings message, then checks that the shelf title updates and the document language remains zh-Hans.

Priority: Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Feature

Possibly related PRs

Merge Risk: Minimal · up to 15d34

The localization changes are mergeable; no confirmed user-facing or runtime regression remains.

Pre-merge checks: Passed 4
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title uses the valid conventional-commit prefix feat(i18n):, describes the translation changes, and uses an imperative subject.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
✨ Simplify code
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@codecov

codecov Bot commented Oct 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@LargeModGames
LargeModGames merged commit 0083d11 into main Oct 30, 2026
39 checks passed
@LargeModGames
LargeModGames deleted the feat/l10n-zh-remaining branch October 30, 2026 17:02
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