Terjemahan
Satu halaman per bahasa, saling terhubung, dengan fallback yang jelas ketika sebuah bahasa belum ada.
Baca 4 menit
Bahasa sebuah brand
Brand melayani daftar locale, paling banyak 20, dan salah satunya adalah default. Locale berbentuk seperti en atau pt-BR. Locale default disajikan tanpa prefiks (/pricing) dan setiap locale lain diberi prefiks (/en/pricing). Admin platform menyetel daftar ini saat membuat brand.
Terjemahan adalah entri biasa dalam bahasa lain. Path bersifat per bahasa, jadi /tentang dan /en/about bisa menjadi halaman yang sama.
Grup terjemahan
Entri yang berisi konten sama dalam bahasa berbeda berbagi translation_group_id. Entri baru memulai grupnya sendiri. Membuat terjemahan menambahkan entri ke grup dari entri yang Anda terjemahkan.
/v1/manage/entries/{entry}/translationsEditor mana pun bisa melakukannya. Body-nya:
{ "locale": "en", "path": "/about", "title": "About us" }localewajib, harus locale milik brand, dan belum boleh ada di grup.pathwajib untuk halaman. Untuk artikel bersifat opsional, dan server membuatnya dari struktur permalink.titleopsional dan bawaannya judul sumber.
API menyalin revisi terbaru dari sumber ke entri draf baru dan mengingat dari revisi mana ia berasal (source_revision_id). Jawabannya 201 dengan entri baru. Tidak ada yang tayang sampai publisher menerbitkannya.
/v1/manage/entries/{entry}/translationsJawabannya berisi satu baris per locale brand, ada atau belum:
{
"data": [
{ "locale": "id", "entry_id": "01m...", "path": "/tentang", "status": "published", "outdated": false },
{ "locale": "en", "entry_id": "01n...", "path": "/about", "status": "draft", "outdated": true }
]
}Locale tanpa entri memiliki entry_id, path, dan status bernilai null.
Untuk melihat konten per grup, pakai GET /v1/manage/entries?group=translations. Anda mendapat satu item per grup, dan missing_locale=en mempersempitnya ke grup yang belum punya entri bahasa Inggris. Setiap item membawa array translations.
Terjemahan usang
Terjemahan dianggap usang ketika entri bahasa default memiliki revisi yang lebih baru daripada revisi asal pembuatan terjemahan itu. Entri bahasa default sendiri tidak pernah usang. Penanda ini muncul di daftar terjemahan dan di laporan kesehatan dashboard, sehingga tim tahu halaman mana yang perlu ditinjau lagi.
Ketika Anda menerbitkan grup secara massal dengan include_translations: true, setiap anggota butuh latest_revision_id yang sudah ditinjau di revisions. Anggota yang berubah sejak ditinjau dilewati, bukan diterbitkan.
Yang diterima pengunjung
Pengiriman publik tidak pernah mencampur bahasa secara tidak sengaja.
/v1/public/page?path=/about&locale=enJika tidak ada entri tayang pada locale yang diminta, API menyajikan entri bahasa default dan menyatakannya:
{ "data": { "locale": "id", "path": "/tentang", "fallback": true } }Situs Anda yang memutuskan apakah menampilkannya, mengalihkan, atau menambah banner. Fallback berlaku juga untuk override template. Brand bisa mematikannya dengan setting locale_fallback bernilai false (admin). Setelah itu terjemahan yang belum ada menjadi 404 biasa.
Tautan hreflang
Payload halaman mendaftar bahasa lain yang tayang dari halaman yang sama, yang dibutuhkan situs untuk hreflang:
{ "data": { "translations": [ { "locale": "id", "path": "/tentang" } ] } }Daftar ini tidak memuat entri saat ini dan bahasa yang belum terbit. Halaman depan memiliki path / di setiap bahasa. GET /v1/public/sitemap-urls membawa alternatif yang sama untuk sitemap.
String UI
Teks pendek yang milik situs dan bukan milik halaman, seperti label tombol dan pesan galat, disimpan di tempat terpisah. Setiap string punya namespace, key, dan locale.
/v1/manage/translationsSemua anggota bisa membaca. Saring dengan namespace dan locale. Daftar dipaginasi per 100.
/v1/manage/translationsPublisher menyimpan string dalam satu batch berisi 1 sampai 500:
{
"translations": [
{ "namespace": "common", "key": "readMore", "locale": "id", "value": "Selengkapnya" },
{ "namespace": "common", "key": "readMore", "locale": "en", "value": "Read more" }
]
}Nilai paling panjang 5000 karakter, namespace 64, dan key 255, dan locale harus milik brand. Penyimpanan mencatat audit untuk key (bukan nilainya) dan mengantrekan webhook purge sebagai strings.updated. DELETE /v1/manage/translations/{translation} menghapus satu string.
Situs Anda membacanya dari API publik:
/v1/public/stringscurl -s "https://api.atlascms.id/v1/public/strings?locale=en&namespace=common" \
-H "Authorization: Bearer $ATLAS_TOKEN"{ "data": { "locale": "en", "strings": { "common": { "readMore": "Read more" } } } }Key yang tidak ada pada locale yang diminta diisi dari locale default. Tanpa namespace, semua namespace dikembalikan.
Terjemahan AI adalah draf
/v1/manage/ai/entries/{entry}/translateKirim { "locale": "en", "path": "/about" } (path opsional). Asisten menulis terjemahan sebagai revisi draf, sama seperti yang dilakukan seseorang. Terjemahan AI manual tidak pernah diterbitkan. Anggota yang bisa mengedit entri meninjau draf, memperbaikinya, lalu publisher menerbitkannya lewat jalur biasa. Lihat Konsep inti untuk perbedaan draf dan penerbitan.
Menautkan konten yang sudah ada
Jika Anda mengimpor halaman dalam beberapa bahasa, tautkan menjadi grup berdasarkan path (halaman) atau slug (artikel) dari server:
php artisan atlas:link-translations acme --type=page,post
php artisan atlas:link-translations acme --type=page,post --writePerintah pertama adalah dry run. Ia melaporkan berapa entri yang akan ditautkan, berapa yang sudah tertaut, ambigu, atau bentrok. Tambahkan --write untuk menerapkan.
Jadikan bahasa default sebagai sumber
Terjemahkan dari entri bahasa default. Dengan begitu penanda usang memberi tahu persis terjemahan mana yang perlu disegarkan setelah ada perubahan.
Apakah halaman ini membantu?