Skip to content

Localization fixes: Configuration labels, status badges, terminology#1012

Merged
annejan merged 59 commits intomainfrom
localization-updates-with-qwen
Apr 17, 2026
Merged

Localization fixes: Configuration labels, status badges, terminology#1012
annejan merged 59 commits intomainfrom
localization-updates-with-qwen

Conversation

@annejan
Copy link
Copy Markdown
Member

@annejan annejan commented Apr 15, 2026

User description

Summary

Fixed multiple translation/localization issues in QtPass:

Fixed Configuration dialog labels (multiple locales)

  • Restored short window title translations instead of long UsersDialog help text
  • Fixed for: cs_CZ, de_DE, de_LU, el_GR, es_ES, fi_FI, fr_BE, fr_FR, fr_LU, gl_ES, hu_HU, ko_KR, nl_NL, pt_BR, pt_PT, ru_RU, sr_Cyrl, sr_RS, tr_TR, uk_UA, zh_Hant

Fixed status badge trailing spaces

  • Preserved trailing space in [INVALID], [EXPIRED], [PARTIAL] badges
  • Fixed for: cs_CZ, fi_FI, sr_RS, tr_TR

Fixed Portuguese translations

  • pt_BR: Fixed GnuPG install message HTML tags, &Use pass accelerator
  • pt_PT: Configuration label, Generate key pair terminology

Fixed Serbian (sr_Cyrl, sr_RS)

  • Configuration labels, re-encryption dialog structure
  • Status badges with trailing spaces

Fixed Finnish terminology

  • Re-encryption: "Uudelleensalaus" (not "uudelleenkrypto...")
  • OTP: "OTP-koodi" (not "yhteyskoodi")
  • GPG key pair: "GPG avainpari"
  • Status badges corrected

Fixed Traditional Chinese (zh_Hant)

  • Fixed language code: zh_CN → zh_Hant
  • Converted Simplified → Traditional terms:
    • 字段→欄位, 單詞→單字, 文件夾→資料夾, 密鑰→金鑰
    • 配置文件→設定檔, Native→原生
  • Profile changed, re-encryption messages
  • UsersDialog terminology

Fixed Czech (cs_CZ)

  • Configuration label
  • Check .gpgid translation
  • Failed to sign message
  • UsersDialog line breaks restored

Other fixes

  • es_EC: Signing Key → "Clave de firma"
  • gl_ES: Configuration label
  • French (fr_*) status badges trailing spaces maintained

Summary by CodeRabbit

  • New Features

    • Added Serbian (Cyrillic) locale support.
  • Chores

    • Filled and improved translations for Italian, Korean, Serbian (new), Traditional Chinese, German (LU/DE), Turkish, Portuguese, French (BE/FR/LU), and Japanese.
    • Removed outdated/obsolete translation catalogs.

CodeAnt-AI Description

Refresh app translations across multiple languages and add Serbian Cyrillic support

What Changed

  • Added a new Serbian Cyrillic translation file so the app can be used in sr_Cyrl
  • Updated many labels, dialogs, alerts, and status messages across several locales to use clearer wording
  • Fixed translation errors in key areas such as password generation, OTP actions, re-encryption, user access dialogs, and status badges
  • Corrected missing or broken translated text in configuration and main window screens

Impact

✅ Wider language support for Serbian Cyrillic users
✅ Clearer menu and dialog text in translated builds
✅ Fewer confusing or missing translations during password and OTP actions

🔄 Retrigger CodeAnt AI Review

Details

💡 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
Copy link
Copy Markdown
Contributor

codeant-ai Bot commented Apr 15, 2026

CodeAnt AI is reviewing your PR.

@kody-ai

This comment has been minimized.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 15, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • ✅ Review completed - (🔄 Check again to review again)
📝 Walkthrough

Walkthrough

This PR adds and updates localization files for QtPass, including filling previously empty/unfinished translations across multiple language locales (Italian, Korean, Serbian Latin and Cyrillic, German, Turkish, Portuguese, French variants, and Japanese), updating language codes, and reorganizing German translation files. A new Serbian Cyrillic translation catalog is added and the build configuration is updated accordingly.

Changes

Cohort / File(s) Summary
Updated Translation Files - Romance Languages
localization/localization_it_IT.ts, localization/localization_pt_PT.ts, localization/localization_fr_*.ts
Filled previously empty/unfinished Italian, Portuguese, and French (Belgium, France, Luxembourg) translations with completed text for ConfigDialog, ImitatePass, KeygenDialog, MainWindow, and UsersDialog UI contexts. Updated status labels and refined terminology across GPG/OTP/re-encryption messages.
Updated Translation Files - Germanic & Turkish
localization/localization_de_LU.ts, localization/localization_tr_TR.ts
Completed German (Luxembourg) and Turkish translations for configuration options, validation messages, and GPG/OTP-related error/status strings. Updated bracket status prefixes and terminology in UsersDialog.
Updated Translation Files - Slavic, East Asian & Korean
localization/localization_ko_KR.ts, localization/localization_sr_RS.ts, localization/localization_ja_JP.ts, localization/localization_zh_Hant.ts
Filled Korean, Serbian (Latin), Japanese, and Traditional Chinese translations by completing unfinished entries and updating language metadata. Korean and Serbian entries updated with language-region codes; Traditional Chinese entries refined terminology and spacing around placeholders.
New Serbian Cyrillic Translation
localization/localization_sr_Cyrl.ts
Added complete new Qt Linguist translation catalog for Serbian (Cyrillic script) with translations across all major UI contexts including ConfigDialog, ImitatePass, KeygenDialog, MainWindow, and UsersDialog.
Removed German Translation File
localization/localization_de_DE/*
Deleted two German (de_DE) translation files (localization_af_ZA.ts and localization_en_GB.ts), removing complete translation catalogs containing UI labels, dialog texts, and error messages.
Build Configuration
src/src.pro
Added Serbian Cyrillic translation file (../localization/localization_sr_Cyrl.ts) to Qt TRANSLATIONS list for inclusion in embedded resources.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~30 minutes

Possibly related PRs

Suggested reviewers

  • nogeenhenk
  • nogeenharrie

Poem

🐰 Translations bloom in every tongue,
From Chinese to Serbian songs sung,
German files farewell we say,
Cyrillic script joins the fray,
QtPass speaks the world's ballet!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main changes: localization updates focused on configuration labels, status badges, and terminology across multiple language files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch localization-updates-with-qwen

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.

@codeant-ai codeant-ai Bot added the size:L This PR changes 100-499 lines, ignoring generated files label Apr 15, 2026
Comment thread localization/localization_it_IT.ts Outdated
Comment thread localization/localization_it_IT.ts Outdated
Comment thread localization/localization_it_IT.ts Outdated
Comment thread localization/localization_it_IT.ts Outdated
Comment thread localization/localization_it_IT.ts Outdated
Comment thread localization/localization_zh_Hant.ts Outdated
Comment thread localization/localization_zh_Hant.ts Outdated
Comment thread localization/localization_zh_Hant.ts Outdated
Comment thread localization/localization_zh_Hant.ts Outdated
Comment thread localization/localization_it_IT.ts
Comment thread localization/localization_sl_SI.ts
Comment thread localization/localization_it_IT.ts
Comment thread localization/localization_zh_Hant.ts
Copy link
Copy Markdown
Contributor

@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: 10

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (6)
localization/localization_it_IT.ts (3)

1192-1199: ⚠️ Potential issue | 🟠 Major

OTP message translation mismatch.

Line 1194: The source No OTP code found in this password entry is translated as Nessuna password selezionata per la generazione OTP ("No password selected for OTP generation"), which is the translation for a different source string at line 1199.

The correct Italian translation should convey "No OTP code found in this password entry" - something like Nessun codice OTP trovato in questa voce password.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_it_IT.ts` around lines 1192 - 1199, Update the
Italian translation for the message whose source is "No OTP code found in this
password entry" to the correct text "Nessun codice OTP trovato in questa voce
password" in localization_it_IT.ts; ensure you modify the translation associated
with the source string "No OTP code found in this password entry" (not the other
source "No password selected for OTP generation") and leave the existing
translation "Nessuna password selezionata per la generazione OTP" tied to that
other source unchanged.

1-1592: ⚠️ Potential issue | 🟠 Major

Translation files should be managed through Weblate, not edited manually.

As per coding guidelines, .ts files in the localization/ directory should not be manually edited. The PR title indicates these translations were generated with AI assistance (Qwen2.5), which constitutes manual editing rather than using the established Weblate translation workflow.

Manual edits can cause merge conflicts with Weblate-managed translations and bypass the review process that Weblate provides.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_it_IT.ts` around lines 1 - 1592, This PR manually
edited localization IT .ts files (localization/localization_it_IT.ts) with
AI-generated translations instead of using the Weblate workflow; revert any
manual changes to localization/*.ts (including localization_it_IT.ts) and remove
AI-generated edits, then re-import/update the Italian translations through
Weblate so the translation metadata and review pipeline are preserved; ensure
future updates to functions/strings like those in ConfigDialog, MainWindow,
ImitatePass, etc. are performed via Weblate rather than direct edits to .ts
files.

1209-1258: ⚠️ Potential issue | 🔴 Critical

Do not manually edit translation files—use Weblate instead. Critical translation misalignments detected.

This file matches the pattern localization/**/*.ts and must not be manually edited; use Weblate for translations and run qmake6 after source changes.

Additionally, multiple translations are incorrectly mapped to different source strings:

Source Current Translation Issue
Re-encrypt Errore Should translate "Re-encrypt", not display error message
Directory does not exist: %1 Ricifrura le password Should be directory error, not re-encrypt prompt
Re-encrypt passwords Long confirmation dialog Should be short title; long text belongs to next message

Users will see incorrect UI text as a result.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_it_IT.ts` around lines 1209 - 1258, This
translation file was edited manually and several source strings are mis-mapped;
revert manual changes in localization_it_IT.ts and re-import translations from
Weblate (do not edit .ts by hand), then rebuild with qmake6; specifically
correct the entries for the source strings "Re-encrypt" (currently translated as
"Errore"), "Directory does not exist: %1" (currently "Ricifrura le password"),
and "Re-encrypt passwords" (currently contains the long confirmation text) so
each maps to the appropriate Italian short label/phrase as provided by Weblate
(move the long confirmation dialog back to the following source string). Ensure
the .ts file matches Weblate output before committing.
localization/localization_zh_Hant.ts (3)

729-742: ⚠️ Potential issue | 🔴 Critical

Critical: Email validation error shows random number generation message.

Line 736: The source text is The email address you typed is not a valid email address. but the translation is about random number generation and entropy:

此操作可能需要几分钟。我们需要生成大量的随机字节...

This will cause severe user confusion - when users enter an invalid email, they'll see a message about generating random bytes instead of being told their email is invalid.

The correct translation should be something like: 您輸入的電子郵件地址無效。

This appears to be a translation that was accidentally assigned to the wrong source string.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 729 - 742, The translation
for the source string "The email address you typed is not a valid email
address." in localization_zh_Hant.ts is incorrect (it contains the
random-number-generation message); update the corresponding <translation> for
that source to the correct Traditional Chinese text (e.g., "您輸入的電子郵件地址無效。") for
the message coming from keygendialog (source text above) so the invalid-email
error shows the proper translated message and does not mix with the
entropy/prime-generation text.

1479-1501: ⚠️ Potential issue | 🔴 Critical

Off-by-one translation shift in UsersDialog key status labels.

The translations for key status labels are shifted by one position:

Line Source Current Translation Should Be
1486 expires [无效] ([INVALID]) 過期 (expires)
1491 [INVALID] [已过期] ([EXPIRED]) [無效]
1496 [EXPIRED] [部分] ([PARTIAL]) [已過期]

Users will see incorrect key status indicators - expired keys will be labeled as invalid, invalid keys as expired, etc. This could lead to security confusion when managing GPG keys.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 1479 - 1501, The
translations for UsersDialog key status labels are shifted by one; update
localization_zh_Hant.ts so each source string maps to its correct Chinese text:
set the translation for source "expires" to "過期", for source "[INVALID] " to
"[無效]", for source "[EXPIRED] " to "[已過期]", and add the appropriate translation
for source "[PARTIAL] " (e.g., "[部分]"); ensure these exact source tokens
("expires", "[INVALID] ", "[EXPIRED] ", "[PARTIAL] ") in the file are updated
and remove or clear the type="unfinished" flags as needed so the mappings align
with usersdialog.cpp.

19-74: ⚠️ Potential issue | 🟠 Major

Simplified Chinese characters in Traditional Chinese translation file.

This file (zh_Hant) should use Traditional Chinese characters (繁體), but many new translations use Simplified Chinese (简体):

Line Current (Simplified) Expected (Traditional)
19 剪贴板行为 剪貼板行為
24 使用主选择 使用主選擇
29 自动清除后 自動清除後
44 内容面板行为 內容面板行為
64 使用等宽字体 使用等寬字體

This appears to be a result of AI-generated translations defaulting to Simplified Chinese. Traditional Chinese users will see unfamiliar character forms.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 19 - 74, Replace the
Simplified Chinese translations in the zh_Hant resource entries with Traditional
Chinese equivalents: update the translation for the source that currently shows
"剪贴板行为:" to "剪貼板行為", the translation for the source "Use primary selection" from
"使用主选择" to "使用主選擇", the translation for "Autoclear after:" from "自动清除后:" to
"自動清除後:", the translation for "Content panel behaviour:" from "内容面板行为:" to
"內容面板行為:", and the translation for "Use a monospace font" from "使用等宽字体" to
"使用等寬字體"; ensure you edit the translation values associated with those <source>
strings so the file consistently uses Traditional Chinese characters.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@localization/localization_ca_ES.ts`:
- Line 3: Revert the direct edit to the <TS ... language="ca_ES"> metadata in
localization_ca_ES.ts and do not commit manual changes to .ts files; instead
update the Catalan translation through the Weblate UI for the ca_ES project,
then regenerate the .ts files by running qmake6 (so the <TS> header and related
metadata are produced correctly), and finally commit only the regenerated
outputs—ensure no manual edits to localization/**/*.ts remain in the PR.

In `@localization/localization_da_DK.ts`:
- Line 3: Revert the manual edit to the TS header in localization_da_DK.ts (the
change on line 3 to "<TS version="2.1" language="da_DK">") and instead make the
translation change via Weblate; after updating the translation in Weblate,
regenerate the .ts files by running qmake6 so the header is produced correctly
and the localization/**/*.ts rule is respected.

In `@localization/localization_hr_HR.ts`:
- Line 3: The TS header in localization_hr_HR.ts was edited manually; revert
that manual change and instead perform translations via Weblate (do not edit
localization/**/*.ts files directly), then regenerate the .ts files by running
qmake6 as per the repository translation workflow so the correct TS header is
produced automatically.

In `@localization/localization_ko_KR.ts`:
- Line 3: The <TS version="2.1" language="ko_KR"> line in localization_ko_KR.ts
was manually edited; revert this manual change and remove the direct .ts
modification, then perform translation updates via Weblate and regenerate the
.ts metadata by running qmake6 so the correct <TS ...> header is produced;
ensure future changes to localization/**/*.ts are done through Weblate and
qmake6 rather than direct edits.

In `@localization/localization_ro_RO.ts`:
- Line 3: The TS metadata line <TS version="2.1" language="ro_RO"> was changed
directly in the .ts file; revert this manual edit and do not commit .ts changes
directly—update translations through Weblate and then run qmake6 to regenerate
the .ts files after any source changes so the metadata is produced by the build
tooling rather than edited by hand.

In `@localization/localization_sk_SK.ts`:
- Line 3: This change directly edits the TS metadata in localization_sk_SK.ts
which violates the localization workflow; revert the manual edit to
localization_sk_SK.ts and instead apply the translation/metadata change through
Weblate for the appropriate locale (sk_SK), then regenerate the .ts output using
qmake6 so the build artifacts are consistent with the repo rule for
localization/**/*.ts.

In `@localization/localization_sl_SI.ts`:
- Line 3: The TS file localization_sl_SI.ts has the TS root tag language
attribute set to "si_LK" (Sinhala) instead of "sl_SI" (Slovenian); revert this
mismatch by updating the TS root tag's language attribute to "sl_SI" via the
proper localization workflow (use Weblate to change translations and then
regenerate .ts files with qmake6) rather than manually editing
localization_sl_SI.ts, ensuring the TS tag (e.g., <TS ... language="sl_SI">)
correctly matches the file name.

