hoangsonww / hoangsonww/Diffuse-Native-Apps

Localise the five apps — every user-facing string is currently hardcoded English

Open
#9 0 comments 0 reactions 1 assignee Claimed by @hoangsonww View on GitHub
accessibility bug documentation enhancement good first issue help wanted question
Dominant language
Swift
Stars
2
Forks
0
Avg merge
1h 53m
Merged PRs (30d)
14

Description

## Motivation

There is not one `.strings`, `.stringsdict`, or `.xcstrings` file anywhere in `Packages/` or `Apps/`, and `Android/app/src/main/res/` has only a default `values/strings.xml`. Every label, severity name, empty state, privacy classification, and retention description is an English literal compiled into the binary.

Diffuse already does the hard part of internationalisation correctly: dates and byte counts go through `Date.formatted` and `Measurement`, which respect the user's locale. The Android app even collects locale as an observation. So a user in France sees correctly formatted dates surrounded entirely by English chrome — which is a worse impression than not localising at all, because it looks unfinished rather than deliberate.

## Proposed Solution

Adopt String Catalogs (`.xcstrings`) in `DiffuseUI` and each Apple app target, and migrate Android to per-locale `values-/strings.xml`. The mechanical work is extracting literals; the interesting work is the schema-driven surfaces, where `displayName`, `summary`, and severity/classification labels travel *inside the snapshot* and must stay stable identifiers on the wire while being presented through a localised lookup.

That distinction matters for correctness: a snapshot captured in one locale and opened in another must render in the reader's language, so the persisted value has to remain the stable key, never the translated string.

## Acceptance Criteria

- [ ] All user-facing strings in `DiffuseUI` and the four Apple targets move into String Catalogs
- [ ] Android strings move into `values/strings.xml` with at least one additional locale wired up
- [ ] Schema-carried identifiers stay untranslated on disk; only presentation is localised
- [ ] A snapshot captured under one locale renders correctly under another — covered by a test
- [ ] Pseudolocalisation run to catch truncation, especially on watchOS
- [ ] RTL layout verified; Android already sets `supportsRtl="true"`

## Additional Context

Related surfaces: `Packages/DiffuseUI/Sources/DiffuseUI/`, `Android/app/src/main/res/values/strings.xml`, `Documentation/SnapshotSchema.md`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.