fork: add README-translation.md explaining the fork
A short readme so anyone stumbling on this repo understands: - what it is (Fossify Messages with on-the-fly translation via offline-translator AIDL) - that it's an experiment, not a maintained project — no commitment to keep it up to date or ship fixes - how to use it (install offline-translator first, opt in per source language) - the dependency story (dev.davidv.translator, bundled ML Kit language identification, transitional) - what's intentionally different from upstream Fossify (package id, no default-SMS prompt, sideload warning silenced) - build instructions Includes five screenshots in docs/: - conversation-list.jpg — translated snippets in the main list - thread-translated.jpg — Korean Amber Alert auto-translated to English, with the translate-icon toggle visible and numbers/URLs preserved verbatim - thread-original.jpg — same thread flipped back to the original - settings.jpg — Translation settings UI - cab-translate.jpg — long-press Translate item Fork-only — separate from the upstream-PR-candidate commits. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
06ac901366
commit
80fe124d12
6 changed files with 141 additions and 0 deletions
141
README-translation.md
Normal file
141
README-translation.md
Normal file
|
|
@ -0,0 +1,141 @@
|
||||||
|
# SMS translation fork of Fossify Messages
|
||||||
|
|
||||||
|
A small fork of [Fossify Messages](https://github.com/FossifyOrg/Messages) that
|
||||||
|
auto-translates received SMS / MMS on-the-fly, on-device, with no cloud and
|
||||||
|
no API keys.
|
||||||
|
|
||||||
|
## Why this might be interesting
|
||||||
|
|
||||||
|
If you live somewhere where you get important SMS in a language you don't
|
||||||
|
read fluently (bank alerts, delivery notifications, OTPs, government
|
||||||
|
messages…), this lets you keep using a clean FOSS messaging app and still
|
||||||
|
understand them.
|
||||||
|
|
||||||
|
The translation itself is sub-second per message, runs entirely on-device
|
||||||
|
(Mozilla Bergamot / Marian NMT models), and preserves numbers and URLs
|
||||||
|
verbatim — so OTP codes, account numbers, tracking links, etc. don't get
|
||||||
|
mangled.
|
||||||
|
|
||||||
|
- **Auto-translate**: each received bubble swaps to its translation as it
|
||||||
|
scrolls into view; conversation-list snippets do the same.
|
||||||
|
- **Per-language opt-in**: you choose which source languages get auto-
|
||||||
|
translated (e.g. Korean → English) and which are left alone (e.g.
|
||||||
|
Swedish, German, anything else you already read).
|
||||||
|
- **Tap to flip**: a small icon next to each translated bubble toggles it
|
||||||
|
back to the original.
|
||||||
|
- **Manual translate**: long-press a bubble → ⋮ → **Translate** to force a
|
||||||
|
one-off translation even for languages not on your auto-translate list.
|
||||||
|
- **Copy / Share / Select** capture what you see on screen — if the bubble
|
||||||
|
is showing English, your clipboard gets English.
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
| Conversation list | Thread (translated) | Thread (original toggled back) |
|
||||||
|
|---|---|---|
|
||||||
|
|  |  |  |
|
||||||
|
| Snippets are translated as you scroll, opted-in source languages only. | Auto-translate fires on view; the small icon below each bubble is the toggle. Numbers (145cm, 40kg, 112) and URLs (vo.la/1Pa9m) survive verbatim. | Tap the icon to flip a bubble back to its original. Tap again to flip back. |
|
||||||
|
|
||||||
|
| Translation settings | Manual translate (CAB ⋮) |
|
||||||
|
|---|---|
|
||||||
|
|  |  |
|
||||||
|
| Pick which source languages auto-translate and your target. Off by default. | Long-press → ⋮ → Translate to force a one-off translation for non-allowlisted languages. |
|
||||||
|
|
||||||
|
## Status — please read
|
||||||
|
|
||||||
|
This is an **experiment**, not a maintained project.
|
||||||
|
|
||||||
|
- No commitment to keep it up to date with upstream Fossify or with Android.
|
||||||
|
- No commitment to fix bugs or ship security updates.
|
||||||
|
- No releases on F-Droid or Play. Built and signed locally by the author.
|
||||||
|
- I'd like to propose the core feature upstream to Fossify Messages
|
||||||
|
eventually; if they accept it, this fork's reason to exist mostly goes
|
||||||
|
away. If they don't, I'll probably keep using my own build, but you
|
||||||
|
should not depend on it.
|
||||||
|
|
||||||
|
If you want a clean, maintained build of Fossify Messages, install the
|
||||||
|
official one from F-Droid. This fork is for tinkerers and for people who
|
||||||
|
specifically want the translation behavior described above.
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
1. **`dev.davidv.translator`** — the [offline-translator](https://github.com/DavidVentura/offline-translator)
|
||||||
|
app on F-Droid. This is the engine. Install it, open it, download the
|
||||||
|
language pack(s) for the languages you want to translate (e.g. Korean,
|
||||||
|
the source side, plus the target language pack if it asks). It runs
|
||||||
|
Mozilla's Bergamot translation models on-device.
|
||||||
|
|
||||||
|
Without this app installed, the translation feature silently does
|
||||||
|
nothing — the messaging app still works as a plain SMS client.
|
||||||
|
|
||||||
|
2. **ML Kit Language Identification** — bundled inside this APK
|
||||||
|
(`com.google.mlkit:language-id`, Apache-2.0). Used only for detecting
|
||||||
|
what language an incoming SMS is in, so we can decide whether to
|
||||||
|
translate it. About 4 MB of model data baked in. This is transitional:
|
||||||
|
if davidv accepts a small AIDL addition upstream
|
||||||
|
([offline-translator issue](https://github.com/DavidVentura/offline-translator))
|
||||||
|
we'll drop ML Kit and use his detection directly.
|
||||||
|
|
||||||
|
3. **Android 8.0+** (same as upstream Fossify).
|
||||||
|
|
||||||
|
## How to use
|
||||||
|
|
||||||
|
1. Install **offline-translator** from F-Droid. Open it and download the
|
||||||
|
language packs for the source language(s) you want translated (e.g.
|
||||||
|
Korean) and confirm your target language pack is installed (usually
|
||||||
|
English).
|
||||||
|
2. Install this fork's APK (build it yourself — see below).
|
||||||
|
3. Open this app → top-right ⋮ → **Settings** → **Translation**:
|
||||||
|
- Turn on **Translate received messages**.
|
||||||
|
- Pick your **Translate into** target (defaults to your device language).
|
||||||
|
- Check the **Auto-translate from** languages you want auto-translated.
|
||||||
|
4. Open any conversation. Bubbles in opted-in languages translate as you
|
||||||
|
scroll. Tap the small translate icon below a bubble to flip between
|
||||||
|
original and translation.
|
||||||
|
|
||||||
|
## How it differs from upstream Fossify Messages
|
||||||
|
|
||||||
|
The fork-only changes (not for upstream):
|
||||||
|
|
||||||
|
- **Different package ID** (`net.jeena.smstranslate`) so it installs
|
||||||
|
alongside any official Fossify Messages.
|
||||||
|
- **No "make me default SMS app" prompt** on first launch. You can still
|
||||||
|
make it the default via Android Settings → Default apps → SMS app if you
|
||||||
|
want — this just doesn't pester you about it.
|
||||||
|
- **Sideload warning suppressed**. Fossify's built-in
|
||||||
|
"this APK looks corrupted, go get the official one" dialog is silenced
|
||||||
|
because of course this APK isn't the official one — it's a fork.
|
||||||
|
|
||||||
|
The translation feature itself lives in a separate `:translate` Gradle
|
||||||
|
module and is structured so it can be cherry-picked onto upstream cleanly
|
||||||
|
as a possible PR.
|
||||||
|
|
||||||
|
## Building from source
|
||||||
|
|
||||||
|
You need JDK 17 and the Android SDK.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export JAVA_HOME=/path/to/jdk17
|
||||||
|
export ANDROID_HOME=/path/to/android-sdk
|
||||||
|
git clone <this repo>
|
||||||
|
cd sms-translate
|
||||||
|
./gradlew :app:assembleFossDebug
|
||||||
|
# APK at app/build/outputs/apk/foss/debug/messages-*-foss-debug.apk
|
||||||
|
adb install -r app/build/outputs/apk/foss/debug/messages-*-foss-debug.apk
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want a release build, set up a `keystore.properties` per upstream
|
||||||
|
Fossify's instructions and `./gradlew :app:assembleFossRelease`.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Same as upstream Fossify Messages: **GPL-3.0**. The AIDL stubs from
|
||||||
|
offline-translator are also GPL-3.0. ML Kit is Apache-2.0.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
- [Fossify Messages](https://github.com/FossifyOrg/Messages) — the
|
||||||
|
excellent FOSS messaging app this is a fork of.
|
||||||
|
- [David Ventura](https://github.com/DavidVentura) — author of
|
||||||
|
[offline-translator](https://github.com/DavidVentura/offline-translator),
|
||||||
|
which does all the actual translation.
|
||||||
|
- [Mozilla Bergamot](https://browser.mt/) — the underlying NMT models.
|
||||||
BIN
docs/cab-translate.jpg
Normal file
BIN
docs/cab-translate.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 86 KiB |
BIN
docs/conversation-list.jpg
Normal file
BIN
docs/conversation-list.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 87 KiB |
BIN
docs/settings.jpg
Normal file
BIN
docs/settings.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
BIN
docs/thread-original.jpg
Normal file
BIN
docs/thread-original.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 100 KiB |
BIN
docs/thread-translated.jpg
Normal file
BIN
docs/thread-translated.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 108 KiB |
Loading…
Add table
Add a link
Reference in a new issue