reckfellENGINE

Коды локалей и выбор языка

Какие коды использовать, чем известные локали отличаются от переводов игры и как выбирать RU/EN.

На этой странице

Локаль обозначает язык и при необходимости письменность или регион. Распознавание кода не означает, что в игре есть перевод. Отделяйте каталог локалей движка от списка языков, которые действительно входят в игру.

Выбрать код каталога

КодЗначениеПрименение
enАнглийскийобщий английский каталог
ruРусскийобщий русский каталог
en_USАнглийский, СШАрегиональные формулировки
en_GBАнглийский, Великобританиярегиональные формулировки
zh_HansКитайский, упрощённая письменностьперевод для конкретной письменности
zh_Hant_TWКитайский, традиционная письменность, Тайваньперевод с учётом письменности и региона
sr_LatnСербский, латиницаотличие от сербской кириллицы

Каноническая запись: language_Script_COUNTRY_VARIANT. Язык обычно записывают строчными буквами, необязательную письменность — с заглавной, необязательную страну — прописными. Используйте распознаваемые коды и только те различия, для которых действительно подготовлены переводы. Регион сам по себе не выбирает валюту, единицы измерения или сервер игры.

Укажите ru/en в заголовках CSV, свойстве Translation.Locale или заголовке Language каталога PO. Имя файла ru.po не переопределяет заголовок PO.

Нормализовать и сравнить

TranslationServer.StandardizeLocale("ru-RU") возвращает ru_RU; zh-Hant-TW становится zh_Hant_TW. Распознаваемое обозначение письменности sr@latin превращается в sr_Latn. Передавайте канонический регистр: нормализация не проверяет произвольный ввод игрока и не гарантирует исправление каждого некорректного кода.

Необязательный аргумент addDefaults влияет на некоторые неоднозначные локали. Например, StandardizeLocale("zh") возвращает zh, а StandardizeLocale("zh", true) — zh_Hans_CN в текущем движке. Не добавляйте значения по умолчанию вслепую, когда игрок явно выбрал письменность или региональный каталог.

CompareLocales возвращает 10 при точном или эквивалентном совпадении, положительную оценку при совпадении языка и 0 для разных языков. Положительный результат — оценка сходства, а не доказательство наличия каталогов, символов шрифта или переведённых сообщений. Для двух письменностей одного языка могут требоваться разные материалы.

Выбрать язык, который входит в игру

Полный GameLanguage.cs намеренно поддерживает только ru и en. Он сводит региональный запрос к подготовленному языковому каталогу и выбирает en во всех остальных случаях. Это не универсальный алгоритм сопоставления локалей:

C#
using Reckfell;

public static class GameLanguage
{
    // This game ships only ru and en catalogs.
    public static string Resolve(string requested)
    {
        if (string.IsNullOrWhiteSpace(requested)) return "en";
        string normalized = TranslationServer.StandardizeLocale(requested);
        string language = normalized.Split('_')[0];
        return language == "ru" ? "ru" : "en";
    }

    public static void Apply(string requested)
    {
        TranslationServer.SetLocale(Resolve(requested));
    }
}

Сначала зарегистрируйте оба каталога. В методе запуска вызывайте GameLanguage.Apply(savedLocale), если выбор игрока сохранён; иначе — GameLanguage.Apply(OS.GetLocale()). Оставьте возможность ручного переключения. Resolve возвращает ru для ru-RU и en для en-GB, fr-FR или пустого запроса. Сохраняйте выбор отдельно: Apply его не записывает.

При добавлении региональных языков или разных письменностей замените это правило RU/EN явным списком поддерживаемых локалей. Сохраняйте выбранную письменность: нельзя объединять zh_Hant и zh_Hans в общий zh только потому, что пример для RU/EN отбрасывает регион.

Получить полные актуальные каталоги кодов

Используйте методы SDK вместо копирования статической таблицы, которая может разойтись с установленным движком:

ИдентификаторыЧитаемое название
TranslationServer.GetAllLanguages()GetLanguageName(code)
TranslationServer.GetAllScripts()GetScriptName(code)
TranslationServer.GetAllCountries()GetCountryName(code)

Эти каталоги описывают распознаваемые коды. TranslationServer.GetLoadedLocales() возвращает локали ресурсов, зарегистрированных в основном домене переводов. Результат может быть пустым, хотя GetAllLanguages содержит ru и en. Список подключённых локалей тоже не доказывает, что переведено каждое сообщение.

Для меню игры используйте подготовленный список доступных языков с подписями вроде Русский и English. Не предлагайте все известные движку языки так, будто они уже переведены.

Диагностика выбора языка

СимптомЧто проверить
Код распознаётся, но видны ключиРегистрацию каталога, его сообщения и локаль
При запросе en_GB показан общий английскийВ игру включён только en либо поиск использует его как подходящий каталог
Выбранная письменность потеряласьВаш алгоритм сократил локаль до языка
После перезапуска вернулся язык ОСНастройка игрока не сохранена или применена до чтения сохранённого выбора
Текст правильный, символы, направление или формат — нетШрифт, обработку текста, вёрстку и формат чисел: одно сопоставление локали их не проверяет

Связанные инструкции: подключение переводов и резервный язык, контекст и множественные формы CSV.

В движке проверены приведённые примеры нормализации, категории сравнения, запросы каталогов кодов, отличие от подключённых локалей и точный алгоритм RU/EN. Получение локали на разных ОС, сохранение выбора, все возможные сочетания локалей, отображение шрифтов и экспорт не проверялись.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.