-
Notifications
You must be signed in to change notification settings - Fork 116
Форматирование строк
В игре часто встречаются форматные строки вида
<MessageRaidersBeginningAssault>{0} из фракции {1} идут на штурм.</MessageRaidersBeginningAssault>
<MessagePrisonerIsEscaping>{1_gender ? Пленник : Пленница} {1_labelShort} устраивает побег!</MessagePrisonerIsEscaping>
<MessageOutOfNearbyShellsFor>{PAWN_labelShort} не может найти снарядов для {lookup: {GUN_label}; Case; 1}.</MessageOutOfNearbyShellsFor>
Их игра использует, чтобы вместо скобок и подставлять конкретные значения своих переменных, передаваемых функции форматирования в виде набора аргументов.
Аргументы бывают следующих видов:
Помимо форматных строк с нумерованными аргументами в игре встречаются строки с именованными аргументами.
Работает такое не везде, а только в тех текстах, куда в коде передаётся символ (то есть объект с полями).
Кроме того, не все подсимволы можно применить ко всем символам. Например, тот же gender применим к символам типа Pawn и Thing (и, возможно, ещё в каких-то). Но неприменим к Hediff
-
nameFull
— полное имя персонажа, например, "Jonathan Rigby" -
nameDef
— краткое имя, просто "Jonathan" -
pronoun
— местоимение "он"/"она", в зависимости от пола персонажа -
possessive
— местоимение "его"/"её"; для получения форм "него/неё" пользуйтесь трюкомн{PAWN_possessive}
-
objective
— местоимение "ему"/"ей" -
gender ? фразаМ : фразаЖ : фразаСр
- гендерный подсимвол. В зависимости от рода переданного символа игра вставит "фразаМ", "фразаЖ" или "фразаСр". Пример:{PAWN_nameDef} {PAWN_gender ? работал массажистом : работала массажисткой}
-
numCase ? год : года : лет
- в зависимости от числа N в символе, подставится соответствующая форма. Для N=1 — "1 год", для N=2..4 — "N года", для N=5..9 — "лет". С большими N, с N=11..19 и десятичными дробями подсимвол работает тоже хорошо
В версии 1.3 в локализацию была добавлена поддержка функций: https://discord.com/channels/684960023020961812/709450321855905793/946519409218953216
Они имеют следующий синтаксис
{<имя функции>: <аргумент1>; <аргумент2>; ... <аргументN>}
Функции можно определить самим локализаторам в классе LanguageWorker. В игре есть следующие встроенные функции:
Делает табличную замену. Пример: Повышает уровень интереса к {lookup: {0_label}; Case; 2}.
Параметры:
- Ключ поиска. В данном случае — подсимвол
label
нумерованного символа0
, - Имя файлы-таблицы, в данном случае */WordInfo/Case.txt
- Номер столбца, нумерация с нуля. В данном случае - третий столбец. Он соответствует дательному падежу.
В результате в игре будет строчка Повышает уровень интереса к Искусству
Пример: Течение родов {PAWN_labelShort} из {replace: {1}; "лёгкое"-"лёгкого"; "тяжёлое"-"тяжёлого"; "очень тяжёлое"-"очень тяжёлого"} стало {replace: {2}; "лёгкое"-"лёгким"; "тяжёлое"-"тяжёлым"; "очень тяжёлое"-"очень тяжёлым"}.
Параметры:
- То, что нужно заменить
- и каждый последующий параметр: пара ключ-значение.
Функция вернёт значение, которое соответствует ключу, равному первому параметру. Если в {1} игра подставит слово "тяжёлое", то функция заменит его на "тяжёлого"