PHP langsys/langsys-php
SDK PHP dasar: satu klien untuk aplikasi PHP apa pun — PHP biasa, framework, worker, atau CLI. Frasa di kode Anda berfungsi sekaligus sebagai kunci pencarian dan default bahasa dasar — tanpa file kunci, tanpa langkah ekstraksi. Penerjemahan berlangsung di server, sehingga halaman tiba dalam keadaan sudah dilokalkan.
SDK backend, jadi tidak ada playground di browser pada halaman ini — browser tidak dapat menjalankan PHP. Memakai Laravel? Paket Laravel membungkus klien ini dengan direktif Blade, middleware, dan facade. Referensi lengkap: README.
Menggunakan agen coding AI? Berikan prompt ini kepadanya
Add Langsys translation to this PHP app.
1. Read https://docs.langsys.dev/llms.txt, then follow
https://docs.langsys.dev/learn/sdk/php/ for the install and setup.
2. The English text in the code is the translation key. Wrap user-facing
strings as they are: no keys file, no extraction step, and no
hand-written plural or gender branches (Langsys generates those).
3. Read the Langsys project id and API key from environment variables.
The write key is for development and servers only; anything shipped
to the browser gets the read-only key.
4. Keep brand names and user-generated content out of translation. Instal
composer require langsys/langsys-php PHP 7.4 atau lebih baru, dengan ekstensi curl, json, dan intl — intl berfungsi merender bentuk jamak serta memformat angka dan tanggal untuk setiap locale.
# A server can hold a WRITE key — it never reaches visitors. A write key is
# what lets phrases your pages use for the first time register themselves.
LANGSYS_API_KEY=your-api-key
LANGSYS_PROJECT_ID=your-project-id Belum punya proyek atau kunci? Mulai Cepat memberi Anda keduanya dalam dua menit.
Klien
Satu klien per permintaan. Klien membaca kredensialnya dari environment dan menyimpan katalog setiap locale dalam cache, sehingga menerjemahkan satu halaman paling banyak hanya memerlukan satu panggilan API.
<?php
require 'vendor/autoload.php';
use LangsysSDKClient;
// Reads LANGSYS_API_KEY and LANGSYS_PROJECT_ID from the environment.
$langsys = new Client();
$langsys->setLocale('es-es'); Terjemahkan
translate() menerima locale sebagai argumen kedua dan kategori sebagai argumen ketiga. Berikan null untuk locale agar menggunakan locale klien saat ini.
// translate($phrase, $locale, $category, $contentBlockId, $params)
echo $langsys->translate('Order confirmed', null, 'Checkout'); // current locale
echo $langsys->translate('Order confirmed', 'fr-fr', 'Checkout'); // an explicit one
// A phrase the project doesn't have yet renders as written — never blank. Nilai dalam kalimat
Placeholder menggunakan {name}, bentuk yang sama yang disimpan setiap SDK Langsys, sehingga satu katalog dirender secara identik dari backend PHP maupun frontend JS.
// Pass values as params, never build the string yourself.
echo $langsys->translate('Hello, {name}!', null, 'Greetings', null, ['name' => $user->name]);
// sprintf('Hello, %s!', $name) would register "Hello, Sarah!", "Hello, Ahmed!", …
// — one catalog entry per value, billed as words, and impossible to undo. Bentuk jamak
Tulis kalimat apa adanya: Langsys menghasilkan bentuk jamak setiap locale saat penerjemahan, dan SDK merender cabang yang sesuai dengan jumlah Anda.
// Written flat. Langsys generates each locale's plural forms during
// translation and the SDK picks the branch that matches the count.
echo $langsys->translate('You have {count} new messages.', null, 'Inbox', null, ['count' => $count]); Bentuk jamak yang dihasilkan Langsys sampai ke PHP mulai dari langsys/langsys-php 1.3.2; versi sebelumnya merender bentuk jamak untuk setiap jumlah, termasuk 1.
Kesesuaian gender
Bahasa Spanyol, Prancis, atau Rusia memberi infleksi pada {username} has been invited sesuai orang yang dimaksud. Langsys menghasilkan cabang-cabang itu saat penerjemahan — dengan cara yang sama seperti menghasilkan bentuk jamak — dan argumennya dinamai sesuai variabelnya, dengan tambahan _gender: male, female, atau other. Berikan nilainya setiap kali Anda mengetahuinya. Cara kerjanya, dan cara menemukan frasa yang membutuhkannya →
// Pass the agreement argument alongside the value it inflects.
echo $langsys->translate('{username} has been invited', null, 'Team', null, [
'username' => $user->name,
'username_gender' => $user->gender, // 'male' | 'female' | 'other'
]); Tidak tahu gendernya? Berikan 'other' secara eksplisit — itu adalah cabang netral. Jika tidak ada pun, SDK akan mengambil cabang other untuk Anda, sehingga kalimatnya tetap terbaca dengan benar.
Kategori
Kategori membatasi cakupan sebuah frasa, sehingga kata yang sama dapat diterjemahkan secara berbeda dalam konteks yang berbeda.
// Same word, two meanings — the category disambiguates.
echo $langsys->translate('Home', null, 'Main Menu'); // es: "Inicio"
echo $langsys->translate('Home', null, 'Home repairs'); // es: "Casa" Locale pengunjung
Atur dari routing Anda sendiri atau pengaturan pengguna, atau biarkan klien membaca header Accept-Language dari browser.
use LangsysSDKLocaleLocaleDetector;
// Explicit, from your own routing or the user's settings:
$langsys->setLocale('pt-br');
// Or from the browser: without setLocale(), getLocale() reads Accept-Language
// and falls back to the project's base locale.
$locale = $langsys->getLocale();
// The same detection, from a header your framework hands you:
$locale = LocaleDetector::fromAcceptLanguage($request->getHeaderLine('Accept-Language')); Di template Anda
Helper kecil memberi view Anda nama yang singkat dan melakukan escape pada keluarannya.
<?php
// helpers.php — one client per request, one short name in your templates.
use LangsysSDKClient;
function t(string $phrase, string $category, array $params = []): string
{
static $langsys = null;
$langsys ??= (new Client())->setLocale($_SESSION['locale'] ?? 'en-us');
return htmlspecialchars($langsys->translate($phrase, null, $category, null, $params));
}
// In a template:
// <h1><?= t('Welcome to our store', 'Home') ?></h1> Penemuan token di server
Dengan kunci tulis, setiap frasa yang belum pernah dilihat proyek akan diantrekan saat Anda merendernya dan didaftarkan setelah respons dikirim — pengunjung langsung melihat teks bahasa dasar Anda, dan frasa itu diterjemahkan untuk pengunjung berikutnya. Dengan kunci hanya-baca, tidak ada yang didaftarkan dan tidak ada yang rusak.
// With a write key, translate() queues every phrase the project doesn't have
// and sends them after the response, from a shutdown handler. Nothing to call.
// With a read key the queue is simply dropped — no errors.
// Or register up front, e.g. from a deploy script:
$langsys->registerPhrases([
['phrase' => 'Order confirmed', 'category' => 'Checkout'],
['phrase' => 'Copyright 2026', 'category' => 'Footer', 'translatable' => false],
]); Halaman utuh
Sudah punya halaman dalam bentuk string HTML? Terjemahkan sekaligus dalam satu proses, termasuk bagian head.
// An HTML page you already have as a string: <title>, meta and OpenGraph
// tags, and the body — phrases and content blocks — in one pass.
ob_start();
// … your app renders the page …
$html = ob_get_clean();
echo $langsys->setLocale('es-es')->translatePage($html, 'Home'); Caching
// Catalogs are cached for an hour (a file cache by default; Redis or none
// via LANGSYS_CACHE_DRIVER). After editing translations in the dashboard:
$langsys->clearCache('es-es');