Offline Iraqi Arabic ↔ Persian Translator
By reza pch4 · Published July 23, 2026
Fully offline Android app for bidirectional translation between Mesopotamian Arabic and Western Persian with real-time speech recognition and text-to-speech capabilities using NLLB-200 and Whisper models.
- translation
- nlp
- offline
- speech-recognition
- android
- kivy
Inside this notebook
# مترجم آفلاین عربی عراقی ↔ فارسی (متن و صدا) ## معرفی یک اپلیکیشن اندروید کاملاً آفلاین برای ترجمه دوطرفه بین **عربی عراقی (Mesopotamian Arabic)** و **فارسی (Western Persian)** با قابلیت: - **ترجمه متنی**: تایپ و ترجمه فوری - **مکالمه صوتی لحظهای**: صحبت کنید → تشخیص گفتار → ترجمه → خروجی صوتی - **کاملاً آفلاین**: مدلها روی دستگاه اجرا میشوند ## فناوریها | مؤلفه | فناوری | |--------|--------| | **موتور ترجمه** | NLLB-200-distilled-600M (Meta AI) | | **تشخیص گفتار** | Whisper tiny (OpenAI) | | **تبدیل متن به گفتار** | Android TTS داخلی | | **رابط کاربری** | Kivy (Python) | | **بستهبندی اندروید** | Buildozer + python-for-android | ## زبانهای NLLB-200 - عربی عراقی (Mesopotamian Arabic): **`acm_Arab`** - فارسی (Western Persian): **`pes_Arab`** > **نکته**: مدلهای ترجمه و تشخیص گفتار در اولین اجرای اپلیکیشن دانلود میشوند تا حجم APK مناسب بماند (~20MB). پس از دانلود، همه چیز کاملاً آفلاین کار میکند.
# ========== نصب پیشنیازهای Buildozer و سیستم ==========
import subprocess
import sys
import os
def run_cmd(cmd, desc=""):
print(f"\n{'='*60}")
print(f"📦 {desc}...")
print(f"{'='*60}")
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode != 0:
print(f"⚠️ هشدار: {result.stderr[:500]}")
else:
print(result.stdout[-500:] if len(result.stdout) > 500 else result.stdout)
return result
# 1. بهروزرسانی apt
…============================================================ 📦 بهروزرسانی مخازن apt... ============================================================ ============================================================ 📦 نصب openjdk-17-jdk... ============================================================ ⚠️ هشدار: E: Unable to locate package openjdk-17-jdk ============================================================ 📦 نصب autoconf... ============================================================ ttin…
# ========== نصب Java JDK (مرحله دوم) ==========
import subprocess
# جستجوی بستههای جاوا موجود
result = subprocess.run(
"apt-cache search openjdk | head -20",
shell=True, capture_output=True, text=True
)
print("بستههای openjdk موجود:")
print(result.stdout)
# تلاش برای نصب نسخههای مختلف
for version in ["21", "17", "11", "19", "23"]:
pkg = f"openjdk-{version}-jdk"
result = subprocess.run(
f"apt-get install -y -qq {pkg} 2>&1 | tail -5",
shell=True, capture_output=True, text=True
…بستههای openjdk موجود: libasmtools-java - OpenJDK AsmTools libjax-maven-plugin - Using the xjc goal with OpenJDK 11+ jtreg - Regression Test Harness for the OpenJDK platform jtreg6 - Regression Test Harness for the OpenJDK platform jtreg7 - Regression Test Harness for the OpenJDK platform jtreg8 - Regression Test Harness for the OpenJDK platform openjdk-21-dbg - Java runtime based on OpenJDK (debugging symbols) openjdk-21-demo - Java runtime based on OpenJDK (demos and examples) openjdk-21-doc…
# ========== موتور ترجمه NLLB-200 (فایل: translator.py) ==========
# پشتیبانی از عربی عراقی (acm_Arab) ↔ فارسی (pes_Arab)
TRANSLATOR_CODE = r'''
"""
موتور ترجمه آفلاین با NLLB-200-distilled-600M
زبانها: acm_Arab (عربی عراقی), pes_Arab (فارسی)
"""
import os
import json
import logging
from pathlib import Path
logger = logging.getLogger("Translator")
# تنظیم پوشه مدل
MODEL_DIR = os.path.join(
…✅ فایل translator.py ایجاد شد 📄 شامل: NLLBTranslator (اصلی) + ONNXTranslator (سبک برای موبایل)
# ========== موتور تشخیص گفتار Whisper + TTS (فایل: speech.py) ==========
SPEECH_CODE = r'''
"""
موتور تشخیص گفتار (Whisper) و تبدیل متن به گفتار (Android TTS)
کاملاً آفلاین
"""
import os
import logging
import tempfile
import numpy as np
logger = logging.getLogger("SpeechEngine")
MODEL_DIR = os.path.join(
os.environ.get("EXTERNAL_STORAGE", os.path.expanduser("~")),
"IraqiTranslator", "models"
…✅ فایل speech.py ایجاد شد 📄 شامل: WhisperSTT (تشخیص گفتار) + TTSWrapper (تبدیل متن به گفتار) + AudioRecorder
# ========== اپلیکیشن اصلی Kivy (فایل: main.py) ==========
MAIN_CODE = r'''
"""
مترجم آفلاین عربی عراقی ↔ فارسی
برنامه اصلی Kivy
"""
import os
import sys
import threading
import logging
from pathlib import Path
# تنظیم لاگر
logging.basicConfig(level=logging.INFO, format="%(name)s: %(message)s")
logger = logging.getLogger("MainApp")
…✅ فایل main.py ایجاد شد 📄 شامل 3 صفحه: ترجمه متنی | مکالمه صوتی | تنظیمات 📄 3 سرویس: NLLBTranslator | WhisperSTT | TTSWrapper
# ========== فایل پیکربندی Buildozer (buildozer.spec) ==========
SPEC_CODE = r'''
[app]
# (str) عنوان اپلیکیشن
title = مترجم عراقی - فارسی
# (str) نام بسته
package.name = iraqitranslator
# (str) دامنه بسته (شناسه یکتا)
package.domain = com.clusy.translator
# (str) نسخه
version = 1.0.0
# (str) نسخه عددی برای اندروید
…This is a preview. Open the live notebook to see all 23 cells with their charts and full outputs, or fork it into your own Clusy workspace.