In `@localization/localization_sr_RS.ts`:
- Line 3: The .ts translation file was edited directly (the <TS ...> header in
localization_sr_RS.ts); revert this manual change and make translation edits via
the Weblate UI instead, then after making any source-string changes run qmake6
to regenerate translation metadata; ensure no direct commits to files matching
localization/**/*.ts (including localization_sr_RS.ts) and document in the PR
that translations were updated through Weblate with qmake6 run where applicable.

In `@localization/localization_ta_IN.ts`:
- Line 3: Revert the manual edit to localization/localization_ta_IN.ts and
remove any direct changes to .ts metadata; instead perform the translation
update through the Weblate workflow for the ta_IN locale and then run qmake6 to
regenerate the .ts files (following the repo rule for localization/**/*.ts) so
the updated metadata and translation artifacts are produced correctly.

In `@localization/localization_zh_Hant.ts`:
- Line 3: The language attribute in localization_zh_Hant.ts is set to "zh" which
mismatches the file name and can break Qt locale matching used by
translator.load(QString(":localization/localization_%1.qm").arg(locale)) and
locale-specific behaviors; fix by making the TS language attribute and filename
consistent—either change language="zh" to language="zh_Hant" in
localization_zh_Hant.ts to match the filename and preserve Traditional Chinese
specifics, or rename the file to localization_zh.ts if you intend a generic "zh"
locale (ensure the translator.load pattern still matches the chosen name).

---

Outside diff comments:
In `@localization/localization_it_IT.ts`:
- Around line 1192-1199: Update the Italian translation for the message whose
source is "No OTP code found in this password entry" to the correct text "Nessun
codice OTP trovato in questa voce password" in localization_it_IT.ts; ensure you
modify the translation associated with the source string "No OTP code found in
this password entry" (not the other source "No password selected for OTP
generation") and leave the existing translation "Nessuna password selezionata
per la generazione OTP" tied to that other source unchanged.
- Around line 1-1592: This PR manually edited localization IT .ts files
(localization/localization_it_IT.ts) with AI-generated translations instead of
using the Weblate workflow; revert any manual changes to localization/*.ts
(including localization_it_IT.ts) and remove AI-generated edits, then
re-import/update the Italian translations through Weblate so the translation
metadata and review pipeline are preserved; ensure future updates to
functions/strings like those in ConfigDialog, MainWindow, ImitatePass, etc. are
performed via Weblate rather than direct edits to .ts files.
- Around line 1209-1258: This translation file was edited manually and several
source strings are mis-mapped; revert manual changes in localization_it_IT.ts
and re-import translations from Weblate (do not edit .ts by hand), then rebuild
with qmake6; specifically correct the entries for the source strings
"Re-encrypt" (currently translated as "Errore"), "Directory does not exist: %1"
(currently "Ricifrura le password"), and "Re-encrypt passwords" (currently
contains the long confirmation text) so each maps to the appropriate Italian
short label/phrase as provided by Weblate (move the long confirmation dialog
back to the following source string). Ensure the .ts file matches Weblate output
before committing.

In `@localization/localization_zh_Hant.ts`:
- Around line 729-742: The translation for the source string "The email address
you typed is not a valid email address." in localization_zh_Hant.ts is incorrect
(it contains the random-number-generation message); update the corresponding
<translation> for that source to the correct Traditional Chinese text (e.g.,
"您輸入的電子郵件地址無效。") for the message coming from keygendialog (source text above) so
the invalid-email error shows the proper translated message and does not mix
with the entropy/prime-generation text.
- Around line 1479-1501: The translations for UsersDialog key status labels are
shifted by one; update localization_zh_Hant.ts so each source string maps to its
correct Chinese text: set the translation for source "expires" to "過期", for
source "[INVALID] " to "[無效]", for source "[EXPIRED] " to "[已過期]", and add the
appropriate translation for source "[PARTIAL] " (e.g., "[部分]"); ensure these
exact source tokens ("expires", "[INVALID] ", "[EXPIRED] ", "[PARTIAL] ") in the
file are updated and remove or clear the type="unfinished" flags as needed so
the mappings align with usersdialog.cpp.
- Around line 19-74: Replace the Simplified Chinese translations in the zh_Hant
resource entries with Traditional Chinese equivalents: update the translation
for the source that currently shows "剪贴板行为:" to "剪貼板行為", the translation for the
source "Use primary selection" from "使用主选择" to "使用主選擇", the translation for
"Autoclear after:" from "自动清除后:" to "自動清除後:", the translation for "Content panel
behaviour:" from "内容面板行为:" to "內容面板行為:", and the translation for "Use a
monospace font" from "使用等宽字体" to "使用等寬字體"; ensure you edit the translation
values associated with those <source> strings so the file consistently uses
Traditional Chinese characters.
🪄 Autofix (Beta)

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: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 08d8c3d9-455d-4bfd-9942-e7d14671c818

📥 Commits

Reviewing files that changed from the base of the PR and between bdb9fa9 and 23c132a.

📒 Files selected for processing (15)
  • localization/localization_af_ZA.ts
  • localization/localization_bg_BG.ts
  • localization/localization_ca_ES.ts
  • localization/localization_da_DK.ts
  • localization/localization_fi_FI.ts
  • localization/localization_hr_HR.ts
  • localization/localization_it_IT.ts
  • localization/localization_ko_KR.ts
  • localization/localization_ro_RO.ts
  • localization/localization_sk_SK.ts
  • localization/localization_sl_SI.ts
  • localization/localization_sr_RS.ts
  • localization/localization_ta_IN.ts
  • localization/localization_uk_UA.ts
  • localization/localization_zh_Hant.ts

Comment thread localization/localization_ca_ES.ts
Comment thread localization/localization_da_DK.ts
Comment thread localization/localization_hr_HR.ts
Comment thread localization/localization_ko_KR.ts
Comment thread localization/localization_ro_RO.ts
Comment thread localization/localization_sk_SK.ts
Comment thread localization/localization_sl_SI.ts
Comment thread localization/localization_sr_RS.ts
Comment thread localization/localization_ta_IN.ts
Comment thread localization/localization_zh_Hant.ts
@codeant-ai
Copy link
Copy Markdown
Contributor

codeant-ai Bot commented Apr 15, 2026

CodeAnt AI finished reviewing your PR.

Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
@kody-ai

This comment has been minimized.

annejan and others added 5 commits April 16, 2026 01:28
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
@kody-ai

This comment has been minimized.

annejan and others added 4 commits April 16, 2026 01:29
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
@kody-ai

This comment has been minimized.

Copy link
Copy Markdown
Contributor

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
localization/localization_zh_Hant.ts (2)

19-149: ⚠️ Potential issue | 🟠 Major

Route these translation changes through Weblate instead of committing .ts edits directly.

This repo treats .ts files as translation artifacts managed through the translation workflow, so landing hand-maintained diffs here is out of process and likely to drift.
As per coding guidelines: localization/**/*.ts: Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 19 - 149, This change
manually edits translation artifacts (.ts) — e.g., translations for strings like
"Use primary selection", "Password Generation:", "Generate GPG key pair", and
the Chinese entries such as "剪贴板行为:" — which must not be committed directly;
revert these .ts edits and instead update translations through the Weblate
workflow (submit/update the corresponding localization entry in Weblate), then
after the source changes are finalized regenerate translation files with qmake6
so the .ts/.qm artifacts are produced from the approved Weblate translations.

19-75: ⚠️ Potential issue | 🟠 Major

Do not replace Traditional Chinese with Simplified Chinese in zh_Hant.

