Перейти к содержимому

Языки

Одиннадцать языков поставляются полностью — каждый экран, а не только кнопки, — теми словами, которыми пользуется собственный iPhone на этом языке. Всё, чего не хватает в языке, подставляется из английского строка за строкой, так что недоделанный перевод показывает то, что у него есть, а не ломается.

КодЯзыкКодЯзык
enEnglishptPortuguês (Brasil)
esEspañolplPolski
frFrançaisruРусский
deDeutschtrTürkçe
itItalianoarالعربية — справа налево
ja日本語
-- shared/config.lua
Config.Locale = 'en'

Это язык города по умолчанию. Каждый игрок может изменить его для себя в Настройки → Основные → Язык, и его выбор запоминается вместе с остальными настройками.

Каждый игрок читает на языке, который выбрал, — и на телефоне, и вне его. Телефон следует выбору в Настройках, и то же делают строки, показываемые вне телефона, — «Здесь нет сигнала.», «Обе руки заняты.», появление нового приложения.

Config.Locale — это язык для игрока, который никогда ничего не выбирал, и для всего, что не адресовано никому конкретно.

Для вашего собственного ресурса: LFor(source, text, ...) отвечает на языке этого игрока, а L(text, ...) — на языке города.

  • Даты и часы. «Samstag, 19. September», «9月19日土曜日», 24-часовой формат там, где язык его использует. Деньги остаются в $, как их считает город.
  • Арабский читается справа налево. Весь экран зеркально отражается так же, как на арабском iPhone: строки начинаются справа, стрелка «назад» указывает вправо. Две вещи остаются как есть на любом языке, как и на iPhone, — клавиатура набора номера и калькулятор. Суммы, даты и числа внутри арабского предложения сохраняют свой порядок. Западные цифры и григорианский календарь — так, как читает телефон в Лос-Сантосе.
  • Количества. В польском, русском и арабском форм множественного числа больше, чем «один» и «много», поэтому их подсчёты читаются как «Notatki: 4» — верно для любого числа.

Одна папка, один файл на язык. В нём всё: 2400 строк на экране и два десятка, показываемых вне телефона, — уведомление от города, причина, по которой он не открывается в воздухе.

locales/en.lua
locales/es.lua
locales/fr.lua
…

Это файл Lua, поэтому сервер и клиент загружают его как скрипт, которым он и является, без разбора и преобразования. Телефон читает тот же файл и разбирает его, поэтому формат строгий: один ["key"] = "value", на строку, а комментарий — это комментарий. Придерживайтесь этого формата — и обе половины увидят ваши слова.

Строка — это её же собственный ключ:

Locales['es'] = {
["Verified account"] = "Cuenta verificada",
["The last {n} hours."] = "Las últimas {n} horas.",
}

Ключ — это английский текст, поэтому отсутствующий перевод показывает английский, а не пустоту или код. Фигурные скобки — это значения, которые подставляет телефон: сохраняйте их и ставьте туда, где они нужны предложению, а не туда, где их поставил английский. Значение "" означает «показать английский»: именно так записываются названия, которые никогда не переводятся (Instapic, Bean Machine, Los Santos).

Телефон читает только тот язык, который выбирает игрок, и только в момент выбора — одиннадцать словарей не загружаются при каждом запуске ради телефона, который показывает один.

Откройте файл языка, найдите строку, измените значение:

["Wallet"] = "Cartera", -- the right-hand side is what the player reads

Перезапустите ресурс. Больше ничего на него не ссылается.

  1. Скопируйте locales/en.lua в locales/<code>.lua — например, nl.lua, — и замените Locales['en'] на Locales['nl'].
  2. Переведите значения. Ключи никогда не меняются.
  3. Если кода нет среди одиннадцати, добавьте его в список, который предлагает выбор языка, в html/core/onboarding.js: const languages=[['en','English','Hello'], … ,['nl','Nederlands','Hallo']]; — код, название на собственном языке и приветствие для первого экрана.
  4. Config.Locale = 'nl', если он должен стать языком города по умолчанию.

Манифест уже поставляет все файлы из locales/, так что регистрировать ничего не нужно. Выбор отмечает язык, для которого ещё нет слов, как Пока показывается на английском, а не скрывает его.