Skip to content

Conversation

@muminkoykiran
Copy link
Contributor

@muminkoykiran muminkoykiran commented Dec 8, 2025

Summary

  • Add Qt Linguist translation infrastructure for Linux app
  • Wrap UI strings with qsTr() in QML files
  • Wrap menu strings with tr() in C++ files
  • Add automatic locale detection via QTranslator
  • Create Turkish translation file (librepods_tr.ts)

Changes

  • CMakeLists.txt: Added Qt LinguistTools and translation build configuration
  • main.cpp: Added QTranslator loader for automatic system locale detection
  • Main.qml: Wrapped all user-facing strings with qsTr()
  • trayiconmanager.cpp: Wrapped tray menu strings with tr()
  • translations/librepods_tr.ts: Turkish translations for all UI elements

Translations include

  • Connection status (Connected/Disconnected)
  • Noise control modes (Off, Noise Cancellation, Transparency, Adaptive)
  • Settings page labels and options
  • Tray menu items
  • System notifications

Note

This also sets up the i18n infrastructure for future translations in other languages.

Summary by CodeRabbit

  • New Features

    • Added localization support and included a Turkish translation so the UI can display in Turkish.
    • App now detects the system language at startup and loads available translations automatically.
  • Chores

    • Translation files are built and installed with the application so translated resources are deployed alongside the app.

✏️ Tip: You can customize this high-level summary in your review settings.

- Add Qt Linguist translation infrastructure to CMakeLists.txt
- Wrap UI strings with qsTr() in Main.qml
- Wrap menu strings with tr() in trayiconmanager.cpp
- Add QTranslator loader in main.cpp for automatic locale detection
- Create Turkish translation file (librepods_tr.ts)

Translations include:
- Main window: connection status, noise control modes, settings
- Tray menu: all menu items and tooltips
- System notifications
Copilot AI review requested due to automatic review settings December 8, 2025 18:03
@coderabbitai
Copy link

coderabbitai bot commented Dec 8, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

The PR adds i18n: build integration for Qt Linguist tools, wraps UI strings with qsTr()/tr() in QML and C++, loads translations at runtime from multiple locations, and adds a Turkish translation TS file.

Changes

Cohort / File(s) Summary
Build: CMake i18n
linux/CMakeLists.txt
Adds LinguistTools to Qt components, defines TS_FILES, invokes qt_add_translations(...), and installs generated .qm files.
QML string localization
linux/Main.qml
Wraps user-facing strings with qsTr() across the UI (labels, buttons, tooltips, segmented controls). No logic changes.
C++ string localization & runtime loading
linux/trayiconmanager.cpp, linux/main.cpp
Wraps UI strings in tr() in the tray manager; main.cpp now loads and installs a QTranslator based on system locale from multiple search paths.
Translation resource
linux/translations/librepods_tr.ts
New Qt Linguist TS file providing Turkish (tr_TR) translations for contexts: Main, TrayIconManager, AirPodsTrayApp.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

  • Inspect main.cpp locale detection and ordered search paths for loading .qm files.
  • Verify CMakeLists.txt qt_add_translations() usage and install target correctness.
  • Spot-check Main.qml and trayiconmanager.cpp to ensure all visible strings are wrapped and contextually correct.
  • Review librepods_tr.ts for completeness and matching source strings.

Poem

🐰 I hopped through strings and stitched them new,
qsTr and tr hummed a soft “merhaba” too,
From tray to main I nibbled every line,
Now Turkish blooms where UI words shine. 🌸

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding Turkish translations infrastructure and Turkish translation files to the Linux application.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3538106 and b63886f.

