diff --git a/JSON_STRUCTURE.md b/JSON_STRUCTURE.md new file mode 100644 index 0000000..08a024d --- /dev/null +++ b/JSON_STRUCTURE.md @@ -0,0 +1,120 @@ +# Описание структуры JSON-файла для информатора времени + +Данный конфигурационный файл является универсальной языковой базой данных +для скрипта `time2word`. Архитектура файла спроектирована для динамического +вывода времени на основе четырёх различных триггеров и поддерживает систему +гибких текстовых подстановок. + +--- + +## 1. Текстовые подстановки (Метки) +Внутри текстовых строк используются специальные метки в фигурных скобках `{}`. +При выводе времени вместо них автоматически подставляются нужные слова, +сгенерированные скриптом с помощью библиотеки `num2words`: +* `{h_word}` — час текстом (например: *«три»*, *«десять»*). +* `{h_sfx}` — обозначение часа (*«час»*, *«часа»*, *«часов»*). +* `{m_word}` — минута текстом (например: *«одиннадцать»*, *«сорок»*). +* `{m_sfx}` — обозначение минуты (*«минута»*, *«минуты»*, *«минут»*). +* `{time_of_day}` — время суток (*«ночи»*, *«утра»*, *«дня»*, *«вечера»*). + +--- + +## 2. Минимальный пример структуры файла +```json +{ + "midnight_phrases": [ + "Полночь. Начинаются новые сутки." + ], + "noon_phrases": [ + "На часах полдень. Середина дня." + ], + "hour_templates_by_period": { + "night": [ + ["Наступил первый час ночи. На приборах уже {h_word} {h_sfx}."], + ["На курантах уже {h_word} {h_sfx} {time_of_day}."], + ["Время {h_word} {h_sfx} {time_of_day}."], + ["На часах {h_word} {h_sfx} {time_of_day}."], + ["Уже {h_word} {h_sfx} {time_of_day}."] + ], + "morning": [ + ["Шесть утра, подъем! На часах уже {h_word} {h_sfx}."], + ["На курантах уже {h_word} {h_sfx} {time_of_day}."], + ["Время {h_word} {h_sfx} {time_of_day}."], + ["На часах {h_word} {h_sfx} {time_of_day}."], + ["Уже {h_word} {h_sfx} {time_of_day}."], + ["Стрелки показывают ровно {h_word} {h_sfx} {time_of_day}."] + ], + "day": [ + ["Первый час после полудня. На часах уже {h_word} {h_sfx}."], + ["На курантах уже {h_word} {h_sfx} {time_of_day}."], + ["Время {h_word} {h_sfx} {time_of_day}."], + ["На часах {h_word} {h_sfx} {time_of_day}."], + ["Уже {h_word} {h_sfx} {time_of_day}."] + ], + "evening": [ + ["День окончен, на курантах уже {h_word} {h_sfx}."], + ["На курантах уже {h_word} {h_sfx} {time_of_day}."], + ["Время {h_word} {h_sfx} {time_of_day}."], + ["На часах {h_word} {h_sfx} {time_of_day}."], + ["Уже {h_word} {h_sfx} {time_of_day}."], + ["Стрелки показывают ровно {h_word} {h_sfx} {time_of_day}."] + ] + }, + "minute_phrases": [ + "Точное время: {h_word} {h_sfx} {time_of_day} и {m_word} {m_sfx}." + ] +} +``` + +--- + +## 3. Назначение ключей и привязка к сетке времени + +Файл разделен на четыре основных блока в зависимости от того, какое время +сейчас на часах. + +**Количество фраз внутри любого конечного списка не ограничено** (одна-две +штуки в примере — лишь демонстрационный вариант, списки можно расширять до +любого объема). + +### `midnight_phrases` (Полночь) +* **Время**: Ровно **00:00**. +* **Описание**: Набор готовых фраз для объявления начала новых суток. + +### `noon_phrases` (Полдень) +* **Время**: Ровно **12:00**. +* **Описание**: Набор готовых фраз для объявления середины дня. + +### `hour_templates_by_period` (Почасовые блоки для ровного времени) +* **Время**: Начало любого часа, когда на часах **ровно 00 минут** + (за исключением 00:00 и 12:00). +* **Описание**: Содержит четыре списка, разбитых по временам суток. Внутри + каждого списка лежат отдельные вложенные списки с фразами для + **каждого конкретного часа**. + +**Важное замечание к контенту**: Каждый вложенный список жестко привязан +к хронологическому порядку. При написании сложных сюжетных и ролевых реплик +(например, для роли радиоведущего) продолжение фразы и контекст должны +соответствовать логике именно этого часа (не стоит использовать контекст +раннего утра для списков позднего утра). + +* **`night`** (Ночь) — включает в себя 5 последовательных списков фраз: + * 1-й список: для **01:00** + * 2-й список: для **02:00** + * 3-й список: для **03:00** + * 4-й список: для **04:00** + * 5-й список: для **05:00** +* **`morning`** (Утро) — включает в себя 6 последовательных списков фраз: + * списки для каждого часа отдельно с **06:00** до **11:00** +* **`day`** (День) — включает в себя 5 последовательных списков фраз: + * списки для каждого часа отдельно с **13:00** до **17:00** +* **`evening`** (Вечер) — включает в себя 6 последовательных списков фраз: + * списки для каждого часа отдельно с **18:00** до **23:00** + +### `minute_phrases` (Фразы для некруглого времени) +* **Время**: Любая минута **от 01 до 59** (например: 15:11, 08:45, 23:02). +* **Описание**: Общий набор универсальных фраз. Шаблоны из этого списка + используются в любое некруглое время, полностью заменяя собой почасовые + блоки. Каждая строка содержит одновременно метки и для часов, и для минут, + чтобы составить законченное предложение. + diff --git a/README.md b/README.md index f92bb99..5a2385c 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,10 @@ из Fallout 3. Файл нужно положить в каталог `~/.local/share/time_signals/`. Скрипт ищет его именно там. +Подробное руководство по созданию собственных языковых пакетов и внутреннему +устройству конфигурационного файла вынесено в +[описание структуры JSON-файла](JSON_STRUCTURE.md). + --- ## scrn-sht