# Localization

Sets up and configures Unity Localization, including locales, String and Asset Tables...

- Repository: https://github.com/Unity-Technologies/skills (1197 stars)
- Category: Design
- License: see repository
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add Unity-Technologies/skills --skill localization -g -a claude-code -y`
Codex: `npx skills add Unity-Technologies/skills --skill localization -g -a codex -y`
Cursor: `npx skills add Unity-Technologies/skills --skill localization -g -a cursor -y`
Gemini CLI: `npx skills add Unity-Technologies/skills --skill localization -g -a gemini-cli -y`

## Description

Sets up and configures Unity Localization, including locales, String and Asset Tables, and CJK fonts. Use when the user asks to add languages, translate UI text, or mentions i18n or multilingual support.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

This guide covers setting up and configuring Unity Localization, including locales, String and Asset Tables, Addressables integration, and CJK font support via Asset Tables.

## 0. Package Installation Check
Before doing anything else, verify that the Localization package is installed. Many APIs in this skill
will fail silently or throw confusing errors if the package isn't present.

1. **Check by reading the project, not by asking the Package Manager.** Look for
   `com.unity.localization` in **`Packages/packages-lock.json`**. That file records what Unity
   actually resolved, it is plain JSON, and reading it needs no Editor and no async call.
   (`Packages/manifest.json` only records what was *requested*, so check the lock file.)
2. **Install if missing:** `UnityEditor.PackageManager.Client.Add("com.unity.localization")`.
3. **Wait properly.** `Client.Add` and `Client.List` are **asynchronous**: they return a request that
   is still `InProgress` when the call returns, so reading the result in the same statement tells you
   nothing. Do not busy-wait on `IsCompleted` either; that blocks the main thread you are running on.
   Instead, return after firing the install, then **poll `packages-lock.json` in a later call** until
   the id appears. Installation also triggers a domain reload, so expect the first poll or two to
   fail; a fresh install typically resolves in a few seconds.
4. **Confirm the types are actually loaded** before using them, since the lock file can be written
   before the assemblies are ready:
   ```csharp
   var t = System.Type.GetType(
       "UnityEngine.Localization.Settings.LocalizationSettings, Unity.Localization");
   return t != null ? "ready" : "not loaded yet";
   ```
   Only proceed once that returns `ready`.

The rest: https://github.com/Unity-Technologies/skills/blob/HEAD/skills/localization/SKILL.md
