Repository navigation
chore: add 3.0.0 translations - #1492
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Regtest APKDownload bitkit-dev-debug universal APK (expires in 30 days). |
[Low impact] Adds translated UI strings for new features. The PR appears safe to merge, with two non-blocking fixes needed in the Dutch and Polish payment warnings. FindingsSummaryAdds missing 2.6.0 translations across 15 locale files, including localized pending payment counts. English and existing translations are unchanged.
Reviews (1) · Last reviewed commit: "chore: add ai translations for nl, pl, p..." · Reviewed by Greptile |
talosmachina
left a comment
There was a problem hiding this comment.
No findings. Adds about 7,700 AI-assisted and iOS-reused translations so the 15 Android locales cover every referenced 2.6.0 string, append-only. Reviewed af76a8f against its base 8496e09 (#1491). Reasoned from the diff and CI; the branch was not built here.
What I checked, and 3 candidates I ruled out
Checked mechanically, every added or changed string: the file parses (Android: XML; iOS: every line is a "key" = "value"; entry), no duplicate keys, every key exists in English, and each value carries the same %1$s / {name} placeholders and the same markup tags as its English source. All 15 files come out clean: 501 to 534 additions per locale, none with a placeholder or tag mismatch.
Plurals: wallet__payment_requests_pending_count carries the CLDR set per locale (ar zero/one/two/few/many/other; cs, pl, ru one/few/many/other; es, fr, it, pt, ca many/one/other; de, nl, el one/other), and every quantity keeps the English placeholder.
CI: build, build-local, lint and detekt green; the e2e-tests-local shards were still running.
Ruled out
- Hard-coded
©2025insettings__support__copyright: already present in every locale onmaster, not touched here. <gray>instead of<accent>in ptsecurity__pass_recovery: already onmaster, not touched here.- Keys added that English no longer has: none; every added key resolves in
values/strings.xml.
Wording was not reviewed by a native speaker; the PR body flags payment, security and recovery copy for that.
Merge confidence: 4/5, every added string passes the placeholder, markup and plural checks; the e2e shards had not finished.
piotr-iohk
left a comment
There was a problem hiding this comment.
QA review
Scope: Full review of the complete PR diff against merge base bcc3185, at 74b17e7. No earlier assessment baseline was available.
No new actionable code findings.
Added and edited strings keep the English placeholders, markup tags, and plural placeholders. Every locale includes other for wallet__payment_requests_pending_count, and the home bell passes the pending count into that plural. The Spanish passphrase edits read “acceso”. At this revision the Dutch contact-payment warning is Dutch, and the Polish warning uses “chcesz”.
Strings whose English matches bitkit-ios#938 at 745ee30 keep the same payment and recovery instruction. Remaining differences are line breaks and equivalent wording. That check covers this shared copy only.
Build, lint, and e2e succeeded on this revision. This review did not run Gradle or a device. Payment, recovery, and fee wording still needs a native reader during the manual pass already listed on the PR.
German settings__quickpay__settings__text already uses {Betrag} while QuickPay settings replace {amount}, so that threshold stays unsubstituted. This PR does not edit that string. The new daily-limit strings keep {limit}.
Device testing: not performed in this review.
Ready for device testing.
Suggested additional test cases
- Android, QuickPay settings, German and pt-BR, daily limit 50. Expected: the daily sentence shows 50. The existing German threshold sentence still shows
{Betrag}. - Android, Arabic, Czech, Polish, and Russian, with 1, 2, 5, and 11 pending payment requests. Expected: the payment-requests bell state description includes that count and a plural form that agrees with it.
- Android, Spanish (
esandes-419), passphrase and restore screens. Expected: “frase de acceso”.
jvsena42
left a comment
There was a problem hiding this comment.
No findings at 74b17e7. I checked all 15 locales against values/strings.xml with scripts; wording still needs the native-speaker pass the PR body asks for.
Checked and clean:
- XML:
xmllintpasses on all 16 files. There are no duplicate keys, and no locale has a key the default file lacks. Notranslatable="false"string is translated, no key is removed, and English is unchanged. - Format specifiers: all 8,431 added or changed items keep the same
%N$s/%N$dset and position, and the same%%, as English. I seeded a%1$s→%1$dswap to confirm the script catches one. {placeholders},<accent>markup and\n: these match English. CDATA versus<accent>resolves to the same runtime string. The one extra line break, rusecurity__reset_graph_confirm, follows the existing two-linesecurity__reset_confirmon the same screen.- Escaping: no unescaped
'or raw", and no value starts with@or?. - Plurals:
wallet__payment_requests_pending_counthas every CLDR quantity each locale needs (ar zero–other; cs/pl/ru one/few/many/other; Romance one/many/other), and each keeps%1$d. - Brands and acronyms: QR, PIN, LNURL, NFC, Paykit, Trezor, Bitkit, LSP, Electrum, CJIT, BTCPay and Jade are untranslated. The es/es-419/es-rES "acceso" corrections keep their placeholders.
- CI: build, lint, detekt and all e2e shards are green.
Device gate: 74b17e7 — no journey applies (strings only). I installed the CI APK on a regtest emulator and launched it with per-app locales ar, pl, es-419 and pt-BR. Home and the drawer render translated text, Arabic lays out right to left, and there was no crash. perf: not relevant.
Out of scope, already on master: "BitKit" casing in es-419 (cards__invite__description, security__mnemonic_error_description) and cs, which the new es-419 btcpay__missing_mnemonic copies.
piotr-iohk
left a comment
There was a problem hiding this comment.
QA review
Scope: Android device follow-up at 74b17e7, following the existing code review.
Runtime localization checks passed. One pre-existing copy fix suggested.
Please also fix settings__quickpay__settings__text in app/src/main/res/values-de/strings.xml: change ${Betrag} to ${amount}. With the QuickPay threshold set to $5, the German screen visibly displays ${Betrag} instead of $5, because the screen replaces {amount}. This predates the PR, but is a small, directly related translation fix worth including here. After changing it, verify the displayed threshold follows the configured value.
Device testing: Pixel 6 emulator, Android 13, staging regtest. Checked profile, contacts, subscriptions and payment-request screens across all 15 locale configurations; pending-request descriptions at 1, 2, 5 and 11 in Arabic, Czech, Polish and Russian; QuickPay daily limit 50 in German and pt-BR; Spanish creation/restore passphrase spelling; and locale/lifecycle exploration. No funds sent. Native-speaker wording review remains outstanding.
@piotr-iohk Fixed in fb7e33e: German now uses I also compared every locale against English for translated placeholder names and formats and fixed the other real cases in that commit:
All three files still parse as XML. The |
piotr-iohk
left a comment
There was a problem hiding this comment.
Verified the German QuickPay placeholder fix on the current-head CI APK (14315f8b), Pixel 6 emulator / Android 13, staging regtest. The sentence displayed $5, followed a change to $10, and returned to $5 after navigation and background/resume. QuickPay stayed disabled; original settings and locale were restored; no funds sent.
Targeted follow-up to the earlier full localization pass on 74b17e7, rather than a new full device pass. Reviewed the intervening translation corrections: placeholder/format arguments match English and the affected callers. No specific regression risk requiring a full rerun found. Current build, lint, detekt and all E2E shards passed. Native-speaker wording review remains a separate limitation.
There was a problem hiding this comment.
Translation-length check on this PR's strings, run on a Pixel emulator in all 15 locales plus a 720x1280 / 320dpi pass on the worst cases. 16 keys that land in buttons, swipe labels, maxLines fields and display headlines were checked on device. Inline: shorter translations for 4 keys that truncate, wrap badly or break inside a word. All LOW; the truncated button still shows enough to tell what it does.
Fit in every locale: Contacts intro (except ru), Profile intro, Pubky choice, Background payments intro, Pay contacts, Contacts list and Server accounts empty states, the Add Contact / Add Hardware Wallet / Enable / Continue buttons.
Not reached on device: SendConfirm (sheet stuck on "Connecting to network"), subscription screens, profile and contact screens, hardware pairing sheets, watch-only rows. Static risks there: pl subscriptions__swipe_to_subscribe_and_pay (36 chars, no maxLines on the swipe track) and cs hardware__passphrase_button (29 chars, half-width button).
Seen but already on master, not caused by this PR: widgets__add (second Widgets intro button) truncates in de/pt/pt-BR/el/ru/fr/nl/cs/es; settings__bg__title truncates in the pt/pt-BR top bar; es-ES security__backup_button truncates; the ar Widgets intro title breaks inside a word.
Device gate: 74b17e7 — Gate_Throwaway emulator, CI APK; l10n: 16 keys checked in 15 locales, 4 keys overflow (21 key/locale pairs). Later commits up to 14315f8 fix placeholders in de/es/fr and merge master.
…e-reviewed wording
8ce9a35
|
@pwltr @piotr-iohk CI is green again on this PR, so it needs a fresh approval: your earlier approvals were dismissed by the pushes since (native-reviewed shorter strings from the length review by @jvsena42, the placeholder fixes and a Spanish accent fix). Could you re-approve when you have a moment? |
piotr-iohk
left a comment
There was a problem hiding this comment.
Re-approved at 3dfe520 after reviewing the complete delta from the previously approved 14315f8 revision. The 23 changed strings shorten labels/headlines or correct the Spanish search accent; placeholder and markup checks found no mismatches. The German QuickPay amount placeholder remains correct. No new actionable findings.
Current-head build, lint, Detekt and all seven local E2E shards passed. This was a source/CI follow-up to the earlier localization and QuickPay device checks; visual checks were not rerun. Native-speaker wording review remains a separate limitation.
Closes #1493
Twin: synonymdev/bitkit-ios#938
Refs: #1489
Description
acesso→accesoin Spanish passphrase strings,Su Apellido→ name,Contactar→Contacto, grammar and typos.wallet__payment_requests_pending_countgets the full plural set for each locale (ar zero to other, cs/pl/ru one/few/many/other).Register and glossary per locale
Every locale reuses the terms its existing translations use most. Brand names stay in English: Bitkit, Pubky, Pubky Ring, Paykit, Lightning, Blocktank, USDT, BTCPay, Jade. The noun
pubkyalso stays in English.esterms, with on-chain as "en cadena"Out of Scope
wallet__payment_*(58)hardware__passphrase_*(12)wallet__send_pending__*(8)profile__pay_*(8)hardware__jade_*(4)slashtags__error_*(4)lightning__spending_confirm__*,lightning__savings_confirm__*,settings__quickpay__*subscriptions__payment_*,subscriptions__first_*,subscriptions__created_*,subscriptions__unsupported_*wallet__lnurl_pay__*,wallet__send_quickpay__*,wallet__toast_*,hardware__remove_*,contacts__add_*,other__pay_*hardware__passphrase_*reads "Passwort" while the rest of the app and the new strings use "Passphrase".values-ptis mostly Brazilian (você, digite, contato).profile__your_namereads "Su Apellido" (surname); the new strings use "nombre".Design
N/A — no UI changes.
Preview
N/A — translation-only change.
QA Notes
Journeys
N/A — no user-visible behaviour change.
Manual Tests
Automated Checks
<accent>tags and line breaks match the English./gradlew :app:lintDevDebug: resources merge and compile; lint analysis then crashes inEmptyNavDeepLinkDetectoronScreenDeepLinkRuntime.kt, which this PR does not touch, so lint results were not produced