chore(wallet): fix localization gaps and bump version to 8.7.0 (5) - #855
Conversation
`.claude/worktrees` holds full copies of the project. BartyCrouch walks the file system rather than git, so it was scanning that duplicate source and importing keys from whatever branch happened to be checked out there into this branch's catalog — three such keys (`%@ refund address`, `Missing swap details`, `Resolving deposit address…`) had no call site here at all. It was also rewriting the .strings files inside the worktree. Setting subpathsToIgnore replaces BartyCrouch's default list instead of extending it, so the defaults are repeated alongside `.claude`; without them the tool would start walking Pods/ and build/. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
`%d ATM(s) in %@` was in neither Localizable.strings nor Localizable.stringsdict, so NSLocalizedString returned the key and the filter cell read "5 ATM(s) in 20 km" in every language. Add the plural entry, mirroring the `%d merchant(s) in %@` one that already existed next to it. The call sites also needed String.localizedStringWithFormat: plain String(format:) never expands the %#@atms@ placeholder a stringsdict entry resolves to, which is why the merchant equivalent already uses it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The title was a bare SwiftUI string literal, which BartyCrouch does not extract, so it stayed English everywhere. Reuse the "Extended public keys" key that ExtendedPublicKeysViewController already carries rather than adding a near duplicate: the screens now share one title and its existing translations. This changes the English casing from "Extended Public Keys" to "Extended public keys", matching the other screen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
NavBarClose referenced "toolbar-close", which exists in no asset catalog, so the close button rendered empty on every sheet using it — CSV export, private key import, extended public keys and the ZenLedger info sheet — and the simulator logged "No image named 'toolbar-close' found in asset catalog". Point it at DashUIKit's navigationbar-close instead. Only the image changes; the surrounding 44pt tap area and 34pt stroked circle stay as they were, since NavigationBarElement.close would have brought its own chrome and altered the look of those four sheets. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The catalog had drifted from the source: 81 keys already referenced by NSLocalizedString were missing (most of the DEX/Swap screens — "Dash DEX", "Refund address", "Quote expires", "Swapping" — plus "App version", "Mining Reward", "Withdraw funds" and others), and 30 keys no longer had a call site, largely leftovers from the Maya to Swap rename. This is what the bartycrouch build phase produces; it was simply never committed. Each of the 30 removals was checked against the tree first — none of them appears as an actual NSLocalizedString call. All 42 translated locales stay key-identical to en, as harmonizeWithSource requires. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Updates MARKETING_VERSION across all 20 build configurations and CURRENT_PROJECT_VERSION across all 28, so every target — dashwallet, dashpay, TodayExtension, WatchApp and its extension — reports the same version. The Info.plist files already resolve both through build settings and needed no edit. Note the build number goes down (6 to 5), which is only sound because the marketing version moves at the same time; TestFlight rejects a lower build number within one marketing version. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 6 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (18)
📝 WalkthroughWalkthroughThis PR primarily overhauls localization across nearly all supported locales, adding extensive Dash DEX/SwapKit-related strings, removing legacy Maya Protocol strings, and normalizing placeholder formatting. It also bumps the Xcode build version, updates BartyCrouch config subpath exclusions, adds an ATM stringsdict entry across locales, and makes minor Swift UI/localization-call fixes. ChangesBuild, Tooling, and Code Fixes
Localization Updates (Dash DEX/SwapKit)
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ 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.
Note
Due to the large number of review comments, Critical severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (9)
DashWallet/cs.lproj/Localizable.strings (1)
1-2: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winConvert
DashWallet/cs.lproj/Localizable.stringsto UTF-16LE before merging.
.lproj/Localizable.stringsfiles must be UTF-16 little-endian; this file is ASCII/UTF-8 and cannot be decoded as UTF-16LE.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/cs.lproj/Localizable.strings` around lines 1 - 2, Convert the DashWallet Czech localization file to UTF-16LE encoding before merging, preserving the existing key-value content and formatting exactly.Source: Coding guidelines
DashWallet/zh-Hant-TW.lproj/Localizable.strings (1)
1-2: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winThis localization file is UTF-8, not UTF-16LE.
DashWallet/zh-Hant-TW.lproj/Localizable.stringsstarts with/(0x2f) instead of a UTF-16LE BOM / wide-character pair, so it violates the iOS.stringsencoding guideline and can fail localization tooling.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/zh-Hant-TW.lproj/Localizable.strings` around lines 1 - 2, The localization file is encoded as UTF-8 instead of UTF-16LE, which violates the required iOS .strings encoding. Convert Localizable.strings to UTF-16LE with the appropriate BOM while preserving the existing key and value content.Source: Coding guidelines
DashWallet/fa.lproj/Localizable.strings (1)
1-2: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRegenerate the localization catalog as UTF-16 little-endian.
DashWallet/fa.lproj/Localizable.stringsstarts with a UTF-8 header/comma instead of the UTF-16LE BOM required for iOS.stringsfiles.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/fa.lproj/Localizable.strings` around lines 1 - 2, Regenerate the localization catalog represented by Localizable.strings as UTF-16 little-endian, including the required UTF-16LE BOM, while preserving all existing localization entries and values.Source: Coding guidelines
DashWallet/sr.lproj/Localizable.strings (1)
1-2: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winDo not merge
DashWallet/sr.lproj/Localizable.stringsin its current form.The file is not valid UTF-16LE around the existing content, which violates the .strings localization guideline and can break localization loading. Re-save the file as UTF-16LE and avoid UTF-8 BOMs.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/sr.lproj/Localizable.strings` around lines 1 - 2, Re-save the localization strings file as valid UTF-16LE without a UTF-8 BOM, preserving the existing key-value content and formatting.Source: Coding guidelines
DashWallet/th.lproj/Localizable.strings (1)
1-2: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winNormalize this localization file to UTF-16LE.
DashWallet/th.lproj/Localizable.stringsis UTF-8 ASCII on disk, but iOS localization strings are expected to be UTF-16 little-endian. Convert it withiconv -f UTF-8 -t UTF-16LEso Xcode handles it correctly.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/th.lproj/Localizable.strings` around lines 1 - 2, Convert the DashWallet Thai Localizable.strings file from UTF-8 ASCII to UTF-16LE using iconv -f UTF-8 -t UTF-16LE, preserving its existing localization entry and content.Source: Coding guidelines
DashWallet/id.lproj/Localizable.strings (2)
1-3662: 📐 Maintainability & Code Quality | 🟡 MinorUTF-16LE catalog encoding is not detected.
DashWallet/id.lproj/Localizable.stringsstarts with/* No...rather than a UTF-16LE BOM (FF FE), so the catalog appears to be plain UTF-8/plain text. Save it as UTF-16LE with Xcode for.lproj/Localizable.strings, or remove/correct this entry if it was intentionally intended as plain text.[low_effort_and_medium_reward]
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/id.lproj/Localizable.strings` around lines 1 - 3662, The Localizable.strings catalog is not encoded as the required UTF-16LE resource. Re-save DashWallet/id.lproj/Localizable.strings through Xcode as UTF-16LE so it begins with the FF FE BOM, while preserving all localization entries; if this file is intentionally plain text, remove or correct the catalog entry instead.Source: Coding guidelines
13-517: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winTranslate the untranslated DEX/receipt strings in
DashWallet/id.lproj/Localizable.strings.Several changed values still use the English source strings, including
"Amount too low"(227),"Could not load Buy Dash options — please check your connection and try again"(650),"If the swap fails, your ...", refund-address labels/messages, and"Your transfer must include this memo. Funds sent without it cannot be matched to your swap and will be lost."(3637). These should be translated, especially the refund/memo fund-loss guidance.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/id.lproj/Localizable.strings` around lines 13 - 517, Translate every remaining English-valued DEX and receipt entry in Localizable.strings, including “Amount too low,” Buy Dash loading errors, swap-failure guidance, refund-address labels/messages, and the memo warning about unmatched funds. Preserve each localization key and format placeholder exactly, and prioritize clear Indonesian wording for refund and potential-fund-loss instructions.DashWallet/nb.lproj/Localizable.strings (1)
1-3664: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winConvert
nb.lproj/Localizable.stringsto UTF-16 little-endian before merge.The file is not UTF-16LE;
.lproj/*.stringsfiles must be UTF-16LE, so regenerate it with Xcode or save the committed file in UTF-16LE.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/nb.lproj/Localizable.strings` around lines 1 - 3664, Convert the complete nb.lproj/Localizable.strings file to UTF-16 little-endian encoding, preserving all localization keys, values, comments, and formatting; do not alter the translations or content.Source: Coding guidelines
DashWallet/pl.lproj/Localizable.strings (1)
1-1: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRe-encode the Polish localizable strings as UTF-16 little-endian.
DashWallet/pl.lproj/Localizable.stringsis checked in as UTF-8 instead of the required UTF-16 LE format, so it should not be merged in this encoding. Re-export from Xcode/genstringswith UTF-16 LE, or convert the file back to UTF-16 LE before merging.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/pl.lproj/Localizable.strings` at line 1, Re-encode the Polish Localizable.strings resource as UTF-16 little-endian, preserving all existing localized strings and content; use Xcode/genstrings export or an equivalent conversion before committing.Source: Coding guidelines
🟠 Major comments (24)
DashWallet/en.lproj/Localizable.stringsdict-21-36 (1)
21-36: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winAdd the %d ATM(s) in %@ stringsdict entry to every supported locale.
AtmListViewControlleris localized for all app locales, but onlyDashWallet/en.lproj/Localizable.stringsdictcontains the plural resource for this key. Add matching entries to the remainingLocalizable.stringsdictcatalogs so non-English locales show localized pluralized text instead of the raw English key.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/en.lproj/Localizable.stringsdict` around lines 21 - 36, Add the “%d ATM(s) in %@” plural entry, matching the structure used in en.lproj/Localizable.stringsdict, to every remaining supported locale’s Localizable.stringsdict catalog. Provide each locale’s translated one and other forms while preserving the existing NSStringLocalizedFormatKey and plural format metadata.DashWallet/ca.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the newly added Dash DEX/SwapKit strings for Catalan.
The new entries in this locale, including this one and the later swap status/error strings, use the English source text unchanged. This leaves the new swap flows largely untranslated when Catalan is selected; provide Catalan values before merging.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/ca.lproj/Localizable.strings` around lines 13 - 14, Translate the newly added Dash DEX/SwapKit entries in the Catalan Localizable.strings resource, including dex_error_blacklisted and the later swap status/error strings, replacing each unchanged English value with accurate Catalan while preserving the existing keys and format placeholders.DashWallet/cs.lproj/Localizable.strings-13-24 (1)
13-24: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftProvide Czech translations for the newly added user-facing strings.
Many added catalog values are still identical to their English keys, including core swap states, validation errors, refund-address guidance, navigation, and status messages. Czech users will therefore see English throughout the new Dash DEX/SwapKit flows. Translate these entries before release rather than treating English placeholders as completed localization.
Also applies to: 49-51, 226-228, 250-252, 319-321, 422-424, 470-472, 497-499, 509-517, 551-554, 595-596, 613-624, 634-638, 649-651, 786-788, 944-949, 959-961, 1088-1090, 1130-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1488, 1535-1537, 1599-1601, 1735-1737, 1856-1864, 1880-1885, 1931-1933, 2108-2110, 2214-2216, 2277-2279, 2349-2354, 2456-2458, 2486-2494, 2529-2531, 2643-2645, 2694-2696, 2710-2721, 2792-2797, 2825-2827, 2840-2854, 2882-2898, 2921-2929, 2995-2997, 3040-3042, 3058-3060, 3217-3225, 3286-3297, 3368-3370, 3458-3460, 3527-3528, 3542-3544, 3629-3640
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/cs.lproj/Localizable.strings` around lines 13 - 24, Translate every newly added user-facing entry in the Czech Localizable.strings catalog, including the listed ranges and the shown swap, contact-request, and transaction-status strings. Replace English-placeholder values with accurate, natural Czech while preserving each localization key, format specifier, and placeholder position.DashWallet/uk.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftDo not ship untranslated or regressed Ukrainian copy.
A large number of new user-facing Dash DEX/SwapKit strings are copied verbatim from English. Existing Ukrainian translations were also replaced with English for
Clipboard,Contact support, and the CrowdNode balance warning. Translate these strings before merging; protocol and brand labels can remain unchanged.Also applies to: 22-24, 226-228, 250-252, 319-321, 422-424, 470-472, 497-517, 595-596, 613-624, 649-651, 786-788, 944-961, 1088-1090, 1130-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1488, 1535-1537, 1599-1601, 1723-1725, 1735-1737, 1792-1794, 1856-1864, 1880-1885, 1931-1933, 2108-2110, 2213-2215, 2276-2278, 2348-2349, 2454-2456, 2484-2492, 2527-2529, 2641-2643, 2692-2720, 2734-2741, 2790-2795, 2823-2852, 2886-2926, 2993-2995, 3038-3058, 3218-3223, 3284-3295, 3367-3369, 3456-3458, 3525-3526, 3540-3542, 3627-3638
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/uk.lproj/Localizable.strings` around lines 13 - 14, Translate all newly added Dash DEX/SwapKit user-facing strings in the Ukrainian Localizable.strings entries, including the listed ranges, and restore Ukrainian translations for Clipboard, Contact support, and the CrowdNode balance warning. Preserve format specifiers and leave protocol and brand names unchanged.DashWallet/vi.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the newly added Vietnamese strings before release.
Most new user-facing values in these ranges are still byte-for-byte English, including core Dash DEX swap, refund, amount, status, error, and transaction messages. Vietnamese users will therefore see English throughout the new flow. Add Vietnamese translations while preserving all existing
%@,%ld, and%dplaceholders.Also applies to: 22-23, 49-51, 226-228, 250-252, 319-321, 422-424, 470-472, 497-499, 515-517, 595-596, 613-624, 649-651, 786-788, 944-961, 1088-1090, 1130-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1488, 1535-1537, 1599-1601, 1723-1725, 1856-1864, 1880-1885, 1931-1933, 2214-2216, 2277-2279, 2349-2350, 2456-2458, 2486-2494, 2529-2531, 2643-2645, 2694-2696, 2710-2722, 2736-2743, 2792-2797, 2825-2827, 2840-2854, 2888-2899, 2921-2929, 3286-3297, 3369-3371, 3458-3460, 3527-3528, 3542-3544, 3629-3640
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/vi.lproj/Localizable.strings` around lines 13 - 14, Translate the newly added English-valued entries throughout the specified ranges in the Vietnamese Localizable.strings file, covering the Dash DEX swap, refund, amount, status, error, and transaction messages. Preserve each entry’s key and all format placeholders, including %@, %ld, and %d, while ensuring the displayed values are natural Vietnamese.DashWallet/zh-Hant-TW.lproj/Localizable.strings-13-24 (1)
13-24: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftProvide Traditional Chinese translations for the new DEX flow.
These newly added user-facing Dash DEX/SwapKit strings remain English in the
zh-Hant-TWcatalog, so the new swap experience is not localized for Traditional Chinese users. Translate these entries before shipping or explicitly exclude this locale from the supported localization set.Also applies to: 49-50, 320-321, 423-424, 498-499, 516-517, 614-624, 650-651, 774-776, 945-961, 1296-1297, 1353-1354, 1488-1489, 1600-1601, 1724-1725, 1793-1807, 1857-1885, 1932-1933, 2215-2216, 2278-2279, 2487-2531, 2644-2645, 2695-2722, 2793-2930, 3041-3060, 3137-3138, 3221-3225, 3287-3297, 3528-3529, 3630-3640
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/zh-Hant-TW.lproj/Localizable.strings` around lines 13 - 24, Translate all newly added Dash DEX and SwapKit user-facing entries in the zh-Hant-TW Localizable.strings catalog into Traditional Chinese, including the listed occurrences, while preserving format placeholders such as %@. If these strings cannot be translated, explicitly remove zh-Hant-TW from the supported localization set instead.DashWallet/zh.lproj/Localizable.strings-13-24 (1)
13-24: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftComplete localization of the new DEX/SwapKit catalog entries.
The same untranslated-value defect affects both Chinese catalogs and repeats across the newly added DEX/SwapKit messages, including amount validation, refund-address, swap-status, timeout, and transfer-warning text.
DashWallet/zh.lproj/Localizable.strings#L13-L24: translate the added user-facing DEX/SwapKit strings and apply the same correction to the repeated affected ranges.DashWallet/zh_TW.lproj/Localizable.strings#L13-L24: translate the added user-facing DEX/SwapKit strings and apply the same correction to the repeated affected ranges.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/zh.lproj/Localizable.strings` around lines 13 - 24, Complete the Chinese localization for all newly added DEX/SwapKit user-facing strings, replacing untranslated English values across the affected amount-validation, refund-address, swap-status, timeout, transfer-warning, and related entries. Apply the same translations consistently in DashWallet/zh.lproj/Localizable.strings lines 13-24 and DashWallet/zh_TW.lproj/Localizable.strings lines 13-24, preserving format placeholders such as %@.DashWallet/de.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftProvide German translations for the new DEX/SwapKit strings.
The newly added German-catalog entries are largely identical to their English keys, including swap errors, payment instructions, status labels, and refund guidance. This will expose substantial English UI text to German users throughout the DEX flow. Add reviewed German values while preserving all placeholders; the same issue appears across the added DEX ranges, including Lines 422-424, 1295-1297, 2692-2719, 2790-2896, 3284-3294, and 3627-3637.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/de.lproj/Localizable.strings` around lines 13 - 14, Translate the newly added DEX/SwapKit entries in the German Localizable.strings catalog into reviewed German, covering the referenced ranges and related swap errors, payment instructions, status labels, and refund guidance. Preserve every localization key and placeholder while replacing English values with natural German translations; do not alter unrelated entries.DashWallet/el.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the newly added Greek strings before merging.
Many new user-facing values are still identical to their English keys—for example, Line [226]
Amount too low, Line [595]Contact support, and the DEX error/transfer messages around Lines [3284]-[3294] and [3627]-[3637]. This leaves substantial parts of the new flows in English for Greek users. Translate these entries, excluding intentional brand/protocol names such as Dash DEX, SwapKit, NEAR, and URI.Also applies to: 22-23, 49-50, 226-227, 250-251, 319-320, 422-423, 470-471, 497-498, 515-516, 595-596, 613-614, 622-623, 649-650, 786-787, 944-945, 947-948, 959-960, 1088-1089, 1130-1131, 1295-1296, 1352-1353, 1427-1428, 1487-1488, 1535-1536, 1599-1600, 1723-1724, 1735-1736, 1792-1793, 1856-1857, 1859-1860, 1862-1863, 1877-1878, 1880-1881, 1931-1932, 2108-2109, 2213-2214, 2276-2277, 2348-2349, 2454-2455, 2484-2485, 2490-2491, 2527-2528, 2641-2642, 2692-2693, 2708-2709, 2715-2716, 2718-2719, 2733-2734, 2739-2740, 2790-2791, 2793-2794, 2823-2824, 2838-2839, 2844-2845, 2850-2851, 2880-2881, 2886-2887, 2889-2890, 2892-2893, 2895-2896, 2919-2920, 2925-2926, 2993-2994, 3038-3039, 3056-3057, 3218-3219, 3221-3222, 3284-3285, 3287-3288, 3290-3291, 3293-3294, 3366-3367, 3456-3457, 3525-3526, 3540-3541, 3627-3628, 3636-3637
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/el.lproj/Localizable.strings` around lines 13 - 14, Translate every newly added user-facing English value in the Greek Localizable.strings entries identified by the review, including DEX, transfer, support, and amount messages; retain intentional brand and protocol names such as Dash DEX, SwapKit, NEAR, and URI unchanged.DashWallet/es.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winTranslate the new Spanish catalog values before merging.
Many newly added user-facing Dash DEX/SwapKit strings have English values, so Spanish users will see English throughout the new flows. Also keep the existing Spanish translation for the shared
Convertkey; introduce a distinct source key if DEX needs different wording rather than changing this shared entry.Also applies to: 22-23, 49-50, 226-227, 250-251, 319-320, 422-423, 470-471, 497-498, 515-516, 595-596, 613-614, 622-623, 649-650, 786-787, 944-948, 959-961, 1088-1089, 1130-1131, 1295-1296, 1352-1353, 1427-1428, 1487-1488, 1535-1536, 1599-1600, 1723-1724, 1735-1736, 1792-1793, 1856-1863, 1880-1881, 1931-1932, 2108-2109, 2213-2214, 2276-2277, 2348-2349, 2454-2455, 2484-2492, 2527-2528, 2641-2642, 2692-2693, 2708-2719, 2733-2741, 2790-2795, 2823-2824, 2838-2840, 2844-2846, 2850-2852, 2880-2896, 2919-2927, 2993-2995, 3038-3040, 3056-3058, 3284-3295, 3366-3368, 3456-3458, 3525-3526, 3540-3542, 3627-3638
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/es.lproj/Localizable.strings` around lines 13 - 14, Translate every newly added English user-facing value in the Spanish Localizable.strings catalog, including the listed Dash DEX and SwapKit entries, while preserving placeholders and formatting. Keep the existing Spanish translation for the shared “Convert” key; if DEX requires different wording, add or use a distinct source key instead of modifying that shared entry.DashWallet/sl.lproj/Localizable.strings-13-14 (1)
13-14: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winKeep the
.stringscatalog UTF-16LE-encoded.
DashWallet/sl.lproj/Localizable.stringsis currently decoded successfully as UTF-8 and fails UTF-16LE decoding in Python; convert/save it back to UTF-16 little-endian before landing this change.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/sl.lproj/Localizable.strings` around lines 13 - 14, Re-encode the Localizable.strings catalog as UTF-16LE before committing, preserving all existing Slovenian localization entries and the added dex_error_blacklisted string content unchanged.Source: Coding guidelines
DashWallet/tr.lproj/Localizable.strings-13-24 (1)
13-24: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the newly added Turkish user-facing strings.
Many new Dash DEX/SwapKit/AboutDash entries copy the English source verbatim, so the new flows will appear partially untranslated. Preserve placeholders while translating; for example,
%ldis compatible, butsecshould use the Turkish abbreviation (sn).Also applies to: 49-51, 226-252, 319-321, 422-424, 470-498, 515-517, 595-596, 613-624, 635-651, 786-800, 944-960, 1088-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1488, 1535-1537, 1599-1601, 1723-1737, 1792-1794, 1856-1885, 1931-1933, 2108-2110, 2213-2215, 2276-2278, 2348-2349, 2454-2456, 2484-2492, 2527-2529, 2641-2643, 2692-2720, 2734-2741, 2790-2795, 2823-2852, 2880-2897, 2919-2927, 3038-3058, 3218-3223, 3284-3295, 3367-3368, 3456-3458, 3525-3542, 3627-3638
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/tr.lproj/Localizable.strings` around lines 13 - 24, Translate all newly added English user-facing entries in the Turkish Localizable.strings file, including the listed Dash DEX, SwapKit, and AboutDash ranges, while preserving every format placeholder exactly; use Turkish abbreviations such as “sn” for “sec” where applicable.DashWallet/fil.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the newly added Filipino strings before shipping.
Many new entries retain the English source text, including refund, memo, expiration, balance, and lost-funds warnings. These will render in English for Filipino users and can make critical swap instructions easy to miss. Provide reviewed Filipino translations while preserving all
%@,%d, and%%placeholders.Also applies to: 22-23, 49-50, 226-227, 250-251, 319-320, 422-423, 470-471, 497-498, 515-516, 595-596, 613-614, 622-623, 649-650, 786-787, 944-945, 947-948, 959-960, 1088-1089, 1130-1131, 1295-1296, 1352-1353, 1427-1428, 1487-1488, 1535-1536, 1599-1600, 1735-1736, 1792-1793, 1856-1857, 1859-1860, 1862-1863, 1880-1881, 1931-1932, 2108-2109, 2213-2214, 2276-2277, 2348-2349, 2454-2455, 2484-2485, 2490-2491, 2527-2528, 2641-2642, 2692-2693, 2708-2709, 2715-2716, 2718-2719, 2733-2734, 2739-2740, 2790-2791, 2793-2794, 2823-2824, 2838-2839, 2844-2845, 2850-2851, 2880-2881, 2886-2887, 2889-2890, 2892-2893, 2895-2896, 2919-2920, 2925-2926, 2993-2994, 3038-3039, 3056-3057, 3218-3219, 3221-3222, 3284-3285, 3287-3288, 3290-3291, 3293-3294, 3366-3367, 3456-3457, 3525-3526, 3540-3541, 3627-3628, 3636-3637
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/fil.lproj/Localizable.strings` around lines 13 - 14, Translate every newly added English value in Localizable.strings into reviewed Filipino, including the refund, memo, expiration, balance, swap, and lost-funds messages identified by the comment. Preserve each localization key and all placeholder tokens such as %@, %d, and %% exactly, while leaving already translated entries unchanged.DashWallet/fr.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the new French-locale strings.
Many added DEX, swap, error, status, and AboutDash entries copy the English source value verbatim, so French users will see English throughout core flows. Add approved French translations instead of shipping these fallback values.
Also applies to: 22-24, 226-228, 250-252, 319-321, 422-424, 497-499, 515-517, 595-597, 613-615, 622-624, 649-651, 786-788, 944-949, 959-961, 1088-1090, 1130-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1489, 1535-1537, 1599-1601, 1735-1737, 1792-1794, 1856-1864, 1880-1882, 1931-1933, 2108-2110, 2213-2215, 2276-2278, 2348-2350, 2454-2456, 2484-2486, 2490-2492, 2527-2529, 2641-2643, 2692-2694, 2708-2719, 2733-2735, 2739-2741, 2790-2795, 2823-2825, 2838-2839, 2844-2845, 2850-2851, 2880-2882, 2886-2896, 2919-2926, 2993-2995, 3038-3040, 3056-3058, 3218-3222, 3284-3294, 3366-3368, 3456-3458, 3525-3526, 3540-3542, 3627-3638
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/fr.lproj/Localizable.strings` around lines 13 - 14, Translate every newly added French localization entry identified in the comment, including the DEX, swap, error, status, and AboutDash strings, instead of leaving English source values unchanged. Preserve each localization key and format placeholders such as %@ while providing approved natural French translations for all listed ranges.DashWallet/it.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftComplete the Italian translations for the new entries.
Many newly added user-facing values are identical to their English keys, including swap errors, progress states, payment instructions, About text, and labels. This leaves substantial portions of the DEX flow in English for Italian users. Placeholder formats are preserved, so the fix is to translate the values while retaining the existing format specifiers and technical proper nouns.
Also applies to: 22-24, 226-228, 250-252, 319-321, 422-424, 470-472, 497-499, 515-517, 595-596, 613-624, 649-651, 786-788, 944-960, 1088-1090, 1130-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1488, 1535-1537, 1599-1601, 1735-1737, 1792-1794, 1856-1864, 1880-1881, 1931-1933, 2108-2110, 2213-2215, 2276-2278, 2348-2349, 2454-2456, 2484-2492, 2527-2529, 2641-2643, 2692-2694, 2708-2719, 2733-2741, 2790-2795, 2823-2825, 2838-2852, 2880-2896, 2919-2927, 2993-2995, 3038-3040, 3056-3058, 3218-3223, 3284-3295, 3366-3368, 3456-3458, 3525-3526, 3540-3542, 3627-3638
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/it.lproj/Localizable.strings` around lines 13 - 14, Complete the Italian translations for all newly added entries in Localizable.strings, including the listed ranges covering DEX errors, progress states, payment instructions, About text, and labels. Translate each value into Italian while preserving every format specifier such as %@ and retaining technical proper nouns and existing localization keys.DashWallet/ja.lproj/Localizable.strings-13-14 (2)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftProvide Japanese translations before release.
Many newly added and updated values are still English in the Japanese catalog, including core swap instructions, payment errors, refund-address requirements, and status messages. This leaves Japanese users with English UI throughout the Dash DEX flow and also regresses existing strings such as
Amount too lowandClipboard. Translate the right-hand values while preserving all%@,%d, and positional placeholder shapes.Also applies to: 22-23, 49-50, 226-227, 250-251, 319-320, 422-423, 470-471, 497-498, 509-510, 515-516, 595-596, 613-614, 622-623, 649-650, 786-787, 944-948, 959-960, 1088-1089, 1130-1131, 1295-1296, 1352-1353, 1427-1428, 1487-1488, 1535-1536, 1599-1600, 1723-1724, 1735-1736, 1792-1793, 1856-1863, 1880-1881, 1931-1932, 2108-2109, 2213-2214, 2276-2277, 2348-2349, 2454-2455, 2484-2485, 2490-2491, 2527-2528, 2641-2642, 2692-2693, 2708-2709, 2715-2716, 2718-2719, 2733-2734, 2739-2740, 2790-2794, 2823-2824, 2838-2839, 2844-2845, 2850-2851, 2880-2881, 2886-2893, 2895-2896, 2919-2920, 2925-2926, 2993-2994, 3038-3039, 3056-3057, 3218-3222, 3284-3294, 3366-3367, 3525-3526, 3540-3541, 3627-3628, 3636-3637
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/ja.lproj/Localizable.strings` around lines 13 - 14, Translate every listed English right-hand value in the Japanese Localizable.strings catalog, including the Dash DEX swap, payment, refund, status, Amount too low, and Clipboard strings. Preserve each key and the exact placeholder shape and ordering for all %@, %d, and positional placeholders while ensuring no affected Japanese UI value remains English.
13-14: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winEncoding is UTF-8, not UTF-16LE.
This
.stringsfile does not have a UTF-16 LE BOM, and Japanese content is encoded as UTF-8 bytes, which makes the file invalid for iOS localization consumers. Convert it to UTF-16LE before committing.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/ja.lproj/Localizable.strings` around lines 13 - 14, Convert the entire Localizable.strings file to UTF-16LE encoding and include the required UTF-16LE BOM, preserving all localization keys and translated values unchanged.Source: Coding guidelines
DashWallet/ko.lproj/Localizable.strings-595-596 (1)
595-596: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate newly added user-facing values for Korean before release.
This entry—and many new Dash DEX/SwapKit entries such as Lines 13–24, 1295–1297, 2484–2529, 3284–3295, and 3627–3638—maps Korean keys to English text. Because the keys exist in the Korean catalog, Korean users will see English instead of a localized value throughout core swap and payment flows. Exclude proper names, but provide Korean translations for user-facing labels, instructions, errors, and statuses.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/ko.lproj/Localizable.strings` around lines 595 - 596, Translate the newly added user-facing entries in the Korean localization catalog, including “Contact support” and the referenced Dash DEX/SwapKit ranges, into natural Korean. Preserve proper names and localization keys unchanged, while ensuring labels, instructions, errors, and statuses no longer fall back to English.DashWallet/nl.lproj/Localizable.strings-13-24 (1)
13-24: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the newly added Dutch entries before release.
Many new swap, payment, error, and account strings use the English source text verbatim, so Dutch users will see English throughout core Dash DEX flows. This conflicts with the localization rollout objective.
Also applies to: 226-228, 250-252, 319-321, 422-424, 470-472, 497-499, 515-517, 595-596, 613-624, 649-651, 786-788, 944-949, 959-961, 1088-1090, 1130-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1488, 1535-1537, 1599-1601, 1735-1737, 1792-1794, 1856-1864, 1880-1885, 1931-1933, 2213-2215, 2276-2278, 2348-2349, 2454-2456, 2484-2492, 2527-2529, 2641-2643, 2692-2694, 2708-2720, 2734-2741, 2790-2795, 2823-2825, 2838-2852, 2880-2897, 2919-2927, 2993-2995, 3038-3040, 3056-3058, 3218-3223, 3284-3295, 3367-3368, 3456-3458, 3525-3526, 3540-3542, 3627-3638
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/nl.lproj/Localizable.strings` around lines 13 - 24, Translate every newly added English-valued entry in Localizable.strings, including the listed swap, payment, error, and account strings, into natural Dutch while preserving format placeholders such as %@ exactly. Leave entries that already have appropriate Dutch translations unchanged.DashWallet/pl.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftReplace the English DEX/SwapKit fallback values in Polish localization.
DashWallet/pl.lproj/Localizable.stringsstill copies many newly added DEX, SwapKit, payment, and error strings directly from the English key, so Polish users will see English text in core swap flows. Update the referenced values to approved Polish translations, or remove these deferred fallbacks before merging.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/pl.lproj/Localizable.strings` around lines 13 - 14, Update the newly added DEX, SwapKit, payment, and error entries in the Polish Localizable.strings resource to use approved Polish translations instead of English fallback values; alternatively remove entries whose translations are intentionally deferred. Ensure no referenced Polish localization value remains identical to its English source.DashWallet/pt.lproj/Localizable.strings-13-24 (1)
13-24: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the newly added Portuguese strings before shipping.
Many new user-facing values are still English, including DEX errors, swap progress states, Explore Dash labels, AboutDash text, and CrowdNode messages. This leaves Portuguese users with broad English fallbacks across the new flows. Translate these values while preserving all format placeholders and product names.
Also applies to: 49-51, 226-228, 250-252, 319-321, 422-424, 470-472, 497-499, 515-517, 595-596, 613-624, 649-651, 786-788, 944-949, 959-961, 1088-1090, 1130-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1488, 1535-1537, 1599-1601, 1735-1737, 1792-1794, 1856-1864, 1880-1885, 1931-1933, 2108-2110, 2213-2215, 2276-2278, 2348-2349, 2454-2456, 2484-2492, 2527-2529, 2641-2643, 2692-2694, 2708-2720, 2734-2741, 2790-2795, 2823-2825, 2838-2852, 2880-2897, 2919-2927, 2993-2995, 3038-3040, 3056-3058, 3218-3223, 3284-3295, 3367-3369, 3456-3458, 3525-3526, 3540-3542, 3627-3638
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/pt.lproj/Localizable.strings` around lines 13 - 24, Translate every newly added English user-facing value in the Portuguese Localizable.strings entries, including DEX, swap, Explore Dash, AboutDash, and CrowdNode messages. Preserve all format placeholders exactly and leave product names unchanged; apply the translations consistently across the referenced entries.DashWallet/ro.lproj/Localizable.strings-13-14 (1)
13-14: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winFix the
ro.lproj/Localizable.stringsencoding before merging.The file is not valid UTF-16LE
.stringscontent: it lacks a UTF-16LE BOM, and decoding it as UTF-16LE produces corrupted/mojibaked runtime strings instead of valid localization. Commit the file with proper UTF-16LELE/Xcode export encoding, or regenerate it from the localization catalog.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/ro.lproj/Localizable.strings` around lines 13 - 14, Re-encode the Romanian Localizable.strings resource as valid UTF-16LE Xcode .strings content, including the required BOM, while preserving all existing keys and translations; alternatively regenerate it from the localization catalog using the proper export encoding.Source: Coding guidelines
DashWallet/ru.lproj/Localizable.strings-13-14 (1)
13-14: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the new user-facing strings in the Russian catalog.
Many newly added DEX, SwapKit, and UI messages use the English source text as their Russian value. This causes Russian users to see English throughout swap flows, including errors, confirmations, and status messages. Replace these values with Russian translations while preserving all
%@,%d, and%ldplaceholders; apply the same fix to the other newly added English-valued entries in this file.Also applies to: 226-227, 422-423, 649-650, 1856-1863, 2484-2491, 2886-2896, 3284-3294, 3627-3637
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/ru.lproj/Localizable.strings` around lines 13 - 14, Translate the newly added English-valued DEX, SwapKit, and UI entries in the Russian Localizable.strings catalog, including the entries identified by the listed ranges. Preserve every %@, %d, and %ld placeholder exactly while replacing each English value with accurate Russian text; use the existing localization keys and do not alter unrelated translations.DashWallet/sk.lproj/Localizable.strings-13-24 (1)
13-24: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftTranslate the new user-facing strings for Slovak.
These additions leave many DEX, payment, status, and error messages in English in
sk.lproj. Translate the values while retaining only product/protocol names such as Dash DEX, SwapKit, NEAR, URI, and DashSync.Also applies to: 49-51, 226-228, 250-252, 319-321, 422-424, 470-472, 497-499, 515-517, 595-596, 613-624, 649-651, 786-788, 944-949, 959-961, 1088-1090, 1130-1132, 1295-1297, 1352-1354, 1427-1429, 1487-1488, 1535-1537, 1599-1601, 1723-1725, 1735-1737, 1792-1794, 1856-1864, 1880-1882, 1931-1933, 2213-2215, 2276-2278, 2348-2350, 2454-2456, 2484-2486, 2490-2492, 2527-2529, 2641-2643, 2692-2694, 2708-2720, 2734-2741, 2790-2795, 2823-2825, 2838-2840, 2844-2845, 2850-2852, 2880-2882, 2886-2896, 2919-2921, 2925-2926, 2993-2995, 3038-3040, 3056-3058, 3218-3222, 3284-3294, 3367-3368, 3456-3458, 3525-3526, 3540-3542, 3627-3637
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/sk.lproj/Localizable.strings` around lines 13 - 24, Translate every newly added user-facing English value in sk.lproj/Localizable.strings into Slovak, including the listed DEX, payment, status, and error messages. Preserve format specifiers and retain product/protocol names such as Dash DEX, SwapKit, NEAR, URI, and DashSync unchanged; update only the localized values, not the keys.
🧹 Nitpick comments (1)
DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AtmListViewController.swift (1)
93-97: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAlign the multiline arguments to satisfy SwiftLint.
SwiftLint reports
vertical_parameter_alignment_on_callat Line [94]. Reformat this call with one argument per line or vertically aligned arguments.Suggested formatting
-return String.localizedStringWithFormat(NSLocalizedString("%d ATM(s) in %@", comment: "`#bc-ignore`!"), items.count, - ExploreDash.distanceFormatter - .string(from: Measurement(value: model.currentRadius, unit: UnitLength.meters))) +return String.localizedStringWithFormat( + NSLocalizedString("%d ATM(s) in %@", comment: "`#bc-ignore`!"), + items.count, + ExploreDash.distanceFormatter + .string(from: Measurement(value: model.currentRadius, unit: UnitLength.meters)) +)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@DashWallet/Sources/UI/Explore` Dash/Merchants & ATMs/List/AtmListViewController.swift around lines 93 - 97, Reformat the String.localizedStringWithFormat calls in the ATM list subtitle logic so each argument is on its own line with consistent vertical alignment, resolving SwiftLint’s vertical_parameter_alignment_on_call warning while preserving the existing localization and values.Source: Linters/SAST tools
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 684223da-389a-4490-9e04-971a1b713a49
📒 Files selected for processing (49)
.bartycrouch.tomlDashWallet.xcodeproj/project.pbxprojDashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AtmListViewController.swiftDashWallet/Sources/UI/Menu/Tools/ExtendedKeys/ExtendedPublicKeysView.swiftDashWallet/Sources/UI/SwiftUI Components/NavigationBar.swiftDashWallet/ar.lproj/Localizable.stringsDashWallet/bg.lproj/Localizable.stringsDashWallet/ca.lproj/Localizable.stringsDashWallet/cs.lproj/Localizable.stringsDashWallet/da.lproj/Localizable.stringsDashWallet/de.lproj/Localizable.stringsDashWallet/el.lproj/Localizable.stringsDashWallet/en.lproj/Localizable.stringsDashWallet/en.lproj/Localizable.stringsdictDashWallet/eo.lproj/Localizable.stringsDashWallet/es.lproj/Localizable.stringsDashWallet/et.lproj/Localizable.stringsDashWallet/fa.lproj/Localizable.stringsDashWallet/fi.lproj/Localizable.stringsDashWallet/fil.lproj/Localizable.stringsDashWallet/fr.lproj/Localizable.stringsDashWallet/hr.lproj/Localizable.stringsDashWallet/hu.lproj/Localizable.stringsDashWallet/id.lproj/Localizable.stringsDashWallet/it.lproj/Localizable.stringsDashWallet/ja.lproj/Localizable.stringsDashWallet/ko.lproj/Localizable.stringsDashWallet/mk.lproj/Localizable.stringsDashWallet/ms.lproj/Localizable.stringsDashWallet/nb.lproj/Localizable.stringsDashWallet/nl.lproj/Localizable.stringsDashWallet/pl.lproj/Localizable.stringsDashWallet/pt.lproj/Localizable.stringsDashWallet/ro.lproj/Localizable.stringsDashWallet/ru.lproj/Localizable.stringsDashWallet/sk.lproj/Localizable.stringsDashWallet/sl.lproj/Localizable.stringsDashWallet/sl_SI.lproj/Localizable.stringsDashWallet/sq.lproj/Localizable.stringsDashWallet/sr.lproj/Localizable.stringsDashWallet/sv.lproj/Localizable.stringsDashWallet/th.lproj/Localizable.stringsDashWallet/tr.lproj/Localizable.stringsDashWallet/uk.lproj/Localizable.stringsDashWallet/vi.lproj/Localizable.stringsDashWallet/zh-Hans.lproj/Localizable.stringsDashWallet/zh-Hant-TW.lproj/Localizable.stringsDashWallet/zh.lproj/Localizable.stringsDashWallet/zh_TW.lproj/Localizable.strings
The previous commit added `%d ATM(s) in %@` to en.lproj only, so every other language still fell back to the raw key. Plural keys in this project live in all locale catalogs — `%d merchant(s) in %@` sits in 41 of them, holding the English text where no translation exists yet — so add the ATM entry the same way and let Transifex fill it in. zh-Hans and zh-Hant-TW are left alone: they carry only 2 of the 5 plural keys and lack the merchant entry too, so they need a separate look. Also reformat the two call sites onto one argument per line. Widening the call to String.localizedStringWithFormat had pushed the continuation lines out of alignment, adding vertical_parameter_alignment_on_call and line_length warnings that were not there before; SwiftLint output for this file now matches master. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@DashWallet/ar.lproj/Localizable.stringsdict`:
- Around line 21-36: Translate the one and other values for the “%d ATM(s) in
%@” plural entry in each affected catalog:
DashWallet/ar.lproj/Localizable.stringsdict lines 21-36,
DashWallet/bg.lproj/Localizable.stringsdict lines 21-36,
DashWallet/ca.lproj/Localizable.stringsdict lines 21-36,
DashWallet/cs.lproj/Localizable.stringsdict lines 25-40,
DashWallet/pl.lproj/Localizable.stringsdict lines 25-40,
DashWallet/pt.lproj/Localizable.stringsdict lines 23-38,
DashWallet/ro.lproj/Localizable.stringsdict lines 21-36,
DashWallet/ru.lproj/Localizable.stringsdict lines 25-40,
DashWallet/sk.lproj/Localizable.stringsdict lines 25-40, and
DashWallet/sl.lproj/Localizable.stringsdict lines 21-36. Preserve the existing
NSStringPluralRuleType structure and format placeholders while supplying natural
translations for each locale.
In `@DashWallet/cs.lproj/Localizable.stringsdict`:
- Around line 25-40: Update the “%d ATM(s) in %@” plural entry in
DashWallet/cs.lproj/Localizable.stringsdict (lines 25-40),
DashWallet/pl.lproj/Localizable.stringsdict (lines 25-40),
DashWallet/ru.lproj/Localizable.stringsdict (lines 25-40), and
DashWallet/sk.lproj/Localizable.stringsdict (lines 25-40) by adding the
locale-appropriate few and many categories; update the same entry in
DashWallet/pt.lproj/Localizable.stringsdict (lines 23-38) by adding many.
Preserve the existing one and other forms and match the wording/style of nearby
pluralized ATM strings in each catalog.
In `@DashWallet/da.lproj/Localizable.stringsdict`:
- Around line 21-36: Translate the ATM plural strings in the `atms` entries
across all listed catalogs: DashWallet/da.lproj/Localizable.stringsdict lines
21-36 (Danish preposition), DashWallet/el.lproj/Localizable.stringsdict lines
21-36 (both Greek forms), DashWallet/eo.lproj/Localizable.stringsdict lines
21-36 (both Esperanto forms), DashWallet/es.lproj/Localizable.stringsdict lines
23-38 (both Spanish forms), DashWallet/sl_SI.lproj/Localizable.stringsdict lines
21-36 (Slovenian preposition), DashWallet/sq.lproj/Localizable.stringsdict lines
21-36 (both Albanian forms), DashWallet/sr.lproj/Localizable.stringsdict lines
21-36 (Serbian preposition), DashWallet/sv.lproj/Localizable.stringsdict lines
21-36 (Swedish preposition), and DashWallet/th.lproj/Localizable.stringsdict
lines 19-34 (both Thai forms); preserve the existing plural keys and format
placeholders.
In `@DashWallet/et.lproj/Localizable.stringsdict`:
- Around line 21-36: Replace the English ATM plural values under the “%d ATM(s)
in %@” entry with locale-specific translations, preserving the %d and %@
placeholders and each locale’s plural behavior. Apply this in
DashWallet/et.lproj/Localizable.stringsdict lines 21-36,
DashWallet/fa.lproj/Localizable.stringsdict lines 21-36,
DashWallet/fi.lproj/Localizable.stringsdict lines 21-36,
DashWallet/fil.lproj/Localizable.stringsdict lines 21-36,
DashWallet/fr.lproj/Localizable.stringsdict lines 23-38,
DashWallet/tr.lproj/Localizable.stringsdict lines 21-36,
DashWallet/uk.lproj/Localizable.stringsdict lines 25-40,
DashWallet/vi.lproj/Localizable.stringsdict lines 19-34,
DashWallet/zh.lproj/Localizable.stringsdict lines 19-34, and
DashWallet/zh_TW.lproj/Localizable.stringsdict lines 19-34.
In `@DashWallet/hr.lproj/Localizable.stringsdict`:
- Around line 21-36: Replace the English one/other ATM templates in the
pluralization entry with locale-appropriate translations at
DashWallet/hr.lproj/Localizable.stringsdict lines 21-36,
DashWallet/hu.lproj/Localizable.stringsdict lines 21-36,
DashWallet/id.lproj/Localizable.stringsdict lines 19-34,
DashWallet/it.lproj/Localizable.stringsdict lines 23-38,
DashWallet/ja.lproj/Localizable.stringsdict lines 19-34,
DashWallet/ko.lproj/Localizable.stringsdict lines 19-34,
DashWallet/mk.lproj/Localizable.stringsdict lines 21-36,
DashWallet/ms.lproj/Localizable.stringsdict lines 21-36,
DashWallet/nb.lproj/Localizable.stringsdict lines 21-36, and
DashWallet/nl.lproj/Localizable.stringsdict lines 21-36; preserve the existing
NSStringLocalizedFormatKey and pluralization structure while translating both
templates for each locale.
In `@DashWallet/uk.lproj/Localizable.stringsdict`:
- Around line 35-38: Update the atms plural entry in the Ukrainian localization
to include the existing one, few, many, and other categories, with grammatically
appropriate ATM strings for each. Preserve the localization format and verify
the categories resolve correctly for counts such as 1, 2, and 5.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 29666708-5be1-4a2c-9cdb-ca11ab877cf9
📒 Files selected for processing (41)
DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AtmListViewController.swiftDashWallet/ar.lproj/Localizable.stringsdictDashWallet/bg.lproj/Localizable.stringsdictDashWallet/ca.lproj/Localizable.stringsdictDashWallet/cs.lproj/Localizable.stringsdictDashWallet/da.lproj/Localizable.stringsdictDashWallet/de.lproj/Localizable.stringsdictDashWallet/el.lproj/Localizable.stringsdictDashWallet/eo.lproj/Localizable.stringsdictDashWallet/es.lproj/Localizable.stringsdictDashWallet/et.lproj/Localizable.stringsdictDashWallet/fa.lproj/Localizable.stringsdictDashWallet/fi.lproj/Localizable.stringsdictDashWallet/fil.lproj/Localizable.stringsdictDashWallet/fr.lproj/Localizable.stringsdictDashWallet/hr.lproj/Localizable.stringsdictDashWallet/hu.lproj/Localizable.stringsdictDashWallet/id.lproj/Localizable.stringsdictDashWallet/it.lproj/Localizable.stringsdictDashWallet/ja.lproj/Localizable.stringsdictDashWallet/ko.lproj/Localizable.stringsdictDashWallet/mk.lproj/Localizable.stringsdictDashWallet/ms.lproj/Localizable.stringsdictDashWallet/nb.lproj/Localizable.stringsdictDashWallet/nl.lproj/Localizable.stringsdictDashWallet/pl.lproj/Localizable.stringsdictDashWallet/pt.lproj/Localizable.stringsdictDashWallet/ro.lproj/Localizable.stringsdictDashWallet/ru.lproj/Localizable.stringsdictDashWallet/sk.lproj/Localizable.stringsdictDashWallet/sl.lproj/Localizable.stringsdictDashWallet/sl_SI.lproj/Localizable.stringsdictDashWallet/sq.lproj/Localizable.stringsdictDashWallet/sr.lproj/Localizable.stringsdictDashWallet/sv.lproj/Localizable.stringsdictDashWallet/th.lproj/Localizable.stringsdictDashWallet/tr.lproj/Localizable.stringsdictDashWallet/uk.lproj/Localizable.stringsdictDashWallet/vi.lproj/Localizable.stringsdictDashWallet/zh.lproj/Localizable.stringsdictDashWallet/zh_TW.lproj/Localizable.stringsdict
🚧 Files skipped from review as they are similar to previous changes (1)
- DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AtmListViewController.swift
The ATM stringsdict entry was added with en's one/other everywhere, but the plural rules differ per language. Where the neighbouring "%d merchant(s) in %@" already carries more categories — many for es/fr/it/pt, few+many for pl/ru/sk/uk — an intermediate count (2 or 5 in Ukrainian, say) fell through to `other`, which is the wrong grammatical form. And the CLDR "other only" languages (id/ja/ko/th/zh/zh_TW) carried a spurious `one` their rules never select. Align each ATM entry's category set to the merchant entry in the same catalog, so the plural coverage matches what the app already ships. The values stay the English placeholders Transifex fills in on the next pull; this only fixes which plural buckets exist. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
When a transaction is the DASH leg of a DashDEX swap, the details sheet shows a second explorer card below "View in Block Explorer" — "View in Maya Explorer" or "View in NEAR Explorer" depending on the order's provider. It's its own card, styled identically to the Dash one; ordinary transactions are unchanged. Provider classification mirrors SwapTrackingService.trackingRoute, and the two explorers key on different identifiers (Maya on the tx hash, NEAR on the deposit address). The card is hidden until that identifier is available, so no dead links. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Issue being fixed or feature implemented
An audit of how strings reach
Localizable.stringsturned up four separate problems, plus the release version bump.The catalog had drifted from the code.
bartycrouch updateruns on every build, but its output was never committed: 81 keys already referenced byNSLocalizedStringwere missing from the catalog (most of the DEX/Swap screens —Dash DEX,Refund address,Quote expires,Swapping— plusApp version,Mining Reward,Withdraw funds), and 30 keys no longer had a call site, mostly leftovers from the Maya → Swap rename.BartyCrouch was reading a second copy of the project. It walks the file system rather than git, so
.claude/worktrees— full project copies — were being scanned, importing keys from whatever branch was checked out there. Three such keys (%@ refund address,Missing swap details,Resolving deposit address…) had no call site in this branch at all. It was also rewriting the.stringsfiles inside those worktrees.Two strings were never localized.
%d ATM(s) in %@was in neitherLocalizable.stringsnorLocalizable.stringsdict, so the ATM filter cell read "5 ATM(s) in 20 km" in every language; its%d merchant(s) in %@neighbour was already handled. And the extended public keys screen title was a bare SwiftUI literal, which BartyCrouch does not extract.NavBarClosedrew nothing. It referencedtoolbar-close, which exists in no asset catalog, so the close button was invisible on four sheets (CSV export, private key import, extended public keys, ZenLedger info) and the simulator loggedNo image named 'toolbar-close' found in asset catalog.What was done?
.bartycrouch.toml— addedsubpathsToIgnoreincluding.claude. Note this key replaces BartyCrouch's default list rather than extending it, so the defaults (.git,build,carthage,docs,pods) are repeated; without them the tool would walkPods/.en.%d ATM(s) in %@plural entry and switched both call sites toString.localizedStringWithFormat— plainString(format:)never expands the%#@atms@placeholder a stringsdict entry resolves to."Extended public keys"key instead of adding a near duplicate, so both screens share one title and its translations.NavBarClosenow uses DashUIKit'snavigationbar-close. Only the image changed — the 44pt tap area and 34pt stroked circle are untouched, sinceNavigationBarElement.closewould have brought its own chrome.MARKETING_VERSIONand 28CURRENT_PROJECT_VERSIONentries.How Has This Been Tested?
xcodebuild -scheme dashwalletsucceeds. Verified against the built.apprather than the source:v8.7.0 (5)indashwallet.app,TodayExtension.appex,WatchApp.appandWatchApp Extension.appex%d ATM(s) in %@is present in the bundledLocalizable.stringsdictwith correctone/otherformsnavigationbar-closeresolves fromDashUIKit_DashUIKit.bundle, template-rendered so it follows.primaryTextlintnow covers 86 strings files instead of 172, i.e. exactly one setEach of the 30 removed keys was checked against the tree first — none appears as an actual
NSLocalizedStringcall. Seven looked live at first but were substring matches inside longer strings (ClearinClear address,RewardinMining Reward).Breaking Changes
None. One visible change: the extended public keys title reads
Extended public keysinstead ofExtended Public Keysin English, matching the older screen.Checklist:
For repository code-owners and collaborators only
Summary by CodeRabbit