{"id":15639399,"url":"https://github.com/alexxit/morphnumbers","last_synced_at":"2025-09-05T20:42:11.933Z","repository":{"id":49969001,"uuid":"247956014","full_name":"AlexxIT/MorphNumbers","owner":"AlexxIT","description":"Компонент Home Assistant для работы с числительными в Jinja2","archived":false,"fork":false,"pushed_at":"2025-08-25T14:38:32.000Z","size":742,"stargazers_count":98,"open_issues_count":1,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-25T16:29:27.631Z","etag":null,"topics":["home-assistant"],"latest_commit_sha":null,"homepage":"https://t.me/AlexxIT_SmartHome","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexxIT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-03-17T11:46:08.000Z","updated_at":"2025-08-25T14:38:21.000Z","dependencies_parsed_at":"2024-08-03T16:43:55.786Z","dependency_job_id":"99064ce3-e0f4-46bf-ace9-813085196cd5","html_url":"https://github.com/AlexxIT/MorphNumbers","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/AlexxIT/MorphNumbers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FMorphNumbers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FMorphNumbers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FMorphNumbers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FMorphNumbers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexxIT","download_url":"https://codeload.github.com/AlexxIT/MorphNumbers/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FMorphNumbers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273817829,"owners_count":25173694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["home-assistant"],"created_at":"2024-10-03T11:25:44.241Z","updated_at":"2025-09-05T20:42:11.886Z","avatar_url":"https://github.com/AlexxIT.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Morph Numbers для Home Assistant\n\n[![hacs_badge](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://github.com/custom-components/hacs)\n\nКомпонент [Home Assistant](https://www.home-assistant.io/), добавляющий **Jinja2** фильтр для работы с числительными. Хорошо подходит в дополнение к моему второму компоненту [YandexStation](https://github.com/AlexxIT/YandexStation).\n\n![template](template2.png)\n\n## Установка\n\n**Способ 1.** [HACS](https://hacs.xyz/)\n\n\u003e HACS \u003e Интеграции \u003e 3 точки (правый верхний угол) \u003e Пользовательские репозитории \u003e URL: `AlexxIT/MorphNumbers`, Категория: Интеграция \u003e Добавить \u003e подождать \u003e MorphNumbers \u003e Установить\n\n**Способ 2.** Вручную скопируйте папку `morph_numbers` из [latest release](https://github.com/AlexxIT/MorphNumbers/releases/latest) в директорию `/config/custom_components`.\n\n## Настройка\n\n**Способ 1.** GUI\n\n\u003e Настройки \u003e Интеграции \u003e Добавить интеграцию \u003e **MorphNumbers**\n\nЕсли интеграции нет в списке - очистите кэш браузера.\n\n**Способ 2.** YAML\n\n```yaml\nmorph_numbers:\n```\n\n## Использование\n\nИспользуется как дополнительный фильтр в шаблонах.\n\n### Согласование слов с числительными\n\nПолезно при отправке в Телеграм\n\n```jinja2\n{{ 24|format(morph='градус', as_text=false) }} =\u003e 24 градуса\n```\n\n### Преобразование чисел в текст\n\nПолезно для TTS. Яндекс и Google допускают ошибки при произнесении числительных.\n\nВ `morph` желательно писать слово/фразу, согласованную с цифрой 1, например:\n- \"перезагружен за одну секунду\" - `morph='секунду'`\n- \"одна секунда это вечность\" - `morph='секунда'`\n\n```jinja2\nСервер перезагружен, за {{ 31|round|format(morph='секунду') }} =\u003e Сервер перезагружен, за тридцать одну секунду\n\n{{ 31|round|format(morph='секунда') }} - это целая вечность! =\u003e тридцать одна секунда - это целая вечность!\n```\n\n### Порядковые числительные\n\nВ `morph` нужно указать пример, в какую форму преобразовать числительное.\n\n```jinja2\nи снова {{ 3|format(morph='первое', as_ordinal=True) }} сентября =\u003e и снова третье сентября\n```\n\n### Ручной шаблон согласования\n\nВ случае, если автоматическая морфология допускает ошибки. Укажите слова для чисел: 1, 2, 5.\n\n```jinja2\n{{ 5|format(morph=['год','года','лет']) }} =\u003e пять лет\n```\n\n### Число без согласования\n\n```jinja2\n{{ 2000435|format(morph='') }} =\u003e два миллиона четыреста тридцать пять\n```\n\n### Согласование без вывовда числа\n\n```jinja2\n{{ 5|format(morph='просроченная задача', as_text=None) }} =\u003e просроченных задач\n```\n\n### Обратное преобразование\n\n```jinja2\n{{ \"два миллиона четыреста тридцать пять\"|format(morph='', reverse=true) }} =\u003e 2000435\n```\n\n### Дробные числа\n\nСогласно правилам, целая и дробная части числа согласуются со словом \"часть\".\n\n```jinja2\n{{ 22.2|format(morph='градус') }} =\u003e двадцать две целых и две десятых градуса\n```\n\n## Шаблон из скриншота\n\n```yaml\nСтарт занял {{ states('sensor.start_time')|round|format(morph='секунду') }}\n\n{{ 1|format(morph='градус') }}\n{{ 1|format(morph='задача') }}\n{{ 1|format(morph='дерево') }}\n\n{{ 2000435|format(morph='синее облако') }}\n\n{{ 2|format(morph='запланированная задача', as_text=false) }}\n{{ 5|format(morph='просроченная задача', as_text=false) }}\n\n{{ 123|format(morph='') }}\n\n{{ 0|format(morph='градус') }}\n{{ -2|format(morph='градус') }}\n\n{{ 5|format(morph=['год','года','лет']) }}\n\n{{ 100|format(morph='первому', as_ordinal=True) }} игроку приготовиться\nи снова {{ 3|format(morph='первое', as_ordinal=True) }} сентября\n\n{{ 5|format(morph='просроченная задача', as_text=None) }}\n```\n\n```yaml\nscript:\n  morph_numbers_test:\n    sequence:\n    - service: persistent_notification.create\n      data_template:\n        message: Старт занял {{ states('sensor.start_time')|round|format(morph='секунду') }}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexxit%2Fmorphnumbers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexxit%2Fmorphnumbers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexxit%2Fmorphnumbers/lists"}