Repository navigation
Conversation
…-i18n # Conflicts: # native/Package.swift # native/Sources/BrewBrowserKit/AppModel.swift # native/Sources/BrewBrowserKit/ContentView.swift # native/build-app.sh # src/lib/components/Library.svelte # src/lib/components/PackageDetail.svelte # src/lib/components/ResizeHandle.svelte # src/lib/components/Sidebar.svelte # src/lib/stores/ui.svelte.ts
|
Fresh installed-build QA pass after syncing to
No maintainer comments/reviews were present when I checked; PR is still mergeable from GitHub's perspective. |
|
Thanks for this, and apologies it's sat a while — it's a substantial piece of work and I didn't want to give it a superficial review. The design is the right one for this project: a dependency-free message layer ( Plan: this is queued for the 0.8.0 cycle, not 0.7.3. Two reasons, neither about the quality of the work. First, adding a localization layer is a standing commitment rather than a one-off merge — from that point on, every new string in every PR needs its Second, 0.7.3 is a security release. What the PR needs when we pick it up: No rush on that — there's no point rebasing until we're actually in the 0.8.0 window, since One thing that would help in the meantime, if you're interested: a short note in the PR description on how you'd want new strings handled going forward — whether contributors add the |
Summary
This PR adds a lightweight Russian localization foundation for Brew Browser across both shipped shells: the Tauri/Svelte/Rust app and the native SwiftUI app. It is updated on upstream
mainthroughv0.7.1/ native0.3.1, including the new Bundles feature.The goal is not only Russian UI text, but a maintainable path for additional languages without pulling in a heavy i18n dependency.
What changed
src/lib/i18n/en.ts,src/lib/i18n/ru.ts,src/lib/i18n/messages.tsL10nfacade plusLocalizable.strings/Localizable.xcstringsresourcessrc-tauri/data/bundles.ru.jsonnative/Sources/BrewBrowserKit/Resources/bundles.ru.jsonbundles.<locale>.jsonoverlaybundles.<locale>.jsononly when the live host provides a matching overlay; otherwise it keeps live English recipe prose intactCONTRIBUTING-bundles.mdwith the localization overlay contract and instructions for adding future languages.agentic-web-devnow declares the third-partyanomalyco/taprequired foropencode.(user-refreshed).cask-пакет/формулаwithout changing package identifiers or brew commands.date.todaykey and translatesuser-refreshedasобновлён пользователем.How future languages can be added
src/lib/i18n/<locale>.tsand route it through the current message helpers.<locale>.lproj/Localizable.stringsandLocalizable.xcstringsresources, then include any new resources innative/Package.swift.src-tauri/data/bundles.<locale>.jsonnative/Sources/BrewBrowserKit/Resources/bundles.<locale>.jsonenrichment.<locale>.json) instead of mutating the base English catalog; search/index code should keep stable package IDs and add localized text as an additional display/search layer.Validation
Ran locally on this branch:
npm run check✅npm test✅ — 8 files / 66 testsnode scripts/validate-recipes.mjs✅ — 9/9 recipes valid, regenerated all bundledbundles.jsoncopiescargo test --manifest-path src-tauri/Cargo.toml✅ — 691 passed, 6 ignored integration testscd native && swift build✅cd native && swift test✅ — 204 Swift Testing tests passeden.ts/ru.ts: strict key and placeholder parity passed.stringsparity ✅ — English/Russian resource parity passed in both native resource roots.xcstringsstructural parse ✅git diff --check✅/Applications/Brew Browser RU.app(com.zerologic.brew-browser,0.7.1)/Applications/Brew Browser Native RU.app(com.zerologic.brew-browser-native,0.3.1)Notes:
.appbundle, then fails only at Developer ID signing because the maintainer certificateDeveloper ID Application: Michael Sitarzewski (7JQGQ7CRH8)is not present on this machine. For local visual QA I ad-hoc signed the app bundle; this does not change repo code or the maintainer release process.src. On native sources it flags the centralizedL10nhelper methods themselves; those helpers contain explicit Russian plural forms and are intentional.Maintainer-facing notes