samp.directory
← Scripts y librerías

AhmadYGG/NoverraAutoTranslate

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

Filterscript★ 1actualizado jun 2026Sin licenciaPawn
Abrir en GitHub

Este repositorio no tiene archivo de licencia. Se puede leer, pero eso por sí solo no da permiso para reutilizarlo.

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 se genera con lo que GitHub publica sobre el repositorio. samp.directory no aloja el código. Informar de un problema con esta ficha

AhmadYGG/NoverraAutoTranslate: Filterscript de SA-MP | samp.directory