Your app speaks like a local. Here is how.

SIYAK takes the string, the screen it appears on and your glossary, and returns the target language that fits. You keep writing your source language in your code; the translations live on the server, learn from your corrections, and come back as a file your build already understands.

I want it working today

A key, an install, three lines, and the first Arabic on screen.

I am shipping a mobile app

Flutter and React Native: the cache survives the app being killed, and the first frame never waits.

My strings live on the server

Express, Laravel, Django: one call for eight languages, keyed by the names you already use. No column per language.

I need the strings back

JSON, ARB, .strings or CSV, named by your keys, from what your team approved.

Is a key in my bundle safe?

The honest answer, and the two controls that make it true.

Nothing is translated

Nine symptoms, in the order they actually happen.

There is no SDK for my stack

Plain HTTP. Four endpoints, one header, JSON both ways.

The shortest version

app.js
import { init } from 'siyak-js';

const { t } = init({ apiKey: 'sk_live_…', target: 'ar' });

t('Your card expires soon', 'screen:checkout');   // → بطاقتك تنتهي قريبًا

The first call returns your own string and asks the server in the background; every call after that returns the translation. Nothing here blocks a paint, and nothing here throws.

Read the quick start

What this deployment allows

Read live, not copied from a marketing page — these are the numbers the API enforces right now.

PlanCharacters / monthProjectsRequests / minutePrice
free15K160—
pro250K21000250 EGP
agency1M51000950 EGP

Read live from this deployment. The operator can move any of these numbers without a release.

Every page