Translations update from Hosted Weblate - #52
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe PR updates Ukrainian translations for duration, profile, playback, recently played content, listening statistics, sleep timer, and audio normalisation. It adds Portuguese translations for content, authentication, settings, and playback UI, plus German artist and listening-statistics translations. ChangesLocalization updates
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@lib/l10n/translations/sono_uk.arb`:
- Around line 1519-1520: Update the settingsProfileStatsHoursMinutes translation
to use the Ukrainian hours abbreviation “год” instead of “гол”, leaving the
minutes abbreviation and surrounding formatting unchanged.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: d65ae930-e567-4af5-ae01-7093305ecd25
📒 Files selected for processing (1)
lib/l10n/translations/sono_uk.arb
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@lib/l10n/translations/sono_uk.arb`:
- Line 1601: Update the normalisationPreventClippingSubtitle translation to use
declarative wording that describes automatic gain reduction to prevent clipping,
replacing the current imperative instruction while preserving the existing
meaning.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: adc31359-797e-4813-908e-011f529cc228
📒 Files selected for processing (1)
lib/l10n/translations/sono_uk.arb
| "@normalisationPreventClipping": { | ||
| "description": "Toggle that lowers the gain instead of letting loud peaks distort." | ||
| }, | ||
| "normalisationPreventClippingSubtitle": "Зменшуйте підсилення замість того, щоб дозволяти пікам спотворювати звук", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Describe the toggle behavior instead of instructing the user.
normalisationPreventClippingSubtitle uses the imperative Зменшуйте (“reduce”), but this subtitle describes an automatic gain adjustment. Use a declarative translation.
Proposed fix
- "normalisationPreventClippingSubtitle": "Зменшуйте підсилення замість того, щоб дозволяти пікам спотворювати звук",
+ "normalisationPreventClippingSubtitle": "Зменшує підсилення, не даючи гучним пікам спотворювати звук",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "normalisationPreventClippingSubtitle": "Зменшуйте підсилення замість того, щоб дозволяти пікам спотворювати звук", | |
| "normalisationPreventClippingSubtitle": "Зменшує підсилення, не даючи гучним пікам спотворювати звук", |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@lib/l10n/translations/sono_uk.arb` at line 1601, Update the
normalisationPreventClippingSubtitle translation to use declarative wording that
describes automatic gain reduction to prevent clipping, replacing the current
imperative instruction while preserving the existing meaning.
a13b924 to
abb654b
Compare
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@lib/l10n/translations/sono_pt.arb`:
- Around line 522-524: Update the edit-tags failure handling around the
MetadataReader.writeAsync and ScanService.rescanSingleSong paths to use a new
localization key with a rescan-specific message when rescanning fails, while
retaining editTagsSaveFailed for write failures. Add the key in sono_pt.arb and
revise editTagsSaveFailed’s description to reference its actual consumer rather
than SonoQuery.updateTags.
- Line 550: Update the authSignIn translation to use a Portuguese sign-in phrase
such as “Entrar” or “Fazer login,” replacing “Registrar-se” while leaving other
translations unchanged.
- Line 502: Correct the five Portuguese translation values in sono_pt.arb,
including songSheetEmptyActions, by applying the proposed accents and grammar
fixes while preserving the existing translation keys and ARB structure.
- Line 501: Update the homeSectionRecentlyPlayed translation value from
“Recentemente Reproduzido” to the plural label “Reproduções recentes,”
preserving the existing key and ARB structure.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: b4bd9e9c-5854-4872-b292-3174dc195ad6
📒 Files selected for processing (1)
lib/l10n/translations/sono_pt.arb
| "@songSheetTabInfo": { | ||
| "description": "Bottom toggle on the media options sheet. Switches to the metadata view." | ||
| }, | ||
| "homeSectionRecentlyPlayed": "Recentemente Reproduzido", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -eu
printf '%s\n' '--- translation entry ---'
sed -n '492,508p' lib/l10n/translations/sono_pt.arb
printf '%s\n' '--- queue-origin helper ---'
sed -n '1,70p' lib/utils/queue_origin_label.dart
printf '%s\n' '--- all references ---'
rg -n -C 3 'homeSectionRecentlyPlayed' --glob '!build/**' --glob '!node_modules/**'
printf '%s\n' '--- changed translation keys ---'
git diff -- lib/l10n/translations/sono_pt.arb | sed -n '1,220p'Repository: appsono/sono-new
Length of output: 2415
🏁 Script executed:
#!/bin/bash
set -eu
python3 - <<'PY'
import json
from pathlib import Path
arb = Path("lib/l10n/translations/sono_pt.arb")
data = json.loads(arb.read_text())
print("ARB parses:", True)
print("translation:", data["homeSectionRecentlyPlayed"])
for path in Path(".").rglob("*"):
if path.is_file() and any(part in {".git", "build", "node_modules"} for part in path.parts):
continue
try:
text = path.read_text()
except (UnicodeDecodeError, OSError):
continue
if "homeSectionRecentlyPlayed" in text:
print(f"{path}:")
for number, line in enumerate(text.splitlines(), 1):
if "homeSectionRecentlyPlayed" in line:
print(f" {number}: {line.strip()}")
PY
printf '%s\n' '--- English source wording ---'
rg -n -C 2 '"homeSectionRecentlyPlayed"' lib/l10n/translations --hidden -uuu || true
printf '%s\n' '--- locale file status ---'
git status --short -- lib/l10n/translations/sono_pt.arb lib/utils/queue_origin_label.dartRepository: appsono/sono-new
Length of output: 2500
Use a plural label for recently played content.
homeSectionRecentlyPlayed is used for the recently played section and queue-origin labels. Replace Recentemente Reproduzido with Reproduções recentes.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@lib/l10n/translations/sono_pt.arb` at line 501, Update the
homeSectionRecentlyPlayed translation value from “Recentemente Reproduzido” to
the plural label “Reproduções recentes,” preserving the existing key and ARB
structure.
| "description": "Bottom toggle on the media options sheet. Switches to the metadata view." | ||
| }, | ||
| "homeSectionRecentlyPlayed": "Recentemente Reproduzido", | ||
| "songSheetEmptyActions": "Sem ações disponiveis", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -e
printf '%s\n' '--- target lines ---'
nl -ba lib/l10n/translations/sono_pt.arb | sed -n '496,510p;566,575p;583,595p'
printf '%s\n' '--- file syntax ---'
python3 - <<'PY'
import json
from pathlib import Path
p = Path("lib/l10n/translations/sono_pt.arb")
with p.open(encoding="utf-8") as f:
data = json.load(f)
for key in (
"songSheetEmptyActions",
"songSheetEmptyInfo",
"settingsPlannedBody",
"settingsProfileSubtitle",
"settingsAppearance",
):
print(f"{key}: {data.get(key)!r}")
PY
printf '%s\n' '--- focused diff ---'
git diff --unified=2 -- lib/l10n/translations/sono_pt.arbRepository: appsono/sono-new
Length of output: 515
🏁 Script executed:
#!/bin/bash
set -e
python3 - <<'PY'
from pathlib import Path
path = Path("lib/l10n/translations/sono_pt.arb")
keys = {
"songSheetEmptyActions",
"songSheetEmptyInfo",
"settingsPlannedBody",
"settingsProfileSubtitle",
"settingsAppearance",
}
for number, line in enumerate(path.read_text(encoding="utf-8").splitlines(), 1):
if any(f'"{key}"' in line for key in keys):
print(f"{number}: {line}")
text = path.read_text(encoding="utf-8")
for old, new in (
("Sem ações disponiveis", "Sem ações disponíveis"),
("Sem informações disponiveis", "Sem informações disponíveis"),
(
"Essa função esta planejada mas não esta disponível ainda.",
"Essa função está planejada, mas ainda não está disponível.",
),
("Nome, avatar e estátiscas", "Nome, avatar e estatísticas"),
("Aparencia", "Aparência"),
):
print(f"{old!r}: occurrences={text.count(old)}, replacement={new!r}")
PYRepository: appsono/sono-new
Length of output: 928
Correct the Portuguese strings.
Update the five values with the proposed accents and grammar corrections.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@lib/l10n/translations/sono_pt.arb` at line 502, Correct the five Portuguese
translation values in sono_pt.arb, including songSheetEmptyActions, by applying
the proposed accents and grammar fixes while preserving the existing translation
keys and ARB structure.
| "editTagsSaveFailed": "Não foi possível salvar tags", | ||
| "@editTagsSaveFailed": { | ||
| "description": "Snackbar shown when SonoQuery.updateTags returns false or throws." |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
Use a separate message for rescan failures.
lib/pages/global/edit_tags_page.dart:178-213 shows editTagsSaveFailed for both a failed MetadataReader.writeAsync call and a failed ScanService.rescanSingleSong call. In the second path, the tags were already written, so Não foi possível salvar tags is inaccurate. Add a separate rescan-failure key and update the catch path. Also update the metadata description because it references SonoQuery.updateTags, which does not match the supplied consumer.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@lib/l10n/translations/sono_pt.arb` around lines 522 - 524, Update the
edit-tags failure handling around the MetadataReader.writeAsync and
ScanService.rescanSingleSong paths to use a new localization key with a
rescan-specific message when rescanning fails, while retaining
editTagsSaveFailed for write failures. Add the key in sono_pt.arb and revise
editTagsSaveFailed’s description to reference its actual consumer rather than
SonoQuery.updateTags.
| "@editTagsGenresHint": { | ||
| "description": "Hint shown inside the genres field on the edit tags page to indicate how to enter multiple genres." | ||
| }, | ||
| "authSignIn": "Registrar-se", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -e
printf '%s\n' '--- target translation ---'
sed -n '535,560p' lib/l10n/translations/sono_pt.arb
printf '%s\n' '--- related Portuguese authentication keys ---'
rg -n '"auth(SignIn|SignUp|LogIn|Register|Create|.*)"' lib/l10n/translations -g '*.arb' | head -120
printf '%s\n' '--- authSignIn usages and metadata ---'
rg -n -C 3 'authSignIn|Registrar-se|Fazer login|Entrar' lib test .github 2>/dev/null | head -240Repository: appsono/sono-new
Length of output: 6840
Use a sign-in translation for authSignIn.
Registrar-se means creating an account, not signing in. Replace it with Entrar or Fazer login.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@lib/l10n/translations/sono_pt.arb` at line 550, Update the authSignIn
translation to use a Portuguese sign-in phrase such as “Entrar” or “Fazer
login,” replacing “Registrar-se” while leaving other translations unchanged.
abb654b to
6666df3
Compare
Currently translated at 94.8% (383 of 404 strings) Translation: Sono/Sono App Translate-URL: https://hosted.weblate.org/projects/sono/sono-app/uk/
Currently translated at 100.0% (404 of 404 strings) Translation: Sono/Sono App Translate-URL: https://hosted.weblate.org/projects/sono/sono-app/uk/
Currently translated at 43.0% (174 of 404 strings) Translation: Sono/Sono App Translate-URL: https://hosted.weblate.org/projects/sono/sono-app/pt/
Currently translated at 50.0% (202 of 404 strings) Translation: Sono/Sono App Translate-URL: https://hosted.weblate.org/projects/sono/sono-app/pt/
Currently translated at 62.3% (252 of 404 strings) Translation: Sono/Sono App Translate-URL: https://hosted.weblate.org/projects/sono/sono-app/pt/
2934d20 to
61c737b
Compare
Currently translated at 100.0% (418 of 418 strings) Translation: Sono/Sono App Translate-URL: https://hosted.weblate.org/projects/sono/sono-app/de/
Translations update from Hosted Weblate for Sono/Sono App.
Current translation status:
Summary by CodeRabbit