Skip to content

Translations update from Hosted Weblate - #52

Merged
mathiiiiiis merged 6 commits into
appsono:mainfrom
weblate:weblate-sono-sono-app
Aug 12, 2026
Merged

Translations update from Hosted Weblate#52
mathiiiiiis merged 6 commits into
appsono:mainfrom
weblate:weblate-sono-sono-app

Conversation

@weblate

@weblate weblate commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Translations update from Hosted Weblate for Sono/Sono App.

Current translation status:

Weblate translation status

Summary by CodeRabbit

  • Localization
    • Corrected the Ukrainian long-duration abbreviation and refined profile and headphone playback labels.
    • Added Ukrainian translations for recently played content, listening statistics, sleep timer states and actions, and audio normalization controls.
    • Added Portuguese translations for recently played content, song details and empty states, tag editing, authentication, settings navigation and search, profile, appearance, language, playback, and audio normalization options.
    • Added German translations for discographies, filtering, top songs, playlists, listening statistics, and related artists.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4c9ea203-695a-43bf-bbb3-26109a0ea620

📥 Commits

Reviewing files that changed from the base of the PR and between 2934d20 and c3ef889.

📒 Files selected for processing (1)
  • lib/l10n/translations/sono_de.arb

📝 Walkthrough

Walkthrough

The 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.

Changes

Localization updates

Layer / File(s) Summary
Ukrainian existing labels
lib/l10n/translations/sono_uk.arb
The duration abbreviation, profile subtitle, and headphone reconnect label were updated.
Ukrainian playback and profile strings
lib/l10n/translations/sono_uk.arb
Strings were added for recently played content, profile listening statistics, sleep-timer controls, and audio normalisation.
Portuguese UI localization
lib/l10n/translations/sono_pt.arb
Translations were added for recently played content, song-sheet states, tag editing, authentication, settings navigation, profile, appearance, language, playback, and audio normalisation settings.
German artist and statistics strings
lib/l10n/translations/sono_de.arb
Translations were added for artist appearance, discography states, top songs, playlists, listening statistics, and related artists.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

  • appsono/sono-new#24: Both PRs modify Ukrainian localization entries, including duration-related translations.
  • appsono/sono-new#35: Both PRs update Ukrainian playback, sleep-timer, and normalisation labels.
  • appsono/sono-new#38: Both PRs update localization entries for settings, profile, playback, sleep timer, and normalisation.

Suggested reviewers: mathiiiiiiis, mathiiiiiis

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: updating app translations from Hosted Weblate.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 6671f02 and 879e8c1.

📒 Files selected for processing (1)
  • lib/l10n/translations/sono_uk.arb

Comment thread lib/l10n/translations/sono_uk.arb

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 879e8c1 and 75a8556.

📒 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": "Зменшуйте підсилення замість того, щоб дозволяти пікам спотворювати звук",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 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.

Suggested change
"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.

@weblate
weblate force-pushed the weblate-sono-sono-app branch 7 times, most recently from a13b924 to abb654b Compare August 11, 2026 18:28

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 75a8556 and abb654b.

📒 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",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 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.dart

Repository: 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",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 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.arb

Repository: 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}")
PY

Repository: 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.

Comment on lines +522 to +524
"editTagsSaveFailed": "Não foi possível salvar tags",
"@editTagsSaveFailed": {
"description": "Snackbar shown when SonoQuery.updateTags returns false or throws."

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ 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",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 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 -240

Repository: 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.

@weblate
weblate force-pushed the weblate-sono-sono-app branch from abb654b to 6666df3 Compare August 11, 2026 18:39
Kefir2105 and others added 5 commits August 12, 2026 03:35
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/
@weblate
weblate force-pushed the weblate-sono-sono-app branch from 2934d20 to 61c737b Compare August 12, 2026 03:35
Currently translated at 100.0% (418 of 418 strings)

Translation: Sono/Sono App
Translate-URL: https://hosted.weblate.org/projects/sono/sono-app/de/
@mathiiiiiis
mathiiiiiis merged commit 10fe61a into appsono:main Aug 12, 2026
2 of 3 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.

4 participants