📒 Files selected for processing (1)
  • linux/main.cpp (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • linux/main.cpp

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.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
linux/Main.qml (1)

155-158: Consider using a placeholder for better i18n support.

Concatenating a translated string with a value (qsTr("Adaptive Noise Level: ") + parent.value) can cause issues in languages with different word orders. Consider using qsTr() with an argument placeholder.

-                        text: qsTr("Adaptive Noise Level: ") + parent.value
+                        text: qsTr("Adaptive Noise Level: %1").arg(parent.value)
linux/trayiconmanager.cpp (1)

37-41: Consider using argument substitution for the tooltip.

Similar to the QML code, concatenating translated strings with values can cause localization issues. Qt's tr() supports argument substitution.

-    trayIcon->setToolTip(tr("Battery Status: ") + status);
+    trayIcon->setToolTip(tr("Battery Status: %1").arg(status));
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0e1f784 and 3538106.

📒 Files selected for processing (5)
  • linux/CMakeLists.txt (2 hunks)
  • linux/Main.qml (8 hunks)
  • linux/main.cpp (2 hunks)
  • linux/translations/librepods_tr.ts (1 hunks)
  • linux/trayiconmanager.cpp (4 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
linux/trayiconmanager.cpp (2)
linux/main.cpp (4)
  • status (370-374)
  • status (370-370)
  • status (957-957)
  • status (958-958)
linux/deviceinfo.hpp (3)
  • status (39-46)
  • status (39-39)
  • status (209-209)
🪛 Biome (2.1.2)
linux/translations/librepods_tr.ts

[error] 1-1: Expected a type but instead found '?'.

Expected a type here.

(parse)


[error] 1-1: expected : but instead found version

Remove version

(parse)


[error] 1-1: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 1-1: Expected an expression for the left hand side of the > operator.

This operator requires a left hand side value

(parse)


[error] 2-2: Expected a type but instead found '!'.

Expected a type here.

(parse)


[error] 2-2: expected : but instead found TS

Remove TS

(parse)


[error] 3-3: expected > but instead found version

Remove version

(parse)


[error] 2-3: Invalid assignment to TS> <TS version

This expression cannot be assigned to

(parse)


[error] 3-3: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 5-5: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 7-7: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 9-9: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 10-10: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 12-12: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 12-12: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 13-13: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 14-14: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 16-16: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 17-17: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 18-18: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 19-19: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 20-20: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 20-20: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 21-21: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 22-22: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 24-24: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 25-25: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 26-26: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 28-28: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 29-29: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 30-30: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 31-31: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 31-31: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 32-32: Expected a type but instead found '/'.

Expected a type here.

(parse)


[error] 32-32: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 32-32: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 32-32: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 32-32: Expected a type but instead found '/'.

Expected a type here.

(parse)


[error] 33-33: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 34-34: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 35-36: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 36-36: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 36-37: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 38-38: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 39-39: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 40-40: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 40-40: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 40-41: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 42-42: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 43-43: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 44-44: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 46-46: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 47-47: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 47-47: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 47-47: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 47-48: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 48-48: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 48-48: Expected a type but instead found '/'.

Expected a type here.

(parse)


[error] 48-48: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 48-48: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 48-49: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 49-49: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 50-50: Expected a type but instead found '/'.

Expected a type here.

(parse)


[error] 50-50: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 51-51: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 52-52: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 52-52: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 53-54: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 55-55: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 55-55: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 56-56: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 56-56: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 57-57: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 57-58: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 59-59: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 59-59: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 61-61: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 63-63: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 63-63: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 64-64: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 64-64: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 64-64: expected ( but instead found Android

Remove Android

(parse)


[error] 64-64: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 65-65: expected ) but instead found ile

Remove ile

(parse)


[error] 65-65: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 64-65: with statements are not allowed in strict mode

(parse)


[error] 65-66: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 66-67: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 67-67: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 67-67: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 68-68: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 68-68: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 68-68: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 69-70: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 70-71: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 71-71: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 71-71: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 71-71: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 72-72: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 72-72: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 72-72: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 73-74: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 74-75: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 75-75: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 75-75: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 76-76: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 76-76: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 76-76: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 76-76: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 78-79: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 79-79: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 79-79: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 79-79: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 79-79: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 80-80: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 80-80: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 80-80: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 80-80: Using declarations must have an initialized value.

This variable needs to be initialized.

(parse)


[error] 80-80: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 81-81: expected , but instead found noise

Remove noise

(parse)


[error] 81-81: expected , but instead found reduction

Remove reduction

(parse)


[error] 81-81: expected , but instead found uses

Remove uses

(parse)


[error] 81-81: expected , but instead found more

Remove more

(parse)


[error] 81-81: expected , but instead found battery

Remove battery

(parse)


[error] 81-81: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 82-82: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 82-82: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 82-82: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 82-82: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 82-82: expected , but instead found fazla

Remove fazla

(parse)


[error] 82-83: expected , but instead found gürültü

Remove gürültü

(parse)


[error] 83-83: expected , but instead found azaltma

Remove azaltma

(parse)


[error] 84-84: expected , but instead found daha

Remove daha

(parse)


[error] 84-85: expected , but instead found fazla

Remove fazla

(parse)


[error] 85-85: expected , but instead found pil

Remove pil

(parse)


[error] 85-85: expected , but instead found kullanır

Remove kullanır

(parse)


[error] 85-85: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 85-85: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 86-86: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 86-86: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 86-86: Expected a type but instead found '/'.

Expected a type here.

(parse)


[error] 86-86: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 88-89: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 89-89: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 89-89: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 89-89: Expected a type but instead found '/'.

Expected a type here.

(parse)


[error] 90-90: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 90-90: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 91-91: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 93-93: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 93-93: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 94-94: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 94-94: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 94-94: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 94-94: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 96-97: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 97-97: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 97-97: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 97-97: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 98-98: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 98-98: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 98-98: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 98-98: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 98-98: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 98-98: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 99-100: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 100-101: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 101-101: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 102-102: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 102-102: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 104-104: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 104-104: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 105-105: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 106-106: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 106-106: Expected a type but instead found '/'.

Expected a type here.

(parse)


[error] 107-107: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 108-108: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 108-108: Expected a type but instead found '/'.

Expected a type here.

(parse)


[error] 109-109: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 109-109: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 112-112: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 113-113: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 113-113: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 115-115: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 116-116: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 116-116: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 117-117: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 117-117: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 118-118: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 120-120: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 120-120: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 121-121: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 121-121: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 123-123: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 125-125: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 125-125: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 128-128: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 129-129: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 129-129: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 130-131: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 131-131: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 133-133: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 133-133: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 133-133: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 136-136: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 137-137: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 137-137: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 141-141: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 143-143: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 143-143: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 143-143: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 144-144: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 145-146: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 146-146: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 147-147: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 147-147: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 147-147: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 148-148: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 148-148: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 148-148: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 148-148: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 148-149: Expected a semicolon or an implicit semicolon after a statement, but found none

An explicit or implicit semicolon is expected here...

...Which is required to end this statement

(parse)


[error] 150-150: unterminated regex literal

...but the line ends here

a regex literal starts there...

(parse)


[error] 1-1: Unexpected constant condition.

(lint/correctness/noConstantCondition)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Agent
🔇 Additional comments (10)
linux/Main.qml (2)

84-84: LGTM!

The connection status text is correctly wrapped with qsTr() for translation support.


131-137: LGTM!

Noise control mode labels are correctly internationalized.

linux/trayiconmanager.cpp (1)

57-106: LGTM!

Menu actions and noise control options are correctly internationalized with tr(). The enum values stored as action data ensure correct functionality regardless of display order.

linux/main.cpp (2)

994-1011: LGTM!

The translation loading implementation is correct:

  • Uses system locale for automatic language detection
  • Searches multiple standard paths for flexibility
  • Properly installs the translator into the application

The QTranslator on the stack is safe here since main() remains active throughout app.exec().


526-530: LGTM!

Notification messages are correctly marked for translation with tr().

linux/translations/librepods_tr.ts (2)

1-100: LGTM!

The Turkish translation file is well-structured with complete translations for all defined source strings. The static analysis hints are false positives from Biome incorrectly parsing this XML file as JavaScript.


101-151: LGTM!

TrayIconManager and AirPodsTrayApp contexts contain all the required translations matching the tr() calls in the C++ source files.

linux/CMakeLists.txt (3)

7-7: LGTM!

Adding LinguistTools to the Qt6 components is required for the qt_add_translations function.


14-17: Good structure for future language additions.

The TS_FILES variable is set up to easily accommodate additional language translations.


94-102: LGTM!

The translation build and install configuration is correct. The install destination ${CMAKE_INSTALL_DATAROOTDIR}/librepods/translations aligns with the runtime search path /usr/share/librepods/translations defined in main.cpp.

This comment was marked as off-topic.

@kavishdevar
Copy link
Owner

Thank you!

BTW, the QT version is not actively worked on (#241)...

@kavishdevar kavishdevar merged commit a75557d into kavishdevar:main Dec 10, 2025
1 check 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.

2 participants