Skip to content

New Crowdin updates - #22

Open
Yoddikko wants to merge 2 commits into
mainfrom
l10n_main
Open

New Crowdin updates#22
Yoddikko wants to merge 2 commits into
mainfrom
l10n_main

Conversation

@Yoddikko

@Yoddikko Yoddikko commented Jul 28, 2026

Copy link
Copy Markdown
Owner

CodeAnt-AI Description

Refresh translations and add coverage for newly available interface text

What Changed

  • Updated Polish wording across playback, audio, AI, account, settings, and error messages
  • Added French translations for listening counts, account status, unsubscribe, and supporter messaging
  • Added the new “Join” label across supported languages
  • Marked newly completed translations as available in the app

Impact

✅ Clearer Polish interface text
✅ More translated French messages
✅ Localized channel membership actions

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

@codeant-ai

codeant-ai Bot commented Jul 28, 2026

Copy link
Copy Markdown

🤖 CodeAnt AI — Review Status

Status Commit Started (UTC) Finished (UTC)
✅ Reviewed your PR 270e3bf Jul 28, 2026 · 07:10 07:13

@codeant-ai

codeant-ai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@codeant-ai codeant-ai Bot added the size:L This PR changes 100-499 lines, ignoring generated files label Jul 28, 2026
"state" : "new",
"value" : "%arg songs listened today"
"state" : "translated",
"value" : "%a morceaux écoutés aujourd'hui"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggestion: The French translation drops the rg portion of the %arg placeholder and changes it to %a. Because the source key uses %arg for the song-count argument, the formatter will not substitute the count correctly and the displayed statistic can contain a malformed or missing value. [api mismatch]

Severity Level: Major ⚠️
- ❌ French history statistics can display malformed song counts.
- ⚠️ `HistoryView` localization is incorrect for French users.
- ⚠️ Packaged and development builds can show different output.
Steps of Reproduction ✅
1. Use the history view with a French language override enabled;
`Sources/Kaset/Views/HistoryView.swift:125` constructs the localized key from
`"\(todayCount) songs listened today"`.

2. The corresponding catalog entry is the `%arg songs listened today` key at
`Sources/Kaset/Resources/Localizable.xcstrings:755`, whose comment identifies `%arg` as
the song-count argument.

3. For French, `Sources/Kaset/Resources/Localizable.xcstrings:812-815` changes that
argument token to `%a`, dropping `rg`.

4. Resolve the key with a nonzero `todayCount` and observe that the formatter cannot
substitute the expected `%arg` argument, so the French statistic is malformed or does not
display the song count correctly. The checked-in French runtime file currently still
contains the old untranslated value at
`Sources/Kaset/Resources/fr.lproj/Localizable.strings:6`, while packaged catalog builds
use the new malformed value.

Fix in Cursor Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** Sources/Kaset/Resources/Localizable.xcstrings
**Line:** 815:815
**Comment:**
	*Api Mismatch: The French translation drops the `rg` portion of the `%arg` placeholder and changes it to `%a`. Because the source key uses `%arg` for the song-count argument, the formatter will not substitute the count correctly and the displayed statistic can contain a malformed or missing value.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

"stringUnit" : {
"state" : "translated",
"value" : "Uzyskaj dostęp do swoich playlist i polubionych utworów"
"value" : "Uzyskaj dostęp do swoich playlist i ulubionych utworów"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggestion: The catalog is updated without regenerating the checked-in .lproj/Localizable.strings files. swift build and the language override load those .strings resources directly, so this catalog value will not be visible in development or override-bundle runs and will differ from packaged builds that compile the catalog. Run Scripts/sync-lproj.py and include the generated resource changes. [api mismatch]

Severity Level: Critical 🚨
- ❌ SwiftPM language overrides show stale translations.
- ⚠️ Packaged builds differ from development builds.
- ⚠️ Multiple Crowdin updates can remain invisible at runtime.
Steps of Reproduction ✅
1. Build or run the project through SwiftPM. `Package.swift:36-57` excludes
`Localizable.xcstrings` and processes the checked-in `.lproj` directories as runtime
resources.

2. Select Polish through the application language override;
`Sources/Kaset/Utilities/AppLocalization.swift:27-38` loads the selected `.lproj` bundle,
and `Sources/Kaset/Utilities/AppLocalization.swift:42-59` resolves localized strings from
that bundle.

3. The PR changes the Polish catalog value at
`Sources/Kaset/Resources/Localizable.xcstrings:2534` to `Uzyskaj dostęp do swoich playlist
i ulubionych utworów`.

4. The corresponding checked-in Polish resource remains `Uzyskaj dostęp do swoich playlist
i polubionych utworów` at `Sources/Kaset/Resources/pl.lproj/Localizable.strings:15`, so
SwiftPM and language-override runs continue using stale text.

5. Build the packaged app instead; `Scripts/build-app.sh:381-385` compiles the catalog,
causing packaged output to use the new catalog value and producing inconsistent
translations between development/override and packaged builds. The repository
documentation explicitly requires regenerating `.lproj` files at
`docs/adr/0013-localization-strategy.md:28-30`.

Fix in Cursor Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** Sources/Kaset/Resources/Localizable.xcstrings
**Line:** 2534:2534
**Comment:**
	*Api Mismatch: The catalog is updated without regenerating the checked-in `.lproj/Localizable.strings` files. `swift build` and the language override load those `.strings` resources directly, so this catalog value will not be visible in development or override-bundle runs and will differ from packaged builds that compile the catalog. Run `Scripts/sync-lproj.py` and include the generated resource changes.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Comment on lines +12341 to +12342
"state" : "translated",
"value" : "Pasma"
"value" : ""

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggestion: The Polish Bands localization is marked as translated but contains an empty value. Packaged builds that compile this catalog can resolve the key to a blank label instead of falling back to the source text or an existing translation. [logic error]

Severity Level: Major ⚠️
- ❌ Polish packaged builds lose the equalizer section label.
- ⚠️ Equalizer settings become less understandable.
- ⚠️ Catalog and checked-in runtime translations disagree.
Steps of Reproduction ✅
1. Open the equalizer settings in Polish;
`Sources/Kaset/Views/EqualizerSettingsView.swift:92` requests the localized `Bands` label.

2. The catalog entry for `Bands` is defined at
`Sources/Kaset/Resources/Localizable.xcstrings:12227`, and its Polish localization is
marked translated at `Sources/Kaset/Resources/Localizable.xcstrings:12339-12342`.

3. The Polish string value is empty at
`Sources/Kaset/Resources/Localizable.xcstrings:12342`, so a packaged build that compiles
the catalog through `Scripts/build-app.sh:381-385` resolves the label to an empty string.

4. Observe that the equalizer section loses its `Bands` label instead of displaying the
source key or the existing Polish runtime translation `Pasma` currently present at
`Sources/Kaset/Resources/pl.lproj/Localizable.strings:68`.

Fix in Cursor Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** Sources/Kaset/Resources/Localizable.xcstrings
**Line:** 12341:12342
**Comment:**
	*Logic Error: The Polish `Bands` localization is marked as translated but contains an empty value. Packaged builds that compile this catalog can resolve the key to a blank label instead of falling back to the source text or an existing translation.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant