samp.directory
← Scripts e bibliotecas

AhmadYGG/NoverraAutoTranslate

Standalone realtime auto-translate for SA-MP: Pawn filterscript + Go backend over LibreTranslate

Filterscript★ 1atualizado jun. de 2026Sem licençaPawn
Abrir no GitHub

Este repositório não tem arquivo de licença. Ele é público para leitura, mas isso sozinho não dá permissão para reutilizar.

README.md

Noverra AutoTranslate (Standalone)

Sistem auto-translate chat realtime untuk server SA-MP, diekstrak dari NoverraGamemode menjadi project berdiri sendiri.

Terdiri dari 2 bagian:

BagianLokasiBahasaFungsi
Filterscript SA-MPfilterscripts/autotranslate.pwnPawnKirim teks pemain ke API, tampilkan hasil di game
Backend APIbackend/GoProxy/cache di depan LibreTranslate

Arsitektur

┌────────────┐   HTTP GET    ┌──────────────┐   POST JSON   ┌────────────────┐
│  SA-MP     │ ───────────►  │  Go API      │ ───────────►  │ LibreTranslate │
│ (Pawn FS)  │  ?text=&to=   │  :8080       │  /translate   │  :5000         │
│            │ ◄───────────  │ (cache+rate) │ ◄───────────  │ (mesin MT)     │
└────────────┘  plain text   └──────────────┘   JSON        └────────────────┘
  • Pawn memanggil API dengan HTTP() (GET, query-string) dan menerima plain text.
  • Go API auto-detect bahasa sumber, cache 5 menit, rate-limit, timeout 5 detik, dan fallback ke teks asli kalau gagal.
  • LibreTranslate = mesin machine-translation open source (jalan lokal, tanpa API key).

Struktur Folder

NoverraAutoTranslate/
├── docker-compose.yml          # menjalankan Go API + LibreTranslate
├── filterscripts/
│   └── autotranslate.pwn       # filterscript (hanya butuh a_samp)
└── backend/
    ├── cmd/server/main.go      # entrypoint, baca env LIBRE_URL
    ├── internal/handler/       # HTTP handler (/translate, /detect, /languages)
    ├── internal/service/       # logic translate, cache, rate limiter
    ├── go.mod / go.sum
    └── Dockerfile

Requirements

Backend (Go API + LibreTranslate)

  • Docker + Docker Compose v2 (docker compose) — cara termudah, sudah termasuk semuanya.
  • Tanpa Docker: Go 1.22+ dan instance LibreTranslate yang jalan terpisah.
  • RAM ≥ 2GB disarankan (LibreTranslate + model bahasa rakus memori).
  • Disk ≥ 2–3GB untuk image LibreTranslate + model yang diunduh (disimpan di ./libretranslate-data).
  • Koneksi internet saat pertama build (download image & model bahasa).
  • Dependency Go: github.com/patrickmn/go-cache v2.1.0 (auto via go.mod/go.sum).

Filterscript (SA-MP)

  • Server SA-MP 0.3.7 / open.mp dengan dukungan native HTTP() (a_http).
  • Pawn compiler (pawncc 3.10.x) + include a_samp.inc.
  • Tidak butuh YSI, zcmd, atau sscanf — murni a_samp.
  • Akses jaringan dari mesin SA-MP ke backend (port 4001 atau domain kamu).

Jaringan

  • Port host 4001 terbuka untuk API (bisa diganti di docker-compose.yml).
  • Port 5000 LibreTranslate internal saja (jangan diekspos publik).

Setup

1. Jalankan Backend (Docker — direkomendasikan)

cd NoverraAutoTranslate
docker compose up -d --build
  • API tersedia di http://<host>:4001 (port host 4001 → container 8080).
  • Pertama kali jalan, LibreTranslate mengunduh model bahasa (LT_LOAD_ONLY=en,id,es,fr,de). Bisa makan beberapa menit; start_period healthcheck = 600s. Tunggu sampai sehat:
docker compose ps
docker compose logs -f libre      # lihat progres download model

Test:

curl "http://localhost:4001/health"
curl "http://localhost:4001/translate?text=halo+dunia&from=id&to=en"
# -> hello world

2. (Opsional) Jalankan Backend tanpa Docker

cd backend
go mod download
LIBRE_URL=http://localhost:5000 go run cmd/server/main.go

(harus ada LibreTranslate jalan sendiri di LIBRE_URL).

3. Pasang Filterscript

  1. Edit filterscripts/autotranslate.pwn, ganti host API ke backend kamu:
    #define TRANSLATE_API_HOST   "127.0.0.1:4001"
    

    Native HTTP() SA-MP otomatis pakai skema http://, jadi cukup host:port atau domain (mis. translate.domainmu.com). Jangan tulis http:// di depan.

  2. Compile autotranslate.pwn → autotranslate.amx, taruh di filterscripts/ server kamu.
  3. Tambahkan ke server.cfg:
    filterscripts autotranslate
    
  4. Restart server.

Cara Pakai (in-game)

Command bawaan filterscript:

CommandFungsi
/translate <lang> <text>Translate teks ke <lang>, sumber auto-detect. Contoh: /translate en Halo dunia
/tme <text>Action /me diterjemahkan id → en, dikirim ke pemain sekitar (radius 20m)
/translatelangList bahasa yang didukung

Integrasi ke kode sendiri

Fungsi inti, panggil dari mana saja:

TranslateText(text[], fromLang[]="id", toLang[]="en", callback[]="", playerid=INVALID_PLAYER_ID, extraData=0);

Callback dipanggil saat selesai:

forward MyCb(requestid, playerid, success, const translatedText[], extraData);
public  MyCb(requestid, playerid, success, const translatedText[], extraData)
{
    if(success) SendClientMessage(playerid, -1, translatedText);
}

// contoh: auto-detect -> Indonesia
TranslateText("Hello world", "auto", "id", "MyCb", playerid);

API Reference (backend)

EndpointMethodQueryResponse
/translateGETtext (wajib), from (default id, auto = detect), to (default en)plain text hasil; teks asli jika gagal
/detectGETtextplain text kode bahasa
/languagesGET—JSON daftar bahasa
/healthGET—OK

Env:

VariableDefaultKeterangan
LIBRE_URLhttp://libre:5000endpoint LibreTranslate

Kelebihan

  • ✅ Gratis & self-hosted — LibreTranslate open source, tanpa API key / biaya per-request.
  • ✅ Privasi — teks tidak dikirim ke pihak ketiga (Google/DeepL); semua jalan di server sendiri.
  • ✅ Cepat untuk teks berulang — cache 5 menit (cached < 50ms).
  • ✅ Tahan gagal — timeout + fallback ke teks asli, server game tidak ngehang.
  • ✅ Rate limit bawaan (mencegah spam/abuse).
  • ✅ Filterscript murni a_samp — tidak butuh YSI/zcmd/sscanf, bisa ditempel ke gamemode apa pun.

Kekurangan / Catatan

  • ⚠️ Kualitas terjemahan LibreTranslate di bawah Google/DeepL, terutama bahasa gaul/slang RP.
  • ⚠️ Boros resource — LibreTranslate butuh RAM cukup besar (≈1–2GB+) dan unduh model di awal. Batasi bahasa via LT_LOAD_ONLY.
  • ⚠️ Format API custom — backend ini pakai GET query-string + response plain text (bukan format POST/JSON LibreTranslate resmi). Filterscript hanya cocok dengan backend ini.
  • ⚠️ Batas teks TRANSLATE_MAX_LENGTH = 256 char per request (di sisi Pawn).
  • ⚠️ HTTP, bukan HTTPS — native HTTP() SA-MP klasik tidak mendukung TLS dengan baik; idealnya backend di jaringan internal/localhost, bukan diekspos publik tanpa proxy.
  • ⚠️ Max 100 request bersamaan (MAX_TRANSLATE_REQUESTS) di sisi Pawn; lebih dari itu ditolak sampai slot kosong.
  • ⚠️ Rate limiter backend (30 req/menit) saat ini per-key, tapi handler belum memanggil Allow() — fungsionalitas ada, aktivasinya perlu dihubungkan jika diperlukan.

Troubleshooting

  • /translate tidak ada respon → cek TRANSLATE_API_HOST di pawn sudah benar & backend hidup (curl .../health).
  • Selalu balik teks asli → LibreTranslate belum siap (masih download model) atau bahasa tujuan tidak dimuat di LT_LOAD_ONLY.
  • Connection failed di log server → firewall/port; pastikan port 4001 (atau domainmu) reachable dari mesin SA-MP.

Esta página é montada com o que o GitHub publica sobre o repositório. O samp.directory não hospeda o código. Avisar de um problema com esta página