# Localiza un juego de PlayDrop y su ficha

Lee el idioma del jugador con sdk.host.language, elige cuáles de los 20 idiomas de PlayDrop admitir y traduce la ficha y sus imágenes con listingLocalizations.

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

La web y las apps de PlayDrop están disponibles en 20 idiomas. Un juego puede seguir el idioma del jugador en dos lugares independientes: el propio juego, que traduces en el código, y su ficha, que traduces en catalogue.json.

## Empieza con inglés y uno más

Publica en inglés y también en el idioma de tu usuario si es diferente. Añade más idiomas cuando pienses llegar a esos jugadores. Una traducción parcial da peor impresión que un buen juego en inglés, así que traduce pantallas completas.

## Traduce el juego

`sdk.host.language` es el idioma del jugador entre los 20 de PlayDrop: `en`, `fr`, `de`, `es`, `pt-BR`, `it`, `nl`, `sv`, `nb`, `fi`, `pl`, `tr`, `ar`, `th`, `vi`, `id`, `ja`, `ko`, `zh-Hans` y `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` es el valor antiguo, limitado a los diez idiomas originales y `en` para los demás; es preferible `language`. Ambos pueden lanzar `host_locale_unavailable` en hosts muy antiguos. El árabe se escribe de derecha a izquierda: refleja la interfaz, no la jugabilidad, y prueba las palabras largas en alemán y finés.

## Traduce la ficha

Establece `sourceLocale` con el idioma en que está escrita la ficha y añade una traducción completa por idioma en `listingLocalizations`, con el idioma como clave:

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

- Cada traducción necesita su propio `displayName`. También puede traducir `subtitle`, `description`, `inspirationPrompt`, `controls`, `makingOf` y `releaseNotes`.
- Las imágenes traducidas, como una portada con el título traducido, van en el objeto `listing` de la traducción, con los mismos campos que la [ficha](https://www.playdrop.ai/es/create/learn/listing-assets) principal.
- PlayDrop registra a qué versión del texto original corresponde cada traducción. Cuando cambie la ficha original, actualiza las traducciones en la misma subida.

Traducir la ficha no traduce el juego, y traducir el juego no traduce la ficha. Indica solo los idiomas que el juego admite de verdad.

## Jugadores y buscadores

La web sirve cada idioma en su propia dirección, con enlaces entre las versiones, para que los buscadores puedan ofrecer el idioma del lector. Los jugadores ven la traducción que corresponde a su idioma de PlayDrop y, si no existe, el idioma original.

## Guías relacionadas

- [Imágenes y vídeo de la ficha](https://www.playdrop.ai/es/create/learn/listing-assets): Qué imágenes y vídeos puede tener la ficha de un juego, rutas, formatos y orientaciones, y cómo crear imágenes eficaces en feeds, búsqueda y enlaces.
- [catalogue.json](https://www.playdrop.ai/es/create/learn/catalogue-json): Campos de catalogue.json que usan los juegos: identidad, ficha, modos, pantallas, sesión, instantáneo, precarga, medios, idiomas, puntuaciones y servidores.
- [Carga, pausa y audio](https://www.playdrop.ai/es/create/learn/lifecycle): Inicia el SDK, llama a ready en el primer fotograma jugable, pausa y reanuda sin fallos, respeta el audio del host y precarga para jugar sin conexión.
