From 5c8df540db223209bfd843fe2b7b3b3ede0dee8f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 8 Dec 2025 12:43:00 +0200 Subject: [PATCH] chore(readme): fix language switcher links (closes #7246) --- README.md | 3 +- docs/README.md | 3 +- scripts/translation/.language-stats.json | 1944 ++++++++++++++++++++++ scripts/translation/manage-readme.ts | 69 +- 4 files changed, 2007 insertions(+), 12 deletions(-) create mode 100644 scripts/translation/.language-stats.json diff --git a/README.md b/README.md index dce441a2f..71eb46386 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ [![RelativeCI](https://badges.relative-ci.com/badges/Di5q7dz9daNDZ9UXi0Bp?branch=develop)](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [![Translation status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted.weblate.org/engage/trilium/) -[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | [Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md) | [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) | [Spanish](./docs/README-es.md) + +[English](./docs/README.md) | [Chinese (Simplified Han script)](./docs/README-ZH_CN.md) | [Chinese (Traditional Han script)](./docs/README-ZH_TW.md) | [Spanish](./docs/README-es.md) | [Italian](./docs/README-it.md) | [Japanese](./docs/README-ja.md) | [Romanian](./docs/README-ro.md) | [German](./docs/README-de.md) | [Greek](./docs/README-el.md) | [French](./docs/README-fr.md) Trilium Notes is a free and open-source, cross-platform hierarchical note taking application with focus on building large personal knowledge bases. diff --git a/docs/README.md b/docs/README.md index 244cd0e83..80ee132dc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,7 +17,8 @@ [![RelativeCI](https://badges.relative-ci.com/badges/Di5q7dz9daNDZ9UXi0Bp?branch=develop)](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [![Translation status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted.weblate.org/engage/trilium/) -[English](../README.md) | [Chinese (Simplified)](./README-ZH_CN.md) | [Chinese (Traditional)](./README-ZH_TW.md) | [Russian](./README-ru.md) | [Japanese](./README-ja.md) | [Italian](./README-it.md) | [Spanish](./README-es.md) + +[English](../README.md) | [Chinese (Simplified Han script)](./README-ZH_CN.md) | [Chinese (Traditional Han script)](./README-ZH_TW.md) | [Spanish](./README-es.md) | [Italian](./README-it.md) | [Japanese](./README-ja.md) | [Romanian](./README-ro.md) | [German](./README-de.md) | [Greek](./README-el.md) | [French](./README-fr.md) Trilium Notes is a free and open-source, cross-platform hierarchical note taking application with focus on building large personal knowledge bases. diff --git a/scripts/translation/.language-stats.json b/scripts/translation/.language-stats.json new file mode 100644 index 000000000..9c1befaa0 --- /dev/null +++ b/scripts/translation/.language-stats.json @@ -0,0 +1,1944 @@ +{ + "count": 35, + "next": null, + "previous": null, + "results": [ + { + "language": { + "id": 31, + "code": "en", + "name": "English", + "plural": { + "id": 75, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "base", + "en_en", + "en_us", + "eng", + "enp", + "source" + ], + "direction": "ltr", + "population": 1728003224, + "web_url": "https://hosted.weblate.org/languages/en/", + "url": "https://hosted.weblate.org/api/languages/en/", + "statistics_url": "https://hosted.weblate.org/api/languages/en/statistics/" + }, + "language_code": "en", + "id": 1614608, + "filename": "docs/README.md", + "revision": "5c59039312ea3d3684cbb62748ea9249d1a06a6d,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/en/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/en/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/en/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/en/", + "is_template": true, + "is_source": true, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 16, + "failing_checks_words": 109, + "failing_checks_percent": 13.5, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:53:52.294489+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/en/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/en/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/en/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/en/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/en/units/" + }, + { + "language": { + "id": 186, + "code": "zh_Hans", + "name": "Chinese (Simplified Han script)", + "plural": { + "id": 57, + "source": 0, + "number": 1, + "formula": "0", + "type": 0 + }, + "aliases": [ + "chi", + "chinese", + "chinese_chs", + "chinese_zh", + "chs", + "cmn", + "cmn_hans", + "cn", + "schinese", + "zh", + "zh_chs", + "zh_cmn_hans", + "zh_cn", + "zh_hans_cn", + "zh_simplified", + "zhcn" + ], + "direction": "ltr", + "population": 1286444445, + "web_url": "https://hosted.weblate.org/languages/zh_Hans/", + "url": "https://hosted.weblate.org/api/languages/zh_Hans/", + "statistics_url": "https://hosted.weblate.org/api/languages/zh_Hans/statistics/" + }, + "language_code": "ZH_CN", + "id": 1614681, + "filename": "docs/README-ZH_CN.md", + "revision": "1830b2144a971d78896812027ac33f2348a4c513,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/zh_Hans/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/zh_Hans/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/zh_Hans/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hans/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:14.143896+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hans/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hans/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hans/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hans/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hans/units/" + }, + { + "language": { + "id": 185, + "code": "zh_Hant", + "name": "Chinese (Traditional Han script)", + "plural": { + "id": 734, + "source": 0, + "number": 1, + "formula": "0", + "type": 0 + }, + "aliases": [ + "cht", + "cmn_hant", + "tchinese", + "zh_cht", + "zh_cmn_hant", + "zh_hant@zh", + "zh_hant_tw", + "zh_traditional", + "zh_tw", + "zho", + "zhtw" + ], + "direction": "ltr", + "population": 39078482, + "web_url": "https://hosted.weblate.org/languages/zh_Hant/", + "url": "https://hosted.weblate.org/api/languages/zh_Hant/", + "statistics_url": "https://hosted.weblate.org/api/languages/zh_Hant/statistics/" + }, + "language_code": "ZH_TW", + "id": 1614682, + "filename": "docs/README-ZH_TW.md", + "revision": "2021df9f07639e22a8f4c0b2ec293180e9417519,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/zh_Hant/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/zh_Hant/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/zh_Hant/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hant/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:14.334553+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hant/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hant/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hant/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hant/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/zh_Hant/units/" + }, + { + "language": { + "id": 103, + "code": "es", + "name": "Spanish", + "plural": { + "id": 291, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "es_es", + "es_la", + "esp", + "spa" + ], + "direction": "ltr", + "population": 507161083, + "web_url": "https://hosted.weblate.org/languages/es/", + "url": "https://hosted.weblate.org/api/languages/es/", + "statistics_url": "https://hosted.weblate.org/api/languages/es/statistics/" + }, + "language_code": "es", + "id": 1614683, + "filename": "docs/README-es.md", + "revision": "75f6c28eecc5ae7af9c151e1b2fae9581286f2a1,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/es/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/es/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/es/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/es/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:15.458107+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/es/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/es/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/es/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/es/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/es/units/" + }, + { + "language": { + "id": 86, + "code": "it", + "name": "Italian", + "plural": { + "id": 146, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "it_it", + "ita", + "ita_it" + ], + "direction": "ltr", + "population": 70475318, + "web_url": "https://hosted.weblate.org/languages/it/", + "url": "https://hosted.weblate.org/api/languages/it/", + "statistics_url": "https://hosted.weblate.org/api/languages/it/statistics/" + }, + "language_code": "it", + "id": 1614684, + "filename": "docs/README-it.md", + "revision": "2ddb0025430cee98d7f3c03d2267cdb8f4af5bcf,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/it/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/it/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/it/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/it/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:16.673093+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/it/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/it/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/it/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/it/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/it/units/" + }, + { + "language": { + "id": 49, + "code": "ja", + "name": "Japanese", + "plural": { + "id": 148, + "source": 0, + "number": 1, + "formula": "0", + "type": 0 + }, + "aliases": [ + "ja_ja", + "ja_jp", + "jp", + "jp_jpn", + "jpn", + "jpn_jp" + ], + "direction": "ltr", + "population": 117608755, + "web_url": "https://hosted.weblate.org/languages/ja/", + "url": "https://hosted.weblate.org/api/languages/ja/", + "statistics_url": "https://hosted.weblate.org/api/languages/ja/statistics/" + }, + "language_code": "ja", + "id": 1614685, + "filename": "docs/README-ja.md", + "revision": "fd2c1fa546f569a20a7fa451837504787e0ed095,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/ja/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/ja/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/ja/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/ja/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:16.823524+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/ja/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/ja/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/ja/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ja/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ja/units/" + }, + { + "language": { + "id": 38, + "code": "ro", + "name": "Romanian", + "plural": { + "id": 251, + "source": 0, + "number": 3, + "formula": "n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2", + "type": 2 + }, + "aliases": [ + "mol", + "ro_ro", + "ron", + "rum" + ], + "direction": "ltr", + "population": 20043506, + "web_url": "https://hosted.weblate.org/languages/ro/", + "url": "https://hosted.weblate.org/api/languages/ro/", + "statistics_url": "https://hosted.weblate.org/api/languages/ro/statistics/" + }, + "language_code": "ro", + "id": 1614686, + "filename": "docs/README-ro.md", + "revision": "6f672b32dbfedf2f57a710a62c11c5b753e9dc1d,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/ro/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/ro/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/ro/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/ro/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 1, + "failing_checks_words": 2, + "failing_checks_percent": 0.8, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:18.461356+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/ro/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/ro/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/ro/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ro/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ro/units/" + }, + { + "language": { + "id": 36, + "code": "ru", + "name": "Russian", + "plural": { + "id": 255, + "source": 0, + "number": 3, + "formula": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", + "type": 22 + }, + "aliases": [ + "ru_r", + "ru_rr", + "ru_ru", + "rus" + ], + "direction": "ltr", + "population": 193610712, + "web_url": "https://hosted.weblate.org/languages/ru/", + "url": "https://hosted.weblate.org/api/languages/ru/", + "statistics_url": "https://hosted.weblate.org/api/languages/ru/statistics/" + }, + "language_code": "ru", + "id": 1614687, + "filename": "docs/README-ru.md", + "revision": "ce4750e0fd84f5b51f46a81f008d7249d876f203,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/ru/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/ru/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/ru/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/ru/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 78, + "translated_words": 640, + "translated_percent": 66.1, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 2, + "failing_checks_words": 7, + "failing_checks_percent": 1.6, + "have_suggestion": 2, + "have_comment": 0, + "last_change": "2025-12-08T10:55:18.631436+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/ru/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/ru/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/ru/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ru/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ru/units/" + }, + { + "language": { + "id": 12, + "code": "tr", + "name": "Turkish", + "plural": { + "id": 323, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "tr_tr", + "trk", + "tur" + ], + "direction": "ltr", + "population": 82419542, + "web_url": "https://hosted.weblate.org/languages/tr/", + "url": "https://hosted.weblate.org/api/languages/tr/", + "statistics_url": "https://hosted.weblate.org/api/languages/tr/statistics/" + }, + "language_code": "tr", + "id": 1614699, + "filename": "docs/README-tr.md", + "revision": "1b33459e924d5b3e8398f08f4d46d7256a59abf9,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/tr/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/tr/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/tr/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/tr/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 11, + "translated_words": 97, + "translated_percent": 9.3, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 1, + "have_comment": 0, + "last_change": "2025-12-08T10:55:19.281339+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/tr/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/tr/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/tr/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/tr/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/tr/units/" + }, + { + "language": { + "id": 23, + "code": "pt_BR", + "name": "Portuguese (Brazil)", + "plural": { + "id": 246, + "source": 0, + "number": 2, + "formula": "n > 1", + "type": 1 + }, + "aliases": [ + "bp", + "braz_por", + "por_br", + "portuguese_br", + "ptb" + ], + "direction": "ltr", + "population": 200247320, + "web_url": "https://hosted.weblate.org/languages/pt_BR/", + "url": "https://hosted.weblate.org/api/languages/pt_BR/", + "statistics_url": "https://hosted.weblate.org/api/languages/pt_BR/statistics/" + }, + "language_code": "pt_BR", + "id": 1614700, + "filename": "docs/README-pt_BR.md", + "revision": "88f2a4bbdb291cb85fbb65130d2a15c78a6fd8e5,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/pt_BR/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/pt_BR/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/pt_BR/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/pt_BR/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 0, + "translated_words": 0, + "translated_percent": 0, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:18.291539+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt_BR/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt_BR/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt_BR/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt_BR/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt_BR/units/" + }, + { + "language": { + "id": 24, + "code": "de", + "name": "German", + "plural": { + "id": 104, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "de_de", + "deu", + "deu_de", + "ger" + ], + "direction": "ltr", + "population": 141873196, + "web_url": "https://hosted.weblate.org/languages/de/", + "url": "https://hosted.weblate.org/api/languages/de/", + "statistics_url": "https://hosted.weblate.org/api/languages/de/statistics/" + }, + "language_code": "de", + "id": 1614701, + "filename": "docs/README-de.md", + "revision": "9ac27b9025f2b4530290bf14b68b64f20b6bdcf0,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/de/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/de/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/de/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/de/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 2, + "failing_checks_words": 4, + "failing_checks_percent": 1.6, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:14.982190+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/de/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/de/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/de/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/de/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/de/units/" + }, + { + "language": { + "id": 29, + "code": "el", + "name": "Greek", + "plural": { + "id": 108, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "el_gr", + "ell", + "gr", + "gre" + ], + "direction": "ltr", + "population": 12249401, + "web_url": "https://hosted.weblate.org/languages/el/", + "url": "https://hosted.weblate.org/api/languages/el/", + "statistics_url": "https://hosted.weblate.org/api/languages/el/statistics/" + }, + "language_code": "el", + "id": 1614702, + "filename": "docs/README-el.md", + "revision": "bc3eeb0d043038c93ba51939188657e38f5cf366,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/el/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/el/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/el/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/el/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:15.136428+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/el/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/el/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/el/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/el/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/el/units/" + }, + { + "language": { + "id": 42, + "code": "uk", + "name": "Ukrainian", + "plural": { + "id": 327, + "source": 0, + "number": 3, + "formula": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", + "type": 22 + }, + "aliases": [ + "ua", + "ua_ua", + "uk_ua", + "uk_uk", + "ukr" + ], + "direction": "ltr", + "population": 24080585, + "web_url": "https://hosted.weblate.org/languages/uk/", + "url": "https://hosted.weblate.org/api/languages/uk/", + "statistics_url": "https://hosted.weblate.org/api/languages/uk/statistics/" + }, + "language_code": "uk", + "id": 1614703, + "filename": "docs/README-uk.md", + "revision": "a7578bd58f4beaf3a2594563865667833e124567,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/uk/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/uk/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/uk/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/uk/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 38, + "translated_words": 303, + "translated_percent": 32.2, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:19.440960+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/uk/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/uk/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/uk/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/uk/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/uk/units/" + }, + { + "language": { + "id": 53, + "code": "ca", + "name": "Catalan", + "plural": { + "id": 46, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "ca_ca", + "ca_es", + "ca_ps", + "cat" + ], + "direction": "ltr", + "population": 8218781, + "web_url": "https://hosted.weblate.org/languages/ca/", + "url": "https://hosted.weblate.org/api/languages/ca/", + "statistics_url": "https://hosted.weblate.org/api/languages/ca/statistics/" + }, + "language_code": "ca", + "id": 1614704, + "filename": "docs/README-ca.md", + "revision": "301e382cce216c34394bed5d0e5167bdae144f70,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/ca/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/ca/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/ca/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/ca/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 2, + "translated_words": 35, + "translated_percent": 1.6, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:14.660609+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/ca/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/ca/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/ca/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ca/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ca/units/" + }, + { + "language": { + "id": 56, + "code": "cs", + "name": "Czech", + "plural": { + "id": 68, + "source": 0, + "number": 3, + "formula": "(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2", + "type": 22 + }, + "aliases": [ + "ces", + "cs_cs", + "cs_cz", + "csy", + "cz", + "cze" + ], + "direction": "ltr", + "population": 13236057, + "web_url": "https://hosted.weblate.org/languages/cs/", + "url": "https://hosted.weblate.org/api/languages/cs/", + "statistics_url": "https://hosted.weblate.org/api/languages/cs/statistics/" + }, + "language_code": "cs", + "id": 1614705, + "filename": "docs/README-cs.md", + "revision": "ee6855faacd6887ca42429ab852ac4c404a840c4,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/cs/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/cs/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/cs/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/cs/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 43, + "translated_words": 339, + "translated_percent": 36.4, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:14.819508+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/cs/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/cs/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/cs/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/cs/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/cs/units/" + }, + { + "language": { + "id": 58, + "code": "pt", + "name": "Portuguese", + "plural": { + "id": 245, + "source": 0, + "number": 2, + "formula": "n > 1", + "type": 1 + }, + "aliases": [ + "por", + "por_pt", + "pt_pt", + "ptg" + ], + "direction": "ltr", + "population": 249463918, + "web_url": "https://hosted.weblate.org/languages/pt/", + "url": "https://hosted.weblate.org/api/languages/pt/", + "statistics_url": "https://hosted.weblate.org/api/languages/pt/statistics/" + }, + "language_code": "pt", + "id": 1614706, + "filename": "docs/README-pt.md", + "revision": "b3a9f45b8e23cb6378cd3dfa15691918eeed5a84,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/pt/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/pt/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/pt/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/pt/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 6, + "translated_words": 35, + "translated_percent": 5, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:18.156718+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/pt/units/" + }, + { + "language": { + "id": 60, + "code": "vi", + "name": "Vietnamese", + "plural": { + "id": 337, + "source": 0, + "number": 1, + "formula": "0", + "type": 0 + }, + "aliases": [ + "vi_vn", + "vie", + "vn" + ], + "direction": "ltr", + "population": 92370781, + "web_url": "https://hosted.weblate.org/languages/vi/", + "url": "https://hosted.weblate.org/api/languages/vi/", + "statistics_url": "https://hosted.weblate.org/api/languages/vi/statistics/" + }, + "language_code": "vi", + "id": 1614707, + "filename": "docs/README-vi.md", + "revision": "8a4fdf64dff418ae10af3faf26f8042fcad589aa,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/vi/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/vi/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/vi/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/vi/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 66, + "translated_words": 563, + "translated_percent": 55.9, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 1, + "failing_checks_words": 3, + "failing_checks_percent": 0.8, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:19.594969+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/vi/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/vi/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/vi/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/vi/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/vi/units/" + }, + { + "language": { + "id": 64, + "code": "hr", + "name": "Croatian", + "plural": { + "id": 66, + "source": 0, + "number": 3, + "formula": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", + "type": 22 + }, + "aliases": [ + "hr_hr", + "hrv", + "scr" + ], + "direction": "ltr", + "population": 6790797, + "web_url": "https://hosted.weblate.org/languages/hr/", + "url": "https://hosted.weblate.org/api/languages/hr/", + "statistics_url": "https://hosted.weblate.org/api/languages/hr/statistics/" + }, + "language_code": "hr", + "id": 1614708, + "filename": "docs/README-hr.md", + "revision": "88f2a4bbdb291cb85fbb65130d2a15c78a6fd8e5,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/hr/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/hr/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/hr/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/hr/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 0, + "translated_words": 0, + "translated_percent": 0, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:16.211016+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/hr/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/hr/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/hr/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/hr/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/hr/units/" + }, + { + "language": { + "id": 66, + "code": "hu", + "name": "Hungarian", + "plural": { + "id": 136, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "hu_hu", + "hun" + ], + "direction": "ltr", + "population": 12313191, + "web_url": "https://hosted.weblate.org/languages/hu/", + "url": "https://hosted.weblate.org/api/languages/hu/", + "statistics_url": "https://hosted.weblate.org/api/languages/hu/statistics/" + }, + "language_code": "hu", + "id": 1614709, + "filename": "docs/README-hu.md", + "revision": "3301310befda08a5b5c45ef8770827e1fcec1e0a,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/hu/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/hu/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/hu/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/hu/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 32, + "translated_words": 254, + "translated_percent": 27.1, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 2, + "failing_checks_words": 23, + "failing_checks_percent": 1.6, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:16.360860+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/hu/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/hu/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/hu/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/hu/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/hu/units/" + }, + { + "language": { + "id": 78, + "code": "pl", + "name": "Polish", + "plural": { + "id": 244, + "source": 0, + "number": 3, + "formula": "n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", + "type": 22 + }, + "aliases": [ + "pl_pl", + "plk", + "pol" + ], + "direction": "ltr", + "population": 41500500, + "web_url": "https://hosted.weblate.org/languages/pl/", + "url": "https://hosted.weblate.org/api/languages/pl/", + "statistics_url": "https://hosted.weblate.org/api/languages/pl/statistics/" + }, + "language_code": "pl", + "id": 1614710, + "filename": "docs/README-pl.md", + "revision": "46d6992a6c40344d26bd6b6a8601d44d41c1e88d,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/pl/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/pl/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/pl/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/pl/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 8, + "translated_words": 79, + "translated_percent": 6.7, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 16, + "have_comment": 0, + "last_change": "2025-12-08T10:55:18.019340+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/pl/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/pl/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/pl/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/pl/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/pl/units/" + }, + { + "language": { + "id": 88, + "code": "ar", + "name": "Arabic", + "plural": { + "id": 10, + "source": 0, + "number": 6, + "formula": "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5", + "type": 3 + }, + "aliases": [ + "ar_aa", + "ar_ar", + "ara", + "arb" + ], + "direction": "rtl", + "population": 378792526, + "web_url": "https://hosted.weblate.org/languages/ar/", + "url": "https://hosted.weblate.org/api/languages/ar/", + "statistics_url": "https://hosted.weblate.org/api/languages/ar/statistics/" + }, + "language_code": "ar", + "id": 1614711, + "filename": "docs/README-ar.md", + "revision": "f4f63c8ac28ec0a962ebc0dfb568043877a094b6,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/ar/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/ar/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/ar/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/ar/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 32, + "translated_words": 75, + "translated_percent": 27.1, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:14.504235+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/ar/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/ar/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/ar/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ar/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ar/units/" + }, + { + "language": { + "id": 96, + "code": "nl", + "name": "Dutch", + "plural": { + "id": 73, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "dut", + "nl_nl", + "nld" + ], + "direction": "ltr", + "population": 32854898, + "web_url": "https://hosted.weblate.org/languages/nl/", + "url": "https://hosted.weblate.org/api/languages/nl/", + "statistics_url": "https://hosted.weblate.org/api/languages/nl/statistics/" + }, + "language_code": "nl", + "id": 1614712, + "filename": "docs/README-nl.md", + "revision": "fe2bf72bab1d531f2a689f0c5cd73946f968d421,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/nl/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/nl/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/nl/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/nl/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 31, + "translated_words": 249, + "translated_percent": 26.2, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 1, + "failing_checks_words": 9, + "failing_checks_percent": 0.8, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:17.883033+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/nl/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/nl/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/nl/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/nl/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/nl/units/" + }, + { + "language": { + "id": 105, + "code": "fr", + "name": "French", + "plural": { + "id": 93, + "source": 0, + "number": 2, + "formula": "n > 1", + "type": 1 + }, + "aliases": [ + "fr_fr", + "fra", + "fra_fr", + "fre" + ], + "direction": "ltr", + "population": 332956350, + "web_url": "https://hosted.weblate.org/languages/fr/", + "url": "https://hosted.weblate.org/api/languages/fr/", + "statistics_url": "https://hosted.weblate.org/api/languages/fr/statistics/" + }, + "language_code": "fr", + "id": 1614713, + "filename": "docs/README-fr.md", + "revision": "172740086a99f1b4e08438d444c2d51d2dda1f3a,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/fr/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/fr/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/fr/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/fr/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 118, + "translated_words": 1110, + "translated_percent": 100, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:15.910510+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/fr/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/fr/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/fr/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/fr/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/fr/units/" + }, + { + "language": { + "id": 108, + "code": "fa", + "name": "Persian", + "plural": { + "id": 241, + "source": 0, + "number": 2, + "formula": "n > 1", + "type": 1 + }, + "aliases": [ + "fa_ir", + "fas", + "fas_ir", + "per", + "pes" + ], + "direction": "rtl", + "population": 89208445, + "web_url": "https://hosted.weblate.org/languages/fa/", + "url": "https://hosted.weblate.org/api/languages/fa/", + "statistics_url": "https://hosted.weblate.org/api/languages/fa/statistics/" + }, + "language_code": "fa", + "id": 1614714, + "filename": "docs/README-fa.md", + "revision": "aa651f065af16732537b53874185968a62595e28,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/fa/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/fa/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/fa/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/fa/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 19, + "translated_words": 131, + "translated_percent": 16.1, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 2, + "failing_checks_words": 29, + "failing_checks_percent": 1.6, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:15.622121+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/fa/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/fa/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/fa/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/fa/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/fa/units/" + }, + { + "language": { + "id": 110, + "code": "fi", + "name": "Finnish", + "plural": { + "id": 89, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "fi_fi", + "fin", + "fin_fi" + ], + "direction": "ltr", + "population": 5789395, + "web_url": "https://hosted.weblate.org/languages/fi/", + "url": "https://hosted.weblate.org/api/languages/fi/", + "statistics_url": "https://hosted.weblate.org/api/languages/fi/statistics/" + }, + "language_code": "fi", + "id": 1614715, + "filename": "docs/README-fi.md", + "revision": "88f2a4bbdb291cb85fbb65130d2a15c78a6fd8e5,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/fi/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/fi/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/fi/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/fi/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 0, + "translated_words": 0, + "translated_percent": 0, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:15.762968+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/fi/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/fi/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/fi/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/fi/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/fi/units/" + }, + { + "language": { + "id": 114, + "code": "sr", + "name": "Serbian", + "plural": { + "id": 268, + "source": 0, + "number": 3, + "formula": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", + "type": 22 + }, + "aliases": [ + "rs", + "scc", + "sr_cs", + "sr_rs", + "srp" + ], + "direction": "ltr", + "population": 7189403, + "web_url": "https://hosted.weblate.org/languages/sr/", + "url": "https://hosted.weblate.org/api/languages/sr/", + "statistics_url": "https://hosted.weblate.org/api/languages/sr/statistics/" + }, + "language_code": "sr", + "id": 1614716, + "filename": "docs/README-sr.md", + "revision": "88f2a4bbdb291cb85fbb65130d2a15c78a6fd8e5,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/sr/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/sr/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/sr/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/sr/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 0, + "translated_words": 0, + "translated_percent": 0, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:18.942066+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/sr/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/sr/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/sr/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/sr/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/sr/units/" + }, + { + "language": { + "id": 116, + "code": "ko", + "name": "Korean", + "plural": { + "id": 165, + "source": 0, + "number": 1, + "formula": "0", + "type": 0 + }, + "aliases": [ + "ko_ko", + "ko_kr", + "kor", + "kor_kr" + ], + "direction": "ltr", + "population": 79278717, + "web_url": "https://hosted.weblate.org/languages/ko/", + "url": "https://hosted.weblate.org/api/languages/ko/", + "statistics_url": "https://hosted.weblate.org/api/languages/ko/statistics/" + }, + "language_code": "ko", + "id": 1614717, + "filename": "docs/README-ko.md", + "revision": "99560c99007f00159d560c5870c09d5cbb586e9c,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/ko/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/ko/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/ko/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/ko/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 43, + "translated_words": 310, + "translated_percent": 36.4, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 1, + "have_comment": 0, + "last_change": "2025-12-08T10:55:17.293720+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/ko/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/ko/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/ko/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ko/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/ko/units/" + }, + { + "language": { + "id": 124, + "code": "sl", + "name": "Slovenian", + "plural": { + "id": 280, + "source": 0, + "number": 4, + "formula": "n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3", + "type": 6 + }, + "aliases": [ + "sl_si", + "sl_sl", + "slv" + ], + "direction": "ltr", + "population": 1967012, + "web_url": "https://hosted.weblate.org/languages/sl/", + "url": "https://hosted.weblate.org/api/languages/sl/", + "statistics_url": "https://hosted.weblate.org/api/languages/sl/statistics/" + }, + "language_code": "sl", + "id": 1614718, + "filename": "docs/README-sl.md", + "revision": "88f2a4bbdb291cb85fbb65130d2a15c78a6fd8e5,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/sl/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/sl/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/sl/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/sl/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 0, + "translated_words": 0, + "translated_percent": 0, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:18.790431+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/sl/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/sl/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/sl/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/sl/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/sl/units/" + }, + { + "language": { + "id": 449, + "code": "nb_NO", + "name": "Norwegian Bokmål", + "plural": { + "id": 447, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "nb", + "nb_nb", + "no", + "no_nb", + "no_no", + "nob", + "nor", + "norwegian" + ], + "direction": "ltr", + "population": 5509730, + "web_url": "https://hosted.weblate.org/languages/nb_NO/", + "url": "https://hosted.weblate.org/api/languages/nb_NO/", + "statistics_url": "https://hosted.weblate.org/api/languages/nb_NO/statistics/" + }, + "language_code": "nb_NO", + "id": 1614719, + "filename": "docs/README-nb_NO.md", + "revision": "88f2a4bbdb291cb85fbb65130d2a15c78a6fd8e5,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/nb_NO/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/nb_NO/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/nb_NO/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/nb_NO/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 0, + "translated_words": 0, + "translated_percent": 0, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:17.749374+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/nb_NO/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/nb_NO/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/nb_NO/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/nb_NO/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/nb_NO/units/" + }, + { + "language": { + "id": 4429, + "code": "md", + "name": "md (generated)", + "plural": { + "id": 5665, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [], + "direction": "ltr", + "population": 0, + "web_url": "https://hosted.weblate.org/languages/md/", + "url": "https://hosted.weblate.org/api/languages/md/", + "statistics_url": "https://hosted.weblate.org/api/languages/md/statistics/" + }, + "language_code": "md", + "id": 1614720, + "filename": "docs/README-md.md", + "revision": "88f2a4bbdb291cb85fbb65130d2a15c78a6fd8e5,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/md/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/md/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/md/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/md/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 0, + "translated_words": 0, + "translated_percent": 0, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:17.448478+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/md/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/md/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/md/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/md/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/md/units/" + }, + { + "language": { + "id": 93, + "code": "id", + "name": "Indonesian", + "plural": { + "id": 141, + "source": 0, + "number": 1, + "formula": "0", + "type": 0 + }, + "aliases": [ + "id_id", + "in", + "in_id", + "ind" + ], + "direction": "ltr", + "population": 180519583, + "web_url": "https://hosted.weblate.org/languages/id/", + "url": "https://hosted.weblate.org/api/languages/id/", + "statistics_url": "https://hosted.weblate.org/api/languages/id/statistics/" + }, + "language_code": "id", + "id": 1615855, + "filename": "docs/README-id.md", + "revision": "1eeae4bf7459369c91c3d4e042de77931146c2e0,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/id/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/id/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/id/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/id/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 22, + "translated_words": 151, + "translated_percent": 18.6, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:16.508985+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/id/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/id/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/id/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/id/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/id/units/" + }, + { + "language": { + "id": 107, + "code": "sv", + "name": "Swedish", + "plural": { + "id": 301, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "sv_se", + "sve", + "swe", + "swe_se" + ], + "direction": "ltr", + "population": 13338376, + "web_url": "https://hosted.weblate.org/languages/sv/", + "url": "https://hosted.weblate.org/api/languages/sv/", + "statistics_url": "https://hosted.weblate.org/api/languages/sv/statistics/" + }, + "language_code": "sv", + "id": 1616650, + "filename": "docs/README-sv.md", + "revision": "6a71fb69bdb7eaf995dbdad69fe1691bbe24e38f,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/sv/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/sv/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/sv/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/sv/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 5, + "translated_words": 33, + "translated_percent": 4.2, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:19.117945+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/sv/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/sv/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/sv/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/sv/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/sv/units/" + }, + { + "language": { + "id": 67, + "code": "hi", + "name": "Hindi", + "plural": { + "id": 134, + "source": 0, + "number": 2, + "formula": "n > 1", + "type": 1 + }, + "aliases": [ + "hi_in", + "hin" + ], + "direction": "ltr", + "population": 580318483, + "web_url": "https://hosted.weblate.org/languages/hi/", + "url": "https://hosted.weblate.org/api/languages/hi/", + "statistics_url": "https://hosted.weblate.org/api/languages/hi/statistics/" + }, + "language_code": "hi", + "id": 1618799, + "filename": "docs/README-hi.md", + "revision": "a2707d32944aa74ea74f3fc593c7c96c73ca97f9,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/hi/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/hi/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/hi/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/hi/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 1, + "translated_words": 2, + "translated_percent": 0.8, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:16.061819+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/hi/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/hi/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/hi/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/hi/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/hi/units/" + }, + { + "language": { + "id": 80, + "code": "mr", + "name": "Marathi", + "plural": { + "id": 198, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "mar", + "mr_in" + ], + "direction": "ltr", + "population": 98639100, + "web_url": "https://hosted.weblate.org/languages/mr/", + "url": "https://hosted.weblate.org/api/languages/mr/", + "statistics_url": "https://hosted.weblate.org/api/languages/mr/statistics/" + }, + "language_code": "mr", + "id": 1618804, + "filename": "docs/README-mr.md", + "revision": "88f2a4bbdb291cb85fbb65130d2a15c78a6fd8e5,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/mr/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/mr/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/mr/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/mr/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 0, + "translated_words": 0, + "translated_percent": 0, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 0, + "failing_checks_words": 0, + "failing_checks_percent": 0, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:17.599588+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/mr/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/mr/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/mr/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/mr/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/mr/units/" + }, + { + "language": { + "id": 62, + "code": "en_GB", + "name": "English (United Kingdom)", + "plural": { + "id": 81, + "source": 0, + "number": 2, + "formula": "n != 1", + "type": 1 + }, + "aliases": [ + "eng_gb", + "english_uk" + ], + "direction": "ltr", + "population": 67089918, + "web_url": "https://hosted.weblate.org/languages/en_GB/", + "url": "https://hosted.weblate.org/api/languages/en_GB/", + "statistics_url": "https://hosted.weblate.org/api/languages/en_GB/statistics/" + }, + "language_code": "en_GB", + "id": 1627399, + "filename": "docs/README-en_GB.md", + "revision": "d8785285843cae2328d45313715b8f2d5c0efc09,5c59039312ea3d3684cbb62748ea9249d1a06a6d", + "web_url": "https://hosted.weblate.org/projects/trilium/readme/en_GB/", + "share_url": "https://hosted.weblate.org/engage/trilium/-/en_GB/", + "translate_url": "https://hosted.weblate.org/translate/trilium/readme/en_GB/", + "url": "https://hosted.weblate.org/api/translations/trilium/readme/en_GB/", + "is_template": false, + "is_source": false, + "total": 118, + "total_words": 1110, + "translated": 1, + "translated_words": 6, + "translated_percent": 0.8, + "fuzzy": 0, + "fuzzy_words": 0, + "fuzzy_percent": 0, + "failing_checks": 1, + "failing_checks_words": 42, + "failing_checks_percent": 0.8, + "have_suggestion": 0, + "have_comment": 0, + "last_change": "2025-12-08T10:55:15.298351+01:00", + "last_author": null, + "repository_url": "https://hosted.weblate.org/api/translations/trilium/readme/en_GB/repository/", + "file_url": "https://hosted.weblate.org/api/translations/trilium/readme/en_GB/file/", + "statistics_url": "https://hosted.weblate.org/api/translations/trilium/readme/en_GB/statistics/", + "changes_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/en_GB/changes/", + "units_list_url": "https://hosted.weblate.org/api/translations/trilium/readme/en_GB/units/" + } + ] +} \ No newline at end of file diff --git a/scripts/translation/manage-readme.ts b/scripts/translation/manage-readme.ts index 413c8ac68..69682d360 100644 --- a/scripts/translation/manage-readme.ts +++ b/scripts/translation/manage-readme.ts @@ -1,7 +1,8 @@ -import { readFile, writeFile } from "fs/promises"; +import { readFile, stat, writeFile, } from "fs/promises"; import { join } from "path"; -const rootDir = join(__dirname, "../.."); +const scriptDir = __dirname; +const rootDir = join(scriptDir, "../.."); const docsDir = join(rootDir, "docs"); /** @@ -11,21 +12,69 @@ const docsDir = join(rootDir, "docs"); * The README in the repo root remains the true base file, but it's a two-step process which requires the execution of this script. */ async function handleBaseFile() { + +} + +async function getLanguageStats() { + const cacheFile = join(scriptDir, ".language-stats.json"); + + // Try to read from the cache. + try { + const cacheStats = await stat(cacheFile); + const now = new Date(); + const oneDay = 24 * 60 * 60 * 1000; // milliseconds + if (cacheStats.mtimeMs < now.getTime() + oneDay) { + console.log("Reading language stats from cache."); + return JSON.parse(await readFile(cacheFile, "utf-8")); + } + } catch (e) { + if (e.code !== "ENOENT") { + throw e; + } + } + + // Make the request + console.log("Reading language stats from Weblate API."); + const request = await fetch("https://hosted.weblate.org/api/components/trilium/readme/translations/"); + const stats = JSON.parse(await request.text()); + + // Update the cache + await writeFile(cacheFile, JSON.stringify(stats, null, 4)); + + return stats; +} + +async function rewriteLanguageBar(readme: string) { + // Filter languages by their availability. + const languageStats = await getLanguageStats(); + const languagesWithCoverage = languageStats.results.filter(language => language.translated_percent > 75); + const languageLinks = languagesWithCoverage.map(language => `[${language.language.name}](./${language.filename})`) + + readme = readme.replace( + /\r?\n.*$/m, + `\n${languageLinks.join(" | ")}`); + return readme; +} + +function rewriteRelativeLinks(readme: string) { + readme = readme.replaceAll("./docs/", "./"); + readme = readme.replaceAll("./README.md", "../README.md"); + return readme; +} + +async function main() { // Read the README at root level. const readmePath = join(rootDir, "README.md"); let readme = await readFile(readmePath, "utf-8"); - // Rewrite relative links. - readme = readme.replaceAll("./docs/", "./"); - readme = readme.replaceAll("./README.md", "../README.md"); + // Update the README at root level. + readme = await rewriteLanguageBar(readme); + await writeFile(readmePath, readme); - // Copy it into docs. + // Rewrite relative links for docs/README.md. + readme = rewriteRelativeLinks(readme); const outputPath = join(docsDir, "README.md"); await writeFile(outputPath, readme); } -async function main() { - await handleBaseFile(); -} - main();