Skip to content

chore: add translations for strings added after the 3.0.0 pass - #953

Merged
piotr-iohk merged 5 commits into
masterfrom
chore/translations-after-3.0.0-pass
Oct 16, 2026
Merged

piotr-iohk merged 5 commits into
masterfrom
chore/translations-after-3.0.0-pass

Conversation

@ovitrif

@ovitrif ovitrif commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #952
Twin: synonymdev/bitkit-android#1509
Refs: #938

Description

  • Adds AI-assisted translations for every string the app references that was still English after the 3.0.0 pass, in all 14 shipped locales. Most are the USDT screens (send, receive, cross-network deposits, refunds, activity details), which reached master just before the pass merged; the rest are payment request, subscription, hardware wallet and Pubky auth labels added since.
  • Covers keys the app picks with a ternary (pubky_auth__share_usdt_optional and others), which validate-translations.js does not detect; the validator now reports no missing translations.
  • Reuses the Android translation where Android has the same key with identical English.
  • New Greek strings use the informal register (εσύ), matching Android, as the 3.0.0 pass does for strings both apps share.
  • Replaces two German strings in Dutch (other__qr_error_no_data_header, other__qr_error_no_data_text) with Dutch.
  • Moves the English plural fallback test to wallet__reorg_msg_begin, since settings__addr__spend_all now has Arabic and Portuguese translations.
  • New keys are inserted in English key order; other existing translations and English are unchanged.
  • Per locale, added strings (AI-translated + copied from Android):
    • ar, el, pt: 135 (132 + 3)
    • ca, es: 134 (132 + 2)
    • cs, de, es-419, fr, it, nl, pl, pt-BR, ru: 132 (130 + 2)
USDT terms per locale

Register and the existing terms follow the 3.0.0 pass glossary. New USDT concepts:

Locale deposit refund bridge network delivering
ar إيداع استرداد الجسر الشبكة جارٍ التسليم
ca dipòsit devolució pont xarxa En lliurament
cs vklad vrácení prostředků most síť Doručování
de Einzahlung Rückerstattung Bridge Netzwerk Wird zugestellt
el κατάθεση επιστροφή γέφυρα δίκτυο Σε παράδοση
es / es-419 depósito reembolso puente red Entregando
fr dépôt remboursement pont réseau En livraison
it deposito rimborso bridge rete In consegna
nl storting terugbetaling bridge netwerk Wordt geleverd
pl wpłata zwrot most sieć Dostarczanie
pt (pt-PT) depósito reembolso ponte rede A entregar
pt-BR depósito reembolso ponte rede Entregando
ru депозит возврат мост сеть Доставка

Out of Scope

  • Native review: payment, security and recovery copy needs a native speaker before release. 76 of the added keys fall in these groups:
    • usdt__send*, usdt__recipient*, usdt__bridge_*, fee and network notes (25)
    • usdt__error_* (19)
    • usdt__deposit_refund* and other refund strings (12)
    • profile__auth_approval_* / pubky_auth__* USDT address sharing (9)
    • wallet__payment_request_* (7)
    • subscriptions__accepted_payments, subscriptions__payment_methods
    • hardware__send_onchain_only_* (2)
  • Known doubts for native reviewers:
    • usdt__deposit_batch ("Converted batch") has no clear counterpart; each locale renders it literally.
    • usdt__maximum_total ("Max total debit") is abbreviated in most locales to fit, e.g. "Max. Abbuchung", "Cargo total máx.", "Макс. списание".
    • usdt__intro_headline ("DOLLARS? YOUR CALL") is a free rendering per locale.
    • Refund buttons run longer than English in fr, de, nl and el ("Confirmer le remboursement", "Rückerstattung bestätigen"); they are full-width buttons.
    • ar: استرداد for refund also appears in the recovery phrase term (عبارة الاسترداد).
    • USDT number agreement differs by language: plural in de and ru, singular in nl and pl.
    • pt: new strings are European Portuguese, while older pt strings mix in Brazilian forms (câmera, contato).
    • de: the existing auth title uses "Sie" while the rest of German uses "du"; left unchanged.
  • Transifex: not used; these strings exist only in the repo.

Design

N/A — no UI changes.

Preview

N/A — translation-only change.

QA Notes

Journeys

  • new usdt-german-labels.xml

Manual Tests

  • Set the app language to Arabic and open the USDT intro → text reads right to left and the accent on the headline holds