These new strings use Simplified forms such as 剪贴板, 自动, and 内容 inside the Traditional Chinese catalog. Shipping mixed-script UI under localization_zh_Hant.ts is a regression for Traditional Chinese users.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 19 - 75, The Traditional
Chinese catalog contains Simplified characters; update the translations in
localization_zh_Hant.ts to use Traditional Chinese forms: replace "剪贴板行为:" with
"剪貼板行為:" (or preferred regional term), "使用主选择" -> "使用主選取", "自动清除后:" -> "自動清除後:",
"内容面板行为:" -> "內容面板行為:", "隐藏内容" -> "隱藏內容", "隐藏密码" -> "隱藏密碼", "自动清除面板后:" ->
"自動清除面板後:", "使用等宽字体" -> "使用等寬字體", "显示文件内容原样" -> "顯示檔案內容原樣", and "不换行" -> "不換行";
update the corresponding translation strings in the file (look for the exact
source strings like "Use primary selection", "Autoclear after:", "Content panel
behaviour:", "Hide content", "Hide password", "Autoclear panel after:", "Use a
monospace font", "Display the files content as-is", "No line wrapping") to their
Traditional variants.
localization/localization_it_IT.ts (1)

625-666: ⚠️ Potential issue | 🟡 Minor

Translate “re-encryption” consistently instead of “rifirma”.

These messages describe re-encrypting password files, but rifirma/rifirmare means re-signing. That changes the operation’s meaning in the UI and makes the warnings/progress text misleading.

✏️ Suggested wording
-        <translation type="unfinished">Impossibile esaminare lo stato Git. La rifirma è stata annullata.</translation>
+        <translation type="unfinished">Impossibile esaminare lo stato Git. La ricifratura è stata annullata.</translation>

-        <translation type="unfinished">La rifirma è stata annullata perché non è stato possibile creare un backup Git.</translation>
+        <translation type="unfinished">La ricifratura è stata annullata perché non è stato possibile creare un backup Git.</translation>

-        <translation type="unfinished">Impossibile rifirmare %1</translation>
+        <translation type="unfinished">Impossibile ricifrare %1</translation>

-        <translation type="unfinished">Rifirma completata: %1 riuscita, %2 fallita</translation>
+        <translation type="unfinished">Ricifratura completata: %1 riuscita, %2 fallita</translation>

-        <translation type="unfinished">Rifirma completata: %1 file rifirmati</translation>
+        <translation type="unfinished">Ricifratura completata: %1 file ricifrati</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_it_IT.ts` around lines 625 - 666, The Italian
translations for the re-encryption messages use "rifirma/rifirmare" (which means
re-signing); update all translations for the strings "Re-encryption was aborted
because a git backup could not be created.", "Re-encrypting from folder %1",
"Failed to re-encrypt %1", "Re-encryption completed: %1 succeeded, %2 failed",
and "Re-encryption completed: %1 files re-encrypted" to consistently use a term
meaning re-encrypt (e.g., "cifrare nuovamente" / "cifratura nuovamente" or
"ricifrare"/"ricifratura") instead of "rifirma/rifirmare", preserving
placeholders like %1 and %2 and existing punctuation.
♻️ Duplicate comments (1)
localization/localization_zh_Hant.ts (1)

3-3: ⚠️ Potential issue | 🟠 Major

Keep the catalog locale aligned with the shipped resource name.

language="zh" no longer matches localization_zh_Hant.ts. This leaves the TS metadata, the embedded resource name, and the runtime lookup path describing different locales. Either keep this file as zh_Hant, or rename/remap the resource in the same change.

#!/bin/bash
sed -n '1,5p' localization/localization_zh_Hant.ts
sed -n '127,143p' main/main.cpp
sed -n '10,52p' src/src.pro

Expected result: the TS language value, the translation filename listed in src/src.pro, and the runtime load pattern in main/main.cpp should all refer to the same locale.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` at line 3, The TS metadata's language
value ("language=\"zh\"") is out of sync with the resource filename
localization_zh_Hant.ts and runtime lookup; change the TS language attribute to
"zh_Hant" (i.e., language="zh_Hant") and then ensure the translation filename
referenced in src.pro and the locale string used in main.cpp's runtime load
pattern both match "zh_Hant" (or, if you prefer the short form, rename the file
and references to "zh" consistently); make the three places (TS language
attribute, the entry in src.pro, and the runtime load key in main.cpp)
identical.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@localization/localization_it_IT.ts`:
- Around line 625-666: The Italian translations for the re-encryption messages
use "rifirma/rifirmare" (which means re-signing); update all translations for
the strings "Re-encryption was aborted because a git backup could not be
created.", "Re-encrypting from folder %1", "Failed to re-encrypt %1",
"Re-encryption completed: %1 succeeded, %2 failed", and "Re-encryption
completed: %1 files re-encrypted" to consistently use a term meaning re-encrypt
(e.g., "cifrare nuovamente" / "cifratura nuovamente" or
"ricifrare"/"ricifratura") instead of "rifirma/rifirmare", preserving
placeholders like %1 and %2 and existing punctuation.

In `@localization/localization_zh_Hant.ts`:
- Around line 19-149: This change manually edits translation artifacts (.ts) —
e.g., translations for strings like "Use primary selection", "Password
Generation:", "Generate GPG key pair", and the Chinese entries such as "剪贴板行为:"
— which must not be committed directly; revert these .ts edits and instead
update translations through the Weblate workflow (submit/update the
corresponding localization entry in Weblate), then after the source changes are
finalized regenerate translation files with qmake6 so the .ts/.qm artifacts are
produced from the approved Weblate translations.
- Around line 19-75: The Traditional Chinese catalog contains Simplified
characters; update the translations in localization_zh_Hant.ts to use
Traditional Chinese forms: replace "剪贴板行为:" with "剪貼板行為:" (or preferred regional
term), "使用主选择" -> "使用主選取", "自动清除后:" -> "自動清除後:", "内容面板行为:" -> "內容面板行為:", "隐藏内容"
-> "隱藏內容", "隐藏密码" -> "隱藏密碼", "自动清除面板后:" -> "自動清除面板後:", "使用等宽字体" -> "使用等寬字體",
"显示文件内容原样" -> "顯示檔案內容原樣", and "不换行" -> "不換行"; update the corresponding
translation strings in the file (look for the exact source strings like "Use
primary selection", "Autoclear after:", "Content panel behaviour:", "Hide
content", "Hide password", "Autoclear panel after:", "Use a monospace font",
"Display the files content as-is", "No line wrapping") to their Traditional
variants.

---

Duplicate comments:
In `@localization/localization_zh_Hant.ts`:
- Line 3: The TS metadata's language value ("language=\"zh\"") is out of sync
with the resource filename localization_zh_Hant.ts and runtime lookup; change
the TS language attribute to "zh_Hant" (i.e., language="zh_Hant") and then
ensure the translation filename referenced in src.pro and the locale string used
in main.cpp's runtime load pattern both match "zh_Hant" (or, if you prefer the
short form, rename the file and references to "zh" consistently); make the three
places (TS language attribute, the entry in src.pro, and the runtime load key in
main.cpp) identical.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: b557321a-8550-4f8c-af82-2253ba71860f

📥 Commits

Reviewing files that changed from the base of the PR and between 23c132a and c253445.

📒 Files selected for processing (2)
  • localization/localization_it_IT.ts
  • localization/localization_zh_Hant.ts

Comment thread localization/localization_de_LU.ts Outdated
Copy link
Copy Markdown
Contributor

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
localization/localization_zh_Hant.ts (1)

19-149: ⚠️ Potential issue | 🟠 Major

Don't mix Simplified Chinese into the Traditional Chinese catalog.

This hunk introduces Simplified Chinese strings like 剪贴板, 自动, 生成, and 签名密钥 into localization_zh_Hant.ts. Even if Line 3 is corrected, zh-Hant users will still get mixed-script UI. Move these entries into localization_zh_CN.ts or convert them to Traditional Chinese before release.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 19 - 149, This extraction
mixed Simplified Chinese into the Traditional Chinese catalog — locate the
offending translations (e.g., the strings "剪贴板行为", "剪贴板", "自动清除后", "生成", "签名密钥"
and other occurrences of "自动"/"生成"/"签名"/"剪贴板") in localization_zh_Hant.ts and
either (a) move these entries into the Simplified catalog
(localization_zh_CN.ts) or (b) convert them to proper Traditional Chinese
equivalents before committing; ensure the final zh_Hant translations use
Traditional characters consistently and update the translation tags as needed.
♻️ Duplicate comments (1)
localization/localization_zh_Hant.ts (1)

3-3: ⚠️ Potential issue | 🔴 Critical

Keep the locale metadata aligned with the shipped catalog.

Line 3 switches this file to zh_CN, but the project still ships both localization_zh_CN.ts and localization_zh_Hant.ts. That leaves no catalog advertising zh_Hant and gives two catalogs the Simplified Chinese locale. Either keep this file as zh_Hant or rename/update the whole build so it is actually the Simplified Chinese catalog.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` at line 3, The TS language attribute in
localization_zh_Hant.ts was changed to zh_CN causing duplicate Simplified
Chinese catalogs and no Traditional Chinese catalog; restore the correct locale
by changing the <TS> metadata back to language="zh_Hant" in
localization_zh_Hant.ts (or alternatively rename and convert this file to
localization_zh_CN.ts and update the build/catalog manifest to reflect that
change) so the shipped catalogs uniquely advertise zh_Hant and zh_CN.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@localization/localization_de_LU.ts`:
- Around line 1455-1467: Replace the misspelled German translations for the
status badges in localization_de_LU.ts: update the translation for source
"[INVALID]" (from "[UNGUÜLTIG]") to "[UNGÜLTIG]" and update the translation for
source "[EXPIRED]" (from "[VERAUSSCHEIT]") to "[ABGELAUFEN]"; these entries
correspond to the messages coming from usersdialog.cpp (sources "[INVALID]" and
"[EXPIRED]") so edit those translation strings accordingly and leave "[PARTIAL]"
as-is.
- Around line 89-98: The translations in localization_de_LU.ts are misaligned
(e.g., the <source> "Password Generation:", "Password Length:", "Characters",
"Nati&ve Git/GPG", "Add password" now map to wrong strings); revert the affected
translation blocks and reapply them from a clean catalog via Weblate rather than
manual edits, ensuring the <source> texts ("Password Generation:", "Password
Length:", "Characters", "Nati&ve Git/GPG", "Add password") match their correct
<translation> entries; after restoring from Weblate, run qmake6 to regenerate
translation artifacts and verify the other listed ranges (lines around 211-213,
291-298, 465-501, 943-1120) for similar misalignments.

---

Outside diff comments:
In `@localization/localization_zh_Hant.ts`:
- Around line 19-149: This extraction mixed Simplified Chinese into the
Traditional Chinese catalog — locate the offending translations (e.g., the
strings "剪贴板行为", "剪贴板", "自动清除后", "生成", "签名密钥" and other occurrences of
"自动"/"生成"/"签名"/"剪贴板") in localization_zh_Hant.ts and either (a) move these
entries into the Simplified catalog (localization_zh_CN.ts) or (b) convert them
to proper Traditional Chinese equivalents before committing; ensure the final
zh_Hant translations use Traditional characters consistently and update the
translation tags as needed.

---

Duplicate comments:
In `@localization/localization_zh_Hant.ts`:
- Line 3: The TS language attribute in localization_zh_Hant.ts was changed to
zh_CN causing duplicate Simplified Chinese catalogs and no Traditional Chinese
catalog; restore the correct locale by changing the <TS> metadata back to
language="zh_Hant" in localization_zh_Hant.ts (or alternatively rename and
convert this file to localization_zh_CN.ts and update the build/catalog manifest
to reflect that change) so the shipped catalogs uniquely advertise zh_Hant and
zh_CN.
🪄 Autofix (Beta)

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: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1dd223d4-7e37-48dc-8bee-5f2cc38301af

📥 Commits

Reviewing files that changed from the base of the PR and between c253445 and 448e145.

📒 Files selected for processing (2)
  • localization/localization_de_LU.ts
  • localization/localization_zh_Hant.ts

Comment thread localization/localization_de_LU.ts
Comment thread localization/localization_de_LU.ts
- sr_RS: fix malformed link translation
- sr_RS: Password store not initialised (Latin)
- sr_RS: folder message still has Cyrillic - needs another pass
@nogeenhenk nogeenhenk force-pushed the localization-updates-with-qwen branch from fc136bd to 5c72686 Compare April 17, 2026 00:18
@kody-ai

This comment has been minimized.

Copy link
Copy Markdown
Contributor

@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: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
localization/localization_it_IT.ts (2)

140-150: ⚠️ Potential issue | 🟠 Major

Remove type="unfinished" from translations that are already finalized.

Many updated entries have valid Italian text but are still marked unfinished (for example Line 140, Line 150, Line 397, Line 559, Line 661, Line 1189, Line 1424, Line 1507, Line 1579). This can cause source English strings to be used at runtime in release catalogs.

Suggested fix pattern
-        <translation type="unfinished">Genera coppia di chiavi GPG</translation>
+        <translation>Genera coppia di chiavi GPG</translation>

Apply the same change to other newly completed entries that still carry type="unfinished".

Also applies to: 397-437, 559-667, 714-715, 1189-1258, 1424-1429, 1507-1590

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_it_IT.ts` around lines 140 - 150, Several Italian
translation entries in localization_it_IT.ts (e.g., the translation for "Genera
coppia di chiavi GPG", "Signing Key" and the long sentence starting "Optional:
GPG key to sign .gpg-id files...") are marked with type="unfinished" despite
being finalized; remove the type="unfinished" attribute from those <translation>
elements (and any other completed entries listed in the comment ranges like
397-437, 559-667, 714-715, 1189-1258, 1424-1429, 1507-1590) so the catalog uses
the Italian text at runtime, ensuring only truly incomplete translations retain
type="unfinished".

1-1592: ⚠️ Potential issue | 🟠 Major

Use Weblate workflow for .ts updates instead of manual edits.

This PR directly edits localization/localization_it_IT.ts. Please confirm these changes were synchronized through Weblate and regenerate translation artifacts (qmake6) in the expected flow, otherwise this bypasses the repository localization process.

As per coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_it_IT.ts` around lines 1 - 1592, This change
directly edits the translation file localization/localization_it_IT.ts which
violates the guideline to use Weblate; revert any manual edits in
localization/localization_it_IT.ts (or restore from the branch base), push
translations via the Weblate workflow so the Italian translations are updated
there, and then regenerate translation artifacts by running qmake6 to update the
.qm/.ts outputs; reference the file localization/localization_it_IT.ts and
ensure the qmake6 step is executed before committing to satisfy the "Do not
manually edit .ts files" policy.
localization/localization_sr_RS.ts (1)

1070-1073: ⚠️ Potential issue | 🟠 Major

Broken placeholder in "delete %1%2" translation.

The translation body is Are you sure you want to delete %1? {1%2??} — the {1%2??} fragment is a Qt Linguist tool artifact for a missing placeholder, not valid output. At runtime %2 will not be substituted cleanly and the literal braces/question marks will appear in the dialog. Replace with a proper Serbian translation that uses both %1 and %2, e.g. Da li ste sigurni da želite da obrišete %1%2?.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_RS.ts` around lines 1070 - 1073, The translation
for the source string "Are you sure you want to delete %1%2?" contains a Qt
Linguist artifact `{1%2??}`; replace the translation value so it uses both
placeholders correctly (e.g. "Da li ste sigurni da želite da obrišete %1%2?")
ensuring the `%1` and `%2` tokens are preserved exactly and no extra braces or
question marks remain; update the translation entry corresponding to that source
string in localization_sr_RS.ts (the message tied to the main window delete
prompt) to the corrected Serbian text.
♻️ Duplicate comments (13)
localization/localization_it_IT.ts (1)

659-662: ⚠️ Potential issue | 🟡 Minor

Fix agreement in re-encryption summary (riusciti/falliti).

Line 661 still uses singular feminine forms (riuscita, fallita) for a file-count summary. Use plural forms to match implied “file”.

Proposed correction
-        <translation type="unfinished">Ricifratura completata: %1 riuscita, %2 fallita</translation>
+        <translation>Ricifratura completata: %1 riusciti, %2 falliti</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_it_IT.ts` around lines 659 - 662, The Italian
translation for the message "Re-encryption completed: %1 succeeded, %2 failed"
uses singular feminine forms ("riuscita, fallita"); change it to plural
masculine forms "riusciti, falliti" to agree with the file-count summary. Update
the translation entry corresponding to the source string (location
../src/imitatepass.cpp line="753") in localization_it_IT.ts so the <translation>
text reads the corrected plural form.
localization/localization_sr_Cyrl.ts (12)

3-3: ⚠️ Potential issue | 🟠 Major

Language identifier conflicts with Latin Serbian translation file.

Line 3 uses language="sr_RS", which is identical to the existing localization_sr_RS.ts (Latin Serbian). These files must have distinct language identifiers for Qt to load the correct translation at runtime. Serbian Cyrillic requires a different code (e.g., sr_RS@cyr, sr_Cyrl, or sr@Cyrl).

Additionally, per coding guidelines, this change must be made through Weblate rather than manual file editing.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` at line 3, The TS language attribute in
localization_sr_Cyrl.ts is incorrectly set to language="sr_RS", conflicting with
the Latin Serbian file; update the language identifier for the Cyrillic file to
a distinct locale variant (e.g., use sr_RS@cyr, sr_Cyrl, or sr@Cyrl) by making
the change through Weblate (do not edit the .ts file manually) and then rebuild
translations with qmake6 so Qt will load the correct Cyrillic translation at
runtime.

713-713: ⚠️ Potential issue | 🟠 Major

Mixed Latin and Cyrillic characters in translations.

Multiple translations contain mixed scripts within the same string:

  • Line 713: Сadržaj шаблона će se postaviti na temelju верзије GPG.
  • Line 991: Сadržaj скривен
  • Line 1044: Tražim: %1
  • Line 1265: Пrikaži лозинку
  • Line 1270: Карakter сет:

For a Cyrillic catalog, all text should use consistent Cyrillic script. Correct these to fully Cyrillic forms via Weblate.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` at line 713, The listed translation
strings in localization_sr_Cyrl.ts mix Latin and Cyrillic characters (e.g., the
entries containing "Сadržaj шаблона...", "Сadržaj скривен", "Tražim: %1",
"Пrikaži лозинку", "Карakter сет:"); do not edit the .ts file directly—open
Weblate, update those keys to use fully Cyrillic text (ensure placeholders like
%1 remain unchanged), save the translations in Weblate, then regenerate the
translation binaries by running qmake6 so the changes are picked up by the
build.

259-259: ⚠️ Potential issue | 🟡 Minor

Do not transliterate technical terms and product names.

Multiple translations incorrectly transliterate technical terms and product/tool names to Cyrillic:

  • Line 259: Натив → should be Native
  • Lines 280, 285: Парол/парол → should be Pass/pass (tool name)
  • Line 491: Гит → should be Git
  • Line 558: ГПГ → should be GPG
  • Lines 783, 920, 934: КтПас → should be QtPass

Technical terms, tool names, and product brands should remain in their original Latin form for consistency with other locales and user searchability.

Per coding guidelines, correct these via Weblate.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` at line 259, Replace the Cyrillic
transliterations of technical/tool names in the translation entries (e.g.,
"Натив", "Парол"/"парол", "Гит", "ГПГ", "КтПас") with their original Latin forms
("Native", "Pass"/"pass", "Git", "GPG", "QtPass") using Weblate (do not manually
edit the .ts file), then run qmake6 to regenerate sources after the Weblate
changes are applied.

1015-1015: ⚠️ Potential issue | 🟡 Minor

MainWindow translation errors.

Multiple issues in MainWindow context:

  • Line 1015: Сифратекст скривен mistranslates "Password and Content hidden" (loses "Password and")
  • Lines 1062, 1067: Missing leading space in concatenated deletion prompt
  • Lines 1077, 1086: Желиште → should be Желите
  • Lines 1161, 1166: Реимејни (phonetic English) → should be Преименуј
  • Lines 1199, 1204: Missing trailing space after "Rename Folder To:" and "Rename File To:"

Correct these via Weblate.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` at line 1015, In the MainWindow
translations update the incorrect Serbian Cyrillic translations using Weblate
(do not edit the .ts by hand): correct the entry currently reading "Сифратекст
скривен" to include both "Password and" (accurate translation for "Password and
Content hidden"), fix concatenation spacing for the deletion prompt strings that
lack a leading space, change "Желиште" to "Желите", replace phonetic "Реимејни"
with "Преименуј", and add the missing trailing spaces after "Rename Folder To:"
and "Rename File To:"; after making these changes in Weblate regenerate the
translations locally by running qmake6 so the .ts updates are applied.

1310-1399: ⚠️ Potential issue | 🟡 Minor

QtPass context contains English text as translations.

The entire QtPass context (lines 1310-1399) contains English source text as translation values. Examples:

  • Line 1312: Generating GPG key pair
  • Line 1318: Failed to connect WebDAV:
  • Line 1388: Clipboard cleared
  • Line 1393: Clipboard not cleared
  • Line 1398: Copied to clipboard

Either provide Serbian Cyrillic translations or leave the translation elements empty. Correct via Weblate.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` around lines 1310 - 1399, The QtPass
translation entries currently contain English text in the Serbian Cyrillic
localization (strings like "Generating GPG key pair", "Failed to connect
WebDAV:", "Clipboard cleared", "Clipboard not cleared", "Copied to clipboard"
etc.), so revert manual edits and update translations via Weblate: open the
QtPass context in Weblate, provide proper Serbian Cyrillic translations or clear
the <translation> elements there for all these source strings (those exact
source texts help you find the entries), then push the Weblate-generated .ts
update and run qmake6 to regenerate sources as required per the project
guidelines.

309-309: ⚠️ Potential issue | 🟡 Minor

English source text left as translation value.

Lines 309 and 1508 contain English text as the translation value:

  • Line 309: Add → should be Serbian (e.g., Додај) or empty
  • Line 1508: Key not found in keyring → should be Serbian or empty

Leaving English in type="unfinished" translation elements is confusing for QA and Weblate review.

Per coding guidelines, correct these via Weblate.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` at line 309, The translation entries
for the source strings "Add" and "Key not found in keyring" in
localization_sr_Cyrl.ts are left as English in type="unfinished" and must be
updated via Weblate (do not edit the .ts file directly); open the project in
Weblate, provide the correct Serbian Cyrillic translations (e.g., "Додај" and
the Serbian equivalent for the keyring message) or leave the translations empty
if not ready, save/commit the changes through Weblate, and then run qmake6 to
regenerate any derived files after source/translation updates.

1533-1533: ⚠️ Potential issue | 🟡 Minor

Invalid Serbian word in status badge translation.

Line 1533 translates [PARTIAL] as [ДЕЛОВНО] , but "ДЕЛОВНО" is not a valid Serbian word. The correct translation is [ДЕЛИМИЧНО] .

The PR objectives specifically mention preserving status badge translations for affected locales. Correct this via Weblate while preserving the trailing space.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` at line 1533, The translation for the
status badge "[PARTIAL]" in localization_sr_Cyrl.ts is incorrect ("[ДЕЛОВНО] ")
— update the Serbian translation to "[ДЕЛИМИЧНО] " (preserve the trailing space)
using Weblate rather than editing the .ts file directly; after committing the
change in Weblate, regenerate translations/resources by running qmake6 so the
updated string (the translation value for "[PARTIAL]" in
localization_sr_Cyrl.ts) is picked up.

132-140: ⚠️ Potential issue | 🟡 Minor

Croatian verb form "Генерирај" used instead of Serbian "Генериши".

Lines 134 and 139 use the Croatian imperative form Генерирај and Генерирај пар кључева GPG. The correct Serbian form is Генериши and Генериши пар GPG кључева, which is already used correctly elsewhere in this file (e.g., lines 172, 673, 678).

This inconsistency also appears in the PasswordDialog context (line 1260).

Per coding guidelines, fix these via Weblate.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` around lines 132 - 140, Replace the
Croatian imperative "Генерирај" translations for the source strings "Generate"
and "Generate GPG key pair" by updating the Serbian translations via Weblate (do
not edit the .ts file manually); set them to "Генериши" and "Генериши пар GPG
кључева" respectively (these same strings appear elsewhere correctly in this
file), push the corrected translation through Weblate and then run qmake6 to
refresh build artifacts after the translation update.

64-64: ⚠️ Potential issue | 🟡 Minor

Multiple Serbian typos and incorrect verb forms remain.

Several translation errors need correction:

  • Line 64: Корисити → should be Користити
  • Line 129: специјанле → should be специјалне
  • Line 451: уставе → should be инсталирати
  • Lines 471, 476, 481: Користејте → should be Користите

Per coding guidelines, these corrections must be submitted through Weblate.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` at line 64, Several Serbian
translations in localization_sr_Cyrl.ts contain typos and wrong verb forms:
replace "Корисити" with "Користити", "специјанле" with "специјалне", "уставе"
with "инсталирати", and all occurrences of "Користејте" with "Користите"; do not
edit the .ts file directly—apply these corrections through Weblate for the
keys/strings that currently hold the exact erroneous values ("Корисити фонт исте
ширине", "специјанле", "уставе", "Користејте" entries), then export or let the
CI update the .ts file and run qmake6 to regenerate sources per the coding
guidelines.

1-1536: ⚠️ Potential issue | 🟠 Major

Translation workflow violation: Use Weblate for all translation file updates.

This entire file was manually created/edited, which violates the repository's translation guidelines. As per coding guidelines, all .ts file updates must be submitted through Weblate, and qmake6 should be run after source changes to regenerate translation artifacts.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` around lines 1 - 1536, The localization
file localization_sr_Cyrl.ts was manually edited which violates the translation
workflow; revert/remove manual changes to this .ts and instead update
translations through Weblate, then after any source changes run qmake6 to
regenerate translation artifacts (ensuring the .ts files are produced by the
build tooling), and commit only the resulting regenerated files produced by the
sanctioned workflow; reference the .ts file name (localization_sr_Cyrl.ts), the
Weblate translation platform, and the qmake6 step to locate where to fix this.

602-604: ⚠️ Potential issue | 🟡 Minor

Re-encryption translations contain errors.

Multiple re-encryption strings have issues:

  • Lines 602-604, 655, 660, 1171, 1214: Поновно поновно шифрирање contains doubled word
  • Lines 625, 630, 666: Use Russian forms (Преновација, Повторна) instead of Serbian (Поново, поновно)
  • Line 619: Погрешна је врата за резервно копирање is nonsensical (translates as "The door for backup is wrong")

Correct these via Weblate to use consistent Serbian terminology.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` around lines 602 - 604, The
translations for re-encryption in localization_sr_Cyrl.ts are incorrect or
inconsistent (e.g., the source "Re-encryption failed" and other re-encryption
strings show doubled words like "Поновно поновно шифрирање", Russian forms such
as "Преновација"/"Повторна", and a nonsensical line "Погрешна је врата за
резервно копирање"); do not edit the .ts file directly—open the corresponding
keys in Weblate, correct the Serbian to use consistent terms ("Поново" /
"поновно" or a single correct phrase for "re-encryption"), replace Russian forms
with proper Serbian, and fix the nonsensical backup message to a meaningful
Serbian phrase; after updating translations in Weblate, regenerate the .ts by
running qmake6 so the changes are applied.

843-843: ⚠️ Potential issue | 🟡 Minor

Inconsistent terminology for "clipboard".

The translation uses two different terms for "clipboard":

  • Lines 843, 1146: одељак за пресецање
  • Lines 360, 365, 370, 1015: клипборд

Standardize on a single term throughout the file via Weblate.

Based on coding guidelines: "Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` at line 843, The translation entry
containing "Генерише ОТП и копира у одељак за пресецање" uses a different term
for "clipboard" than other entries that use "клипборд"; do not edit the .ts file
directly—open the project in Weblate, standardize the term to "клипборд" for
that source string and any other occurrences, save the Weblate changes and then
run qmake6 to regenerate translation artifacts.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@localization/localization_sr_RS.ts`:
- Around line 1433-1434: The translation for the source "Ma&ximize" incorrectly
adds the extra word "Napredno" and moves the accelerator to N; update the
translation value for the "Ma&ximize" entry to a single-word Serbian verb that
matches the source meaning and place the & on a letter that corresponds to the
original mnemonic (e.g., use "Ma&ksimizuj" or another single-word form), so the
action remains one word and the accelerator aligns with sibling entries.
- Around line 485-486: The Serbian translation for the source string
"Nati&amp;ve Git/GPG" is incorrect ("Prirodni Git/GPG"); update the translation
for that source entry to use the correct UI term, e.g. "Izvorni Git/GPG" (or
"Nativni Git/GPG" to match the variant used on line 259) so the radio option
conveys the intended meaning; locate the translation pair for source
"Nati&amp;ve Git/GPG" and replace the value "Prirodni Git/GPG" with the chosen
corrected term.
- Around line 1-3: Revert the manual translation edits in localization_sr_RS.ts
(undo all newly filled message entries and restore the prior .ts content),
except preserve the header language="sr_RS" change only if that was an
intentional metadata fix; specifically undo the accidental single-line help
replacement (the entry that became ":" around the reported area) and any
invented/nonstandard tokens, then re-import translations via Weblate and run
qmake6 after source changes so the .ts is regenerated properly.
- Around line 425-426: The translation for the source "The folder %1 doesn't
seem to be a password store or is not yet initialised." currently mixes Cyrillic
and Latin glyphs in the translated string "Mapa %1 ne izgledа kao lozinkova baza
ili još nije иницијализована."; replace it with a version that uses a single
script consistently (either full Cyrillic or full Latin), e.g. convert all words
to Serbian Cyrillic or all to Serbian Latin, and audit other newly added
translations in this file for the same mixed-glyph issue so they are normalized
to the same script style.
- Around line 557-558: The translation for the source string "GPG signing
failed!" is incorrect; replace the current value "Pristup GPG značenju nije
uspešan!" with the correct Serbian translation "GPG potpisivanje nije uspelo!"
(or the Cyrillic equivalent) and ensure the translation type attribute is
updated from "unfinished" if appropriate; while here, audit the nearby
re-encryption-related source strings in the same localization file (those
adjacent to "GPG signing failed!") for similar machine-translation errors and
correct them to accurate Serbian phrasing.
- Around line 400-407: The translations for the source strings "Create
password-store?" and "Would you like to create a password-store at %1?" use the
invalid word "loštinarski/loštinarsko" and must be fixed; either clear the
translation bodies and keep type="unfinished" so they stay untranslated, or
replace them with correct Serbian terminology such as "Da li želite da kreirate
skladište lozinki?" and "Želite li da kreirate skladište lozinki na %1?"
respectively—update the <message> entries that contain those exact source texts
in localization/localization_sr_RS.ts (the entries shown in the diff)
accordingly.
- Around line 395-396: The current Serbian (sr_RS) translation for the GnuPG
install message is incorrect and mixes scripts; replace the malformed
Cyrillic/Latin string in the translation element corresponding to the source
"Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your
favorite package manager<br>or <a
href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org"
with either an empty unfinished translation or a correct, single-script Serbian
translation (consistent Cyrillic like the other entry at lines ~459–461) that
conveys: instruct user to install GnuPG, install gpg via package manager, or
download from gnupg.org; update the translation attribute to keep
type="unfinished" if you leave it empty.

---

Outside diff comments:
In `@localization/localization_it_IT.ts`:
- Around line 140-150: Several Italian translation entries in
localization_it_IT.ts (e.g., the translation for "Genera coppia di chiavi GPG",
"Signing Key" and the long sentence starting "Optional: GPG key to sign .gpg-id
files...") are marked with type="unfinished" despite being finalized; remove the
type="unfinished" attribute from those <translation> elements (and any other
completed entries listed in the comment ranges like 397-437, 559-667, 714-715,
1189-1258, 1424-1429, 1507-1590) so the catalog uses the Italian text at
runtime, ensuring only truly incomplete translations retain type="unfinished".
- Around line 1-1592: This change directly edits the translation file
localization/localization_it_IT.ts which violates the guideline to use Weblate;
revert any manual edits in localization/localization_it_IT.ts (or restore from
the branch base), push translations via the Weblate workflow so the Italian
translations are updated there, and then regenerate translation artifacts by
running qmake6 to update the .qm/.ts outputs; reference the file
localization/localization_it_IT.ts and ensure the qmake6 step is executed before
committing to satisfy the "Do not manually edit .ts files" policy.

In `@localization/localization_sr_RS.ts`:
- Around line 1070-1073: The translation for the source string "Are you sure you
want to delete %1%2?" contains a Qt Linguist artifact `{1%2??}`; replace the
translation value so it uses both placeholders correctly (e.g. "Da li ste
sigurni da želite da obrišete %1%2?") ensuring the `%1` and `%2` tokens are
preserved exactly and no extra braces or question marks remain; update the
translation entry corresponding to that source string in localization_sr_RS.ts
(the message tied to the main window delete prompt) to the corrected Serbian
text.

---

Duplicate comments:
In `@localization/localization_it_IT.ts`:
- Around line 659-662: The Italian translation for the message "Re-encryption
completed: %1 succeeded, %2 failed" uses singular feminine forms ("riuscita,
fallita"); change it to plural masculine forms "riusciti, falliti" to agree with
the file-count summary. Update the translation entry corresponding to the source
string (location ../src/imitatepass.cpp line="753") in localization_it_IT.ts so
the <translation> text reads the corrected plural form.

In `@localization/localization_sr_Cyrl.ts`:
- Line 3: The TS language attribute in localization_sr_Cyrl.ts is incorrectly
set to language="sr_RS", conflicting with the Latin Serbian file; update the
language identifier for the Cyrillic file to a distinct locale variant (e.g.,
use sr_RS@cyr, sr_Cyrl, or sr@Cyrl) by making the change through Weblate (do not
edit the .ts file manually) and then rebuild translations with qmake6 so Qt will
load the correct Cyrillic translation at runtime.
- Line 713: The listed translation strings in localization_sr_Cyrl.ts mix Latin
and Cyrillic characters (e.g., the entries containing "Сadržaj шаблона...",
"Сadržaj скривен", "Tražim: %1", "Пrikaži лозинку", "Карakter сет:"); do not
edit the .ts file directly—open Weblate, update those keys to use fully Cyrillic
text (ensure placeholders like %1 remain unchanged), save the translations in
Weblate, then regenerate the translation binaries by running qmake6 so the
changes are picked up by the build.
- Line 259: Replace the Cyrillic transliterations of technical/tool names in the
translation entries (e.g., "Натив", "Парол"/"парол", "Гит", "ГПГ", "КтПас") with
their original Latin forms ("Native", "Pass"/"pass", "Git", "GPG", "QtPass")
using Weblate (do not manually edit the .ts file), then run qmake6 to regenerate
sources after the Weblate changes are applied.
- Line 1015: In the MainWindow translations update the incorrect Serbian
Cyrillic translations using Weblate (do not edit the .ts by hand): correct the
entry currently reading "Сифратекст скривен" to include both "Password and"
(accurate translation for "Password and Content hidden"), fix concatenation
spacing for the deletion prompt strings that lack a leading space, change
"Желиште" to "Желите", replace phonetic "Реимејни" with "Преименуј", and add the
missing trailing spaces after "Rename Folder To:" and "Rename File To:"; after
making these changes in Weblate regenerate the translations locally by running
qmake6 so the .ts updates are applied.
- Around line 1310-1399: The QtPass translation entries currently contain
English text in the Serbian Cyrillic localization (strings like "Generating GPG
key pair", "Failed to connect WebDAV:", "Clipboard cleared", "Clipboard not
cleared", "Copied to clipboard" etc.), so revert manual edits and update
translations via Weblate: open the QtPass context in Weblate, provide proper
Serbian Cyrillic translations or clear the <translation> elements there for all
these source strings (those exact source texts help you find the entries), then
push the Weblate-generated .ts update and run qmake6 to regenerate sources as
required per the project guidelines.
- Line 309: The translation entries for the source strings "Add" and "Key not
found in keyring" in localization_sr_Cyrl.ts are left as English in
type="unfinished" and must be updated via Weblate (do not edit the .ts file
directly); open the project in Weblate, provide the correct Serbian Cyrillic
translations (e.g., "Додај" and the Serbian equivalent for the keyring message)
or leave the translations empty if not ready, save/commit the changes through
Weblate, and then run qmake6 to regenerate any derived files after
source/translation updates.
- Line 1533: The translation for the status badge "[PARTIAL]" in
localization_sr_Cyrl.ts is incorrect ("[ДЕЛОВНО] ") — update the Serbian
translation to "[ДЕЛИМИЧНО] " (preserve the trailing space) using Weblate rather
than editing the .ts file directly; after committing the change in Weblate,
regenerate translations/resources by running qmake6 so the updated string (the
translation value for "[PARTIAL]" in localization_sr_Cyrl.ts) is picked up.
- Around line 132-140: Replace the Croatian imperative "Генерирај" translations
for the source strings "Generate" and "Generate GPG key pair" by updating the
Serbian translations via Weblate (do not edit the .ts file manually); set them
to "Генериши" and "Генериши пар GPG кључева" respectively (these same strings
appear elsewhere correctly in this file), push the corrected translation through
Weblate and then run qmake6 to refresh build artifacts after the translation
update.
- Line 64: Several Serbian translations in localization_sr_Cyrl.ts contain typos
and wrong verb forms: replace "Корисити" with "Користити", "специјанле" with
"специјалне", "уставе" with "инсталирати", and all occurrences of "Користејте"
with "Користите"; do not edit the .ts file directly—apply these corrections
through Weblate for the keys/strings that currently hold the exact erroneous
values ("Корисити фонт исте ширине", "специјанле", "уставе", "Користејте"
entries), then export or let the CI update the .ts file and run qmake6 to
regenerate sources per the coding guidelines.
- Around line 1-1536: The localization file localization_sr_Cyrl.ts was manually
edited which violates the translation workflow; revert/remove manual changes to
this .ts and instead update translations through Weblate, then after any source
changes run qmake6 to regenerate translation artifacts (ensuring the .ts files
are produced by the build tooling), and commit only the resulting regenerated
files produced by the sanctioned workflow; reference the .ts file name
(localization_sr_Cyrl.ts), the Weblate translation platform, and the qmake6 step
to locate where to fix this.
- Around line 602-604: The translations for re-encryption in
localization_sr_Cyrl.ts are incorrect or inconsistent (e.g., the source
"Re-encryption failed" and other re-encryption strings show doubled words like
"Поновно поновно шифрирање", Russian forms such as "Преновација"/"Повторна", and
a nonsensical line "Погрешна је врата за резервно копирање"); do not edit the
.ts file directly—open the corresponding keys in Weblate, correct the Serbian to
use consistent terms ("Поново" / "поновно" or a single correct phrase for
"re-encryption"), replace Russian forms with proper Serbian, and fix the
nonsensical backup message to a meaningful Serbian phrase; after updating
translations in Weblate, regenerate the .ts by running qmake6 so the changes are
applied.
- Line 843: The translation entry containing "Генерише ОТП и копира у одељак за
пресецање" uses a different term for "clipboard" than other entries that use
"клипборд"; do not edit the .ts file directly—open the project in Weblate,
standardize the term to "клипборд" for that source string and any other
occurrences, save the Weblate changes and then run qmake6 to regenerate
translation artifacts.
🪄 Autofix (Beta)

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: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 90a14ae1-fd59-4e03-8d5e-fda0c0c46750

📥 Commits

Reviewing files that changed from the base of the PR and between fc136bd and 5c72686.

📒 Files selected for processing (3)
  • localization/localization_it_IT.ts
  • localization/localization_sr_Cyrl.ts
  • localization/localization_sr_RS.ts

Comment thread localization/localization_sr_RS.ts
Comment thread localization/localization_sr_RS.ts
Comment thread localization/localization_sr_RS.ts
Comment thread localization/localization_sr_RS.ts
Comment thread localization/localization_sr_RS.ts Outdated
Comment thread localization/localization_sr_RS.ts
Comment thread localization/localization_sr_RS.ts Outdated
Copy link
Copy Markdown
Contributor

@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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
localization/localization_zh_Hant.ts (4)

414-516: ⚠️ Potential issue | 🟠 Major

Multiple ConfigDialog entries are still Simplified Chinese in the zh_Hant catalog.

The following translations were not converted and will surface mixed-script UI to Traditional Chinese users. Please convert to Traditional forms consistent with the rest of the catalog:

  • Line 416 (Failed to create password-store at: %1): 在:%1 处创建密码存储失败 → e.g. 在 %1 建立密碼儲存庫失敗
  • Line 421 (Password store not initialised): 密码存储未初始化密碼儲存庫未初始化
  • Line 426 (The folder %1 doesn't seem to be…): 该文件夹%1似乎不是一个密码存储或尚未初始化。資料夾 %1 看起來不是密碼儲存庫,或尚未初始化。
  • Line 441 (System tray is not available): 系统托盘不可用系統匣圖示無法使用
  • Line 446 (Pass OTP extension needs to be installed): 需要安装 Pass OTP 扩展需要安裝 Pass OTP 擴充功能
  • Line 481 (Use pass-otp extension): 使用 pass-otp 扩展使用 pass-otp 擴充功能
  • Line 515 (Templates add extra fields…): 模板添加额外字段,用于密码生成对话框和密码视图。範本會在密碼產生對話框與密碼檢視中加入額外欄位。
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 414 - 516, Replace the
Simplified Chinese translations in the zh_Hant catalog for the
ConfigDialog-related source strings with their Traditional Chinese equivalents:
update the translation for "Failed to create password-store at: %1" to something
like "在 %1 建立密碼儲存庫失敗", for "Password store not initialised" to "密碼儲存庫未初始化", for
"The folder %1 doesn't seem to be a password store or is not yet initialised."
to "資料夾 %1 看起來不是密碼儲存庫,或尚未初始化。", for "System tray is not available" to
"系統匣圖示無法使用", for "Pass OTP extension needs to be installed" and the UI string
"Use pass-otp extension" to "需要安裝 Pass OTP 擴充功能" and "使用 pass-otp 擴充功能"
respectively, and for "Templates add extra fields in the password generation
dialogue, and in the password view." to "範本會在密碼產生對話框與密碼檢視中加入額外欄位。"; locate and
replace these translations in localization/localization_zh_Hant.ts by matching
the source text entries from configdialog.cpp and configdialog.ui and update the
translation attributes accordingly.

1456-1460: ⚠️ Potential issue | 🟡 Minor

Empty translation for Show unusable keys.

The <translation> body is empty, so Traditional Chinese users will see the English source (Show unusable keys) in the Users dialog. Please supply a translation, e.g. 顯示無法使用的金鑰.

🛠️ Proposed fix
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">顯示無法使用的金鑰</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 1456 - 1460, Update the
empty <translation> for the message whose <source> is "Show unusable keys" in
localization_zh_Hant.ts by inserting the Traditional Chinese translation
"顯示無法使用的金鑰", remove the type="unfinished" attribute (or set it to finished) so
the string is treated as translated, and keep the surrounding <message> element
intact (locate the message by its source text to find the correct spot).

384-387: ⚠️ Potential issue | 🟠 Major

Simplified Chinese left in zh_Hant, and "profile" term is inconsistent.

Line 386's translation is still fully Simplified (未选择要删除的配置文件) while the sibling message at line 381 was converted. Additionally, 配置文件 reads as "config file" in Traditional Chinese — the profile concept used elsewhere (e.g. line 1076 should read 設定檔) should be used here for consistency.

🛠️ Proposed fix
-        <translation type="unfinished">未选择要删除的配置文件</translation>
+        <translation type="unfinished">未選擇要刪除的設定檔</translation>

Also consider aligning line 381 from 未選擇配置檔案未選擇設定檔.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 384 - 387, The Traditional
Chinese translation for the source "No profile selected to delete" is currently
Simplified and uses the inconsistent term `配置文件`; update the translation to
Traditional Chinese and the consistent "profile" term by replacing it with
`未選擇要刪除的設定檔`; also update the sibling message that currently reads `未選擇配置檔案` to
`未選擇設定檔` to keep terminology consistent across the file (locate the entries by
the source string "No profile selected to delete" and the sibling "未選擇配置檔案").

508-511: ⚠️ Potential issue | 🟠 Major

PWGen should remain as the program name, not translated as "generate password".

The source PWGen is the program name (matching pwgen(1)), but the translation 生成密码 (a) is Simplified Chinese and (b) renders as the action "generate password", which is misleading — users may think this label refers to the generate action rather than selecting the PWGen backend. Line 466 (Use PWGen) correctly keeps PWGen untranslated.

🛠️ Proposed fix
-        <translation type="unfinished">生成密码</translation>
+        <translation type="unfinished">PWGen</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 508 - 511, The translation
for the source string "PWGen" should not be localized; replace the current
translation "生成密码" with the literal program name "PWGen" (i.e., set the
translation to "PWGen" and remove the type="unfinished" if applicable) so the
label refers to the backend name rather than an action and matches the other
occurrence "Use PWGen".
♻️ Duplicate comments (4)
localization/localization_zh_Hant.ts (4)

3-3: ⚠️ Potential issue | 🔴 Critical

Critical: language="zh_CN" in the zh_Hant catalog — PR objective not actually achieved.

The PR description explicitly states Traditional Chinese's language code was corrected from zh_CN to zh_Hant, but the root <TS> element here is still language="zh_CN". Qt will treat this catalog as Simplified Chinese, so:

  • zh_CN users will load this Traditional-Chinese file and see mixed-script UI;
  • zh_TW / zh_HK users won't match it at all and will miss the translation entirely;
  • Plural rules and locale-specific formatting use Simplified rules.

This is a regression of a previously-applied fix.

🛠️ Proposed fix
-<TS version="2.1" language="zh_CN">
+<TS version="2.1" language="zh_Hant">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` at line 3, The TS root element in
localization/localization_zh_Hant.ts still declares language="zh_CN", which
leaves the catalog tagged as Simplified Chinese; update the root <TS> element's
language attribute to the correct Traditional Chinese code "zh_Hant" so the file
matches its filename and the PR intent, ensuring plural rules and locale
matching work correctly (edit the TS element in
localization/localization_zh_Hant.ts).

696-711: ⚠️ Potential issue | 🟡 Minor

KeygenDialog still has unresolved Simplified Chinese forms.

  • Line 696 passphrase guidance retains 單詞 (Simplified-style usage; Traditional convention is 單字).
  • Line 711 (Template contents will be set based on GPG version.) is still fully Simplified: 模板内容将根据 GPG 版本设置。 → suggest 範本內容將依 GPG 版本設定。
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 696 - 711, In the
KeygenDialog translations within localization_zh_Hant (the passphrase guidance
and the template note), replace Simplified-style words with Traditional Chinese:
change "單詞" to the Traditional convention "單字" in the passphrase guidance string
used by KeygenDialog, and replace the Simplified sentence "模板内容将根据 GPG 版本设置。"
with the Traditional phrasing "範本內容將依 GPG 版本設定。" so both translations in
KeygenDialog are proper Traditional Chinese.

252-376: ⚠️ Potential issue | 🟡 Minor

ConfigDialog mnemonic/terminology fixes from prior review are still not applied.

  • Line 254 (&Use pass): &使用pass has the mnemonic & in front of a CJK character (not an accelerator on Qt), and drops the space before pass. Align with the trailing-pattern used for tray items: 使用 pass (&U).
  • Line 259 (Native): 本地 reads as "local"; line 486 already uses 原生 Git/GPG — use 原生 here for consistency.
  • Lines 337 & 376: 字段/單詞 are Simplified usages; Traditional conventions are 欄位 / 單字.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 252 - 376, The
ConfigDialog translations still use incorrect mnemonics/terminology: change the
"&Use pass" translation from "&使用pass" to "使用 pass (&U)" so the accelerator is
rendered correctly and the space before "pass" is preserved; change the "Native"
translation from "本地" to "原生" to match other labels like "原生 Git/GPG"; and
replace Simplified terms "字段" and "單詞" in the template-related strings with
Traditional "欄位" and "單字" respectively (these occur in the ConfigDialog UI
translations and related strings in ConfigDialog.cpp). Apply these edits to the
translation entries for the literal sources "&Use pass", "Native", and the
template/help strings referenced in ConfigDialog (e.g., the "Show all lines
beginning..." and "Show all fields templated" translations).

1074-1477: ⚠️ Potential issue | 🟠 Major

Previously-flagged MainWindow / UsersDialog issues are still unresolved.

Several earlier review comments on this file have not been applied. Please address them alongside the in-progress Traditional-Chinese conversion:

  • Line 1076 — 配置文件已更改为 %1 (Simplified + wrong noun) → 設定檔已變更為 %1.
  • Line 1148 — 無法創建文件夾:%1 → standardize to 資料夾 and use 建立 (consistent with the Failed to create .gpg-id file sibling).
  • Line 1153 — 無法在:%1 創建 .gpg-id 檔案 → awkward colon placement; align with the folder-create wording (建立 / colon after the phrase).
  • Lines 1192–1196 — re-encryption confirmation still says 此文件夾中所有密碼檔案 and 當前; standardize to 資料夾 and 目前.
  • Line 1426 — 具有讀取訪問權限的用戶: 訪問 and 用戶 are Simplified conventions; Traditional prefers 存取 and 使用者.
  • Line 1435 — still contains 文件夾, 用戶, and 密鑰/加密密鑰. Align with the 金鑰 standardization used elsewhere in the file (e.g. line 144, 568, 671).
  • Lines 1472 & 1477 — 密鑰列表缺失 / GPG 密鑰列表: use 金鑰 for consistency with the rest of this catalog.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 1074 - 1477, Update the
Traditional Chinese translations in localization_zh_Hant.ts for the MainWindow
and UsersDialog strings: change "Profile changed to %1" to use 設定檔 ("設定檔已變更為
%1") in the MainWindow message; standardize "Failed to create folder: %1" and
the .gpg-id message to use 資料夾 and 建立 with consistent colon placement (e.g. "無法在
%1 建立 .gpg-id 檔案" and "無法建立資料夾:%1"); adjust the re-encrypt confirmation text in
MainWindow to replace 文件夾→資料夾 and 當前→目前; in UsersDialog replace 訪問→存取, 用戶→使用者
and normalize 密鑰/加密密鑰→金鑰 throughout the related messages ("Read access users",
the explanatory paragraph, "Show unusable keys", "Keylist missing", and "Could
not fetch list of available GPG keys") so all occurrences use Traditional terms
consistently.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/src.pro`:
- Line 47: The TS root element in localization_sr_Cyrl.ts has the wrong language
attribute (currently "sr_RS"); update the <TS> root element's language attribute
to "sr_Cyrl" (or regenerate the file from Weblate) so the filename
localization_sr_Cyrl.ts matches the declared locale and correct plural rules;
locate the <TS ... language="..."> declaration in localization_sr_Cyrl.ts and
replace the value with "sr_Cyrl".

---

Outside diff comments:
In `@localization/localization_zh_Hant.ts`:
- Around line 414-516: Replace the Simplified Chinese translations in the
zh_Hant catalog for the ConfigDialog-related source strings with their
Traditional Chinese equivalents: update the translation for "Failed to create
password-store at: %1" to something like "在 %1 建立密碼儲存庫失敗", for "Password store
not initialised" to "密碼儲存庫未初始化", for "The folder %1 doesn't seem to be a
password store or is not yet initialised." to "資料夾 %1 看起來不是密碼儲存庫,或尚未初始化。", for
"System tray is not available" to "系統匣圖示無法使用", for "Pass OTP extension needs to
be installed" and the UI string "Use pass-otp extension" to "需要安裝 Pass OTP 擴充功能"
and "使用 pass-otp 擴充功能" respectively, and for "Templates add extra fields in the
password generation dialogue, and in the password view." to
"範本會在密碼產生對話框與密碼檢視中加入額外欄位。"; locate and replace these translations in
localization/localization_zh_Hant.ts by matching the source text entries from
configdialog.cpp and configdialog.ui and update the translation attributes
accordingly.
- Around line 1456-1460: Update the empty <translation> for the message whose
<source> is "Show unusable keys" in localization_zh_Hant.ts by inserting the
Traditional Chinese translation "顯示無法使用的金鑰", remove the type="unfinished"
attribute (or set it to finished) so the string is treated as translated, and
keep the surrounding <message> element intact (locate the message by its source
text to find the correct spot).
- Around line 384-387: The Traditional Chinese translation for the source "No
profile selected to delete" is currently Simplified and uses the inconsistent
term `配置文件`; update the translation to Traditional Chinese and the consistent
"profile" term by replacing it with `未選擇要刪除的設定檔`; also update the sibling
message that currently reads `未選擇配置檔案` to `未選擇設定檔` to keep terminology
consistent across the file (locate the entries by the source string "No profile
selected to delete" and the sibling "未選擇配置檔案").
- Around line 508-511: The translation for the source string "PWGen" should not
be localized; replace the current translation "生成密码" with the literal program
name "PWGen" (i.e., set the translation to "PWGen" and remove the
type="unfinished" if applicable) so the label refers to the backend name rather
than an action and matches the other occurrence "Use PWGen".

---

Duplicate comments:
In `@localization/localization_zh_Hant.ts`:
- Line 3: The TS root element in localization/localization_zh_Hant.ts still
declares language="zh_CN", which leaves the catalog tagged as Simplified
Chinese; update the root <TS> element's language attribute to the correct
Traditional Chinese code "zh_Hant" so the file matches its filename and the PR
intent, ensuring plural rules and locale matching work correctly (edit the TS
element in localization/localization_zh_Hant.ts).
- Around line 696-711: In the KeygenDialog translations within
localization_zh_Hant (the passphrase guidance and the template note), replace
Simplified-style words with Traditional Chinese: change "單詞" to the Traditional
convention "單字" in the passphrase guidance string used by KeygenDialog, and
replace the Simplified sentence "模板内容将根据 GPG 版本设置。" with the Traditional
phrasing "範本內容將依 GPG 版本設定。" so both translations in KeygenDialog are proper
Traditional Chinese.
- Around line 252-376: The ConfigDialog translations still use incorrect
mnemonics/terminology: change the "&Use pass" translation from "&使用pass" to "使用
pass (&U)" so the accelerator is rendered correctly and the space before "pass"
is preserved; change the "Native" translation from "本地" to "原生" to match other
labels like "原生 Git/GPG"; and replace Simplified terms "字段" and "單詞" in the
template-related strings with Traditional "欄位" and "單字" respectively (these
occur in the ConfigDialog UI translations and related strings in
ConfigDialog.cpp). Apply these edits to the translation entries for the literal
sources "&Use pass", "Native", and the template/help strings referenced in
ConfigDialog (e.g., the "Show all lines beginning..." and "Show all fields
templated" translations).
- Around line 1074-1477: Update the Traditional Chinese translations in
localization_zh_Hant.ts for the MainWindow and UsersDialog strings: change
"Profile changed to %1" to use 設定檔 ("設定檔已變更為 %1") in the MainWindow message;
standardize "Failed to create folder: %1" and the .gpg-id message to use 資料夾 and
建立 with consistent colon placement (e.g. "無法在 %1 建立 .gpg-id 檔案" and
"無法建立資料夾:%1"); adjust the re-encrypt confirmation text in MainWindow to replace
文件夾→資料夾 and 當前→目前; in UsersDialog replace 訪問→存取, 用戶→使用者 and normalize 密鑰/加密密鑰→金鑰
throughout the related messages ("Read access users", the explanatory paragraph,
"Show unusable keys", "Keylist missing", and "Could not fetch list of available
GPG keys") so all occurrences use Traditional terms consistently.
🪄 Autofix (Beta)

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: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: fef74387-aef0-4472-963e-b86ef5840639

📥 Commits

Reviewing files that changed from the base of the PR and between 5c72686 and b04ede5.

📒 Files selected for processing (2)
  • localization/localization_zh_Hant.ts
  • src/src.pro

Comment thread src/src.pro
- sr_Cyrl: change language to sr_Cyrl
- sr_RS: Ma&ximize (single word)
- sr_RS: Nati&ve Git/GPG (Nativni)
@kody-ai

This comment has been minimized.

Copy link
Copy Markdown
Contributor

@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: 2

♻️ Duplicate comments (12)
localization/localization_sr_Cyrl.ts (1)

1-1536: ⚠️ Potential issue | 🟠 Major

Manual edits to a .ts catalog violate the translation workflow.

This entire file is introduced as a hand-authored Qt Linguist catalog, and numerous previously flagged quality issues remain unresolved in the latest revision (e.g., transliterated brand name КтПас on lines 783/920/934, English text left as “translation” on lines 309/1312/1318/1324/1388/1393/1398/1508, mixed Latin/Cyrillic mid-word on lines 713/991/1044/1265/1270, Croatian/Russian verb forms on lines 134/139/603/624/629/655/660/665/1171/1214/1260, typos like Корисити/специјанле/Користејте/Постпис/Желиште, phonetic transliterations Натив/Гит/Реимејни, dropped trailing spaces on rename prompts 1199/1204, and [ДЕЛОВНО] on line 1533). These need to flow through Weblate rather than being patched inline.

As per coding guidelines localization/**/*.ts: Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_Cyrl.ts` around lines 1 - 1536, This .ts file
was hand-edited and contains many incorrect translations and style violations;
undo the manual inline edits and restore the catalog to the generated state,
then submit proper translations through Weblate (not direct .ts edits).
Specifically, do not edit contexts like ConfigDialog, MainWindow, ImitatePass,
KeygenDialog, QtPass, StoreModel, TrayIcon, UsersDialog, etc. in this file;
instead revert localization_sr_Cyrl.ts to the auto-generated version, push
source changes if needed, update translations via Weblate for entries such as
the "QtPass" string and other mistranslated keys, and after Weblate accepts
updates run qmake6 to regenerate translation artifacts and ensure the .ts file
reflects the approved translations.
localization/localization_sr_RS.ts (4)

1-3: ⚠️ Potential issue | 🟠 Major

Route this file through Weblate instead of direct .ts edits.

This PR directly modifies a localization/**/*.ts file (Line 3 and many entries below), which is against the repo translation workflow.

As per coding guidelines localization/**/*.ts: Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_RS.ts` around lines 1 - 3, This change illegally
edits the compiled Qt translation file localization_sr_RS.ts; revert the manual
edits in localization_sr_RS.ts, remove them from this PR, and instead perform
translations via Weblate for the Serbian locale so the .ts is regenerated
correctly; if you changed source strings, update the source (C++/QML) or
.pot/.ts sources, push those changes, then run qmake6 to regenerate translation
templates and let Weblate export the .ts, ensuring you do not directly commit
edits to localization_sr_RS.ts.

395-397: ⚠️ Potential issue | 🟠 Major

Correct the GnuPG install translation; current text is misleading and corrupted.

Line 396 changes the instruction semantics and mixes scripts/garbled tokens, which can mislead users in a recovery flow.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_RS.ts` around lines 395 - 397, The Serbian
translation for the message whose source is "Please install GnuPG on your
system.<br>Install <strong>gpg</strong> using your favorite package
manager<br>or <a href="https://www.gnupg.org/download/#sec-1-2">download</a> it
from GnuPG.org" is corrupted and changes meaning; update the <translation> entry
in localization_sr_RS.ts to a correct, clear Serbian equivalent (use correct
script and grammar), e.g. instruct users to install GnuPG (gpg) via their
package manager or download it from GnuPG.org, preserving HTML tags (<br>,
<strong>, <a>) and link URL exactly as in the <source>.

1521-1533: ⚠️ Potential issue | 🟡 Minor

Preserve trailing spaces in status badge translations.

Lines 1523, 1528, and 1533 drop the source trailing spaces from [INVALID] , [EXPIRED] , [PARTIAL] , causing badge text to run into following content.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_RS.ts` around lines 1521 - 1533, The localized
translations for the status badges have dropped the trailing space from the
source strings; update the translation entries corresponding to the source texts
"[INVALID] ", "[EXPIRED] ", and "[PARTIAL] " so each translated string (the
entries currently showing "[NEVAZILO]", "[ISTKAO]" and "[DELOVAN]") includes the
trailing space (e.g. "[NEVAZILO] ") to preserve spacing between the badge and
following content.

454-456: ⚠️ Potential issue | 🟠 Major

Restore the full GnuPG install help text; : breaks the dialog.

Line 456 collapses a full instructional message to a single :, removing actionable recovery guidance for users.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_sr_RS.ts` around lines 454 - 456, Restore the full
GnuPG installation help message in the localization entry that currently has a
single ":"; replace the incomplete <translation
type="unfinished">:</translation> with the full translated text (or at minimum
the original English source text) matching the <source>Please install GnuPG on
your system...click "Autodetect" in the next dialog.</source> so the
ConfigDialog message shown by configdialog.cpp is not broken and users retain
actionable instructions.
localization/localization_zh_Hant.ts (7)

254-259: ⚠️ Potential issue | 🟡 Minor

&Use pass mnemonic and Native translation still diverge from the rest of the catalog.

  • Line 254: &使用pass places & before a CJK glyph (not a usable Qt accelerator on most platforms) and drops the space before pass. Use the trailing (&U) pattern adopted elsewhere in this file (e.g. Lines 1403/1408).
  • Line 259: 本地 reads as "local" in Traditional Chinese and is the Simplified convention for "native". Line 486 already translates Nati&ve Git/GPG as 原生 Git/GPG; align.
🛠️ Proposed fix
-        <translation type="unfinished">&amp;使用pass</translation>
+        <translation type="unfinished">使用 pass (&amp;U)</translation>
...
-        <translation type="unfinished">本地</translation>
+        <translation type="unfinished">原生</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 254 - 259, The
translations for the "&Use pass" mnemonic and "Native" are inconsistent: update
the "&使用pass" entry (symbol: the translation string for "&Use pass") to use the
trailing accelerator pattern "使用 pass(&U)" so the ampersand isn't placed before
a CJK glyph, and change the "Native" translation (symbol: the translation string
for "Native") from "本地" to "原生" to match the existing "Nati&ve Git/GPG" -> "原生
Git/GPG" convention in the catalog.

3-3: ⚠️ Potential issue | 🔴 Critical

Critical regression: language attribute is zh_CN in a zh_Hant catalog.

The <TS> root attribute is language="zh_CN", while the file is localization_zh_Hant.ts and the PR objective explicitly states this should be zh_Hant. Qt will treat this catalog as Simplified Chinese, breaking locale selection and plural rules for Traditional Chinese users. This regressed from a previously fixed value.

🛠️ Proposed fix
-<TS version="2.1" language="zh_CN">
+<TS version="2.1" language="zh_Hant">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` at line 3, The <TS> root element in
localization_zh_Hant.ts incorrectly uses language="zh_CN"; update the root <TS>
attribute to language="zh_Hant" so the catalog matches the file name and selects
Traditional Chinese locale/plural rules correctly; locate the <TS> element in
localization_zh_Hant.ts (the root tag) and replace the language value
accordingly, ensuring no other occurrences remain with zh_CN.

1190-1196: ⚠️ Potential issue | 🟡 Minor

Re-encryption warning still uses 文件夾 and 當前.

The multi-paragraph warning now preserves the paragraph breaks (good), but the body still reads 當前定義在 .gpg-id 檔案中的收件人 and 此文件夾中所有密碼檔案. For zh_Hant prefer 目前 / 收件者 / 資料夾 to stay consistent with the rest of this file.

🛠️ Proposed fix
-        <translation type="unfinished">是否重新加密 %1 中的所有密碼?
-
-這將使用當前定義在 .gpg-id 檔案中的收件人重新加密此文件夾中所有密碼檔案。
-
-這可能會重寫許多檔案,並且無法輕鬆撤銷。
-
-繼續?</translation>
+        <translation type="unfinished">是否重新加密 %1 中的所有密碼?
+
+這將使用目前在 .gpg-id 中定義的收件者,重新加密此資料夾中的所有密碼檔案。
+
+這可能會重寫許多檔案,且不易復原。
+
+是否繼續?</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 1190 - 1196, Update the
zh_Hant translation string that begins with "是否重新加密 %1 中的所有密碼?" in
localization_zh_Hant.ts: replace 用詞 "當前" with "目前", "收件人" with "收件者", and "文件夾"
with "資料夾" so the body reads e.g. "這將使用目前定義在 .gpg-id 檔案中的收件者重新加密此資料夾中所有密碼檔案。"

1426-1477: ⚠️ Potential issue | 🟡 Minor

UsersDialog strings mix 密鑰/金鑰 and still use 文件夾.

  • Line 1435 uses Simplified-zh style 文件夾, 秘密密鑰, 加密密鑰 in a long help block — these should be 資料夾, 秘密金鑰, 加密金鑰 to match the 金鑰 standard adopted in Lines 144/671/676 of this catalog.
  • Lines 1472 and 1477 also use 密鑰 (e.g. 密鑰列表缺失, 無法取得可用的 GPG 密鑰列表); align with 金鑰.

Previously flagged and still unresolved.

🛠️ Proposed fix
-        <translation type="unfinished">密鑰列表缺失</translation>
+        <translation type="unfinished">金鑰列表缺失</translation>
...
-        <translation type="unfinished">無法取得可用的 GPG 密鑰列表</translation>
+        <translation type="unfinished">無法取得可用的 GPG 金鑰列表</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 1426 - 1477, Replace
inconsistent Simplified-style terms in the UsersDialog translations: in the long
help block translation for the source "Select which users should be able to
decrypt passwords stored in this folder..." (message with location
usersdialog.ui) change 文件夾→資料夾 and use 金鑰 everywhere (秘密金鑰, 加密金鑰) instead of 密鑰;
also update the two translations for the messages with location usersdialog.cpp
("Keylist missing" and "Could not fetch list of available GPG keys") to use 金鑰
(e.g., "金鑰列表缺失" and "無法取得可用的 GPG 金鑰列表") so all UsersDialog entries consistently
use 資料夾 and 金鑰.

1-1510: 🛠️ Refactor suggestion | 🟠 Major

Route these translation updates through Weblate instead of editing the .ts file directly.

This PR continues to directly edit the generated catalog. Many of the remaining issues below (Simplified forms surviving in a zh_Hant catalog, inconsistent terminology for key/folder/profile, collapsed multi-line strings, truncated translations like 自動 for Automatically push on Line 196) are symptoms of bypassing the translation workflow.

As per coding guidelines: localization/**/*.ts: Do not manually edit translation files (.ts files); use Weblate for translations and run qmake6 after source changes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 1 - 1510, The .ts was
edited directly instead of using Weblate (e.g. entries like "Automatically
push", "Use primary selection", and the file header language mismatching zh_Hant
vs zh_CN), violating the localization workflow; revert these manual edits to the
previous generated state, then perform translations via Weblate (fix Simplified
vs Traditional issues, inconsistent terms for key/folder/profile, multiline
strings and truncated labels) and push the corrected catalog; after updating
translations in Weblate regenerate/refresh the .ts (run qmake6 or the
project-specific update step) so the correct generated .ts is committed instead
of hand-editing localization/localization_zh_Hant.ts.

1148-1153: ⚠️ Potential issue | 🟡 Minor

文件夾 / 創建 still used here; inconsistent with the rest of the catalog.

Line 1148 uses 文件夾 (Simplified convention for folder; should be 資料夾) and 創建 (prefer 建立 to match sibling strings). Line 1153 also uses 創建 and places a colon awkwardly before the path (無法在:%1 創建 .gpg-id 檔案). Both were flagged previously.

🛠️ Proposed fix
-        <translation type="unfinished">無法創建文件夾:%1</translation>
+        <translation type="unfinished">無法建立資料夾:%1</translation>
...
-        <translation type="unfinished">無法在:%1 創建 .gpg-id 檔案</translation>
+        <translation type="unfinished">無法在 %1 建立 .gpg-id 檔案</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` around lines 1148 - 1153, Update the
two translations to use consistent Traditional Chinese terms: change the folder
string "無法創建文件夾:%1" to "無法建立資料夾:%1" (replace 創建→建立 and 文件夾→資料夾) and change the
.gpg-id file string for source "Failed to create .gpg-id file in: %1" from
"無法在:%1 創建 .gpg-id 檔案" to "無法在 %1 建立 .gpg-id 檔案" (remove the misplaced colon and
replace 創建→建立); locate these by the existing translation texts and the source
"Failed to create .gpg-id file in: %1" in localization_zh_Hant.ts.

1076-1076: ⚠️ Potential issue | 🟠 Major

Profile changed to %1 still rendered in Simplified Chinese.

配置文件已更改为 %1 retains Simplified forms (更改为) and 配置文件 reads as "config file" rather than "profile" in Traditional Chinese. This was flagged previously and remains unresolved; it is also inconsistent with the profile terminology used elsewhere (e.g. Line 381/386).

🛠️ Proposed fix
-        <translation type="unfinished">配置文件已更改为 %1</translation>
+        <translation type="unfinished">設定檔已變更為 %1</translation>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@localization/localization_zh_Hant.ts` at line 1076, The translation "配置文件已更改為
%1" uses Simplified characters and the wrong term for "profile"; replace this
string with a Traditional Chinese phrasing that uses the same "profile" term
used elsewhere (the translations around the other "profile" entries) and
Traditional characters—for example, use "設定檔已變更為 %1" or "已切換到設定檔 %1" so it
matches the terminology used in the other profile translations.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@localization/localization_sr_Cyrl.ts`:
- Around line 1217-1225: The translated entry in localization_sr_Cyrl.ts for the
source string from mainwindow.cpp (the "Re-encrypt all passwords in %1?" dialog)
is missing the leading question, the blank-line separators and the closing
"Continue?" prompt; open the Weblate editor for this specific source string (the
mainwindow.cpp dialog text at line referenced in the diff) and regenerate/edit
the translation so it exactly mirrors the source structure: include the initial
"Re-encrypt all passwords in %1?" line, preserve the blank-paragraph separators,
keep the full warning paragraph, and append the final "Continue?" prompt in
Serbian Cyrillic, then save the updated translation.

In `@localization/localization_sr_RS.ts`:
- Line 1233: The translation string in localization_sr_RS.ts contains a
malformed HTML anchor: remove the extraneous closing </a> that follows "password
manager." inside the <translation> element so each <a href="..."> has a matching
closing tag and the remaining anchors (for "problema", "Dokumentacija", "Izvorni
kod") remain unchanged; locate the translation block containing "QtPass je GUI
za" and fix the HTML so it becomes well-formed rich text.

---

Duplicate comments:
In `@localization/localization_sr_Cyrl.ts`:
- Around line 1-1536: This .ts file was hand-edited and contains many incorrect
translations and style violations; undo the manual inline edits and restore the
catalog to the generated state, then submit proper translations through Weblate
(not direct .ts edits). Specifically, do not edit contexts like ConfigDialog,
MainWindow, ImitatePass, KeygenDialog, QtPass, StoreModel, TrayIcon,
UsersDialog, etc. in this file; instead revert localization_sr_Cyrl.ts to the
auto-generated version, push source changes if needed, update translations via
Weblate for entries such as the "QtPass" string and other mistranslated keys,
and after Weblate accepts updates run qmake6 to regenerate translation artifacts
and ensure the .ts file reflects the approved translations.

In `@localization/localization_sr_RS.ts`:
- Around line 1-3: This change illegally edits the compiled Qt translation file
localization_sr_RS.ts; revert the manual edits in localization_sr_RS.ts, remove
them from this PR, and instead perform translations via Weblate for the Serbian
locale so the .ts is regenerated correctly; if you changed source strings,
update the source (C++/QML) or .pot/.ts sources, push those changes, then run
qmake6 to regenerate translation templates and let Weblate export the .ts,
ensuring you do not directly commit edits to localization_sr_RS.ts.
- Around line 395-397: The Serbian translation for the message whose source is
"Please install GnuPG on your system.<br>Install <strong>gpg</strong> using your
favorite package manager<br>or <a
href="https://www.gnupg.org/download/#sec-1-2">download</a> it from GnuPG.org"
is corrupted and changes meaning; update the <translation> entry in
localization_sr_RS.ts to a correct, clear Serbian equivalent (use correct script
and grammar), e.g. instruct users to install GnuPG (gpg) via their package
manager or download it from GnuPG.org, preserving HTML tags (<br>, <strong>,
<a>) and link URL exactly as in the <source>.
- Around line 1521-1533: The localized translations for the status badges have
dropped the trailing space from the source strings; update the translation
entries corresponding to the source texts "[INVALID] ", "[EXPIRED] ", and
"[PARTIAL] " so each translated string (the entries currently showing
"[NEVAZILO]", "[ISTKAO]" and "[DELOVAN]") includes the trailing space (e.g.
"[NEVAZILO] ") to preserve spacing between the badge and following content.
- Around line 454-456: Restore the full GnuPG installation help message in the
localization entry that currently has a single ":"; replace the incomplete
<translation type="unfinished">:</translation> with the full translated text (or
at minimum the original English source text) matching the <source>Please install
GnuPG on your system...click "Autodetect" in the next dialog.</source> so the
ConfigDialog message shown by configdialog.cpp is not broken and users retain
actionable instructions.

In `@localization/localization_zh_Hant.ts`:
- Around line 254-259: The translations for the "&Use pass" mnemonic and
"Native" are inconsistent: update the "&使用pass" entry (symbol: the translation
string for "&Use pass") to use the trailing accelerator pattern "使用 pass(&U)" so
the ampersand isn't placed before a CJK glyph, and change the "Native"
translation (symbol: the translation string for "Native") from "本地" to "原生" to
match the existing "Nati&ve Git/GPG" -> "原生 Git/GPG" convention in the catalog.
- Line 3: The <TS> root element in localization_zh_Hant.ts incorrectly uses
language="zh_CN"; update the root <TS> attribute to language="zh_Hant" so the
catalog matches the file name and selects Traditional Chinese locale/plural
rules correctly; locate the <TS> element in localization_zh_Hant.ts (the root
tag) and replace the language value accordingly, ensuring no other occurrences
remain with zh_CN.
- Around line 1190-1196: Update the zh_Hant translation string that begins with
"是否重新加密 %1 中的所有密碼?" in localization_zh_Hant.ts: replace 用詞 "當前" with "目前", "收件人"
with "收件者", and "文件夾" with "資料夾" so the body reads e.g. "這將使用目前定義在 .gpg-id
檔案中的收件者重新加密此資料夾中所有密碼檔案。"
- Around line 1426-1477: Replace inconsistent Simplified-style terms in the
UsersDialog translations: in the long help block translation for the source
"Select which users should be able to decrypt passwords stored in this
folder..." (message with location usersdialog.ui) change 文件夾→資料夾 and use 金鑰
everywhere (秘密金鑰, 加密金鑰) instead of 密鑰; also update the two translations for the
messages with location usersdialog.cpp ("Keylist missing" and "Could not fetch
list of available GPG keys") to use 金鑰 (e.g., "金鑰列表缺失" and "無法取得可用的 GPG 金鑰列表")
so all UsersDialog entries consistently use 資料夾 and 金鑰.
- Around line 1-1510: The .ts was edited directly instead of using Weblate (e.g.
entries like "Automatically push", "Use primary selection", and the file header
language mismatching zh_Hant vs zh_CN), violating the localization workflow;
revert these manual edits to the previous generated state, then perform
translations via Weblate (fix Simplified vs Traditional issues, inconsistent
terms for key/folder/profile, multiline strings and truncated labels) and push
the corrected catalog; after updating translations in Weblate regenerate/refresh
the .ts (run qmake6 or the project-specific update step) so the correct
generated .ts is committed instead of hand-editing
localization/localization_zh_Hant.ts.
- Around line 1148-1153: Update the two translations to use consistent
Traditional Chinese terms: change the folder string "無法創建文件夾:%1" to "無法建立資料夾:%1"
(replace 創建→建立 and 文件夾→資料夾) and change the .gpg-id file string for source
"Failed to create .gpg-id file in: %1" from "無法在:%1 創建 .gpg-id 檔案" to "無法在 %1 建立
.gpg-id 檔案" (remove the misplaced colon and replace 創建→建立); locate these by the
existing translation texts and the source "Failed to create .gpg-id file in: %1"
in localization_zh_Hant.ts.
- Line 1076: The translation "配置文件已更改為 %1" uses Simplified characters and the
wrong term for "profile"; replace this string with a Traditional Chinese
phrasing that uses the same "profile" term used elsewhere (the translations
around the other "profile" entries) and Traditional characters—for example, use
"設定檔已變更為 %1" or "已切換到設定檔 %1" so it matches the terminology used in the other
profile translations.
🪄 Autofix (Beta)

✅ Autofix completed


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 0237b684-1682-4293-89a3-787863af19e9

📥 Commits

Reviewing files that changed from the base of the PR and between 5c72686 and 830f180.

📒 Files selected for processing (4)
  • localization/localization_sr_Cyrl.ts
  • localization/localization_sr_RS.ts
  • localization/localization_zh_Hant.ts
  • src/src.pro

Comment thread localization/localization_sr_Cyrl.ts Outdated
Comment thread localization/localization_sr_RS.ts Outdated
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 17, 2026

Note

Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it.

Fixes Applied Successfully

Fixed 2 file(s) based on 2 unresolved review comments.

Files modified:

  • localization/localization_sr_Cyrl.ts
  • localization/localization_sr_RS.ts

Commit: d5abfab710d86cff0daf3037a9c8b1e5fab20416

The changes have been pushed to the localization-updates-with-qwen branch.

Time taken: 2m 5s

Fixed 2 file(s) based on 2 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
@kody-ai
Copy link
Copy Markdown

kody-ai Bot commented Apr 17, 2026

Kody Review Complete

Great news! 🎉
No issues were found that match your current review configurations.

Keep up the excellent work! 🚀

Kody Guide: Usage and Configuration
Interacting with Kody
  • Request a Review: Ask Kody to review your PR manually by adding a comment with the @kody start-review command at the root of your PR.

  • Validate Business Logic: Ask Kody to validate your code against business rules by adding a comment with the @kody -v business-logic command.

  • Provide Feedback: Help Kody learn and improve by reacting to its comments with a 👍 for helpful suggestions or a 👎 if improvements are needed.

Current Kody Configuration
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug
Performance
Security
Cross File
Business Logic

Access your configuration settings here.

@annejan annejan merged commit b800bb3 into main Apr 17, 2026
23 of 24 checks passed
@annejan annejan deleted the localization-updates-with-qwen branch April 17, 2026 00:59
@codeant-ai
Copy link
Copy Markdown
Contributor

codeant-ai Bot commented Apr 18, 2026

CodeAnt AI is running the review.

@codeant-ai codeant-ai Bot added size:XXL This PR changes 1000+ lines, ignoring generated files and removed size:XXL This PR changes 1000+ lines, ignoring generated files labels Apr 18, 2026
@codeant-ai
Copy link
Copy Markdown
Contributor

codeant-ai Bot commented Apr 18, 2026

Sequence Diagram

This PR adds and refines translations (including a new Serbian Cyrillic locale) for the re-encryption, signing, and configuration flows. The diagram shows the high-level password re-encryption sequence that these messages describe, including git backup and GPG operations.

sequenceDiagram
    participant User
    participant QtPassUI
    participant GitRepo
    participant GPG

    User->>QtPassUI: Trigger re-encrypt passwords for folder
    QtPassUI->>GitRepo: Check status and create backup commit
    GitRepo-->>QtPassUI: Backup commit recorded
    QtPassUI->>GPG: Verify .gpg-id and recipients
    GPG-->>QtPassUI: Valid keys and ids
    QtPassUI->>GPG: Re-encrypt all password files in folder
    GPG-->>QtPassUI: Re-encryption results
    QtPassUI-->>User: Show re-encryption summary and any errors
Loading

Generated by CodeAnt AI

Comment on lines 472 to +519
@@ -501,7 +501,7 @@ email</translation>
<message>
<location filename="../src/configdialog.ui" line="778"/>
<source>PWGen</source>
<translation>PWGen</translation>
<translation>Clé de signature</translation>
</message>
<message>
<location filename="../src/configdialog.ui" line="938"/>
@@ -516,7 +516,7 @@ email</translation>
<message>
<location filename="../src/configdialog.ui" line="1022"/>
<source>Templates add extra fields in the password generation dialogue, and in the password view.</source>
<translation>Les templates ajoutent des champs supplémentaires dans la boîte de dialogue de génération de mdp et dans le panel de visualisation.</translation>
<translation>Clé GPG optionnelle pour signer les fichiers .gpg-id pour la vérification d&apos;intégrité. Laissez vide sauf si vous avez besoin de protéger la liste des utilisateurs contre l&apos;usurpation.</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟠 Architect Review — HIGH

In the fr_BE locale, several configuration entries are mapped to the wrong concepts: the "Git" label is translated as "Générer une paire de clefs GPG", "PWGen" is translated as "Clé de signature", and the template-help text is replaced with signing-key help text, while the actual "Signing Key" and optional-help entries are left untranslated. This makes the configuration options semantically incorrect in French (Belgium).

Suggestion: Re-align each translation in this block to its correct source string (Git label, PWGen label, Signing Key label, template-help paragraph) by following the fr_FR baseline or other correct locales, ensuring short labels are not replaced by long help texts.

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

**Path:** localization/localization_fr_BE.ts
**Line:** 472:519
**Comment:**
	*HIGH: In the fr_BE locale, several configuration entries are mapped to the wrong concepts: the "Git" label is translated as "Générer une paire de clefs GPG", "PWGen" is translated as "Clé de signature", and the template-help text is replaced with signing-key help text, while the actual "Signing Key" and optional-help entries are left untranslated. This makes the configuration options semantically incorrect in French (Belgium).

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.

Comment on lines 1107 to +1158
@@ -1117,12 +1117,12 @@ Expire-Date: 0
<message>
<location filename="../src/mainwindow.cpp" line="1047"/>
<source>Rename folder</source>
<translation>Renommer le dossier</translation>
<translation>Impossible de créer le dossier : %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1051"/>
<source>Rename password</source>
<translation>Renommer le mot de passe</translation>
<translation>Échec de la création du fichier .gpg-id dans : %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1060"/>
@@ -1144,18 +1144,18 @@ Expire-Date: 0
<message>
<location filename="../src/mainwindow.cpp" line="1121"/>
<source>Failed to create .gpg-id file in: %1</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Le répertoire n&apos;existe pas : %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1143"/>
<location filename="../src/mainwindow.cpp" line="1179"/>
<source>Rename file</source>
<translation>Renommer le fichier</translation>
<translation>Ré-chiffrement des mots de passe</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1143"/>
<source>Rename Folder To: </source>
<translation>Renommer le dossier en : </translation>
<translation>Cela ré-chiffre toutes les fichiers de mot de passe dans ce dossier à l&apos;aide des destinataires actuels définis dans .gpg-id. Cela peut écrire sur plusieurs fichiers et ne peut pas être annulé facilement.</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔴 Architect Review — CRITICAL

In the fr_BE MainWindow translations, several operational strings are mismatched: "No password selected for OTP generation" is translated as "Erreur", "Rename folder" is translated as a folder-creation failure message, "Rename password" as a .gpg-id creation failure, and "Rename file" and "Rename Folder To:" are translated with re-encryption messages. As a result, common actions like rename and OTP operations display incorrect prompts and error text to users.

Suggestion: Restore these MainWindow translations so that each label and dialog text matches its source meaning (OTP empty state, rename prompts, error messages) by copying or adapting from a correct French locale (e.g., fr_FR), and then re-run a focused QA pass on these high-frequency dialogs.

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

**Path:** localization/localization_fr_BE.ts
**Line:** 1107:1158
**Comment:**
	*CRITICAL: In the fr_BE MainWindow translations, several operational strings are mismatched: "No password selected for OTP generation" is translated as "Erreur", "Rename folder" is translated as a folder-creation failure message, "Rename password" as a .gpg-id creation failure, and "Rename file" and "Rename Folder To:" are translated with re-encryption messages. As a result, common actions like rename and OTP operations display incorrect prompts and error text to users.

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.

@@ -122,12 +122,12 @@
<message>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟠 Architect Review — HIGH

In the pt_PT locale, the key generation UI labels are misaligned: the "Generate" button is translated as "Chave de assinatura" and "Generate GPG key pair" is translated with the long optional signing-key help text, while the actual "Signing Key" and optional-help entries remain untranslated. This causes the GPG key generation controls in the configuration dialog to show incorrect labels.

Suggestion: Restore "Generate" and "Generate GPG key pair" to short action-label translations and move the long explanatory text back under the "Optional: GPG key..." source, using the existing pt_PT phrasing as a guide.

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

**Path:** localization/localization_pt_PT.ts
**Line:** 122:140
**Comment:**
	*HIGH: In the pt_PT locale, the key generation UI labels are misaligned: the "Generate" button is translated as "Chave de assinatura" and "Generate GPG key pair" is translated with the long optional signing-key help text, while the actual "Signing Key" and optional-help entries remain untranslated. This causes the GPG key generation controls in the configuration dialog to show incorrect labels.

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.

<location filename="../src/configdialog.ui" line="725"/>
<source>Git</source>
<translation>Git</translation>
<translation>Générer une paire de clefs GPG</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The translation for the Git label was replaced with text for a different action, so the Git settings section will be mislabeled in the configuration dialog. Restore the translation to Git to keep the UI mapping consistent with the source string. [logic error]

Severity Level: Major ⚠️
- ⚠️ Git selector in config dialog misnamed as key generation.
- ⚠️ Users may misinterpret Git toggle purpose and behavior.
Suggested change
<translation>Générer une paire de clefs GPG</translation>
<translation>Git</translation>
Steps of Reproduction ✅
1. Start QtPass with the system language set to French (Belgium), so Qt loads
`localization/localization_fr_BE.ts` (verified translation context `ConfigDialog` in that
file at lines 472–476).

2. In the main window, open the configuration dialog via the "Config" action, which calls
`MainWindow::onConfig()` at `src/mainwindow.cpp:187` and then `MainWindow::config()` at
`src/mainwindow.cpp:286–326`, constructing `ConfigDialog`.

3. `ConfigDialog` is built from `src/configdialog.ui`, which defines the control with
source text `"Git"` at `configdialog.ui` line `725` (referenced in the TS `<location>` tag
at `localization/localization_fr_BE.ts:473`).

4. Because the French (Belgium) translation for that source string is currently `Générer
une paire de clefs GPG` at `localization/localization_fr_BE.ts:475`, the Git selector in
the "Programs / Native Git/GPG" section of the configuration dialog is mislabeled as
key-pair generation instead of "Git".
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_BE.ts
**Line:** 475:475
**Comment:**
	*Logic Error: The translation for the `Git` label was replaced with text for a different action, so the Git settings section will be mislabeled in the configuration dialog. Restore the translation to `Git` to keep the UI mapping consistent with the source string.

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.
👍 | 👎

<location filename="../src/configdialog.ui" line="778"/>
<source>PWGen</source>
<translation>PWGen</translation>
<translation>Clé de signature</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The PWGen source string is incorrectly translated as Signing Key, which swaps two unrelated settings labels and confuses users in the config UI. Use the correct PWGen translation for this entry. [logic error]

Severity Level: Major ⚠️
- ⚠️ PWGen option mislabeled as signing key in settings.
- ⚠️ Users may misconfigure password generation backend.
Suggested change
<translation>Clé de signature</translation>
<translation>PWGen</translation>
Steps of Reproduction ✅
1. Run QtPass under the French (Belgium) locale so Qt loads translations from
`localization/localization_fr_BE.ts` (context `ConfigDialog`).

2. From the main window, open the configuration dialog via `MainWindow::onConfig()` at
`src/mainwindow.cpp:187`, which instantiates `ConfigDialog` using `src/configdialog.ui`.

3. In `configdialog.ui`, the control with source text `"PWGen"` is defined at line `778`
(referenced by the `<location>` tag at `localization/localization_fr_BE.ts:502–503`).

4. The corresponding translation entry at `localization/localization_fr_BE.ts:504` is
`"Clé de signature"`, so the PWGen checkbox/label in the "Password Generation" section is
incorrectly shown as "Signing key" instead of a PWGen-related label, confusing users about
the control's purpose.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_BE.ts
**Line:** 504:504
**Comment:**
	*Logic Error: The `PWGen` source string is incorrectly translated as `Signing Key`, which swaps two unrelated settings labels and confuses users in the config UI. Use the correct `PWGen` translation for this entry.

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.
👍 | 👎

<location filename="../src/configdialog.ui" line="1022"/>
<source>Templates add extra fields in the password generation dialogue, and in the password view.</source>
<translation>Les templates ajoutent des champs supplémentaires dans la boîte de dialogue de génération de mdp et dans le panel de visualisation.</translation>
<translation>Clé GPG optionnelle pour signer les fichiers .gpg-id pour la vérification d&apos;intégrité. Laissez vide sauf si vous avez besoin de protéger la liste des utilisateurs contre l&apos;usurpation.</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The translation for the templates description was overwritten with the signing-key help text, so users will see unrelated guidance in the Templates section. Replace it with the templates-specific sentence to preserve correct behavior and context. [logic error]

Severity Level: Major ⚠️
- ⚠️ Template section shows unrelated signing-key instructions.
- ⚠️ Users may misunderstand template feature capabilities.
Suggested change
<translation>Clé GPG optionnelle pour signer les fichiers .gpg-id pour la vérification d&apos;intégrité. Laissez vide sauf si vous avez besoin de protéger la liste des utilisateurs contre l&apos;usurpation.</translation>
<translation>Les templates ajoutent des champs supplémentaires dans le dialogue de génération de mot de passe et dans la vue du mot de passe.</translation>
Steps of Reproduction ✅
1. Launch QtPass with the French (Belgium) locale so `localization/localization_fr_BE.ts`
is used (confirmed context `ConfigDialog` in that file).

2. Open the configuration dialog through the main window "Config" action
(`MainWindow::onConfig()` at `src/mainwindow.cpp:187` calling `MainWindow::config()` at
`src/mainwindow.cpp:286–326`).

3. Navigate to the "Template" section in `ConfigDialog`, whose description source text is
`"Templates add extra fields in the password generation dialogue, and in the password
view."` defined in `src/configdialog.ui` at line `1022` (referenced by `<location>` at
`localization/localization_fr_BE.ts:517–518`).

4. Observe that the French (Belgium) translation at
`localization/localization_fr_BE.ts:519` instead shows the signing-key help text ("Clé GPG
optionnelle pour signer les fichiers .gpg-id…"), so the Templates section displays
guidance for a completely different feature, misleading users about what templates do.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_BE.ts
**Line:** 519:519
**Comment:**
	*Logic Error: The translation for the templates description was overwritten with the signing-key help text, so users will see unrelated guidance in the Templates section. Replace it with the templates-specific sentence to preserve correct behavior and context.

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.
👍 | 👎

<location filename="../src/mainwindow.cpp" line="776"/>
<source>No password selected for OTP generation</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Erreur</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The OTP warning message No password selected for OTP generation is translated as a generic Error, which drops the actionable information users need. Restore the specific message so users understand what to fix. [logic error]

Severity Level: Major ⚠️
- ⚠️ OTP error message loses actionable guidance for users.
- ⚠️ Users may not understand why OTP fails.
Suggested change
<translation type="unfinished">Erreur</translation>
<translation type="unfinished">Aucun mot de passe sélectionné pour la génération d&apos;OTP</translation>
Steps of Reproduction ✅
1. Start QtPass with French (Belgium) locale so `localization/localization_fr_BE.ts`
translations for `MainWindow` are active (see context `MainWindow` around lines
1083–1111).

2. In the main window, ensure no password entry is selected in the tree view; this leaves
`getFile(ui->treeView->currentIndex(), true)` empty in `MainWindow::onOtp()` at
`src/mainwindow.cpp:9–17` (offset section 760–779).

3. Click the "OTP" toolbar/menu action, which is wired to `MainWindow::onOtp()` in
`initToolBarButtons()` at `src/mainwindow.cpp:165–176`; the else-branch triggers
`flashText(tr("No password selected for OTP generation"), true);` at
`src/mainwindow.cpp:17`.

4. That source string is mapped in `localization/localization_fr_BE.ts` at `1108–1110` to
the translation `<translation type="unfinished">Erreur</translation>`, so instead of a
specific "No password selected for OTP generation" message, the UI only shows a generic
"Erreur", giving users no hint that they must select a password first.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_BE.ts
**Line:** 1110:1110
**Comment:**
	*Logic Error: The OTP warning message `No password selected for OTP generation` is translated as a generic `Error`, which drops the actionable information users need. Restore the specific message so users understand what to fix.

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.
👍 | 👎

<location filename="../src/mainwindow.cpp" line="1047"/>
<source>Rename folder</source>
<translation>Renommer le dossier</translation>
<translation>Impossible de créer le dossier : %1</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The Rename folder menu label was replaced by a folder-creation failure error string, so the rename action will show the wrong text in the UI. Restore the translation to the actual rename label. [logic error]

Severity Level: Major ⚠️
- ⚠️ Folder rename action mislabeled as creation failure.
- ⚠️ Users may avoid using rename due to confusion.
Suggested change
<translation>Impossible de créer le dossier : %1</translation>
<translation>Renommer le dossier</translation>
Steps of Reproduction ✅
1. Run QtPass in French (Belgium) locale so the `MainWindow` translations from
`localization/localization_fr_BE.ts` are used (context `MainWindow` around lines
1113–1121).

2. In the main window tree view, right-click a password folder to open the context menu
built in `MainWindow::showContextMenu()` at `src/mainwindow.cpp:252–305`.

3. When the selected item is a directory, `showContextMenu()` adds a "Rename folder"
action with `tr("Rename folder")` at `src/mainwindow.cpp:288`, and connects it to
`MainWindow::renameFolder()`.

4. The translation for this source string at
`localization/localization_fr_BE.ts:1118–1120` is currently `"Impossible de créer le
dossier : %1"`, so the context menu entry for the rename operation appears as an unrelated
error message about folder creation failure instead of a clear "Renommer le dossier"
label.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_BE.ts
**Line:** 1120:1120
**Comment:**
	*Logic Error: The `Rename folder` menu label was replaced by a folder-creation failure error string, so the rename action will show the wrong text in the UI. Restore the translation to the actual rename label.

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.
👍 | 👎

<location filename="../src/mainwindow.cpp" line="1051"/>
<source>Rename password</source>
<translation>Renommer le mot de passe</translation>
<translation>Échec de la création du fichier .gpg-id dans : %1</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The Rename password action is currently translated as a .gpg-id creation failure, which mislabels the action and can mislead users about what operation they are performing. Replace it with the proper rename translation. [logic error]

Severity Level: Major ⚠️
- ⚠️ Password rename action mislabeled as gpg-id failure.
- ⚠️ Users may hesitate to rename passwords correctly.
Suggested change
<translation>Échec de la création du fichier .gpg-id dans : %1</translation>
<translation>Renommer le mot de passe</translation>
Steps of Reproduction ✅
1. Start QtPass with French (Belgium) locale to activate translations from
`localization/localization_fr_BE.ts` (context `MainWindow` around lines 1123–1125).

2. In the main window tree view, right-click a password file to open the context menu
constructed in `MainWindow::showContextMenu()` at `src/mainwindow.cpp:252–305`.

3. When the item is a file, `showContextMenu()` adds a "Rename password" action with
`tr("Rename password")` at `src/mainwindow.cpp:292` and connects it to
`MainWindow::renamePassword()`.

4. The translation entry for `"Rename password"` at
`localization/localization_fr_BE.ts:1123–1125` is currently `"Échec de la création du
fichier .gpg-id dans : %1"`, so the context menu shows a `.gpg-id` creation failure string
instead of a concise "Renommer le mot de passe", misleading users about what the action
will actually do.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_BE.ts
**Line:** 1125:1125
**Comment:**
	*Logic Error: The `Rename password` action is currently translated as a `.gpg-id` creation failure, which mislabels the action and can mislead users about what operation they are performing. Replace it with the proper rename 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.
👍 | 👎

<location filename="../src/mainwindow.cpp" line="1179"/>
<source>Rename file</source>
<translation>Renommer le fichier</translation>
<translation>Ré-chiffrement des mots de passe</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The Rename file source text was translated as Re-encrypt passwords, which maps a rename prompt to a destructive cryptographic operation label. Restore the file-rename wording to prevent action confusion. [logic error]

Severity Level: Major ⚠️
- ⚠️ File rename dialogs titled as password re-encryption.
- ⚠️ Users may fear unintended cryptographic operations.
Suggested change
<translation>-chiffrement des mots de passe</translation>
<translation>Renommer le fichier</translation>
Steps of Reproduction ✅
1. Launch QtPass under the French (Belgium) locale so the `MainWindow` context in
`localization/localization_fr_BE.ts` is active (see lines 1150–1153).

2. Right-click a password entry (file) in the main window's tree view to open the context
menu created in `MainWindow::showContextMenu()` at `src/mainwindow.cpp:252–305`.

3. In `showContextMenu()`, when a file is selected, an action is added with `tr("Rename
password")` for passwords and the rename dialog uses the common title and label strings
`tr("Rename file")` and `tr("Rename File To: ")` (see `renamePassword()` at
`src/mainwindow.cpp:410–420` and `renameFolder()` at `src/mainwindow.cpp:378–385`).

4. The shared `"Rename file"` source string is translated at
`localization/localization_fr_BE.ts:1151–1153` as `"Ré-chiffrement des mots de passe"`, so
file-rename dialogs show a title about re-encrypting passwords instead of renaming files,
making the operation look like a cryptographic bulk action rather than a simple rename.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_BE.ts
**Line:** 1153:1153
**Comment:**
	*Logic Error: The `Rename file` source text was translated as `Re-encrypt passwords`, which maps a rename prompt to a destructive cryptographic operation label. Restore the file-rename wording to prevent action confusion.

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.
👍 | 👎

<location filename="../src/mainwindow.cpp" line="1143"/>
<source>Rename Folder To: </source>
<translation>Renommer le dossier en : </translation>
<translation>Cela ré-chiffre toutes les fichiers de mot de passe dans ce dossier à l&apos;aide des destinataires actuels définis dans .gpg-id. Cela peut écrire sur plusieurs fichiers et ne peut pas être annulé facilement.</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The prompt Rename Folder To: was replaced by the long re-encryption warning text, so rename dialogs will display the wrong prompt and break user flow. Replace it with the proper rename target prompt translation. [logic error]

Severity Level: Major ⚠️
- ⚠️ Folder rename prompt replaced by re-encryption warning text.
- ⚠️ Users may cancel safe renames fearing data modification.
Suggested change
<translation>Cela -chiffre toutes les fichiers de mot de passe dans ce dossier à l&apos;aide des destinataires actuels définis dans .gpg-id. Cela peut écrire sur plusieurs fichiers et ne peut pas être annulé facilement.</translation>
<translation>Renommer le dossier en : </translation>
Steps of Reproduction ✅
1. Run QtPass with French (Belgium) locale so translations from
`localization/localization_fr_BE.ts` are active for `MainWindow`.

2. In the main window tree view, right-click a folder and choose the rename option from
the context menu constructed in `MainWindow::showContextMenu()` at
`src/mainwindow.cpp:252–305`, which triggers `MainWindow::renameFolder()` at
`src/mainwindow.cpp:378–392`.

3. `renameFolder()` opens a `QInputDialog::getText` with title `tr("Rename file")` and
prompt label `tr("Rename Folder To: ")` at `src/mainwindow.cpp:384–385` to ask the user
for the new folder name.

4. The French (Belgium) translation for `"Rename Folder To: "` at
`localization/localization_fr_BE.ts:1156–1158` is currently a long re-encryption warning
("Cela ré-chiffre toutes les fichiers de mot de passe…"), so the rename-folder dialog's
prompt text describes a destructive re-encryption operation instead of asking "Renommer le
dossier en :", breaking the semantics of the dialog and confusing users.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_BE.ts
**Line:** 1158:1158
**Comment:**
	*Logic Error: The prompt `Rename Folder To:` was replaced by the long re-encryption warning text, so rename dialogs will display the wrong prompt and break user flow. Replace it with the proper rename target prompt 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.
👍 | 👎

<location filename="../src/mainwindow.cpp" line="1121"/>
<source>Failed to create .gpg-id file in: %1</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Le répertoire n&apos;existe pas : %1</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: This translation is bound to Failed to create .gpg-id file in: %1 but currently reports that the directory does not exist, which is a different failure condition. That mismatch gives users incorrect diagnostics and can mislead troubleshooting. [logic error]

Severity Level: Major ⚠️
- ⚠️ New folder creation error message reports wrong failure reason.
- ⚠️ Misleading `.gpg-id` diagnostics complicate permissions troubleshooting.
Suggested change
<translation type="unfinished">Le répertoire n&apos;existe pas : %1</translation>
<translation type="unfinished">Impossible de créer le fichier .gpg-id dans : %1</translation>
Steps of Reproduction ✅
1. Run QtPass built from this PR with the UI language set to French (Luxembourg) so
translations from `localization/localization_fr_LU.ts` are active for `MainWindow`.

2. In the password store tree view, open the context menu implemented in
`src/mainwindow.cpp:1036–1053` and choose "Add folder"; this triggers
`MainWindow::addFolder()` at `src/mainwindow.cpp:1095`.

3. In `MainWindow::addFolder()` (`src/mainwindow.cpp:1095–1132`), fill in a new folder
name such that the folder can be created (`QDir().mkdir(newdir)` succeeds) but Qt cannot
open the `.gpg-id` file for writing (e.g., due to file system permissions), causing
`gpgId.open(QIODevice::WriteOnly)` at lines 47–49 of that snippet to return `false`.

4. When `gpgId.open()` fails, `addFolder()` shows a warning via
`QMessageBox::warning(this, tr("Error"), tr("Failed to create .gpg-id file in:
%1").arg(newdir));` at `src/mainwindow.cpp:49–52`, which resolves the source text `"Failed
to create .gpg-id file in: %1"` against `localization/localization_fr_LU.ts` around diff
line 66–69.

5. Because the current French (Luxembourg) translation at diff line `1147 <translation
type="unfinished">Le répertoire n&apos;existe pas : %1</translation>` says "Le répertoire
n'existe pas : %1" (directory does not exist), the error dialog incorrectly reports that
the directory is missing even though it was successfully created and only `.gpg-id` file
creation failed, giving the user a wrong failure cause when diagnosing the issue.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_LU.ts
**Line:** 1147:1147
**Comment:**
	*Logic Error: This translation is bound to `Failed to create .gpg-id file in: %1` but currently reports that the directory does not exist, which is a different failure condition. That mismatch gives users incorrect diagnostics and can mislead troubleshooting.

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.
👍 | 👎

<location filename="../src/mainwindow.cpp" line="1179"/>
<source>Rename file</source>
<translation>Renommer le fichier</translation>
<translation>Récrypter les mots de passe</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: This translation is mapped to the source text Rename file but currently says Re-encrypt passwords, which changes the action meaning and mislabels rename dialogs in the UI. Use a rename-specific translation to keep the action contract consistent with the code path. [logic error]

Severity Level: Major ⚠️
- ⚠️ Folder rename dialog title mislabels action as re-encryption.
- ⚠️ Password rename dialog title conflicts with re-encrypt menu.
Suggested change
<translation>Récrypter les mots de passe</translation>
<translation>Renommer le fichier</translation>
Steps of Reproduction ✅
1. Run QtPass built from this PR with the UI language set to French (Luxembourg) so
`localization/localization_fr_LU.ts` is loaded for the `MainWindow` context.

2. In the main tree view, right‑click a folder to open the context menu implemented in
`src/mainwindow.cpp:1036–1053`, where the `"Rename folder"` action is created (`QAction
*renameFolder = contextMenu.addAction(tr("Rename folder"));`) and connected to
`MainWindow::renameFolder`.

3. Click the "Rename folder" entry; this invokes `MainWindow::renameFolder()` at
`src/mainwindow.cpp:1137–1152`, which opens a `QInputDialog::getText(this, tr("Rename
file"), tr("Rename Folder To: "), ...)`, causing Qt to look up the translation for the
source text `"Rename file"`.

4. That source text is bound in `localization/localization_fr_LU.ts` around diff line
71–75, where `<source>Rename file</source>` uses the current translation at diff line
`1153 <translation>Récrypter les mots de passe</translation>`, so the dialog title shows
"Récrypter les mots de passe" even though only a rename is being performed.

5. Repeat the operation on a password entry: right‑click a file, choose "Rename password"
from the same context menu (wired to `MainWindow::renamePassword()` at
`src/mainwindow.cpp:1169–1187`), which also calls `QInputDialog::getText(this, tr("Rename
file"), tr("Rename File To: "), ...)`; the dialog title again displays "Récrypter les mots
de passe", conflicting with the separate "Re-encrypt" action defined in
`showContextMenu()` at `src/mainwindow.cpp:22–27` and misleading users about the
operation.
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_fr_LU.ts
**Line:** 1153:1153
**Comment:**
	*Logic Error: This translation is mapped to the source text `Rename file` but currently says `Re-encrypt passwords`, which changes the action meaning and mislabels rename dialogs in the UI. Use a rename-specific translation to keep the action contract consistent with the code path.

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.
👍 | 👎

<location filename="../src/configdialog.ui" line="755"/>
<source>Generate</source>
<translation type="unfinished">Gerar</translation>
<translation type="unfinished">Chave de assinatura</translation>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggestion: The translation for the Generate button was replaced with text for a different field (Signing Key), so the UI action label becomes incorrect and misleading in the configuration dialog. Restore a verb that matches the action. [logic error]

Severity Level: Major ⚠️
- ⚠️ Config dialog shows mislabeled Generate button for pt_PT.
- ⚠️ Users may misinterpret purpose of GPG key generator.
Suggested change
<translation type="unfinished">Chave de assinatura</translation>
<translation>Gerar</translation>
Steps of Reproduction ✅
1. Start QtPass built with translations and select Portuguese (Portugal) so that
`localization/localization_pt_PT.ts` is loaded (file header at
`localization/localization_pt_PT.ts:3` with `language="pt_PT"`).

2. In the main window, open the configuration dialog via the "Config" toolbar action,
which triggers `MainWindow::onConfig()` at `src/mainwindow.cpp:586`, creating a
`ConfigDialog` defined by `src/configdialog.ui`.

3. In `ConfigDialog`, go to the "Programs" tab and locate the `pushButtonGenerateKey`
button whose text is the `<string>Generate</string>` label defined in
`src/configdialog.ui:747–755` and whose translation entry in context `ConfigDialog` is at
`localization/localization_pt_PT.ts:123–126` with `<source>Generate</source>` /
`<translation type="unfinished">Chave de assinatura</translation>`.

4. Observe that the button label in the Portuguese UI reads "Chave de assinatura" (a noun
phrase meaning "Signing key") instead of an action verb like "Gerar", making the purpose
of the button (generate a GPG key pair) unclear and inconsistent with its tooltip
"Generate GPG key pair" (`configdialog.ui:758`, translated separately at
`localization/localization_pt_PT.ts:128–131`).
Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** localization/localization_pt_PT.ts
**Line:** 125:125
**Comment:**
	*Logic Error: The translation for the `Generate` button was replaced with text for a different field (`Signing Key`), so the UI action label becomes incorrect and misleading in the configuration dialog. Restore a verb that matches the action.

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.
👍 | 👎

@codeant-ai
Copy link
Copy Markdown
Contributor

codeant-ai Bot commented Apr 18, 2026

CodeAnt AI finished running the review.

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

Labels

size:XXL This PR changes 1000+ lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants