Use Firefox Translation Models for on-device translation on Android
  • Kotlin 73.3%
  • JavaScript 9.8%
  • Python 8.5%
  • Rust 7.8%
  • Shell 0.3%
  • Other 0.1%
Find a file
2026-06-11 10:19:17 +02:00
.github/workflows try to reuse docker cache 2026-05-01 23:12:39 +02:00
.idea fix bindings 2026-04-21 17:19:03 +02:00
app Bump translator crate 2026-06-11 10:18:31 +02:00
catalog_sources add de-glados voice 2026-06-01 18:15:52 +02:00
data_sources redo index generation to point at a mirror 2026-04-13 00:12:59 +02:00
fastlane/metadata/android/en-US update release notes 2026-06-11 10:19:17 +02:00
gradle move camera view to live format 2026-05-15 11:19:41 +02:00
screenshots update readme 2026-05-23 20:13:05 +02:00
third_party PoC TTS support (#127) 2026-04-09 17:39:22 +02:00
website add basic website 2025-09-20 13:18:35 +02:00
.dockerignore Implement dictionary support (#51) 2025-09-19 11:40:41 +02:00
.editorconfig lint 2025-08-19 17:52:26 +02:00
.gitattributes move deps to other crate 2026-04-15 19:39:44 +02:00
.gitignore Expose app as system TTS 2026-05-09 03:00:01 +02:00
.gitmodules move to bergamot rs bindings 2026-04-14 18:01:58 +02:00
.pre-commit-config.yaml lint 2025-08-19 17:52:26 +02:00
add_license.sh add gpl license 2025-07-26 18:38:08 +02:00
build.gradle.kts lint 2025-08-19 17:52:26 +02:00
build.sh Automatically derive versionCode per arch (#125) 2026-04-04 09:17:51 +02:00
catalog_adblock.py Support for translating shared URLs (#148) 2026-04-27 00:27:39 +02:00
catalog_base.py Improve OCR quality 2026-05-13 01:10:17 +02:00
catalog_doc_detect.py refactor index to support doc recognition & multi engine 2026-05-11 22:44:11 +02:00
catalog_mirror.py update catalog for kokoro mnn 2026-05-13 23:42:05 +02:00
catalog_ppocr.py cleanup debug code 2026-05-21 11:18:05 +02:00
catalog_tts.py add de-glados voice 2026-06-01 18:15:52 +02:00
catalog_tts_samples.py Expose app as system TTS 2026-05-09 03:00:01 +02:00
catalog_upstream.py Improve OCR quality 2026-05-13 01:10:17 +02:00
Dockerfile New r28 version, again 2026-04-23 22:42:07 +02:00
download.py pre-calculate language sizes 2025-08-26 16:08:48 +02:00
download_bucket.py Support for translating shared URLs (#148) 2026-04-27 00:27:39 +02:00
extract_ppocr_charsets.py add auto source 2026-05-15 22:58:44 +02:00
generate_index.py refactor index to support doc recognition & multi engine 2026-05-11 22:44:11 +02:00
gradle.properties initial commit 2025-01-08 23:28:29 +01:00
gradlew initial commit 2025-01-08 23:28:29 +01:00
gradlew.bat initial commit 2025-01-08 23:28:29 +01:00
LICENSE Add license 2025-07-26 15:07:38 +02:00
Makefile noisy println rule 2026-04-05 19:35:14 +02:00
new_voices.md add some docs to remember how to add new voices 2026-06-02 10:41:16 +02:00
OFFLINE_SETUP.md Add offline setup instructions 2025-08-25 20:00:24 +02:00
README.md Update README.md 2026-05-23 20:15:03 +02:00
REFACTOR_OVERLAY_PIPELINE.md screen translate: always do OCR 2026-06-09 11:07:38 +02:00
regen_index.sh kick bad voices 2026-04-19 00:12:48 +02:00
settings.gradle.kts move to bergamot rs bindings 2026-04-14 18:01:58 +02:00
sign-apk.sh build x86 2026-04-28 20:37:09 +02:00
zapstore.yaml add zapstore metadata 2026-06-04 20:16:37 +02:00

Translator

An Android translator app that performs text, PDF/ODT documents and image translation completely offline using on-device models.

Supports automatic language detection and transliteration for non-latin scripts. There's also a built-in word dictionary.

Get it on F-Droid

This project is hosted on GitHub and mirrored to Codeberg.

How It Works

Complete offline translation - download language packs once, translate forever without internet.

Language packs contain the full translation models, translation happens on your device, no requests are sent to external servers.

Screenshots

https://github.com/user-attachments/assets/bf774a4f-3d58-49b7-b4e2-cb30eb395b39

Tech

Features & How to Use

Feature How to trigger
Translate text Share text from any app, or type directly
Translate text (mini popup) Long-press text on any app → tap "Translate" in the copy/share bar
Translate a URL Share a link from any app
Translate an image Share an image from any app
Translate a document Open the documents tab inside the app
Dictionary lookup Long-press a word inside the app
Change TTS voice / speed Long-press the play button

For developers

This app exposes an API (see ITranslationService.aidl) that other apps can use to request translations.

Manual offline setup

If you want to use this app on a device with no internet access, you can put the language files on Documents/dev.davidv.translator. Check OFFLINE_SETUP.md for details.

Verification info

SHA-256 hash of signing certificate: 2B:38:06:E7:45:D8:09:01:8A:51:BE:58:D0:63:5F:FC:74:CC:97:33:43:94:07:AB:1E:D0:42:4A:4D:B3:E1:FB

Funding

This project was funded through the NGI Mobifree Fund, a fund established by NLnet.


If you want, you can help pay for the CDN costs:

Donate using Liberapay

Building

bash build.sh

will trigger a build in a docker container, matching the CI environment.

Releasing

  • Bump app/build.gradle.kts versionName and versionCode
  • Create a changelog in fastlane/metadata/android/en-US/changelogs as ${versionCode*10+1}.txt (and +2)
  • Build: bash build.sh
  • Sign: bash sign-apk.sh keystore.jks keystorepass pass alias
  • Create a tag that is v${versionName} (eg: v0.1.0)
  • Create a Github release named v${versionName} (eg: v0.1.0)
    • Upload both signed APKs to the release
    • gh release create --prerelease v0.4.0-rc1 -F fastlane/metadata/android/en-US/changelogs/XX1.txt signed/translator-arm64-0.4.0.apk signed/translator-armv7-0.4.0.apk

Each ABI gets a unique versionCode: versionCode * 10 + abiOffset (armv7=1, arm64=2, x86=3, x86_64=4).

Signing APK

bash sign-apk.sh keystore.jks keystorepass pass alias

will sign the APKs built by build.sh and place the signed copies in signed/translator-{arm64,armv7}-${version}.apk