{"id":18886511,"url":"https://github.com/bookshelf-writer/treeoflanguages","last_synced_at":"2026-01-12T01:05:53.474Z","repository":{"id":244099807,"uuid":"814210584","full_name":"Bookshelf-Writer/TreeOfLanguages","owner":"Bookshelf-Writer","description":"Script for working with language trees ","archived":false,"fork":false,"pushed_at":"2024-07-13T17:36:00.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2024-11-08T07:35:34.215Z","etag":null,"topics":["json","python","python3","tree-structure","typescript"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Bookshelf-Writer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2024-06-12T14:49:45.000Z","updated_at":"2024-07-13T17:36:03.000Z","dependencies_parsed_at":"2024-11-08T07:29:35.496Z","dependency_job_id":"b410846e-d00d-4e45-95cd-040234bf40a0","html_url":"https://github.com/Bookshelf-Writer/TreeOfLanguages","commit_stats":null,"previous_names":["bookshelf-writer/treeoflanguages"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bookshelf-Writer%2FTreeOfLanguages","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bookshelf-Writer%2FTreeOfLanguages/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bookshelf-Writer%2FTreeOfLanguages/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bookshelf-Writer%2FTreeOfLanguages/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Bookshelf-Writer","download_url":"https://codeload.github.com/Bookshelf-Writer/TreeOfLanguages/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231944893,"owners_count":18449790,"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","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":["json","python","python3","tree-structure","typescript"],"created_at":"2024-11-08T07:28:04.038Z","updated_at":"2024-12-31T05:16:08.237Z","avatar_url":"https://github.com/Bookshelf-Writer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build](https://github.com/Bookshelf-Writer/TreeOfLanguages/actions/workflows/pylint.yml/badge.svg?branch=main)](https://github.com/Bookshelf-Writer/TreeOfLanguages/actions/workflows/pylint.yml)\n\n![GitHub repo file or directory count](https://img.shields.io/github/directory-file-count/Bookshelf-Writer/TreeOfLanguages?color=orange)\n![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/Bookshelf-Writer/TreeOfLanguages?color=green)\n![GitHub repo size](https://img.shields.io/github/repo-size/Bookshelf-Writer/TreeOfLanguages)\n\n## Скрипт для работы с языковыми деревьями.\n\nОсобенности:\n- Жестко заданная базовая структура, с минимальным количеством обязательных полей\n- Поддержка картинок (флаги)\n- Привязка к ISO 639-2 (указывается только код)\n- Автогенерация недостающих полей\n- Строгая обработка структуры (должны быть ТОЛЬКО строки)\n\nФункционал:\n- Проверка языковых файлов на корректность\n- Перезапись языкового файла, удаляя некорректное, сортируя по ключам и форматируя\n- Сравнение файлов между собой\n- Применение \"изменений\" к другим файлам относительно эталона (добавление новых полей, или удаление отсутствующих)\n- Генерация файла-карты\n\n---\n\n### Скомпилированы е файлы\n- [Windows](/cmd/TreeOfLanguages.windows.exe)\n- [Linux](/cmd/TreeOfLanguages.linux.bin)\n- [MacOS](/cmd/TreeOfLanguages.macos.bin)\n\n[Папка с исполняемыми файлами](/cmd)\n\n_Если есть какие-то проблемы в работе, пробуйте указывать абсолютные пути_\n\n---\n\n### Внешние библиотеки\n- ` pip install argparse `  - Работа с входными параметрами. Аннотации и проверка наличия.\n- ` pip install colorama `  - Поддержка цветов для разных платформ, а не только Linux\n\n\n---\n\n---\n\n### Примеры использования\n\n#### --check _(Проверка файлов)_\n\n- `--file` `-f` - Путь к языковому файлу\n- `--dir` `-d`  - Путь к директории в которой лежат языковые файлы. Недопустимо: [ `/` | ` `  ]\n- `--safe` `-s` - Безопасный режим. При перезаписи будет создаваться копия старой версии.\n\n##### Проверка конкретного файла.\n```bash\npython3 script.py --check --file 'somedir/langTreeFile.en.json' \n```\n\n##### Проверка всех файлов в директории.\n```bash\npython3 script.py --check --dir 'somedir' \n```\n\n---\n\n#### --compiling _(Компиляция и перекомпиляция файлов)_\n- `--file` `-f` - Путь к языковому файлу\n- `--dir` `-d`  - Путь к директории в которой лежат языковые файлы\n- `--tree`      - Режим работы с языковыми деревьями\n- `--routs`     - Режим работы с файлом карты\n- `--reactTS`  - Режим компиляции файла для интеграции в React-проект с TypeScript\n\n##### Перекомпиляция конкретного файла. В случае нахождения недопустимых полей они будут удалены.\n```bash\npython3 script.py --compiling --tree --file 'somedir/langTreeFile.en.json' \n```\n\n##### Перекомпиляция всех файлов в директории.\n```bash\npython3 script.py --compiling --tree --dir 'somedir' \n```\n\n##### Создание файла карты по конкретному файлу.\n```bash\npython3 script.py --compiling --routs --file 'somedir/langTreeFile.en.json' \n```\n\n##### Создание файла карты используя языковые файлы в директории\n```bash\npython3 script.py --compiling --routs --dir 'somedir' \n```\n\n---\n\n#### --compare _(Сравнение файлов)_\n\n- `--file` `-f` - Путь к языковому файлу\n- `--dir` `-d`  - Путь к директории в которой лежат языковые файлы\n- `--pattern`   - Путь к \"эталону\"\n\n##### Проверка различий между двумя файлами\n```bash\npython3 script.py --compare --pattern 'somedir/langTreeFile.ru.json' --file 'somedir/langTreeFile.en.json' \n```\n\n##### Сравнение эталонного файла со всеми файлами в директории.\n```bash\npython3 script.py --compare --pattern 'somedir/langTreeFile.ru.json' --dir 'somedir' \n```\n\n---\n\n#### --clone _(Клонирование изменений)_\n\n- `--file` `-f` - Путь к языковому файлу\n- `--dir` `-d`  - Путь к директории в которой лежат языковые файлы\n- `--pattern`   - Путь к \"эталону\"\n\n##### Перенос изменений из эталонного файла в другой, конкретный, файл\n```bash\npython3 script.py --clone --pattern 'somedir/langTreeFile.ru.json' --file 'somedir/langTreeFile.en.json' \n```\n\n##### Перенос изменений из эталонного файла во все файлы в директории.\n```bash\npython3 script.py --clone --pattern 'somedir/langTreeFile.ru.json' --dir 'somedir' \n```\n\n---\n\n#### --iso _(Работа со вшитыми языками)_\n\n- `--code`      - Поиск по вшитым языкам. По коду.\n- `--name`      - Поиск по вшитым языкам По названию.\n- `--codeOnly`  - Вывод при поиске только коды.\n- `--fileJSON`  - Генерация сжатого base64 по ссылке на json-файл.\n\n##### Поиск по вшитым языкам по имени. Вернет массив с объектами если есть совпадения.\n```bash\npython3 script.py --iso --name 'бело' \n```\n\n##### Поиск по вшитым языкам по коду. Вернет массив строк с кодами если есть совпадения.\n```bash\npython3 script.py --iso --code 'ru' --codeOnly\n```\n\n##### Генерация сжатого представления json-файла. Вернет bash64-строку.\n```bash\npython3 script.py --iso --fileJSON './someFile.json' \n```\n\n#### Использования в реальных задачах\n\n##### Обновление интеграции с React-TS\n```bash\npython3 script.py --clone --pattern './treeLang/langTreeFile.ru.json' --dir './treeLang' \npython3 script.py --compiling --reactTS --dir './treeLang' \n```\n- Все языковые файлы в `dir` приводятся к единой структуре, недостающие поля копируются из `pattern`\n- Создание (или обновление) файла `languages.ts` с встраиванием всех языковых файлов в `dir`\n\n##### Обновление интеграции с JS\n```bash\npython3 script.py --clone --pattern './treeLang/langTreeFile.ru.json' --dir './treeLang' \npython3 script.py --compiling --JS --dir './treeLang' \n```\n- Все языковые файлы в `dir` приводятся к единой структуре, недостающие поля копируются из `pattern`\n- Создание (или обновление) файла `languages.js` с встраиванием всех языковых файлов в `dir`\n\n\n---\n\n---\n\n### Структура\n\nПример файла языкового дерева `example.ru.json`\n```json\n{\n  \"info\": {\n    \"iso\": \"ru\",\n    \"date\": \"2024-05-18\",\n    \"hash\": \"d7f8dcd7be4a924c63826de09af356bc\",\n    \"img\": \"data:image/svg+xml;base64,PD94....\"\n  },\n  \"data\": {\n    \"string_value_1\": \"test text\",\n    \"stringValue2\": \"new text\",\n    \"groupString1\": {\n      \"a1\": \"\",\n      \"a2\": \"\",\n      \"groupString2\": {\n        \"b1\": \"\",\n        \"b2\": \"\"\n      }\n    },\n    \"arrayString1\": [\n        \"c1\",\n        \"c2\"\n    ],\n    \"arrayString2\": [\n        {\n            \"h1\": \"\",\n            \"h2\": \"\"\n        }\n    ]\n  }\n}\n```\n\n- Блоки **info** и **data** обязательные.\n- Поле **iso** в блоке **info** является обязательным (код языка).\n- Поля **date** и **hash** в блоке **info** автоматически генерируются при перекомпиляции.\n- Поле **img** в блоке **info** принимает только строку `data:image` в формате `base64`. Поле может быть пустым или отсутствовать.\n- В блоке **data** ключ состоит из латинских букв, цифр и нижнего подчеркивания. Ключ не может начинаться с цифры.\n- В блоке **data** допустимы только строки и не пустые массивы\\объекты. Массив\\объект может быть заполнен любым разрешенным типом.\n- При пере компиляции все объекты в **date** сортируются по ключам. Гаданая очередность сохранятся только в массивах.\n\n---\n\nПример файла карты `languages.json`\n```json\n{\n  \"ru\": {\n    \"file\": \"ru.json\",\n    \"img\": \"data:image/svg+xml;.....\",\n    \"name\": {\n      \"short\": \"RU\",\n      \"full\": \"Russian\",\n      \"native\": \"Русский\"\n    }\n  },\n  \"en\": {\n    \"file\": \"en.json\",\n    \"img\": \"\",\n    \"name\": {\n      \"short\": \"EN\",\n      \"full\": \"English\",\n      \"native\": \"English\"\n    }\n  }\n}\n```\n\n- Файл карты полностью генерируемый.\n- Первичный ключ является **iso** из файла языкового дерева.\n- Поле **img** копируется из языкового дерева. Если такого поля там нет, то оставляет пустую строку\n- Поле **name** автоматически генерируется. **short** это первичный ключ в верхнем регистре. Поля **full** и **native** берутся из вшитого в скрипт словаря.\n- Порядок блоков соответствует тому, как скрипт прочитал файлы из директории. Очередность можно задать именованием файлов.\n\n---\n\n---\n\n### Mirrors\n\n- https://git.bookshelf-writer.fun/Bookshelf-Writer/TreeOfLanguages\n ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbookshelf-writer%2Ftreeoflanguages","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbookshelf-writer%2Ftreeoflanguages","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbookshelf-writer%2Ftreeoflanguages/lists"}