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
23 cells1 experiment5 views0 forks

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.

Offline Iraqi Arabic ↔ Persian Translator | Clusy