Automated Checks

  • ran validate-translations.js (0 errors, 0 warnings)
  • updated LocalizationPluralTests.swift

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T23:43:47.555099Z 2b46c04 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no actionable issues were found.

Summary

Adds translations across 14 locales, mainly for USDT screens.

  • App screens show translations for newer labels and messages.

Review scope acknowledged by ovitrif: native review of payment, security, and recovery copy is deferred until release. The listed doubts about terminology, headline wording, button length, Arabic wording, USDT agreement, and existing Portuguese and German register differences are explicitly acknowledged and are not findings.

Checks were based on source review. iOS tests and visual checks were not run; native iOS rendering is unavailable in this Linux environment.

Reviews (1) · Last reviewed commit: "chore: add translations for strings adde..." · Reviewed by Greptile

@ovitrif

ovitrif commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed 54c8e18: the new Greek strings now use the informal register (εσύ), the same text as Android. The 3.0.0 pass uses εσύ for strings both apps share; the first commit had them in εσείς. validate-translations.js still reports 0 errors and 0 warnings.

@ovitrif

ovitrif commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed 926016f: adds the usdt-german-labels.xml journey, the same file as the Android twin, which checks the USDT screens in German for English fallbacks and cut-off labels. The description lists it under Journeys.

@talosmachina talosmachina left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No findings. Adds the translations still missing after the 3.0.0 pass to all 14 iOS locales, replaces the two German strings in nl with Dutch, and moves the English-fallback plural test to a key that is still untranslated in ar and pt. Reviewed 54c8e18, light tier: I read the strings with a script, not as a native speaker. iOS does not build here.

What I checked, and 3 candidates I ruled out

Checked mechanically on every added entry (1,863 across 14 files): each line parses as "key" = "value";; no duplicate keys; each key exists in en.lproj; {name} and %@/%d placeholders match English per key
Ran: node scripts/validate-translations.js at the head: 0 errors
CI: validate green; Run Tests and Run Integration Tests still running at review time

Ruled out

  • The new fallback test asserts on a key the PR translates: wallet__reorg_msg_begin has no ar or pt entry at the head, so both still fall back to English. The en text, plural # included, matches the three expected strings exactly.
  • Lost Dutch strings: the only removed localisation lines are the two German values in nl.lproj, which come back as Dutch.
  • A referenced key missed by the ternary blind spot the description names: the validator now reports nothing missing at the head.

Merge confidence: 4/5, the plural test change has not run yet: CI's test jobs were still going and I cannot run XCTest on this box.

@piotr-iohk piotr-iohk mentioned this pull request Oct 16, 2026
5 of 8 tasks

@piotr-iohk piotr-iohk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

QA review

Scope: Reviewed the full PR diff against its merge base, at 926016fd.

1 actionable finding — resolve or provide an evidence-backed rebuttal.

The added strings in all 14 locales keep the English placeholders, <accent> markup, and plural templates. Refund confirmation substitutes amount, network, address, and shortNetwork, matching the deposit refund caller. Pubky auth copy checked in German, Dutch, French, Spanish, Italian, and Portuguese still says Paykit can see sales activity and cannot spend funds. The two Dutch QR strings that were German are now Dutch. wallet__reorg_msg_begin is still absent for Arabic and Portuguese, so the moved English plural fallback matches the lookup. Shared keys with the same English match bitkit-android#1509 at bb151cb; iOS-only Pubky USDT sharing labels have no Android string. The new German journey names labels from other controls and leaves the network page before the cross-network deposits button.

Validation: node scripts/validate-translations.js --warnings at this revision reported 0 errors and 0 warnings. On this SHA, validate, Run Tests, Run Integration Tests, and build-local passed. Run Tests uses the Bitkit scheme and does not skip LocalizationPluralTests. This review did not run XCTest or a device. Native-speaker review of the payment, security, and recovery copy remains the release check described in the PR. Correct the German journey label steps before treating that journey as the pass condition.

Suggested additional test cases

  • iOS. Fresh onboarded wallet, German, USDT services and cross-network deposits configured, no USDT balance. On Receive, open the USDT tab, read the network control, open the selector, and open cross-network deposits from that page. The control reads "Netzwerk: Arbitrum One", the selector title reads "USDT-Netzwerk" with a German explanation, and the deposits screen is titled "Einzahlungen anderer Netze" with empty state "Noch keine Einzahlungen."
  • iOS. Same German wallet. Open Send from the USDT wallet with no recipient. The title reads "USDT senden" and the network caption reads "Netzwerk".
  • iOS. German, a cross-network deposit that can be refunded. Enter a refund address and open the confirmation. The dialog shows the amount, network, and that address, with no {amount}, {network}, {address}, or {shortNetwork} left in the text. The button "Rückerstattung bestätigen" is fully visible.

