# แปลเกม PlayDrop และหน้าเกม

อ่านภาษาของผู้เล่นด้วย sdk.host.language เลือกว่าจะรองรับภาษาใดจาก 20 ภาษาของ PlayDrop และแปลหน้าเกมพร้อมภาพ

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

เว็บไซต์และแอปของ PlayDrop รองรับ 20 ภาษา เกมทำตามภาษาของผู้เล่นได้ในสองส่วนที่แยกกัน: ตัวเกม ซึ่งคุณแปลในโค้ด และหน้าเกม ซึ่งคุณแปลใน catalogue.json

## เริ่มจากภาษาอังกฤษบวกอีกหนึ่งภาษา

เผยแพร่เป็นภาษาอังกฤษ บวกภาษาของผู้ใช้ของคุณหากต่างกัน เพิ่มภาษาอื่นเมื่อคุณวางแผนจะเข้าถึงผู้เล่นกลุ่มนั้น การแปลเพียงบางส่วนให้ความรู้สึกแย่กว่าเกมภาษาอังกฤษที่ดี จึงควรแปลให้ครบทั้งหน้าจอ

## แปลตัวเกม

`sdk.host.language` คือภาษาของผู้เล่นจาก 20 ภาษาของ PlayDrop: `en`, `fr`, `de`, `es`, `pt-BR`, `it`, `nl`, `sv`, `nb`, `fi`, `pl`, `tr`, `ar`, `th`, `vi`, `id`, `ja`, `ko`, `zh-Hans` และ `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` เป็นค่าแบบเก่า จำกัดอยู่ที่สิบภาษาเดิม และเป็น `en` สำหรับภาษาอื่น ให้ใช้ `language` แทน ทั้งสองค่าอาจโยน `host_locale_unavailable` บนโฮสต์ที่เก่ามาก ภาษาอาหรับเขียนจากขวาไปซ้าย: กลับด้านเลย์เอาต์ ไม่ใช่การเล่น และทดสอบคำยาวๆ ในภาษาเยอรมันและภาษาฟินแลนด์

## แปลหน้าเกม

ตั้ง `sourceLocale` เป็นภาษาที่ใช้เขียนหน้าเกม แล้วเพิ่มคำแปลฉบับสมบูรณ์หนึ่งฉบับต่อภาษาใน `listingLocalizations` โดยใช้ภาษาเป็นคีย์:

```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" }
    }
  }
}
```

- คำแปลแต่ละฉบับต้องมี `displayName` ของตัวเอง และอาจแปล `subtitle`, `description`, `inspirationPrompt`, `controls`, `makingOf` และ `releaseNotes` ด้วย
- ภาพที่แปลแล้ว เช่น ภาพหลักที่มีชื่อเกมแปลแล้ว ให้ใส่ในออบเจ็กต์ `listing` ของคำแปลนั้น โดยใช้ฟิลด์เดียวกับ[หน้าเกม](https://www.playdrop.ai/th/create/learn/listing-assets)หลัก
- PlayDrop บันทึกว่าคำแปลแต่ละฉบับตรงกับข้อความต้นฉบับเวอร์ชันใด เมื่อหน้าเกมต้นฉบับเปลี่ยน ให้อัปเดตคำแปลในการอัปโหลดเดียวกัน

การแปลหน้าเกมไม่ได้ทำให้ตัวเกมถูกแปลไปด้วย และการแปลตัวเกมก็ไม่ได้ทำให้หน้าเกมถูกแปล ระบุเฉพาะภาษาที่เกมรองรับจริง

## ผู้เล่นและการค้นหา

เว็บไซต์ให้บริการแต่ละภาษาที่ที่อยู่ของตัวเองพร้อมลิงก์ระหว่างฉบับภาษาต่างๆ เพื่อให้เครื่องมือค้นหาเสนอภาษาของผู้อ่านได้ ผู้เล่นจะเห็นคำแปลที่ตรงกับภาษา PlayDrop ของตน หากไม่มีจะเห็นภาษาต้นฉบับ

## คู่มือที่เกี่ยวข้อง

- [ภาพและวิดีโอของหน้าเกม](https://www.playdrop.ai/th/create/learn/listing-assets): ภาพและวิดีโอที่หน้าเกม PlayDrop มีได้ พาธ รูปแบบ และแนวหน้าจอ และวิธีทำภาพที่ใช้ได้ดีในฟีด การค้นหา และภาพตัวอย่าง
- [catalogue.json](https://www.playdrop.ai/th/create/learn/catalogue-json): ฟิลด์ catalogue.json ที่เกม PlayDrop ใช้: ตัวตน หน้าเกม โหมดการเล่น หน้าจอ การเข้าสู่ระบบ Instant การโหลดล่วงหน้า สื่อ คำแปล คะแนน และเซิร์ฟเวอร์
- [การโหลด การหยุดชั่วคราว และเสียง](https://www.playdrop.ai/th/create/learn/lifecycle): เริ่มต้น PlayDrop SDK ส่งสัญญาณ ready ที่เฟรมแรกที่เล่นได้ หยุดชั่วคราวและเล่นต่ออย่างเรียบร้อย ทำตามนโยบายเสียง และโหลดไฟล์ล่วงหน้าเพื่อเล่นออฟไลน์
