# Bản địa hóa game PlayDrop và trang giới thiệu của game

Đọc ngôn ngữ của người chơi bằng sdk.host.language, chọn hỗ trợ ngôn ngữ nào trong 20 ngôn ngữ của PlayDrop, và dịch trang giới thiệu cùng hình ảnh của nó.

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

Trang web và các ứng dụng PlayDrop hỗ trợ 20 ngôn ngữ. Một game có thể theo ngôn ngữ của người chơi ở hai nơi riêng biệt: bản thân game, mà bạn dịch trong mã, và trang giới thiệu của game, mà bạn dịch trong catalogue.json.

## Bắt đầu với tiếng Anh và thêm một ngôn ngữ

Hãy phát hành bằng tiếng Anh, cộng thêm ngôn ngữ của người dùng của bạn nếu khác tiếng Anh. Thêm ngôn ngữ khác khi bạn dự định tiếp cận người chơi nói ngôn ngữ đó. Một bản dịch dở dang tạo cảm giác tệ hơn một game tiếng Anh tốt, vì vậy hãy dịch trọn từng màn hình.

## Dịch game

`sdk.host.language` là ngôn ngữ của người chơi trong số 20 ngôn ngữ của PlayDrop: `en`, `fr`, `de`, `es`, `pt-BR`, `it`, `nl`, `sv`, `nb`, `fi`, `pl`, `tr`, `ar`, `th`, `vi`, `id`, `ja`, `ko`, `zh-Hans` và `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` là giá trị cũ, chỉ giới hạn ở mười ngôn ngữ ban đầu và trả về `en` cho các ngôn ngữ còn lại; hãy ưu tiên `language`. Cả hai đều có thể ném lỗi `host_locale_unavailable` trên các host rất cũ. Tiếng Ả Rập được viết từ phải sang trái: hãy lật ngược bố cục, không lật lối chơi, và thử các từ dài bằng tiếng Đức và tiếng Phần Lan.

## Dịch trang giới thiệu

Đặt `sourceLocale` là ngôn ngữ dùng để viết trang giới thiệu, rồi thêm một bản dịch đầy đủ cho mỗi ngôn ngữ trong `listingLocalizations`, với khóa là mã ngôn ngữ:

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

- Mỗi bản dịch cần `displayName` riêng. Bản dịch cũng có thể dịch `subtitle`, `description`, `inspirationPrompt`, `controls`, `makingOf` và `releaseNotes`.
- Hình ảnh đã dịch, như ảnh bìa có tên game đã dịch, nằm trong đối tượng `listing` của bản dịch, dùng cùng các trường với [trang giới thiệu](https://www.playdrop.ai/vi/create/learn/listing-assets) chính.
- PlayDrop ghi lại mỗi bản dịch khớp với phiên bản nào của văn bản gốc. Khi trang giới thiệu gốc thay đổi, hãy cập nhật các bản dịch trong cùng lần tải lên.

Một trang giới thiệu đã dịch không dịch game, và một game đã dịch không dịch trang giới thiệu. Chỉ liệt kê những ngôn ngữ mà game thật sự hỗ trợ.

## Người chơi và tìm kiếm

Trang web phục vụ mỗi ngôn ngữ tại một địa chỉ riêng, có liên kết giữa các phiên bản ngôn ngữ, để công cụ tìm kiếm có thể đưa ra đúng ngôn ngữ của người đọc. Người chơi thấy bản dịch khớp với ngôn ngữ PlayDrop của họ, nếu không có thì thấy ngôn ngữ gốc.

## Hướng dẫn liên quan

- [Hình ảnh và video giới thiệu](https://www.playdrop.ai/vi/create/learn/listing-assets): Hình ảnh và video giới thiệu mà game PlayDrop có thể có, đường dẫn, định dạng, hướng màn hình, và cách làm hình ảnh hiệu quả trong bảng tin, tìm kiếm, bản xem trước.
- [catalogue.json](https://www.playdrop.ai/vi/create/learn/catalogue-json): Các trường catalogue.json game PlayDrop dùng: định danh, trang giới thiệu, chế độ chơi, màn hình, đăng nhập, Instant, tải trước, media, bản dịch, điểm và máy chủ.
- [Tải, tạm dừng và âm thanh](https://www.playdrop.ai/vi/create/learn/lifecycle): Khởi tạo SDK PlayDrop, báo sẵn sàng ở khung hình chơi được đầu tiên, tạm dừng và tiếp tục gọn gàng, theo chính sách âm thanh và tải trước tệp để chơi ngoại tuyến.
