# Lokalisasikan game PlayDrop dan listingannya

Baca bahasa pemain dengan sdk.host.language, pilih bahasa dari 20 bahasa PlayDrop, dan terjemahkan listingan serta gambarnya dengan listingLocalizations.

Source: https://www.playdrop.ai/id/create/learn/localization

Situs web dan aplikasi PlayDrop tersedia dalam 20 bahasa. Game bisa mengikuti bahasa pemain di dua tempat yang terpisah: game itu sendiri, yang Anda terjemahkan di kode, dan listingannya, yang Anda terjemahkan di catalogue.json.

## Mulai dengan bahasa Inggris ditambah satu bahasa

Rilis dalam bahasa Inggris, ditambah bahasa pengguna Anda jika berbeda. Tambahkan bahasa lain saat Anda berencana menjangkau pemain bahasa itu. Terjemahan setengah jadi terasa lebih buruk daripada game berbahasa Inggris yang bagus, jadi terjemahkan seluruh layar.

## Terjemahkan game

`sdk.host.language` adalah bahasa pemain di antara 20 bahasa PlayDrop: `en`, `fr`, `de`, `es`, `pt-BR`, `it`, `nl`, `sv`, `nb`, `fi`, `pl`, `tr`, `ar`, `th`, `vi`, `id`, `ja`, `ko`, `zh-Hans`, dan `zh-Hant`.

```js
const STRINGS = { en: { play: "Play" }, fr: { play: "Jouer" } };
let language = "en";
try { language = sdk.host.language; } catch { /* older host */ }
const t = STRINGS[language] ?? STRINGS[language.split("-")[0]] ?? STRINGS.en;
```

`sdk.host.locale` adalah nilai lama, terbatas pada sepuluh bahasa awal dan `en` untuk bahasa lainnya; utamakan `language`. Keduanya bisa memunculkan `host_locale_unavailable` di host yang sangat lama. Bahasa Arab ditulis dari kanan ke kiri: cerminkan tata letaknya, bukan gameplay-nya, dan uji kata-kata panjang dalam bahasa Jerman dan Finlandia.

## Terjemahkan listingan

Tetapkan `sourceLocale` ke bahasa yang dipakai untuk menulis listingan, lalu tambahkan satu terjemahan lengkap per bahasa di `listingLocalizations`, dengan kunci berupa bahasa:

```json
{
  "sourceLocale": "en",
  "displayName": "Moon Jump",
  "description": "Jump between lunar platforms and reach the flag.",
  "listingLocalizations": {
    "fr": {
      "displayName": "Saut lunaire",
      "subtitle": "Des plateformes lunaires contre la montre",
      "description": "Sautez de plateforme en plateforme et atteignez le drapeau.",
      "controls": "Touchez ou appuyez sur Espace pour sauter.",
      "listing": { "heroLandscape": "listing/locales/fr/hero-landscape.png" }
    }
  }
}
```

- Setiap terjemahan memerlukan `displayName` sendiri. Terjemahan juga bisa menerjemahkan `subtitle`, `description`, `inspirationPrompt`, `controls`, `makingOf`, dan `releaseNotes`.
- Gambar terjemahan, seperti gambar utama dengan judul yang diterjemahkan, dimasukkan ke objek `listing` milik terjemahan itu, dengan field yang sama seperti [listingan](https://www.playdrop.ai/id/create/learn/listing-assets) utama.
- PlayDrop mencatat versi teks sumber yang dicocokkan setiap terjemahan. Saat listingan sumber berubah, perbarui terjemahannya di unggahan yang sama.

Listingan yang diterjemahkan tidak menerjemahkan game, dan game yang diterjemahkan tidak menerjemahkan listingan. Cantumkan hanya bahasa yang benar-benar didukung game.

## Pemain dan pencarian

Situs web menyajikan setiap bahasa di alamatnya sendiri dengan tautan antarversi, sehingga mesin pencari bisa menawarkan bahasa pembaca. Pemain melihat terjemahan yang sesuai dengan bahasa PlayDrop mereka, dan bahasa sumber jika tidak ada.

## Panduan terkait

- [Gambar dan video listingan](https://www.playdrop.ai/id/create/learn/listing-assets): Gambar dan video listingan game PlayDrop: jalur, format, dan orientasinya, serta cara membuat gambar yang efektif di feed, pencarian, dan pratinjau tautan.
- [catalogue.json](https://www.playdrop.ai/id/create/learn/catalogue-json): Field catalogue.json yang dipakai game PlayDrop: identitas, listingan, mode bermain, permukaan, login, Instan, pramuat, media, terjemahan, skor, dan server.
- [Pemuatan, jeda, dan audio](https://www.playdrop.ai/id/create/learn/lifecycle): Inisialisasi SDK PlayDrop, beri sinyal siap di frame pertama, jeda dan lanjutkan dengan rapi, ikuti kebijakan audio host, dan pramuat berkas untuk main offline.