Device testing: not performed in this review.

Findings

  • [LOW] Point the German USDT journey at the labels those screens show — inline at journeys/usdt-german-labels.xml:15.

Comment thread journeys/usdt-german-labels.xml
@ovitrif

ovitrif commented Oct 16, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed d41f428: usdt-german-labels.xml now names the labels the receive and send screens show (network control, network list with note and deposits button, send network caption), the same fix as the Android twin after QA review there.

@ovitrif
ovitrif requested a review from piotr-iohk October 16, 2026 06:24

@piotr-iohk piotr-iohk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

QA review

Scope: Follow-up of the changes since 926016fd, including the affected journey and the prior label finding, at d41f428. Inherited baseline: QA review. Locale catalogs, the plural-test fallback, payment and Pubky wording, and the Android string-catalog comparison at bb151cb are unchanged and inherited. This pass rechecked journeys/usdt-german-labels.xml against the receive, network, deposit, and send screens, and compared the same journey in bitkit-android#1509 at 502b2d1.

1 actionable finding — resolve or provide an evidence-backed rebuttal.

The earlier control-routing comment (discussion) matches the current receive control, selector title and note, and the deposits button on that list. The send step still quotes the resource text "Netzwerk"; both platforms render that caption in uppercase.

Device testing: not performed in this review. This pass did not run XCTest. CI does not execute journeys.

Findings

  • [LOW] Quote the uppercased USDT send caption — inline at journeys/usdt-german-labels.xml:19.

Comment thread journeys/usdt-german-labels.xml Outdated
@ovitrif

ovitrif commented Oct 16, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed 4488114: the German USDT journey quotes the send network caption as rendered, "NETZWERK", answering @piotr-iohk's QA finding.

@ovitrif
ovitrif requested a review from piotr-iohk October 16, 2026 06:35

@piotr-iohk piotr-iohk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

QA review

Scope: Follow-up of the changes since d41f428, including the affected German USDT journey and the prior send-caption finding, at 4488114. Inherited baseline: QA review. Locale catalogs, the plural-test fallback, payment and Pubky wording, and the Android string-catalog comparison at bb151cb are unchanged and inherited. This pass rechecked journeys/usdt-german-labels.xml against the receive, network, deposit, and send screens, and compared the same journey in bitkit-android#1509 at 5e55fd8.

No new actionable code findings.

The send step now quotes "NETZWERK". UsdtSendView passes German usdt__network ("Netzwerk") through SendSectionView and CaptionMText, which applies .textCase(.uppercase), so that caption is rendered as "NETZWERK". The receive control still reads "Netzwerk: Arbitrum One", and the selector title, note, deposits title, and empty state still match the other quoted steps. Android Caption13Up uppercases the same German string, and the twin journey quotes the same word. The earlier caption comment (discussion) is addressed at this revision.

validate passed on this revision. Run Tests and Run Integration Tests were still running; this commit changes only the journey quote. This review did not run XCTest. CI does not execute journeys.

Suggested additional test cases

  • iOS. German, a cross-network deposit that can be refunded. Enter a refund address and open the confirmation. The dialog shows the amount, network, and that address, with no {amount}, {network}, {address}, or {shortNetwork} left in the text. The button "Rückerstattung bestätigen" is fully visible.

Ready for device testing.

Device testing: not performed in this review.

@piotr-iohk piotr-iohk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approved at 4488114c18ffd3382ee1a30a2bed57e3fab7e6a0 following the current-head code review and Piotr’s report that the requested German and Arabic manual translation checks look good. The USB test build matches this PR head.

This covers the unfunded translation smoke-check scope; funded payment, refund and populated-history flows are not claimed as tested.

@piotr-iohk
piotr-iohk enabled auto-merge October 16, 2026 08:03
@piotr-iohk
piotr-iohk merged commit 4a72821 into master Oct 16, 2026
17 checks passed
@piotr-iohk
piotr-iohk deleted the chore/translations-after-3.0.0-pass branch October 16, 2026 08:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: usdt screens show english in other languages

3 participants