Localization fixes: Configuration labels, status badges, terminology#1012
Localization fixes: Configuration labels, status badges, terminology#1012
Conversation
|
CodeAnt AI is reviewing your PR. |
This comment has been minimized.
This comment has been minimized.
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis 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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~30 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 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 | 🟠 MajorOTP message translation mismatch.
Line 1194: The source
No OTP code found in this password entryis translated asNessuna 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 | 🟠 MajorTranslation files should be managed through Weblate, not edited manually.
As per coding guidelines,
.tsfiles in thelocalization/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 | 🔴 CriticalDo not manually edit translation files—use Weblate instead. Critical translation misalignments detected.
This file matches the pattern
localization/**/*.tsand must not be manually edited; use Weblate for translations and runqmake6after source changes.Additionally, multiple translations are incorrectly mapped to different source strings:
Source Current Translation Issue Re-encryptErroreShould translate "Re-encrypt", not display error message Directory does not exist: %1Ricifrura le passwordShould be directory error, not re-encrypt prompt Re-encrypt passwordsLong 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 | 🔴 CriticalCritical: 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 | 🔴 CriticalOff-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 | 🟠 MajorSimplified 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
📒 Files selected for processing (15)
localization/localization_af_ZA.tslocalization/localization_bg_BG.tslocalization/localization_ca_ES.tslocalization/localization_da_DK.tslocalization/localization_fi_FI.tslocalization/localization_hr_HR.tslocalization/localization_it_IT.tslocalization/localization_ko_KR.tslocalization/localization_ro_RO.tslocalization/localization_sk_SK.tslocalization/localization_sl_SI.tslocalization/localization_sr_RS.tslocalization/localization_ta_IN.tslocalization/localization_uk_UA.tslocalization/localization_zh_Hant.ts
|
CodeAnt AI finished reviewing your PR. |
Co-authored-by: codeant-ai[bot] <151821869+codeant-ai[bot]@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
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>
This comment has been minimized.
This comment has been minimized.
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>
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
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 | 🟠 MajorRoute these translation changes through Weblate instead of committing
.tsedits directly.This repo treats
.tsfiles 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 (.tsfiles); use Weblate for translations and runqmake6after 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 | 🟠 MajorDo 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 underlocalization_zh_Hant.tsis 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 | 🟡 MinorTranslate “re-encryption” consistently instead of “rifirma”.
These messages describe re-encrypting password files, but
rifirma/rifirmaremeans 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 | 🟠 MajorKeep the catalog locale aligned with the shipped resource name.
language="zh"no longer matcheslocalization_zh_Hant.ts. This leaves the TS metadata, the embedded resource name, and the runtime lookup path describing different locales. Either keep this file aszh_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.proExpected result: the TS
languagevalue, the translation filename listed insrc/src.pro, and the runtime load pattern inmain/main.cppshould 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
📒 Files selected for processing (2)
localization/localization_it_IT.tslocalization/localization_zh_Hant.ts
There was a problem hiding this comment.
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 | 🟠 MajorDon't mix Simplified Chinese into the Traditional Chinese catalog.
This hunk introduces Simplified Chinese strings like
剪贴板,自动,生成, and签名密钥intolocalization_zh_Hant.ts. Even if Line 3 is corrected, zh-Hant users will still get mixed-script UI. Move these entries intolocalization_zh_CN.tsor 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 | 🔴 CriticalKeep the locale metadata aligned with the shipped catalog.
Line 3 switches this file to
zh_CN, but the project still ships bothlocalization_zh_CN.tsandlocalization_zh_Hant.ts. That leaves no catalog advertisingzh_Hantand gives two catalogs the Simplified Chinese locale. Either keep this file aszh_Hantor 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
📒 Files selected for processing (2)
localization/localization_de_LU.tslocalization/localization_zh_Hant.ts
- sr_RS: fix malformed link translation - sr_RS: Password store not initialised (Latin) - sr_RS: folder message still has Cyrillic - needs another pass
fc136bd to
5c72686
Compare
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
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 | 🟠 MajorRemove
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 | 🟠 MajorUse Weblate workflow for
.tsupdates 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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟠 MajorBroken 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%2will not be substituted cleanly and the literal braces/question marks will appear in the dialog. Replace with a proper Serbian translation that uses both%1and%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 | 🟡 MinorFix 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 | 🟠 MajorLanguage identifier conflicts with Latin Serbian translation file.
Line 3 uses
language="sr_RS", which is identical to the existinglocalization_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, orsr@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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟠 MajorMixed 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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorDo not transliterate technical terms and product names.
Multiple translations incorrectly transliterate technical terms and product/tool names to Cyrillic:
- Line 259:
Натив→ should beNative- Lines 280, 285:
Парол/парол→ should bePass/pass(tool name)- Line 491:
Гит→ should beGit- Line 558:
ГПГ→ should beGPG- Lines 783, 920, 934:
КтПас→ should beQtPassTechnical 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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorMainWindow 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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorQtPass 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 clipboardEither provide Serbian Cyrillic translations or leave the translation elements empty. Correct via Weblate.
Based on coding guidelines: "Do not manually edit translation files (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorEnglish 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 emptyLeaving 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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorInvalid 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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorCroatian 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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorMultiple 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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟠 MajorTranslation 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
.tsfile updates must be submitted through Weblate, andqmake6should be run after source changes to regenerate translation artifacts.Based on coding guidelines: "Do not manually edit translation files (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorRe-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 (
.tsfiles); use Weblate for translations and runqmake6after 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 | 🟡 MinorInconsistent 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 (
.tsfiles); use Weblate for translations and runqmake6after 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&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&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
📒 Files selected for processing (3)
localization/localization_it_IT.tslocalization/localization_sr_Cyrl.tslocalization/localization_sr_RS.ts
There was a problem hiding this comment.
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 | 🟠 MajorMultiple
ConfigDialogentries are still Simplified Chinese in thezh_Hantcatalog.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 | 🟡 MinorEmpty 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 | 🟠 MajorSimplified 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
PWGenshould remain as the program name, not translated as "generate password".The source
PWGenis the program name (matchingpwgen(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 keepsPWGenuntranslated.🛠️ 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 | 🔴 CriticalCritical:
language="zh_CN"in thezh_Hantcatalog — PR objective not actually achieved.The PR description explicitly states Traditional Chinese's language code was corrected from
zh_CNtozh_Hant, but the root<TS>element here is stilllanguage="zh_CN". Qt will treat this catalog as Simplified Chinese, so:
zh_CNusers will load this Traditional-Chinese file and see mixed-script UI;zh_TW/zh_HKusers 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
KeygenDialogstill 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
ConfigDialogmnemonic/terminology fixes from prior review are still not applied.
- Line 254 (
&Use pass):&使用passhas the mnemonic&in front of a CJK character (not an accelerator on Qt), and drops the space beforepass. 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 | 🟠 MajorPreviously-flagged
MainWindow/UsersDialogissues 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 theFailed to create .gpg-id filesibling).- 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
📒 Files selected for processing (2)
localization/localization_zh_Hant.tssrc/src.pro
- sr_Cyrl: change language to sr_Cyrl - sr_RS: Ma&ximize (single word) - sr_RS: Nati&ve Git/GPG (Nativni)
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (12)
localization/localization_sr_Cyrl.ts (1)
1-1536:⚠️ Potential issue | 🟠 MajorManual edits to a
.tscatalog 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 | 🟠 MajorRoute this file through Weblate instead of direct
.tsedits.This PR directly modifies a
localization/**/*.tsfile (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 (.tsfiles); use Weblate for translations and runqmake6after 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 | 🟠 MajorCorrect 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 | 🟡 MinorPreserve 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 | 🟠 MajorRestore 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 passmnemonic andNativetranslation still diverge from the rest of the catalog.
- Line 254:
&使用passplaces&before a CJK glyph (not a usable Qt accelerator on most platforms) and drops the space beforepass. 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 translatesNati&ve Git/GPGas原生 Git/GPG; align.🛠️ Proposed fix
- <translation type="unfinished">&使用pass</translation> + <translation type="unfinished">使用 pass (&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 | 🔴 CriticalCritical regression:
languageattribute iszh_CNin azh_Hantcatalog.The
<TS>root attribute islanguage="zh_CN", while the file islocalization_zh_Hant.tsand the PR objective explicitly states this should bezh_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 | 🟡 MinorRe-encryption warning still uses
文件夾and當前.The multi-paragraph warning now preserves the paragraph breaks (good), but the body still reads
當前定義在 .gpg-id 檔案中的收件人and此文件夾中所有密碼檔案. Forzh_Hantprefer目前/收件者/資料夾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 | 🟡 MinorUsersDialog 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 | 🟠 MajorRoute these translation updates through Weblate instead of editing the
.tsfile directly.This PR continues to directly edit the generated catalog. Many of the remaining issues below (Simplified forms surviving in a
zh_Hantcatalog, inconsistent terminology for key/folder/profile, collapsed multi-line strings, truncated translations like自動forAutomatically pushon Line 196) are symptoms of bypassing the translation workflow.As per coding guidelines:
localization/**/*.ts: Do not manually edit translation files (.tsfiles); use Weblate for translations and runqmake6after 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 %1still rendered in Simplified Chinese.
配置文件已更改为 %1retains 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
📒 Files selected for processing (4)
localization/localization_sr_Cyrl.tslocalization/localization_sr_RS.tslocalization/localization_zh_Hant.tssrc/src.pro
|
Note Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it. Fixes Applied SuccessfullyFixed 2 file(s) based on 2 unresolved review comments. Files modified:
Commit: The changes have been pushed to the Time taken: |
Fixed 2 file(s) based on 2 unresolved review comments. Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
Kody Review CompleteGreat news! 🎉 Keep up the excellent work! 🚀 Kody Guide: Usage and ConfigurationInteracting with Kody
Current Kody ConfigurationReview OptionsThe following review options are enabled or disabled:
|
|
CodeAnt AI is running the review. |
Sequence DiagramThis 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
Generated by CodeAnt AI |
| @@ -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'intégrité. Laissez vide sauf si vous avez besoin de protéger la liste des utilisateurs contre l'usurpation.</translation> | |||
There was a problem hiding this comment.
🟠 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.| @@ -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'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'aide des destinataires actuels définis dans .gpg-id. Cela peut écrire sur plusieurs fichiers et ne peut pas être annulé facilement.</translation> | |||
There was a problem hiding this comment.
🔴 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> | |||
There was a problem hiding this comment.
🟠 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> |
There was a problem hiding this comment.
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.| <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> |
There was a problem hiding this comment.
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.| <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'intégrité. Laissez vide sauf si vous avez besoin de protéger la liste des utilisateurs contre l'usurpation.</translation> |
There was a problem hiding this comment.
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.| <translation>Clé GPG optionnelle pour signer les fichiers .gpg-id pour la vérification d'intégrité. Laissez vide sauf si vous avez besoin de protéger la liste des utilisateurs contre l'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> |
There was a problem hiding this comment.
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.| <translation type="unfinished">Erreur</translation> | |
| <translation type="unfinished">Aucun mot de passe sélectionné pour la génération d'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> |
There was a problem hiding this comment.
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.| <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> |
There was a problem hiding this comment.
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.| <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> |
There was a problem hiding this comment.
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.| <translation>Ré-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'aide des destinataires actuels définis dans .gpg-id. Cela peut écrire sur plusieurs fichiers et ne peut pas être annulé facilement.</translation> |
There was a problem hiding this comment.
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.| <translation>Cela ré-chiffre toutes les fichiers de mot de passe dans ce dossier à l'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'existe pas : %1</translation> |
There was a problem hiding this comment.
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.| <translation type="unfinished">Le répertoire n'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'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> |
There was a problem hiding this comment.
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.| <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> |
There was a problem hiding this comment.
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.| <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 finished running the review. |
User description
Summary
Fixed multiple translation/localization issues in QtPass:
Fixed Configuration dialog labels (multiple locales)
Fixed status badge trailing spaces
Fixed Portuguese translations
Fixed Serbian (sr_Cyrl, sr_RS)
Fixed Finnish terminology
Fixed Traditional Chinese (zh_Hant)
Fixed Czech (cs_CZ)
Other fixes
Summary by CodeRabbit
New Features
Chores
CodeAnt-AI Description
Refresh app translations across multiple languages and add Serbian Cyrillic support
What Changed
sr_CyrlImpact
✅ 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:
This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.
Example
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:
This helps CodeAnt AI learn and adapt to your team's coding style and standards.
Example
Retrigger review
Ask CodeAnt AI to review the PR again, by typing:
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.