Skip to content

Форматирование строк

Andrey Lemin edited this page May 5, 2023 · 4 revisions

Эта статья не дописана! По всем вопросам форматирования обращайтесь в чат телеграма

В игре часто встречаются форматные строки вида

<MessageRaidersBeginningAssault>{0} из фракции {1} идут на штурм.</MessageRaidersBeginningAssault>
<MessagePrisonerIsEscaping>{1_gender ? Пленник : Пленница} {1_labelShort} устраивает побег!</MessagePrisonerIsEscaping>
<MessageOutOfNearbyShellsFor>{PAWN_labelShort} не может найти снарядов для {lookup: {GUN_label}; Case; 1}.</MessageOutOfNearbyShellsFor>

Их игра использует, чтобы вместо скобок и подставлять конкретные значения своих переменных, передаваемых функции форматирования в виде набора аргументов.

Аргументы бывают следующих видов:

Нумерованные

Именованные

Помимо форматных строк с нумерованными аргументами в игре встречаются строки с именованными аргументами.

Символы и подсимволы

Работает такое не везде, а только в тех текстах, куда в коде передаётся символ (то есть объект с полями).

Кроме того, не все подсимволы можно применить ко всем символам. Например, тот же gender применим к символам типа Pawn и Thing (и, возможно, ещё в каких-то). Но неприменим к Hediff

  • nameDef - имя персонажа
  • pronoun - местоимение "он"/"она", в зависимости от пола персонажа
  • possessive - местоимение "его"/"её"; для получения форм "него/неё" пользуйтесь трюком н{PAWN_possessive}
  • objective - местоимение "ему"/"ей"
  • gender ? фразаМ : фразаЖ : фразаСр - тернарный оператор, как в C. В зависимости от рода переданного символа игра вставит "фразаМ", "фразаЖ" или "фразаСр"
  1. Символ имени: {PAWN_nameDef} — краткое имя (Jonathan), {PAWN_nameFull} — полное имя (Jonathan Rigby)
  2. Символы местоимений: {PAWN_pronoun} — он/она, {PAWN_possessive} — его/её, н{PAWN_possessive} — него/неё, {PAWN_objective} — ему/ей.
  3. Gender-подсимвол: {PAWN_gender ? работал массажистом : работала массажисткой}

Функции

В версии 1.3 в локализацию была добавлена поддержка функций: https://discord.com/channels/684960023020961812/709450321855905793/946519409218953216

Они имеют следующий синтаксис

{<имя функции>: <аргумент1>; <аргумент2>; ... <аргументN>}

Функции можно определить самим локализаторам в классе LanguageWorker. В игре есть следующие встроенные функции:

lookup

Делает табличную замену. Пример: Повышает уровень интереса к {lookup: {0_label}; Case; 2}.

Параметры:

  1. Ключ поиска. В данном случае — подсимвол label нумерованного символа 0,
  2. Имя файлы-таблицы, в данном случае */WordInfo/Case.txt
  3. Номер столбца, нумерация с нуля. В данном случае - третий столбец. Он соответствует дательному падежу.

В результате в игре будет строчка Повышает уровень интереса к Искусству

replace

Пример: Течение родов {PAWN_labelShort} из {replace: {1}; "лёгкое"-"лёгкого"; "тяжёлое"-"тяжёлого"; "очень тяжёлое"-"очень тяжёлого"} стало {replace: {2}; "лёгкое"-"лёгким"; "тяжёлое"-"тяжёлым"; "очень тяжёлое"-"очень тяжёлым"}.

Параметры:

  1. То, что нужно заменить
  2. и каждый последующий параметр: пара ключ-значение.

Функция вернёт значение, которое соответствует ключу, равному первому параметру. Если в {1} игра подставит слово "тяжёлое", то функция заменит его на "тяжёлого"