@@ -82,6 +85,7 @@
{{ _("Bookworm CI") }} |
{{ _("Testing PR") }} |
{{ _("Autoupdate PR") }} |
+
{{ _("Issues") }} |
|
{% for app, infos in data.items() %}
@@ -110,6 +114,8 @@
data-last-update-autoupdate="{% if infos["ci-auto-update"] %}{{ infos["ci-auto-update"]["timestamp_updated"] }}{% else %}-1{% endif %}"
data-packaging-format="{{ infos["packaging_format"] }}"
data-deprecated="{% if "deprecated-software" in infos["antifeatures"] or "replaced-by-another-app" in infos["antifeatures"] or "package-not-maintained" in infos["antifeatures"] %}True{% else %}False{% endif %}"
+ data-nb-issues="{{ infos["nb_issues"] }}"
+
>
{{ app }}
@@ -126,14 +132,14 @@
|
- 30 %}opacity-50{% endif %}" href="https://ci-apps.yunohost.org/ci/apps/{{ app }}/">
+ 30 %}opacity-50{% endif %}" href="https://ci-apps.yunohost.org/ci/apps/{{ app }}/">
{% if infos["public_level"] == infos["ci_results"]["main"]["level"] %}
=
{% else %}
{{ infos["ci_results"]["main"]["level"] }}
{% endif %}
- {% if infos["ci_results"]["main"]["timestamp"] | days_ago > 30 %}
-
+ {% if (infos["ci_results"]["main"]["timestamp"] or -9999) | days_ago > 30 %}
+
{% endif %}
{% if infos["public_level"] == "?" %}
{% elif infos["ci_results"]["main"]["level"] < infos["public_level"] and infos["ci_results"]["main"]["level"] == 0 %}
@@ -180,7 +186,7 @@
{% endif %}
|
-
{% if "ci-auto-update" in infos %}
@@ -195,6 +201,13 @@
{% endif %}
|
+
+ {% if infos["nb_issues"] != 0 %}
+
+ {{ infos["nb_issues"] }}
+
+ {% endif %}
+ |
{% if this_app_stars > 0 %}
{{ this_app_stars }}
@@ -337,6 +350,18 @@
entries[i].classList.add("hidden");
}
}
+ else if (filterName == "nb_issues")
+ {
+ if (entries[i].dataset.nbIssues > 0)
+ {
+ entries[i].classList.remove("hidden");
+ nb_found++
+ }
+ else
+ {
+ entries[i].classList.add("hidden");
+ }
+ }
}
document.getElementById('nbEntriesFound').innerHTML = "(" + nb_found + " apps)";
@@ -377,6 +402,11 @@
return a.dataset.app > b.dataset.app ? 1 : -1;
});
}
+ else if (sortBy === "nb_issues") {
+ toSort.sort(function(a, b) {
+ return b.dataset.nbIssues - a.dataset.nbIssues;
+ });
+ }
for(var i = 0, l = toSort.length; i < l; i++) {
toSort[i].remove()
table.appendChild(toSort[i]);
diff --git a/store/translations/ar/LC_MESSAGES/messages.mo b/store/translations/ar/LC_MESSAGES/messages.mo
index a74cc64c..03399d6a 100644
Binary files a/store/translations/ar/LC_MESSAGES/messages.mo and b/store/translations/ar/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/ar/LC_MESSAGES/messages.po b/store/translations/ar/LC_MESSAGES/messages.po
index 67966006..12c8396c 100644
--- a/store/translations/ar/LC_MESSAGES/messages.po
+++ b/store/translations/ar/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:04+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: ar \n"
@@ -19,16 +19,16 @@ msgstr ""
"&& n%100<=10 ? 3 : n%100>=0 && n%100<=2 ? 4 : 5);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -37,85 +37,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -123,7 +123,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -131,7 +131,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -148,7 +148,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -248,15 +248,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -268,113 +268,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -388,76 +393,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -476,108 +481,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/bn_BD/LC_MESSAGES/messages.mo b/store/translations/bn_BD/LC_MESSAGES/messages.mo
index 169b09b4..c1ee5d6c 100644
Binary files a/store/translations/bn_BD/LC_MESSAGES/messages.mo and b/store/translations/bn_BD/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/bn_BD/LC_MESSAGES/messages.po b/store/translations/bn_BD/LC_MESSAGES/messages.po
index c026af13..520f9233 100644
--- a/store/translations/bn_BD/LC_MESSAGES/messages.po
+++ b/store/translations/bn_BD/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:05+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: bn_BD \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/br/LC_MESSAGES/messages.mo b/store/translations/br/LC_MESSAGES/messages.mo
index ae69f4f1..34cdf8ae 100644
Binary files a/store/translations/br/LC_MESSAGES/messages.mo and b/store/translations/br/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/br/LC_MESSAGES/messages.po b/store/translations/br/LC_MESSAGES/messages.po
index 8283680f..91889b65 100644
--- a/store/translations/br/LC_MESSAGES/messages.po
+++ b/store/translations/br/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:05+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: br \n"
@@ -22,16 +22,16 @@ msgstr ""
"3 : n%1000000==0 ? 4 : 5);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -40,85 +40,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -126,7 +126,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -134,7 +134,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -151,7 +151,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -251,15 +251,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -271,113 +271,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -391,76 +396,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -479,108 +484,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/ca/LC_MESSAGES/messages.mo b/store/translations/ca/LC_MESSAGES/messages.mo
index 6659f075..4e8fa8bc 100644
Binary files a/store/translations/ca/LC_MESSAGES/messages.mo and b/store/translations/ca/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/ca/LC_MESSAGES/messages.po b/store/translations/ca/LC_MESSAGES/messages.po
index 9b2209eb..294e47c6 100644
--- a/store/translations/ca/LC_MESSAGES/messages.po
+++ b/store/translations/ca/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-03-23 19:04+0000\n"
"Last-Translator: OniriCorpe \n"
"Language-Team: Catalan 'Trust level 1' is obtained after "
@@ -42,16 +42,16 @@ msgstr ""
"amb el fòrum, i més concretament: introduir almenys 5 temes, llegir almenys "
"30 publicacions i dedicar almenys 10 minuts llegint publicacions."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr "Heu d'iniciar sessió per enviar una aplicació a la llista de desitjos"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
"El testimoni CSRF no és vàlid; actualitzeu la pàgina i torneu-ho a provar"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
@@ -59,47 +59,47 @@ msgstr ""
"La proposta d'addicions a la llista de desitjos està limitada a un cop cada "
"15 dies per usuari. Si us plau, torna-ho a provar d'aquí a uns dies."
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr "El nom de l'aplicació ha de tenir com a mínim 3 caràcters"
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr "El nom de l'aplicació ha de tenir menys de 30 caràcters"
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr "La descripció de l'aplicació ha de tenir almenys 5 caràcters"
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr "La descripció de l'aplicació ha de tenir menys de 100 caràcters"
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr "L'URL del dipòsit de codi amunt ha de tenir com a mínim 10 caràcters"
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr "L'URL del dipòsit de codi amunt ha de tenir menys de 150 caràcters"
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr "L'URL de la llicència ha de tenir com a mínim 10 caràcters"
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr "L'URL de la llicència ha de tenir menys de 250 caràcters"
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr "L'URL del lloc web ha de tenir menys de 150 caràcters"
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr "El nom de l'aplicació conté caràcters especials"
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
@@ -108,12 +108,12 @@ msgstr ""
"màrqueting, termes difusos ni repetir que l'aplicació és «gratuïta» i "
"«autohostatjada»."
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
"No cal repetir el nom de l'aplicació. Centra't en el que fa l'aplicació."
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
@@ -123,7 +123,7 @@ msgstr ""
"canvi, podeu afegir una estrella a l'aplicació per mostrar "
"el vostre interès."
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, podeu veure la seva pàgina aquí."
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -144,7 +144,7 @@ msgstr ""
"aquesta aplicació? En cas contrari, si us plau, informeu el problema a "
"l'equip de YunoHost."
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -155,7 +155,7 @@ msgstr ""
"validat per l'equip de YunoHost. Podeu fer un seguiment del progrés aquí: %(url)s"
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr "Malauradament s'ha denegat l'inici de sessió."
@@ -174,7 +174,7 @@ msgstr ""
"les nostres proves automàtiques."
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -284,15 +284,15 @@ msgstr "Llicència del paquet YunoHost"
msgid "YunoHost app store"
msgstr "Botiga d'aplicacions YunoHost"
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr "Inici"
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr "Catàleg"
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr "Llista de desitjos"
@@ -304,118 +304,124 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr "Documentació de YunoHost"
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr "Inicieu sessió mitjançant el fòrum de YunoHost"
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr "Tancar sessió"
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr "Canvia el menú"
-#: templates/base.html:255
+#: templates/base.html:264
+#, fuzzy
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
"Fet amb fent "
"servir Flask i TailwindCSS"
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr "Font"
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr "Condicions dels serveis"
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr "Catàleg d'aplicacions"
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr "Cercar"
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr "Buscar…"
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr "Totes les aplicacions"
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr "Ordenar per"
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr "Popularitat"
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr "Novetat"
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr "Alfabèticament"
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr "Requereix estar connectat"
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr "Mostra només les aplicacions que has destacat"
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr "Sense resultats."
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr "No trobes el que estàs buscant?"
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr "Fes una ullada a la llista de desitjos!"
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr "Aplicacions marcades actualment com a trencades"
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
"Aquestes són aplicacions que no han passat les nostres proves automàtiques."
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr "Aplicacions obsoletes"
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr "Aquestes són aplicacions que ja no es mantenen."
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -432,76 +438,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -520,110 +526,131 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
#, fuzzy
msgid "Popularity stars"
msgstr "Popularitat"
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
#, fuzzy
msgid "Deprecated"
msgstr "Aplicacions obsoletes"
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr "Botiga d'aplicacions"
diff --git a/store/translations/ckb/LC_MESSAGES/messages.mo b/store/translations/ckb/LC_MESSAGES/messages.mo
index d32f1ccb..51b7ce14 100644
Binary files a/store/translations/ckb/LC_MESSAGES/messages.mo and b/store/translations/ckb/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/ckb/LC_MESSAGES/messages.po b/store/translations/ckb/LC_MESSAGES/messages.po
index a37841e2..8a134da2 100644
--- a/store/translations/ckb/LC_MESSAGES/messages.po
+++ b/store/translations/ckb/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:08+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: ckb \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/cs/LC_MESSAGES/messages.mo b/store/translations/cs/LC_MESSAGES/messages.mo
index 0acb5555..2bf60084 100644
Binary files a/store/translations/cs/LC_MESSAGES/messages.mo and b/store/translations/cs/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/cs/LC_MESSAGES/messages.po b/store/translations/cs/LC_MESSAGES/messages.po
index b07acf57..7d718605 100644
--- a/store/translations/cs/LC_MESSAGES/messages.po
+++ b/store/translations/cs/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:09+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: cs \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/da/LC_MESSAGES/messages.mo b/store/translations/da/LC_MESSAGES/messages.mo
index ce67d4e4..5cab3b92 100644
Binary files a/store/translations/da/LC_MESSAGES/messages.mo and b/store/translations/da/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/da/LC_MESSAGES/messages.po b/store/translations/da/LC_MESSAGES/messages.po
index 50a00a9a..60eba3c9 100644
--- a/store/translations/da/LC_MESSAGES/messages.po
+++ b/store/translations/da/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:05+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: da \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/de/LC_MESSAGES/messages.mo b/store/translations/de/LC_MESSAGES/messages.mo
index fd501581..cc0bc002 100644
Binary files a/store/translations/de/LC_MESSAGES/messages.mo and b/store/translations/de/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/de/LC_MESSAGES/messages.po b/store/translations/de/LC_MESSAGES/messages.po
index c55cf04e..1038ba4e 100644
--- a/store/translations/de/LC_MESSAGES/messages.po
+++ b/store/translations/de/LC_MESSAGES/messages.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
-"PO-Revision-Date: 2024-03-23 19:04+0000\n"
-"Last-Translator: OniriCorpe \n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
+"PO-Revision-Date: 2024-06-27 16:54+0000\n"
+"Last-Translator: Zwiebel \n"
"Language-Team: German \n"
"Language: de\n"
@@ -17,18 +17,19 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr "App %(app_id)s nicht gefunden"
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr "Sie müssen angemeldet sein, um eine App markieren zu können"
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -43,17 +44,17 @@ msgstr ""
"Beiträge gelesen und mindestens 10 Minuten damit verbracht haben, Beiträge "
"zu lesen."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr "Sie müssen angemeldet sein, um eine App auf die Wunschliste zu setzen"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
"Ungültiges CSRF-Token. Bitte aktualisieren Sie die Seite und versuchen Sie "
"es erneut"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
@@ -62,49 +63,49 @@ msgstr ""
"pro Benutzer beschränkt. Bitte versuchen Sie es in ein paar Tagen noch "
"einmal."
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr "Der App-Name sollte mindestens 3 Zeichen lang sein"
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr "Der App-Name sollte weniger als 30 Zeichen lang sein"
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr "Die App-Beschreibung sollte mindestens 5 Zeichen lang sein"
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr "Die App-Beschreibung sollte weniger als 100 Zeichen umfassen"
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
"Die Upstream-Code-Repository-URL sollte mindestens 10 Zeichen lang sein"
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
"Die Upstream-Code-Repository-URL sollte weniger als 150 Zeichen lang sein"
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr "Die Lizenz-URL sollte mindestens 10 Zeichen lang sein"
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr "Die Lizenz-URL sollte weniger als 250 Zeichen lang sein"
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr "Die Website-URL sollte weniger als 150 Zeichen lang sein"
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr "Der App-Name enthält Sonderzeichen"
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
@@ -113,13 +114,13 @@ msgstr ""
"unpräzise Begriffe zu verwenden oder zu wiederholen, dass die App 'frei' und "
"'selbsthostbar' ist."
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
"Bitte wiederholen Sie den Namen der Anwendung nicht. Es geht darum, was die "
"App tut."
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
@@ -134,7 +135,7 @@ msgstr ""
# "
# | "you can add a star to the app to show your
# interest."
-#: app.py:358
+#: app.py:375
#, fuzzy, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, einen Stern hinzufügen, "
"um Ihr Interesse zu zeigen."
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -155,7 +156,7 @@ msgstr ""
"werden… Vielleicht gibt es bereits einen wartenden PR für "
"diese App? Andernfalls melden Sie das Problem bitte dem YunoHost-Team."
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -166,7 +167,7 @@ msgstr ""
"YunoHost-Team validiert werden. Sie können den Fortschritt hier verfolgen: "
"%(url)s"
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr "Leider wurde die Anmeldung verweigert."
@@ -185,7 +186,7 @@ msgstr ""
"Tests nicht bestanden hat."
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -296,137 +297,142 @@ msgstr "YunoHost Paket-Lizenz"
msgid "YunoHost app store"
msgstr "YunoHost App-Store"
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr "Home"
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr "Katalog"
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr "Wunschliste"
#: templates/base.html:52
msgid "Packaging dashboard"
-msgstr ""
+msgstr "Packetierungsoberfläche"
#: templates/base.html:57
msgid "Charts & history"
-msgstr ""
+msgstr "Charts & Historie"
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr "YunoHost-Dokumentation"
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr "in Hellen-/Dunklenmodus wechseln"
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr "Login über YunoHost-Forum"
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr "Ausloggen"
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr "Menu umschalten"
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-"Hergestellt mit "
-"mit Hilfe von Flask und TailwindCSS"
+"Bereitgestellt mit "
+"i> mit Hilfe von Flask und TailwindCSS"
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr "Quelle"
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr "Nutzungsbedingungen"
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr "Applikations-Katalog"
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr "Suche"
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr "Suchen nach…"
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr "Alle Apps"
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr "Sortieren nach"
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr "Popularität"
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr "Neueste"
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr "Alphabetisch"
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr "Erfordert eingeloggt zu sein"
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr "Zeige nur meine Favoriten"
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr "Keine Resultate gefunden."
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr "Finden Sie nicht, wonach Sie suchen?"
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr "Schauen Sie sich die Wunschliste an!"
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr "Applikationen, die gegenwärtig als defekt markiert sind"
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr "Das sind Apps, welche die automatischen Tests nicht bestanden haben."
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr "Veraltete Applikationen"
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr "Dies sind Apps, die nicht mehr betreut werden."
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -437,89 +443,89 @@ msgstr ""
#: templates/charts.html:5
msgid "Apps quality level from automatic tests"
-msgstr ""
+msgstr "automatisches App Qualitätslevel"
#: templates/charts.html:9
msgid "Apps quality level history"
-msgstr ""
+msgstr "App Qualitätslevel Historie"
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
-msgstr ""
+msgstr "Historie"
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
-msgstr ""
+msgstr "Hinzugefügt"
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
-msgstr ""
+msgstr "Repariert"
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
-msgstr ""
+msgstr "Defekt"
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
-msgstr ""
+msgstr "Entfernt"
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
-msgstr ""
+msgstr "Unbekannt"
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
-msgstr ""
+msgstr "Level 0"
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
-msgstr ""
+msgstr "Level 1"
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
-msgstr ""
+msgstr "Level 2"
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
-msgstr ""
+msgstr "Level 3"
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
-msgstr ""
+msgstr "Level 4"
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
-msgstr ""
+msgstr "Level 5"
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
-msgstr ""
+msgstr "Level 6"
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
-msgstr ""
+msgstr "Level 7"
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
-msgstr ""
+msgstr "Level 8"
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
#: templates/dash.html:3 templates/dash.html:9
msgid "App packaging dashboard"
-msgstr ""
+msgstr "App Paketierungsübersicht"
#: templates/dash.html:11
msgid ""
@@ -531,108 +537,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
-msgstr ""
-
-#: templates/dash.html:23
-msgid "(None)"
-msgstr ""
+msgstr "Filter"
#: templates/dash.html:24
+msgid "(None)"
+msgstr "(Nichts)"
+
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr "Apps mit Fehlern"
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
-msgstr ""
+msgstr "Qualitätslevel"
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
#, fuzzy
msgid "Popularity stars"
msgstr "Popularität"
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr "Anzahl der Fehler"
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr "Fehler"
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
-msgstr ""
+msgstr "Geringe Qualität"
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
-msgstr ""
+msgstr "Inaktiv seit (%(days)s Tagen"
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
#, fuzzy
msgid "Deprecated"
msgstr "Veraltete Applikationen"
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
+msgstr "Nicht betreut"
+
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
msgstr ""
#: templates/index.html:10
diff --git a/store/translations/el/LC_MESSAGES/messages.mo b/store/translations/el/LC_MESSAGES/messages.mo
index 858153e1..d3ce7d6e 100644
Binary files a/store/translations/el/LC_MESSAGES/messages.mo and b/store/translations/el/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/el/LC_MESSAGES/messages.po b/store/translations/el/LC_MESSAGES/messages.po
index 6d88a271..dbb00287 100644
--- a/store/translations/el/LC_MESSAGES/messages.po
+++ b/store/translations/el/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:06+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: el \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/eo/LC_MESSAGES/messages.mo b/store/translations/eo/LC_MESSAGES/messages.mo
index 2f81dbe2..540255e4 100644
Binary files a/store/translations/eo/LC_MESSAGES/messages.mo and b/store/translations/eo/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/eo/LC_MESSAGES/messages.po b/store/translations/eo/LC_MESSAGES/messages.po
index bc3b45cd..df14f725 100644
--- a/store/translations/eo/LC_MESSAGES/messages.po
+++ b/store/translations/eo/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:06+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: eo \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/es/LC_MESSAGES/messages.mo b/store/translations/es/LC_MESSAGES/messages.mo
index b4b729cd..8d14e331 100644
Binary files a/store/translations/es/LC_MESSAGES/messages.mo and b/store/translations/es/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/es/LC_MESSAGES/messages.po b/store/translations/es/LC_MESSAGES/messages.po
index 58b3f2eb..1899ec03 100644
--- a/store/translations/es/LC_MESSAGES/messages.po
+++ b/store/translations/es/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-06-18 06:50+0000\n"
"Last-Translator: rosbeef andino \n"
"Language-Team: Spanish 'Trust level 1' is obtained after "
@@ -43,15 +42,15 @@ msgstr ""
"con el foro, y más específicamente: ingresar al menos 5 temas, leer al menos "
"30 publicaciones y dedicar al menos 10 minutos a leer publicaciones."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr "Debes iniciar sesión para enviar una aplicación a la lista de deseos"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr "Token CSRF no válido. Actualice la página e inténtelo de nuevo"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
@@ -59,49 +58,50 @@ msgstr ""
"Agregard un deseo esta limitado a uno cada quince días por usuario. Intente "
"mas tarde."
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr "El nombre de la aplicación debe contener por lo menos tres caracteres"
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr "El nombre de la aplicación debe contener menos de treinta caracteres"
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
"La descripción de la aplicación deber contener por lo menos cinco caracteres"
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr "La descripción de la aplicación de contener menos de 100 caracteres"
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
"La URL del código fuente original deber contener por lo menos 10 caracteres"
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
-msgstr "La URL del codigo fuente original debe contener menos de 150 caracteres"
+msgstr ""
+"La URL del codigo fuente original debe contener menos de 150 caracteres"
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr "La URL de la licencia de contener por lo menos 10 caracteres"
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr "La URL de la licencia debe contener 250 caracteres máximo"
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr "La URL del sitio web debe contener 150 caracteres máximo"
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr "El nombre de la aplicación contiene caracteres especiales"
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
@@ -110,13 +110,13 @@ msgstr ""
"marketing, palabras difusas, o repetir que la aplicación esta gratuita y "
"auto alojada."
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
"No es necesario repetir el nombre de la aplicación. Focalice en lo que hace "
"la aplicación."
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
@@ -125,7 +125,7 @@ msgstr ""
"La aplicación %(slug)s ya existe. Puede agregar una "
"estrella a esta app para mostrar su interes."
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, puede ver su pagina "
"aquí"
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -145,7 +145,7 @@ msgstr ""
"ya se esta procesando su inclusion ? O intenta "
"contactar al equipo Yunohost"
-#: app.py:433
+#: app.py:450
#, fuzzy, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -155,7 +155,7 @@ msgstr ""
"Su proposición fue agregada de manera satisfactoria. Esta a la espera de su "
"validación por parte del equipo YunoHost. Puede ver el avance aquí:%(url)s"
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr "Desafortunadamente , su inicio de sesión fue rechazado."
@@ -174,7 +174,7 @@ msgstr ""
"pruebas automáticas."
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -279,15 +279,15 @@ msgstr "Licencia del paquete YunoHost"
msgid "YunoHost app store"
msgstr "Catalogo de aplicaciones YunoHost"
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr "Inicio"
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr "Catálogo"
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr "Lista de deseos"
@@ -299,116 +299,122 @@ msgstr "Tablero de integración"
msgid "Charts & history"
msgstr "Curvas y estadísticas"
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr "Documentacion YunoHost"
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr "Iniciar con el usuario del forum YunoHost"
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr "Tabla de integraciones"
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr "Salir"
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr "Desplegar el menu"
-#: templates/base.html:255
+#: templates/base.html:264
+#, fuzzy
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
"Hecho con usando Flask y "
"TailwindCSS"
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr "Fuente"
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr "Terminos de contrato"
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr "Catálogo de aplicaciones"
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr "Buscar"
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr "Buscar…"
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr "Todas"
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr "Ordenar por"
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr "Popularidad"
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr "Novedad"
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr "Alfabético"
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr "Necesita estar conectado"
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr "Mostrar solo aplicaciones que valoró"
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr "No hay resultados para esta búsqueda."
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr "¿No esta encontrando lo que buscas?"
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr "¡Verifica la lista de deseos!"
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr "Aplicaciones marcada como rotas"
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr "Estas aplicaciones fallaron a nuestras pruebas automáticas."
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr "Aplicaciones obsoletas"
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr "Estas aplicaciones non están mas mantenidas."
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -424,76 +430,76 @@ msgstr "Calidad de la aplicación al pasar las pruebas automáticas"
msgid "Apps quality level history"
msgstr "estadística históricas de la calidad de la aplicacion"
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr "Histórico"
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr "Agregado"
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr "Reparado"
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr "Roto"
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr "Borrado"
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr "Indefinido"
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr "Nivel 0"
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr "Nivel 1"
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr "Nivel 2"
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr "Nivel 3"
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr "Nivel 4"
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr "Nivel 5"
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr "Nivel 6"
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr "Nivel 7"
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr "Nivel 8"
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr "Nivel %(level)s:"
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr "Total:"
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr "Nivel %(level)s"
@@ -514,113 +520,135 @@ msgstr ""
"Aquí los integradores pueden revisar el avance de las pruebas automáticas y "
"las solicitudes de modificaciones de todas las aplicaciones. Si quiere "
"participar, empieza por la documentación de integración y ¡ salúdanos en la sala de chat de "
-"integración de aplicación!"
+"packaging_apps'>la documentación de integración y ¡ salúdanos en la sala de "
+"chat de integración de aplicación!"
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr "Filtar"
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr "(ninguno)"
-#: templates/dash.html:24
+#: templates/dash.html:25
#, fuzzy
msgid "Regressions on main CI"
msgstr "Error en CI main"
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr "Aplicaciones Rota / calidad baja"
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr "Pruebas vencidas en CI main"
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr "Error mayor en CI Bookworm"
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr "Aplicaciones con solicitudes de modificaciones en \"testing\""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr "Aplicaciones con solicitudes de modificaciones automaticas"
-#: templates/dash.html:30
+#: templates/dash.html:31
+#, fuzzy
+msgid "Apps with issues"
+msgstr "Aplicaciones con solicitudes de modificaciones automaticas"
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr "Aplicaciones con el sistema de integración v1"
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr "Nivel de calidad"
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr "Valoración"
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr "Ultima actualización en la rama main/master"
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr "Ultima actualización el la rama testing"
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr "Aplicación"
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr "CI main"
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr "CI Bookworm"
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr "PR Testing"
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr "PR autoupdate"
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr "Rota"
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr "Calidad baja"
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr "pruebas vencidas (%(days)s)"
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr "Inactivo (%(days)s)"
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr "Integración v1"
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr "Obsoleto"
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr "Sin mantenedor"
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr "Catálogo de aplicaciones"
diff --git a/store/translations/eu/LC_MESSAGES/messages.mo b/store/translations/eu/LC_MESSAGES/messages.mo
index 12fd843e..19eda380 100644
Binary files a/store/translations/eu/LC_MESSAGES/messages.mo and b/store/translations/eu/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/eu/LC_MESSAGES/messages.po b/store/translations/eu/LC_MESSAGES/messages.po
index a85c3fe3..1941ca4f 100644
--- a/store/translations/eu/LC_MESSAGES/messages.po
+++ b/store/translations/eu/LC_MESSAGES/messages.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
-"PO-Revision-Date: 2024-06-09 10:54+0000\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
+"PO-Revision-Date: 2024-07-01 17:54+0000\n"
"Last-Translator: xabirequejo \n"
"Language-Team: Basque \n"
@@ -20,16 +20,16 @@ msgstr ""
"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr "Ez da %(app_id)s aplikazioa aurkitu"
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr "Saioa hasi behar duzu aplikazioei izarra jarri ahal izateko"
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -43,15 +43,15 @@ msgstr ""
"bost gai sartu, 30 publikazio irakurri gutxienez, eta publikazioak "
"irakurtzen 10 minutu gutxienez ematen."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr "Saioa hasi behar duzu deria-zerrendan aplikazio bat gehitzeko"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr "CSRF token baliogabea; freskatu orrialdea eta saiatu berriro"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
@@ -60,49 +60,49 @@ msgstr ""
"bakoitzak aplikazio bat proposa dezake hamabostean behin. Saiatu egun batzuk "
"barru."
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr "Aplikazioaren izenak hiru karaktere izan behar ditu gutxienez"
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr "Aplikazioaren izenak 30 karaktere izan ditzazke gehienez"
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr "Aplikazioaren deskribapenak bost karaktere izan behar ditu gutxienez"
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr "Aplikazioaren deskribapenak 100 karaktere izan ditzazke gehienez"
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
"Jatorrizko kode-gordailuaren URLak 10 karaktere izan behar ditu gutxienez"
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
"Jatorrizko kode-gordailuaren URLak 150 karaktere izan ditzazke gehienez"
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr "Lizentziaren URLak 10 karaktere izan behar ditu gutxienez"
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr "Lizentziaren URLak 250 karaktere izan ditzazke gehienez"
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr "Webgunearen URLak 150 karaktere izan ditzazke gehienez"
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr "Aplikazioaren izenak karaktere bereziak dauzka"
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
@@ -111,13 +111,13 @@ msgstr ""
"gabe, eta ez errepikatu aplikazioa \"librea\" eta \"norberak ostatatzekoa\" "
"dela."
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
"Ez dago aplikazioaren izena errepikatu beharrik. Azpimarratu aplikazioak zer "
"egiten duen."
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
@@ -127,7 +127,7 @@ msgstr ""
"gehitu ordez, jarri izar bat aplikazioari zure interesa "
"erakusteko."
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, hemen ikus dezakezu."
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -147,7 +147,7 @@ msgstr ""
"lehendik ere egina dago onespenaren zain? Bestela "
"jakinarazi arazoa YunoHost taldeari."
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -158,7 +158,7 @@ msgstr ""
"baliozkotu behar du orain. Egoera hemen ikusi dezakezu: "
"%(url)s"
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr "Zoritxarrez saio hasiera ukatu da."
@@ -176,7 +176,7 @@ msgstr ""
"Aplikazioa ez dabilela ageri da ez dituelako gure test automatikoak gainditu."
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -281,15 +281,15 @@ msgstr "YunoHost paketearen lizentzia"
msgid "YunoHost app store"
msgstr "YunoHost aplikazio denda"
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr "Hasiera"
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr "Katalogoa"
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr "Desira-zerrenda"
@@ -301,117 +301,122 @@ msgstr "Paketearen aginte-mahaia"
msgid "Charts & history"
msgstr "Diagramak eta historia"
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr "YunoHost dokumentazioa"
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr "Modu argia / iluna"
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr "Hasi saioa YunoHosten foroa erabiliz"
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr "Paketatze-taula"
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr "Amaitu saioa"
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr "Menua bai/ez"
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-"ez egina Flask eta "
-"TailwindCSS "
-"erabiliz"
+"ez egina Flask eta TailwindCSS erabiliz"
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr "Iturburua"
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr "Zerbitzuen baldintzak"
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr "Aplikazioen katalogoa"
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr "Bilatu"
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr "Bilatu…"
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr "Aplikazio guztiak"
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr "Ordenatu"
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr "Izar kopuruaren arabera"
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr "Berritasunaren arabera"
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr "Alfabetoaren arabera"
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr "Saioa hasita izan behar da"
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr "Erakutsi izarra jarritako aplikazioak soilik"
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr "Ez da emaitzarik aurkitu."
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr "Ez duzu bilatzen ari zarena aurkitzen?"
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr "Begiratu desira-zerrenda!"
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr "Aplikazioa hondatuta gisa ageri da"
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr "Gure test automatikoak gainditu ez dituzten aplikazioak dira hauek."
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr "Utzitako aplikazioak"
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr "Aplikazio hauek ez dute mantenduko dituenik."
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -427,76 +432,76 @@ msgstr "Aplikazioen kalitate-maila test automatikoen arabera"
msgid "Apps quality level history"
msgstr "Aplikazioen kalitate-mailaren historia"
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr "Historia"
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr "Gehituta"
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr "Konponduta"
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr "Hondatuta"
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr "Kenduta"
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr "Ezezaguna"
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr "0. maila"
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr "1. maila"
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr "2. maila"
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr "3. maila"
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr "4. maila"
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr "5. maila"
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr "6. maila"
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr "7. maila"
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr "8. maila"
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr "%(level)s. maila:"
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr "Guztira:"
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr "%(level)s. maila"
@@ -516,113 +521,134 @@ msgid ""
msgstr ""
"Paketatzaileek test automatikoen (CI) egoera eta aplikazio guztien PR "
"nagusien egoera monitorizatu dezakete hemen. YunoHosten aplikazioak "
-"paketatzen hasi nahi baduzu, aztertu paketatze-dokumentazioa eta "
-"zatoz agur esatera paketatze-dokumentazioa eta zatoz agur "
+"esatera aplikazioen paketatze-txat-gelan!"
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr "Iragazi"
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr "(Bat ere ez)"
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr "Erregresioa CI nagusian"
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr "Hondatuta / kalitate txikiko aplikazioak"
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr "Zaharkitutako testak CI nagusian"
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr "Erregresio handia Bookworm CI-n"
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr "Probako PRak dituzten aplikazioak"
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr "Automatikoki eguneratzeko PRak dituzten aplikazioak"
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr "Arazoak dituzten aplikazioak"
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr "v1 paketatzea duten aplikazioak"
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr "Kalitate-maila"
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr "Izar kopurua"
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr "main/master adabakiko azken eguneraketa"
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr "testing adabakiko azken eguneraketa"
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr "Arazo-kopurua"
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr "Ezkutatu utzitako / mantentzen ez diren aplikazioak"
+
+#: templates/dash.html:82
msgid "App"
msgstr "Aplikazioa"
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr "CI nagusia"
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr "Bookworm CI-a"
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr "Probako PRa"
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr "Autoeguneratzeko PRa"
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr "Arazoak"
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr "Hondatuta"
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr "Kalitate txikia"
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr "Zaharkitutako testa (duela %(days)s egun)"
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr "Aktibitaterik gabe (duela %(days)s egun)"
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr "v1 paketatzea"
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr "Utzita"
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr "Utzitako aplikazioa"
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr "Datuen azken eguneraketa duela %(time)s"
+
#: templates/index.html:10
msgid "Application Store"
msgstr "Aplikazio denda"
diff --git a/store/translations/fa/LC_MESSAGES/messages.mo b/store/translations/fa/LC_MESSAGES/messages.mo
index 9512f17e..1b3d1952 100644
Binary files a/store/translations/fa/LC_MESSAGES/messages.mo and b/store/translations/fa/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/fa/LC_MESSAGES/messages.po b/store/translations/fa/LC_MESSAGES/messages.po
index 9a047c83..0a1df4e2 100644
--- a/store/translations/fa/LC_MESSAGES/messages.po
+++ b/store/translations/fa/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:08+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: fa \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/fi/LC_MESSAGES/messages.mo b/store/translations/fi/LC_MESSAGES/messages.mo
index d9b24202..2147f0ff 100644
Binary files a/store/translations/fi/LC_MESSAGES/messages.mo and b/store/translations/fi/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/fi/LC_MESSAGES/messages.po b/store/translations/fi/LC_MESSAGES/messages.po
index f66f0f15..f9325eee 100644
--- a/store/translations/fi/LC_MESSAGES/messages.po
+++ b/store/translations/fi/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:06+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: fi \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/fr/LC_MESSAGES/messages.mo b/store/translations/fr/LC_MESSAGES/messages.mo
index 54358781..6ba146bd 100644
Binary files a/store/translations/fr/LC_MESSAGES/messages.mo and b/store/translations/fr/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/fr/LC_MESSAGES/messages.po b/store/translations/fr/LC_MESSAGES/messages.po
index 8e68f05e..e1e71585 100644
--- a/store/translations/fr/LC_MESSAGES/messages.po
+++ b/store/translations/fr/LC_MESSAGES/messages.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
-"PO-Revision-Date: 2024-06-06 14:54+0000\n"
-"Last-Translator: Éric Gaspar \n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
+"PO-Revision-Date: 2024-06-21 14:39+0000\n"
+"Last-Translator: Nathanaël \n"
"Language-Team: French \n"
"Language: fr\n"
@@ -20,16 +20,16 @@ msgstr ""
"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr "L'app %(app_id)s n'a pas été trouvée"
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr "Veuillez vous connecter pour mettre une app en favoris"
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -43,16 +43,16 @@ msgstr ""
"moins 5 fils de discussion, lire au moins 30 messages, et passer au moins 10 "
"minutes à lire des messages."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
"Veuillez vous connecter pour proposer une app pour la liste de souhaits"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr "Jeton CSRF invalide, prière de rafraîchir la page et de réessayer"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
@@ -60,47 +60,47 @@ msgstr ""
"Proposer une app dans la liste de souhaits est limité à une fois tous les 15 "
"jours et par personne. Merci de réessayer dans quelques jours."
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr "Le nom d'app devrait contenir au moins 3 caractères"
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr "Le nom d'app devrait contenir moins de 30 caractères"
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr "La description de l'app devrait contenir au moins 5 caractères"
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr "La description de l'app devrait contenir moins de 100 caractères"
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr "L'URL du dépôt de code devrait contenir au moins 10 caractères"
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr "L'URL du dépôt de code devrait contenir moins de 150 caractères"
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr "L'URL de la licence devrait contenir au moins de 10 caractères"
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr "L'URL de la licence devrait contenir moins de 250 caractères"
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr "L'URL du site web devrait contenir moins de 150 caractères"
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr "Le nom de l'app contient des caractères spéciaux"
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
@@ -108,13 +108,13 @@ msgstr ""
"S'il vous plaît décrivez ce que fait l'application sans utiliser de termes "
"marketing nébuleux ou répéter que l'app est 'libre' ou 'auto-hébergeable'."
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
"Pas besoin de répéter le nom de l'application. Prière de rester concis et de "
"se concentrer sur ce que l'app fait."
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
@@ -124,7 +124,7 @@ msgstr ""
"pouvez l'ajouter en favori afin de montrer votre "
"intérêt."
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, vous pouvez voir sa page ici."
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -144,7 +144,7 @@ msgstr ""
"souhaits… Peut-être qu'il y a déjà une PR en attente pour "
"cette app ? Sinon, merci de signaler le problème à l'équipe YunoHost."
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -155,7 +155,7 @@ msgstr ""
"app. Elle doit maintenant être validée par l'équipe YunoHost. Vous pouvez "
"suivre cette demande ici : %(url)s"
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr "Malheureusement, la connexion a été refusée."
@@ -174,7 +174,7 @@ msgstr ""
"elle ne passe pas nos tests automatisés."
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -282,15 +282,15 @@ msgstr "Licence du paquet YunoHost"
msgid "YunoHost app store"
msgstr "Store d'apps de YunoHost"
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr "Accueil"
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr "Catalogue"
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr "Liste de souhaits"
@@ -302,117 +302,122 @@ msgstr "Tableau de bord du packaging"
msgid "Charts & history"
msgstr "Graphes & historique"
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr "Documentation YunoHost"
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr "Basculer entre les thèmes clair et sombre"
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr "Se connecter via le forum YunoHost"
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr "Tableaux de bord du packaging"
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr "Se déconnecter"
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr "Afficher le menu"
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
"Fait avec à "
"l'aide de Flask et TailwindCSS"
+"com'>Flask et TailwindCSS"
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr "Source"
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr "Conditions des Services"
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr "Catalogue d'applications"
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr "Recherche"
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr "Rechercher…"
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr "Toutes les apps"
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr "Trier par"
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr "Popularité"
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr "Nouveauté"
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr "Alphabétique"
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr "Nécessite une connexion à votre compte du forum YunoHost"
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr "Montrer uniquement mes favoris"
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr "Aucun résultat trouvé."
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr "Vous ne trouvez pas ce que vous cherchez ?"
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr "Jetez un oeil à la liste de souhaits !"
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr "Applications actuellement marquées comme cassées"
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr "Il s'agit d'apps qui n'ont pas validé nos tests automatisés."
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr "Applications obsolètes"
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr "Il s'agit des applications qui ne sont plus maintenues."
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -429,76 +434,76 @@ msgstr "Niveau de qualité des apps dans les tests automatiques"
msgid "Apps quality level history"
msgstr "Historique du niveau de qualité des apps"
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr "Historique"
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr "Ajoutée"
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr "Réparée"
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr "Cassée"
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr "Retirée"
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr "Inconnu"
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr "Niveau 0"
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr "Niveau 1"
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr "Niveau 2"
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr "Niveau 3"
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr "Niveau 4"
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr "Niveau 5"
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr "Niveau 6"
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr "Niveau 7"
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr "Niveau 8"
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr "Niveau %(level)s :"
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr "Total :"
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr "Niveau %(level)s"
@@ -524,108 +529,129 @@ msgstr ""
"class='text-blue-500' href='https://yunohost.org/chat_rooms'>le chat du "
"packaging d'apps !"
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr "Filtrer"
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr "(Aucun)"
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr "Régressions sur la CI principale"
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr "Apps cassées / mauvaise qualité"
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr "Tests périmés sur la CI principale"
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr "Régressions importantes sur la CI bookworm"
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr "Apps avec une PR de testing"
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr "Apps avec une PR d'autoupdate"
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr "Apps avec des issues"
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr "Apps en packaging v1"
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr "Niveau de qualité"
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr "Popularité"
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr "Dernière maj sur la branche principale/master"
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr "Dernière maj sur la branche testing"
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr "Nombre d'issues"
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr "Cacher les apps dépréciées/non maintenues"
+
+#: templates/dash.html:82
msgid "App"
msgstr "App"
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr "CI principale"
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr "CI bookworm"
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr "PR testing"
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr "PR autoupdate"
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr "Issues"
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr "Cassée"
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr "Mauvaise qualité"
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr "Test périmé (%(days)s jours)"
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr "Inactif (%(days)s jours)"
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr "Packaging v1"
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr "Dépréciée"
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr "Non maintenue"
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr "Dernière mise à jour il y a %(time)s"
+
#: templates/index.html:10
msgid "Application Store"
msgstr "Store d'application"
diff --git a/store/translations/gl/LC_MESSAGES/messages.mo b/store/translations/gl/LC_MESSAGES/messages.mo
index 09177282..d4d1f64c 100644
Binary files a/store/translations/gl/LC_MESSAGES/messages.mo and b/store/translations/gl/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/gl/LC_MESSAGES/messages.po b/store/translations/gl/LC_MESSAGES/messages.po
index 8519ae42..748d2ca9 100644
--- a/store/translations/gl/LC_MESSAGES/messages.po
+++ b/store/translations/gl/LC_MESSAGES/messages.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
-"PO-Revision-Date: 2024-05-20 21:19+0000\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
+"PO-Revision-Date: 2024-06-23 03:54+0000\n"
"Last-Translator: \"José M.\" \n"
"Language-Team: Galician \n"
@@ -20,16 +20,16 @@ msgstr ""
"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr "Non se atopa a app %(app_id)s"
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr "Tes que iniciar sesión para poder poñerlle estrela á app"
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -43,15 +43,15 @@ msgstr ""
"entrar polo menos en 5 temas, ler polo menos 30 publicacións e ter estado "
"lendo publicacións durante 10 minutos polo menos."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr "Tes que iniciar sesión para poder enviar unha app á lista de desexos"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr "Token CSRF non válido, actualiza a páxina e volve intentalo"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
@@ -59,49 +59,49 @@ msgstr ""
"As propostas de adicións á lista de desexos están limitadas a unha vez cada "
"15 días por usuaria. Inténtao outra vez nuns días."
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr "O nome ten que ter 3 caracteres como mínimo"
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr "O nome da app ten que ter menos de 30 caracteres"
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr "A descrición da app ten que ter 5 caracteres como mínimo"
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr "A descrición da app ten que ter menos de 100 caracteres"
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
"O URL do repositorio de orixe do código ten que ter 10 caracteres como mínimo"
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
"O URL do repositorio de orixe do código ten que ter menos de 150 caracteres"
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr "O URL da licenza ten que ter 10 caracteres como mínimo"
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr "O URL da licenza ten que ter menos de 250 caracteres"
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr "O URL da páxina web ten que ter menos de 150 caracteres"
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr "O nome da app contén caracteres especiais"
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
@@ -109,11 +109,11 @@ msgstr ""
"Céntrate no que fai a app, se usar termos pouco concretos de márquetin ou "
"repetindo que a app é 'libre' e 'auto-hospedable'."
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr "Non é preciso repetir o nome da app. Céntrate no que fai."
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
@@ -122,7 +122,7 @@ msgstr ""
"Xa existe unha entrada co nome %(slug)s, así que podes engadirlle unha estrela para mostrar interese."
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, aquí podes "
"ver a súa páxina."
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -142,7 +142,7 @@ msgstr ""
"estar en agarda unha petición para esta app? Se non, "
"informa da incidencia ao equipo YunoHost."
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -153,7 +153,7 @@ msgstr ""
"polo equipo de YunoHost. Podes ver aquí o proceso: "
"%(url)s"
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr "É unha mágoa, pero rexeitouse o acceso."
@@ -172,7 +172,7 @@ msgstr ""
"probas automatizadas."
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -279,15 +279,15 @@ msgstr "Licenza do paquete YunoHost"
msgid "YunoHost app store"
msgstr "Tenda de apps de YunoHost"
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr "Inicio"
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr "Catálogo"
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr "Lista de desexos"
@@ -299,117 +299,122 @@ msgstr "Taboleiro do paquete"
msgid "Charts & history"
msgstr "Gráficos e historial"
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr "Documentación YunoHost"
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr "Cambiar modo escuro/claro"
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr "Accede usando o foro de YunoHost"
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr "Taboleiros"
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr "Pechar sesión"
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr "Mostrar menú"
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-"Creada con "
-"usando Flask e TailwindCSS"
+"Creada usando "
+"Flask e TailwindCSS"
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr "Fonte"
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr "Termos dos Servizos"
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr "Catálogo de Aplicacións"
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr "Buscar"
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr "Buscar…"
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr "Todas as apps"
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr "Orde por"
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr "Popularidade"
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr "Máis recente"
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr "Alfabético"
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr "Require iniciar sesión"
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr "Mostrar só apps que lle puxeches estrela"
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr "Non hai resultados."
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr "Non atopas o que buscabas?"
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr "Mira na lista de desexos!"
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr "Aplicacións marcadas actualmente como estragadas"
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr "Estas son as apps que non superaron as nosas probas automatizadas."
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
-msgstr "Aplicacións abandonadas"
+msgstr "Aplicacións obsoletas"
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr "Estas son as apps que xa non teñen mantemento."
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -425,76 +430,76 @@ msgstr "Nivel de calidade das Apps de acordo cos test automáticos"
msgid "Apps quality level history"
msgstr "Historial do nivel de calidade das apps"
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr "Historial"
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr "Engadida"
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr "Reparada"
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr "Estragada"
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr "Retirada"
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr "Descoñecido"
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr "Nivel 0"
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr "Nivel 1"
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr "Nivel 2"
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr "Nivel 3"
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr "Nivel 4"
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr "Nivel 5"
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr "Nivel 6"
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr "Nivel 7"
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr "Nivel 8"
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr "Nivel %(level)s:"
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr "Total:"
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr "Nivel %(level)s"
@@ -519,108 +524,129 @@ msgstr ""
"e saúdanos na sala de conversa de empaquetado de apps!"
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr "Filtrar"
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr "(Nada)"
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr "Regresións no CI principal"
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr "Apps estragadas / baixa calidade"
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr "Test caducados no CI principal"
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr "Regresións principais no CI de Bookworm"
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr "Apps con PRs para probar"
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr "Apps con PRs de autoactualización"
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr "Apps con incidencias"
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr "Apps con empaquetado v1"
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr "Nivel de calidade"
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr "Estrelas de popularidade"
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr "Última actualización da póla main/master"
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr "Última actualización da póla testing"
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr "Número de incidencias"
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr "Agochar apps sen mantemento/obsoletas"
+
+#: templates/dash.html:82
msgid "App"
msgstr "App"
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr "CI principal"
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr "CI de Bookworm"
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr "PR para proba"
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr "PR de autoactualización"
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr "Incidencias"
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr "Estragada"
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr "Baixa calidade"
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr "Test caducado (fai %(days)s días)"
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr "Inactivo (fai %(days)s días)"
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr "Empaquetado v1"
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
-msgstr "Antiga"
+msgstr "Obsoleta"
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr "Sen mantemento"
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr "Última actualizacións dos datos fai %(time)s"
+
#: templates/index.html:10
msgid "Application Store"
msgstr "Tenda de Aplicacións"
diff --git a/store/translations/he/LC_MESSAGES/messages.mo b/store/translations/he/LC_MESSAGES/messages.mo
index 3199d619..d18258e7 100644
Binary files a/store/translations/he/LC_MESSAGES/messages.mo and b/store/translations/he/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/he/LC_MESSAGES/messages.po b/store/translations/he/LC_MESSAGES/messages.po
index 1dc62dce..7cca0986 100644
--- a/store/translations/he/LC_MESSAGES/messages.po
+++ b/store/translations/he/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:06+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: he \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/hi/LC_MESSAGES/messages.mo b/store/translations/hi/LC_MESSAGES/messages.mo
index 705c04ef..bc44deed 100644
Binary files a/store/translations/hi/LC_MESSAGES/messages.mo and b/store/translations/hi/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/hi/LC_MESSAGES/messages.po b/store/translations/hi/LC_MESSAGES/messages.po
index 2f6ed816..ae9fe928 100644
--- a/store/translations/hi/LC_MESSAGES/messages.po
+++ b/store/translations/hi/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:06+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: hi \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/hu/LC_MESSAGES/messages.mo b/store/translations/hu/LC_MESSAGES/messages.mo
index e9ce17db..b1407f08 100644
Binary files a/store/translations/hu/LC_MESSAGES/messages.mo and b/store/translations/hu/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/hu/LC_MESSAGES/messages.po b/store/translations/hu/LC_MESSAGES/messages.po
index 32f4091b..32191632 100644
--- a/store/translations/hu/LC_MESSAGES/messages.po
+++ b/store/translations/hu/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:06+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: hu \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/id/LC_MESSAGES/messages.mo b/store/translations/id/LC_MESSAGES/messages.mo
index 3495a493..ad231b6d 100644
Binary files a/store/translations/id/LC_MESSAGES/messages.mo and b/store/translations/id/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/id/LC_MESSAGES/messages.po b/store/translations/id/LC_MESSAGES/messages.po
index 94b40c77..340f7361 100644
--- a/store/translations/id/LC_MESSAGES/messages.po
+++ b/store/translations/id/LC_MESSAGES/messages.po
@@ -7,27 +7,29 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
-"PO-Revision-Date: 2024-02-21 06:06+0100\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: id \n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
+"PO-Revision-Date: 2024-07-28 12:54+0000\n"
+"Last-Translator: cjdw \n"
+"Language-Team: Indonesian \n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
-msgstr ""
+msgstr "Aplikasi %(app_id)s tidak ditemukan"
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
-msgstr ""
+msgstr "Anda harus masuk untuk dapat memberi bintang pada aplikasi"
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -35,109 +37,132 @@ msgid ""
"least 5 topics, reading at least 30 posts, and spending at least 10 minutes "
"reading posts."
msgstr ""
+"Perhatikan bahwa, karena berbagai penyalahgunaan, kami membatasi login di "
+"toko aplikasi hanya untuk pengguna 'trust level 1'.
'Trust level 1' "
+"dapat diperoleh setelah berinteraksi minimal dengan forum, dan lebih khusus "
+"lagi: memasuki minimal 5 topik, membaca minimal 30 postingan, dan "
+"menghabiskan minimal 10 menit membaca postingan."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
-msgstr ""
+msgstr "Anda harus masuk untuk mengajukan aplikasi ke dalam daftar keinginan"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
-msgstr ""
+msgstr "Token CSRF tidak valid, silakan memuat ulang halaman dan coba lagi"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
+"Pengajuan penambahan daftar keinginan dibatasi setiap 15 hari sekali per "
+"pengguna. Silakan mencoba lagi dalam beberapa hari."
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
-msgstr ""
+msgstr "Nama aplikasi minimal harus 3 karakter"
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
-msgstr ""
+msgstr "Nama aplikasi harus kurang dari 30 karakter"
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
-msgstr ""
+msgstr "Deskripsi aplikasi minimal harus 5 karakter"
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
-msgstr ""
-
-#: app.py:279
-msgid "Upstream code repo URL should be at least 10 characters"
-msgstr ""
-
-#: app.py:283
-msgid "Upstream code repo URL should be less than 150 characters"
-msgstr ""
-
-#: app.py:287
-msgid "License URL should be at least 10 characters"
-msgstr ""
-
-#: app.py:291
-msgid "License URL should be less than 250 characters"
-msgstr ""
-
-#: app.py:293
-msgid "Website URL should be less than 150 characters"
-msgstr ""
+msgstr "Deskripsi aplikasi harus kurang dari 100 karakter"
#: app.py:296
-msgid "App name contains special characters"
-msgstr ""
+msgid "Upstream code repo URL should be at least 10 characters"
+msgstr "URL depot kode hulu minimal harus 10 karakter"
-#: app.py:303
+#: app.py:300
+msgid "Upstream code repo URL should be less than 150 characters"
+msgstr "URL depot kode hulu harus kurang dari 150 karakter"
+
+#: app.py:304
+msgid "License URL should be at least 10 characters"
+msgstr "URL lisensi minimal harus 10 karakter"
+
+#: app.py:308
+msgid "License URL should be less than 250 characters"
+msgstr "URL lisensi harus kurang dari 250 karakter"
+
+#: app.py:310
+msgid "Website URL should be less than 150 characters"
+msgstr "URL situs web harus kurang dari 150 karakter"
+
+#: app.py:313
+msgid "App name contains special characters"
+msgstr "Nama aplikasi berisi karakter khusus"
+
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
+"Harap fokus pada apa yang dilakukan aplikasi, tanpa menggunakan pemasaran, "
+"istilah yang tidak jelas, atau mengulangi bahwa aplikasi tersebut 'gratis' "
+"dan 'dapat dihosting sendiri'."
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
+"Tidak perlu mengulang nama aplikasinya. Fokus pada apa yang dilakukan "
+"aplikasi."
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
+"Entri dengan nama %(slug)s sudah ada di dalam daftar keinginan, sebagai "
+"gantinya, Anda dapat menambahkan bintang pada aplikasi "
+"untuk menunjukkan minat Anda."
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
+"Aplikasi dengan nama %(slug)s sudah ada di dalam katalog, Anda dapat melihat halamannya di sini."
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
"there's already a waiting PR for this app? Else, "
"please report the issue to the YunoHost team."
msgstr ""
+"Gagal membuat permintaan penarikan untuk menambahkan aplikasi ke dalam "
+"daftar keinginan… Mungkin sudah ada PR yang menunggu untuk "
+"aplikasi ini? Jika tidak, silakan melaporkan isu ini kepada tim YunoHost."
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
"by the YunoHost team. You can track progress here: "
"%(url)s"
msgstr ""
+"Aplikasi yang Anda usulkan telah berhasil dikirimkan. Seharusnya sekarang "
+"sedang divalidasi oleh tim YunoHost. Anda dapat melacak kemajuannya di sini: "
+"%(url)s"
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
-msgstr ""
+msgstr "Sayangnya, login ditolak."
#: templates/app.html:10 templates/catalog.html:23
#, python-format
msgid "Logo for %(app)s"
-msgstr ""
+msgstr "Logo untuk %(app)s"
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
#: templates/catalog.html:42
@@ -145,13 +170,17 @@ msgid ""
"This app is currently flagged as broken because it failed our automatic "
"tests."
msgstr ""
+"Aplikasi ini sekarang ditandai sebagai rusak karena gagal dalam pengujian "
+"otomatis kami."
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
msgstr ""
+"Biasanya ini hanya situasi sementara yang mengharuskan pembuat paket "
+"memperbaiki sesuatu di dalam aplikasinya."
#: templates/app.html:37 templates/app.html:38 templates/catalog.html:46
#: templates/catalog.html:47
@@ -159,311 +188,328 @@ msgid ""
"This app has been good quality according to our automatic tests over at "
"least one year."
msgstr ""
+"Aplikasi ini memiliki kualitas yang baik menurut pengujian otomatis kami "
+"setidaknya selama setahun."
#: templates/app.html:81
msgid "Try the demo"
-msgstr ""
+msgstr "Coba demonstrasinya"
#: templates/app.html:82
msgid "Demo"
-msgstr ""
+msgstr "Demonstrasi"
#: templates/app.html:85
msgid "Install with YunoHost"
-msgstr ""
+msgstr "Instal dengan YunoHost"
#: templates/app.html:93
#, python-format
msgid "Current version: %(version)s"
-msgstr ""
+msgstr "Versi saat ini: %(version)s"
#: templates/app.html:95
#, python-format
msgid "Potential alternative to: %(alternatives)s"
-msgstr ""
+msgstr "Berpotensi alternatif dari: %(alternatives)s"
#: templates/app.html:101
#, python-format
msgid "Screenshot for %(app)s"
-msgstr ""
+msgstr "Tangkapan layar pada %(app)s"
#: templates/app.html:106
#, python-format
msgid ""
"This app is only compatible with these specific architectures: %(archs)s"
msgstr ""
+"Aplikasi ini hanya kompatibel dengan arsitektur khusus berikut ini: %(archs)s"
#: templates/app.html:112
#, python-format
msgid "This app requires an unusual amount of RAM to install: %(ram)s"
msgstr ""
+"Aplikasi ini membutuhkan jumlah RAM yang tidak biasa agar bisa dipasang: "
+"%(ram)s"
#: templates/app.html:118
msgid "Important infos before installing"
-msgstr ""
+msgstr "Informasi penting sebelum memasang"
#: templates/app.html:124
msgid "Antifeatures"
-msgstr ""
+msgstr "Antifitur"
#: templates/app.html:125
msgid "(This app has features you may not like)"
-msgstr ""
+msgstr "(Aplikasi ini memiliki fitur yang mungkin tidak Anda sukai)"
#: templates/app.html:136
msgid "Useful links"
-msgstr ""
+msgstr "Tautan yang bermanfaat"
#: templates/app.html:139
#, python-format
msgid "App license: %(license)s"
-msgstr ""
+msgstr "Lisensi aplikasi: %(license)s"
#: templates/app.html:140
msgid " Official website"
-msgstr ""
+msgstr " Situs web resmi"
#: templates/app.html:141
msgid "Official admin documentation"
-msgstr ""
+msgstr "Dokumentasi admin resmi"
#: templates/app.html:142
msgid "Official user documentation"
-msgstr ""
+msgstr "Dokumentasi Pengguna Resmi"
#: templates/app.html:143
msgid "Official code repository"
-msgstr ""
+msgstr "Depot kode resmi"
#: templates/app.html:144
msgid "YunoHost package repository"
-msgstr ""
+msgstr "Depot paket YunoHost"
#: templates/app.html:145
msgid "YunoHost package license"
-msgstr ""
+msgstr "Lisensi paket YunoHost"
#: templates/base.html:11
msgid "YunoHost app store"
-msgstr ""
+msgstr "Toko aplikasi Yunohost"
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
-msgstr ""
+msgstr "Rumah"
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
-msgstr ""
+msgstr "Katalog"
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
-msgstr ""
+msgstr "Daftar Keinginan"
#: templates/base.html:52
msgid "Packaging dashboard"
-msgstr ""
+msgstr "Dasbor paket"
#: templates/base.html:57
msgid "Charts & history"
-msgstr ""
+msgstr "Grafik & rIwayat"
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
-msgstr ""
+msgstr "Dokumentasi YunoHost"
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr "Beralih ke mode terang/gelap"
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
-msgstr ""
+msgstr "Masuk melalui forum YunoHost"
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
-msgstr ""
+msgstr "Papan pengemasan"
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
-msgstr ""
+msgstr "Keluar"
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
-msgstr ""
+msgstr "Beralih menu"
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
+"Dibuat dengan "
+"menggunakan Flask dan TailwindCSS"
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
-msgstr ""
+msgstr "Sumber"
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
-msgstr ""
+msgstr "Ketentuan Layanan"
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
-msgstr ""
+msgstr "Katalog Aplikasi"
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
-msgstr ""
+msgstr "Cari"
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
-msgstr ""
+msgstr "Mencari…"
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
-msgstr ""
+msgstr "Semua aplikasi"
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
-msgstr ""
+msgstr "Sortir dengan"
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
-msgstr ""
+msgstr "Popularitas"
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
-msgstr ""
+msgstr "Terbaru"
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
-msgstr ""
+msgstr "Alfabetis"
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
-msgstr ""
+msgstr "Harus masuk terlebih dahulu"
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
-msgstr ""
+msgstr "Hanya menampilkan aplikasi yang Anda bintangi"
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
-msgstr ""
+msgstr "Tidak ada hasil yang ditemukan."
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
-msgstr ""
+msgstr "Tidak menemukan apa yang Anda cari?"
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
-msgstr ""
+msgstr "Lihatlah daftar keinginan!"
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
-msgstr ""
+msgstr "Saat ini aplikasi ditandai sebagai rusak"
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
-msgstr ""
+msgstr "Ini adalah aplikasi yang gagal dalam pengujian otomatis kami."
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
-msgstr ""
+msgstr "Aplikasi yang kedaluwarsa"
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
-msgstr ""
+msgstr "Ini adalah aplikasi yang tidak terawat."
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
msgstr ""
+"Artinya pengembang tidak akan memperbaruinya lagi. Kami sangat menyarankan "
+"agar tidak memasangnya dan menyarankan pengguna untuk mencari alternatif "
+"lain."
#: templates/charts.html:5
msgid "Apps quality level from automatic tests"
-msgstr ""
+msgstr "Tingkat kualitas aplikasi dari pengujian otomatis"
#: templates/charts.html:9
msgid "Apps quality level history"
-msgstr ""
+msgstr "Riwayat tingkat kualitas aplikasi"
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
-msgstr ""
+msgstr "Riwayat"
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
-msgstr ""
+msgstr "Ditambahkan"
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
-msgstr ""
+msgstr "Diperbaiki"
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
-msgstr ""
+msgstr "Rusak"
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
-msgstr ""
+msgstr "Disingkirkan"
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
-msgstr ""
+msgstr "Tidak diketahui"
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
-msgstr ""
+msgstr "Tingkat 0"
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
-msgstr ""
+msgstr "Tingkat 1"
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
-msgstr ""
+msgstr "Tingkat 2"
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
-msgstr ""
+msgstr "Tingkat 3"
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
-msgstr ""
+msgstr "Tingkat 4"
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
-msgstr ""
+msgstr "Tingkat 5"
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
-msgstr ""
+msgstr "Tingkat 6"
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
-msgstr ""
+msgstr "Tingkat 7"
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
-msgstr ""
+msgstr "Tingkat 8"
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
-msgstr ""
+msgstr "Tingkat %(level)s:"
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
-msgstr ""
+msgstr "Jumlah:"
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
-msgstr ""
+msgstr "Tingkat %(level)s"
#: templates/dash.html:3 templates/dash.html:9
msgid "App packaging dashboard"
-msgstr ""
+msgstr "Dasbor pengemasan aplikasi"
#: templates/dash.html:11
msgid ""
@@ -474,150 +520,184 @@ msgid ""
"documentation and come say hi to us on the app packaging chatroom!"
msgstr ""
+"Di sini adalah tempat para pengemas dapat memantau status pengujian otomatis "
+"(CI) dan permintaan penarikan umum yang sedang berlangsung di semua "
+"aplikasi. Jika Anda ingin memulai pengemasan aplikasi di YunoHost, silakan "
+"periksa dokumentasi pengemasan dan sapa kami di ruang obrolan pengemasan "
+"aplikasi!"
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
-msgstr ""
-
-#: templates/dash.html:23
-msgid "(None)"
-msgstr ""
+msgstr "Filter"
#: templates/dash.html:24
-msgid "Regressions on main CI"
-msgstr ""
+msgid "(None)"
+msgstr "(Kosong)"
#: templates/dash.html:25
-msgid "Broken / low quality apps"
-msgstr ""
+msgid "Regressions on main CI"
+msgstr "Regresi pada CI utama"
#: templates/dash.html:26
-msgid "Outdated tests on main CI"
-msgstr ""
+msgid "Broken / low quality apps"
+msgstr "Aplikasi rusak / kualitas rendah"
#: templates/dash.html:27
-msgid "Major regressions on Bookworm CI"
-msgstr ""
+msgid "Outdated tests on main CI"
+msgstr "Tes pada CI utama kedaluwarsa"
#: templates/dash.html:28
-msgid "Apps with testings PRs"
-msgstr ""
+msgid "Major regressions on Bookworm CI"
+msgstr "Regresi besar pada CI Bookworm"
#: templates/dash.html:29
-msgid "Apps with autoupdate PRs"
-msgstr ""
+msgid "Apps with testings PRs"
+msgstr "Aplikasi dengan pengujian pada PR"
#: templates/dash.html:30
+msgid "Apps with autoupdate PRs"
+msgstr "Aplikasi dengan pembaruan otomatis pada PR"
+
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr "Aplikasi disertai dengan isu"
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
-msgstr ""
-
-#: templates/dash.html:41
-msgid "Quality level"
-msgstr ""
-
-#: templates/dash.html:42 templates/dash.html:173
-msgid "Popularity stars"
-msgstr ""
+msgstr "Mengemas aplikasi v1"
#: templates/dash.html:43
+msgid "Quality level"
+msgstr "Tingkat kualitas"
+
+#: templates/dash.html:44 templates/dash.html:214
+msgid "Popularity stars"
+msgstr "Bintang popularitas"
+
+#: templates/dash.html:45
msgid "Last update on main/master branch"
-msgstr ""
+msgstr "Pembaruan terakhir pada cabang main/master"
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
-msgstr ""
+msgstr "Pembaruan terakhir pada cabang testing"
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr "nomor isu"
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr "Sembunyikan aplikasi kedaluwarsa/tidak dirawat"
+
+#: templates/dash.html:82
msgid "App"
-msgstr ""
+msgstr "Aplikasi"
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
-msgstr ""
+msgstr "CI utama"
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
-msgstr ""
+msgstr "CI bookworm"
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
-msgstr ""
+msgstr "PR testing"
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
-msgstr ""
+msgstr "PR autoupdate"
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr "Isu"
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
-msgstr ""
+msgstr "Rusak"
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
-msgstr ""
+msgstr "Kualitas rendah"
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
-msgstr ""
+msgstr "Tes kedaluwarsa (%(days)s hari lalu)"
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
-msgstr ""
+msgstr "Tidak aktif (%(days)s hari lalu)"
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
-msgstr ""
+msgstr "Kemasan v1"
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
-msgstr ""
+msgstr "Kedaluwarsa"
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
-msgstr ""
+msgstr "Tidak dirawat"
+
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr "Pembaruan data terakhir %(time)s yang lalu"
#: templates/index.html:10
msgid "Application Store"
-msgstr ""
+msgstr "Toko Aplikasi"
#: templates/index.html:21
msgid "Browse all applications"
-msgstr ""
+msgstr "Telusuri semua aplikasi"
#: templates/wishlist.html:33 templates/wishlist_add.html:3
msgid "Suggest an app"
-msgstr ""
+msgstr "Sarankan sebuah aplikasi"
#: templates/wishlist_add.html:8
msgid "Suggest an application to be added to YunoHost's catalog"
-msgstr ""
+msgstr "Sarankan sebuah aplikasi agar ditambahkan ke katalog YunoHost"
#: templates/wishlist_add.html:29
msgid "You must first login to be allowed to submit an app to the wishlist"
msgstr ""
+"pertama-tama Anda harus masuk terlebih dahulu agar dapat mengajukan aplikasi "
+"ke dalam daftar keinginan"
#: templates/wishlist_add.html:40
msgid "Due to abuses, only one proposal every 15 days per user is allowed."
msgstr ""
+"Karena penyalahgunaan, hanya satu proposal setiap 15 hari per pengguna yang "
+"diizinkan."
#: templates/wishlist_add.html:43
msgid ""
"Reviewing those proposals is tiring for volunteers, please don't yolo-send "
"every random nerdy stuff you find on the Internet."
msgstr ""
+"Meninjau proposal tersebut melelahkan bagi para sukarelawan, mohon jangan "
+"mengirimkan hal-hal aneh yang Anda temukan di Internet secara acak."
#: templates/wishlist.html:71 templates/wishlist_add.html:61
msgid "Name"
-msgstr ""
+msgstr "Nama"
#: templates/wishlist_add.html:64
msgid "App's description"
-msgstr ""
+msgstr "Deskripsi aplikasi"
#: templates/wishlist_add.html:66
msgid "Please be concise and focus on what the app does."
-msgstr ""
+msgstr "Harap lebih singkat dan fokus pada fungsi aplikasi."
#: templates/wishlist_add.html:66
msgid ""
@@ -626,38 +706,48 @@ msgid ""
"marketing stuff like 'the most', or vague properties like 'easy', 'simple', "
"'lightweight'."
msgstr ""
+"Tidak perlu mengulangi kata-kata '[Aplikasi] adalah …'. Tidak perlu "
+"menyatakan bahwa aplikasi tersebut gratis/sumber-terbuka atau di-hosting "
+"sendiri (jika tidak, aplikasi itu tidak akan dikemas di YunoHost). Hindari "
+"promosi seperti 'paling', atau properti yang tidak jelas seperti 'mudah', "
+"'sederhana', 'ringan'."
#: templates/wishlist_add.html:68
msgid "Project code repository"
-msgstr ""
+msgstr "Depot kode proyek"
#: templates/wishlist_add.html:71
msgid "Link to the project's LICENSE"
-msgstr ""
+msgstr "Tautan ke LICENSE proyek"
#: templates/wishlist_add.html:73
msgid ""
"The YunoHost project will only package free/open-source software (with "
"possible case-by-case exceptions for apps which are not-totally-free)"
msgstr ""
+"Proyek YunoHost hanya akan mengemas perangkat lunak gratis/sumber-terbuka ("
+"dengan kemungkinan pengecualian kasus per kasus pada aplikasi yang tidak "
+"sepenuhnya gratis)"
#: templates/wishlist_add.html:75
msgid "Project website"
-msgstr ""
+msgstr "Website proyek"
#: templates/wishlist_add.html:77
msgid ""
"Please *do not* just copy-paste the code repository URL. If the project has "
"no proper website, then leave the field empty."
msgstr ""
+"Harap *jangan* hanya menyalin-tempel URL depot kode. Jika proyek tidak "
+"memiliki situs web yang tepat, biarkan kolom tersebut kosong."
#: templates/wishlist_add.html:84
msgid "Submit"
-msgstr ""
+msgstr "Kirim"
#: templates/wishlist.html:3 templates/wishlist.html:8
msgid "Application Wishlist"
-msgstr ""
+msgstr "Daftar Keinginan Aplikasi"
#: templates/wishlist.html:10
msgid ""
@@ -668,19 +758,25 @@ msgid ""
"to integrate it, and is merely a source of inspiration for packaging "
"volunteers."
msgstr ""
+"Daftar keinginan adalah tempat orang-orang dapat secara kolektif menyarankan "
+"dan memilih agar aplikasi-aplikasi tersebut dikemas dan disediakan dalam "
+"katalog aplikasi resmi YunoHost. Namun, fakta bahwa aplikasi yang tercantum "
+"di sini tidak dapat diartikan sebagai fakta bahwa proyek YunoHost berencana "
+"untuk mengintegrasikannya, dan hanya menjadi sumber inspirasi bagi para "
+"relawan pengemasan."
#: templates/wishlist.html:74
msgid "Description"
-msgstr ""
+msgstr "Deskripsi"
#: templates/wishlist.html:102 templates/wishlist.html:103
msgid "Official website"
-msgstr ""
+msgstr "Website resmi"
#: templates/wishlist.html:115 templates/wishlist.html:116
msgid "Code repository"
-msgstr ""
+msgstr "Depot kode"
#: templates/wishlist.html:129 templates/wishlist.html:130
msgid "Star this app"
-msgstr ""
+msgstr "Bintangi aplikasi ini"
diff --git a/store/translations/it/LC_MESSAGES/messages.mo b/store/translations/it/LC_MESSAGES/messages.mo
index 2cf33c21..364ef481 100644
Binary files a/store/translations/it/LC_MESSAGES/messages.mo and b/store/translations/it/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/it/LC_MESSAGES/messages.po b/store/translations/it/LC_MESSAGES/messages.po
index cdb8c496..138de3e6 100644
--- a/store/translations/it/LC_MESSAGES/messages.po
+++ b/store/translations/it/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:07+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: it \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/ja/LC_MESSAGES/messages.mo b/store/translations/ja/LC_MESSAGES/messages.mo
index 82c192ae..ca0c70da 100644
Binary files a/store/translations/ja/LC_MESSAGES/messages.mo and b/store/translations/ja/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/ja/LC_MESSAGES/messages.po b/store/translations/ja/LC_MESSAGES/messages.po
index d323fe75..366fd417 100644
--- a/store/translations/ja/LC_MESSAGES/messages.po
+++ b/store/translations/ja/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:07+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: ja \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/kab/LC_MESSAGES/messages.mo b/store/translations/kab/LC_MESSAGES/messages.mo
index 3a387672..c23cf6c3 100644
Binary files a/store/translations/kab/LC_MESSAGES/messages.mo and b/store/translations/kab/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/kab/LC_MESSAGES/messages.po b/store/translations/kab/LC_MESSAGES/messages.po
index 6fbe64ee..271ec5da 100644
--- a/store/translations/kab/LC_MESSAGES/messages.po
+++ b/store/translations/kab/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:07+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: kab \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/ko/LC_MESSAGES/messages.mo b/store/translations/ko/LC_MESSAGES/messages.mo
index d28c858a..68315cbe 100644
Binary files a/store/translations/ko/LC_MESSAGES/messages.mo and b/store/translations/ko/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/ko/LC_MESSAGES/messages.po b/store/translations/ko/LC_MESSAGES/messages.po
index 9ec5c607..ca89c15f 100644
--- a/store/translations/ko/LC_MESSAGES/messages.po
+++ b/store/translations/ko/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:05+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: ko \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/lt/LC_MESSAGES/messages.mo b/store/translations/lt/LC_MESSAGES/messages.mo
index 9260df87..e6c21c4a 100644
Binary files a/store/translations/lt/LC_MESSAGES/messages.mo and b/store/translations/lt/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/lt/LC_MESSAGES/messages.po b/store/translations/lt/LC_MESSAGES/messages.po
index e0de5cb1..c283976b 100644
--- a/store/translations/lt/LC_MESSAGES/messages.po
+++ b/store/translations/lt/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:07+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: lt \n"
@@ -19,16 +19,16 @@ msgstr ""
"%100<10 || n%100>=20) ? 1 : 2);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -37,85 +37,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -123,7 +123,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -131,7 +131,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -148,7 +148,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -248,15 +248,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -268,113 +268,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -388,76 +393,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -476,108 +481,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/mk/LC_MESSAGES/messages.mo b/store/translations/mk/LC_MESSAGES/messages.mo
index 5271cb44..22005cef 100644
Binary files a/store/translations/mk/LC_MESSAGES/messages.mo and b/store/translations/mk/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/mk/LC_MESSAGES/messages.po b/store/translations/mk/LC_MESSAGES/messages.po
index b5e304ac..d6a16b1a 100644
--- a/store/translations/mk/LC_MESSAGES/messages.po
+++ b/store/translations/mk/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:07+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: mk \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/nb_NO/LC_MESSAGES/messages.mo b/store/translations/nb_NO/LC_MESSAGES/messages.mo
index 9fa8f931..b1637b2e 100644
Binary files a/store/translations/nb_NO/LC_MESSAGES/messages.mo and b/store/translations/nb_NO/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/nb_NO/LC_MESSAGES/messages.po b/store/translations/nb_NO/LC_MESSAGES/messages.po
index 19e7d553..d10739b9 100644
--- a/store/translations/nb_NO/LC_MESSAGES/messages.po
+++ b/store/translations/nb_NO/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:07+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: nb_NO \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/ne/LC_MESSAGES/messages.mo b/store/translations/ne/LC_MESSAGES/messages.mo
index f282bccd..01adf4d7 100644
Binary files a/store/translations/ne/LC_MESSAGES/messages.mo and b/store/translations/ne/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/ne/LC_MESSAGES/messages.po b/store/translations/ne/LC_MESSAGES/messages.po
index 95707aad..5e911dff 100644
--- a/store/translations/ne/LC_MESSAGES/messages.po
+++ b/store/translations/ne/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:07+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: ne \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/nl/LC_MESSAGES/messages.mo b/store/translations/nl/LC_MESSAGES/messages.mo
index 00325053..c7033d9e 100644
Binary files a/store/translations/nl/LC_MESSAGES/messages.mo and b/store/translations/nl/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/nl/LC_MESSAGES/messages.po b/store/translations/nl/LC_MESSAGES/messages.po
index 843d8fbb..32838ddb 100644
--- a/store/translations/nl/LC_MESSAGES/messages.po
+++ b/store/translations/nl/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:07+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: nl \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/oc/LC_MESSAGES/messages.mo b/store/translations/oc/LC_MESSAGES/messages.mo
index f2815074..f1eacddb 100644
Binary files a/store/translations/oc/LC_MESSAGES/messages.mo and b/store/translations/oc/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/oc/LC_MESSAGES/messages.po b/store/translations/oc/LC_MESSAGES/messages.po
index d97c3ddc..e97b1ede 100644
--- a/store/translations/oc/LC_MESSAGES/messages.po
+++ b/store/translations/oc/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:08+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: oc \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/pl/LC_MESSAGES/messages.mo b/store/translations/pl/LC_MESSAGES/messages.mo
index 3561103e..d7a24403 100644
Binary files a/store/translations/pl/LC_MESSAGES/messages.mo and b/store/translations/pl/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/pl/LC_MESSAGES/messages.po b/store/translations/pl/LC_MESSAGES/messages.po
index e4e7ee25..7e2d8e72 100644
--- a/store/translations/pl/LC_MESSAGES/messages.po
+++ b/store/translations/pl/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:08+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: pl \n"
@@ -19,16 +19,16 @@ msgstr ""
"|| n%100>=20) ? 1 : 2);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -37,85 +37,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -123,7 +123,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -131,7 +131,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -148,7 +148,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -248,15 +248,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -268,113 +268,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -388,76 +393,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -476,108 +481,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/pt/LC_MESSAGES/messages.mo b/store/translations/pt/LC_MESSAGES/messages.mo
index 780537b1..72e7b76a 100644
Binary files a/store/translations/pt/LC_MESSAGES/messages.mo and b/store/translations/pt/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/pt/LC_MESSAGES/messages.po b/store/translations/pt/LC_MESSAGES/messages.po
index 174f3223..1c59aed4 100644
--- a/store/translations/pt/LC_MESSAGES/messages.po
+++ b/store/translations/pt/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-06-06 14:54+0000\n"
"Last-Translator: Éric Gaspar \n"
"Language-Team: Portuguese 'Trust level 1' is obtained after "
@@ -43,86 +42,86 @@ msgstr ""
"inserir pelo menos 5 tópicos, ler pelo menos 30 postagens e passar pelo "
"menos 10 minutos lendo postagens."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
"Você deve estar logado para enviar um aplicativo para a lista de desejos"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr "Token CSRF inválido. Atualize a página e tente novamente"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -130,7 +129,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -138,7 +137,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -155,7 +154,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -255,15 +254,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -275,113 +274,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -395,76 +399,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -483,108 +487,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/pt_BR/LC_MESSAGES/messages.mo b/store/translations/pt_BR/LC_MESSAGES/messages.mo
index 732173c5..1d8d57e4 100644
Binary files a/store/translations/pt_BR/LC_MESSAGES/messages.mo and b/store/translations/pt_BR/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/pt_BR/LC_MESSAGES/messages.po b/store/translations/pt_BR/LC_MESSAGES/messages.po
index 6a450b7e..27a3fbe1 100644
--- a/store/translations/pt_BR/LC_MESSAGES/messages.po
+++ b/store/translations/pt_BR/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:08+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: pt_BR \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/ru/LC_MESSAGES/messages.mo b/store/translations/ru/LC_MESSAGES/messages.mo
index 5a186172..2d9455c6 100644
Binary files a/store/translations/ru/LC_MESSAGES/messages.mo and b/store/translations/ru/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/ru/LC_MESSAGES/messages.po b/store/translations/ru/LC_MESSAGES/messages.po
index a4034f4f..141e9b9a 100644
--- a/store/translations/ru/LC_MESSAGES/messages.po
+++ b/store/translations/ru/LC_MESSAGES/messages.po
@@ -7,28 +7,30 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
-"PO-Revision-Date: 2024-02-21 06:08+0100\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: ru \n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
+"PO-Revision-Date: 2024-08-05 14:21+0000\n"
+"Last-Translator: Ivan Davydov \n"
+"Language-Team: Russian \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
-msgstr ""
+msgstr "Приложение %(app_id)s не найдено"
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
-msgstr ""
+msgstr "Вы обязаны войти в систему, чтобы поставить звезду приложению"
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,86 +38,99 @@ msgid ""
"least 5 topics, reading at least 30 posts, and spending at least 10 minutes "
"reading posts."
msgstr ""
+"Заметьте, что из-за неправомерного использования, мы ограничили вход в "
+"магазин приложений только для пользователей «1 уровня доверия».
«1 "
+"уровень доверия» получается после небольшого взаимодействия с форумом, то "
+"есть: участие как минимум в 5 темах, прочтение как минимум 30 постов и трата "
+"как минимум 10 минут на чтение постов."
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
+"Вы обязаны войти в систему, чтобы добавить приложение в список желаемого"
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
+"Неправильный токен CSRF, пожалуйста, перезагрузите страницу и попробуйте "
+"снова"
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
+"Добавки в список желаний ограничены раз в 15 дней на одного пользователя. "
+"Пожалуйста, попробуйте еще раз через несколько дней."
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
-msgstr ""
+msgstr "Имя приложения должно быть длиной хотя бы в 3 символа"
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
-msgstr ""
+msgstr "Имя приложения должно быть длиной хотя бы в 30 символов"
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
+"Пожалуйста, сфокусируйтесь на том, что приложение делает, без использование "
+"маркетинговых, нечётких терминов или повторения того, что приложение "
+"«свободное» и «само-хостное»."
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -123,7 +138,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -131,7 +146,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -148,7 +163,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -205,7 +220,7 @@ msgstr ""
#: templates/app.html:124
msgid "Antifeatures"
-msgstr ""
+msgstr "Анти-функции"
#: templates/app.html:125
msgid "(This app has features you may not like)"
@@ -248,15 +263,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -268,113 +283,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -388,76 +408,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -476,108 +496,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
@@ -627,6 +668,10 @@ msgid ""
"marketing stuff like 'the most', or vague properties like 'easy', 'simple', "
"'lightweight'."
msgstr ""
+"Не надо повторять «[Приложение] — …». Не надо обозначать, что оно свободное "
+"или само-хостное (иначе оно не опакетировалось бы для YunoHost). Избегайте "
+"маркетинговые вещи вроде «самый» или расплывчатые свойства вроде «простой» и "
+"«легковесный»."
#: templates/wishlist_add.html:68
msgid "Project code repository"
@@ -641,6 +686,8 @@ msgid ""
"The YunoHost project will only package free/open-source software (with "
"possible case-by-case exceptions for apps which are not-totally-free)"
msgstr ""
+"Проект YunoHost будет пакетировать только свободные программы (с возможными "
+"редкими исключениями для приложений, которые не полностью свободны)"
#: templates/wishlist_add.html:75
msgid "Project website"
diff --git a/store/translations/sk/LC_MESSAGES/messages.mo b/store/translations/sk/LC_MESSAGES/messages.mo
index 43a7f1aa..218368b9 100644
Binary files a/store/translations/sk/LC_MESSAGES/messages.mo and b/store/translations/sk/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/sk/LC_MESSAGES/messages.po b/store/translations/sk/LC_MESSAGES/messages.po
index 38066521..a021e8f5 100644
--- a/store/translations/sk/LC_MESSAGES/messages.po
+++ b/store/translations/sk/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-06-11 20:38+0000\n"
"Last-Translator: Jose Riha \n"
"Language-Team: Slovak =2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -38,85 +37,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -124,7 +123,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -132,7 +131,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -149,7 +148,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -249,15 +248,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -269,113 +268,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -389,76 +393,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -477,108 +481,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/sl/LC_MESSAGES/messages.mo b/store/translations/sl/LC_MESSAGES/messages.mo
index baf04eea..7a7b2ff5 100644
Binary files a/store/translations/sl/LC_MESSAGES/messages.mo and b/store/translations/sl/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/sl/LC_MESSAGES/messages.po b/store/translations/sl/LC_MESSAGES/messages.po
index ff6bb75f..fe59fcfc 100644
--- a/store/translations/sl/LC_MESSAGES/messages.po
+++ b/store/translations/sl/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:08+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: sl \n"
@@ -19,16 +19,16 @@ msgstr ""
"%100==4 ? 2 : 3);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -37,85 +37,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -123,7 +123,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -131,7 +131,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -148,7 +148,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -248,15 +248,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -268,113 +268,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -388,76 +393,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -476,108 +481,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/sv/LC_MESSAGES/messages.mo b/store/translations/sv/LC_MESSAGES/messages.mo
index 366999c6..9e0e86c1 100644
Binary files a/store/translations/sv/LC_MESSAGES/messages.mo and b/store/translations/sv/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/sv/LC_MESSAGES/messages.po b/store/translations/sv/LC_MESSAGES/messages.po
index 612b6b54..13d91dfc 100644
--- a/store/translations/sv/LC_MESSAGES/messages.po
+++ b/store/translations/sv/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:09+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: sv \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/te/LC_MESSAGES/messages.mo b/store/translations/te/LC_MESSAGES/messages.mo
index b0a87789..825b7bce 100644
Binary files a/store/translations/te/LC_MESSAGES/messages.mo and b/store/translations/te/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/te/LC_MESSAGES/messages.po b/store/translations/te/LC_MESSAGES/messages.po
index 9f805a3e..1b00f275 100644
--- a/store/translations/te/LC_MESSAGES/messages.po
+++ b/store/translations/te/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:09+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: te \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/tr/LC_MESSAGES/messages.mo b/store/translations/tr/LC_MESSAGES/messages.mo
index cf7c3366..26c77c19 100644
Binary files a/store/translations/tr/LC_MESSAGES/messages.mo and b/store/translations/tr/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/tr/LC_MESSAGES/messages.po b/store/translations/tr/LC_MESSAGES/messages.po
index cd673225..e5b1524d 100644
--- a/store/translations/tr/LC_MESSAGES/messages.po
+++ b/store/translations/tr/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:09+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: tr \n"
@@ -18,16 +18,18 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179 app.py:162
#, python-format
msgid "App %(app_id)s not found"
-msgstr ""
+msgstr "%(app_id)s uygulaması bulunamadı"
-#: app.py:165
+#: app.py:182 app.py:165
msgid "You must be logged in to be able to star an app"
-msgstr ""
+msgstr "Bir uygulamayı puanlamak için giriş yapmalısınız"
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33 app.py:167
+#: app.py:212 app.py:530
+#, fuzzy
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -35,86 +37,92 @@ msgid ""
"least 5 topics, reading at least 30 posts, and spending at least 10 minutes "
"reading posts."
msgstr ""
+"Unutmayın, çeşitli kötüye kullanımlar nedeniyle, uygulama mağazasına "
+"girişleri 'güven seviyesi 1' kullanıcıları ile sınırlandırdık.
'Güven seviyesi 1', forumda en azından şu etkileşimlerde bulunarak elde "
+"edilir: en az 5 konu girmek, en az 30 gönderi okumak ve gönderileri okumak "
+"için en az 10 dakika harcamak."
-#: app.py:210
+#: app.py:227 app.py:210
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
+"Bir uygulamayı istek listesine eklemek için giriş yapmış olmanız gerekir"
-#: app.py:225
+#: app.py:242 app.py:225
msgid "Invalid CSRF token, please refresh the page and try again"
-msgstr ""
+msgstr "Geçersiz CSRF tokeni, lütfen sayfayı yenileyin ve tekrar deneyin"
-#: app.py:263
+#: app.py:280 app.py:263
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284 app.py:267
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285 app.py:268
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288 app.py:271
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292 app.py:275
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296 app.py:279
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300 app.py:283
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304 app.py:287
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308 app.py:291
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310 app.py:293
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313 app.py:296
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320 app.py:303
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330 app.py:313
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360 app.py:343
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375 app.py:358
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400 app.py:383
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +130,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450 app.py:433
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +138,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632 app.py:528
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +155,8 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
+#: templates/catalog.html:170
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +256,17 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
+#: templates/base.html:154
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
+#: templates/base.html:163 templates/dash.html:66
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181 templates/base.html:172
msgid "Wishlist"
msgstr ""
@@ -267,113 +278,129 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191 templates/base.html:182
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201 templates/base.html:79
+#: templates/base.html:192
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238 templates/base.html:111 templates/base.html:220
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246 templates/base.html:127
+#: templates/base.html:237
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149 templates/base.html:140
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265 templates/base.html:256
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266 templates/base.html:257
msgid "Terms of Services"
msgstr ""
+#: templates/catalog.html:77 templates/catalog.html:82
#: templates/catalog.html:75 templates/catalog.html:80
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
+#: templates/catalog.html:86
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
+#: templates/catalog.html:91
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109 templates/catalog.html:107
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
+#: templates/catalog.html:117 templates/dash.html:34
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
-#: templates/wishlist.html:78
+#: templates/catalog.html:125 templates/wishlist.html:45
+#: templates/wishlist.html:78 templates/catalog.html:123
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126 templates/catalog.html:124
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
+#: templates/catalog.html:125 templates/dash.html:40
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
+#: templates/catalog.html:128 templates/dash.html:47
msgid "Requires to be logged-in"
msgstr ""
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/dash.html:58
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
+#: templates/catalog.html:155
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160 templates/catalog.html:158
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161 templates/catalog.html:159
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168 templates/catalog.html:166
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171 templates/catalog.html:169
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186 templates/catalog.html:184
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189 templates/catalog.html:187
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190 templates/catalog.html:188
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +414,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15 templates/charts.html:14
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27 templates/charts.html:22
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33 templates/charts.html:28
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39 templates/charts.html:34
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45 templates/charts.html:40
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93 templates/charts.html:80
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94 templates/charts.html:81
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95 templates/charts.html:82
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96 templates/charts.html:83
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97 templates/charts.html:84
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98 templates/charts.html:85
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99 templates/charts.html:86
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100 templates/charts.html:87
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101 templates/charts.html:88
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102 templates/charts.html:89
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122 templates/charts.html:107
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122 templates/charts.html:107
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123 templates/charts.html:108
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +502,134 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18 templates/dash.html:17
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24 templates/dash.html:23
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25 templates/dash.html:24
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26 templates/dash.html:25
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27 templates/dash.html:26
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28 templates/dash.html:27
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29 templates/dash.html:28
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30 templates/dash.html:29
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32 templates/dash.html:30
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43 templates/dash.html:41
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214 templates/dash.html:42
+#: templates/dash.html:173
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45 templates/dash.html:43
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46 templates/dash.html:44
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82 templates/dash.html:65
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84 templates/dash.html:67
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85 templates/dash.html:68
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86 templates/dash.html:69
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87 templates/dash.html:70
msgid "Autoupdate PR"
msgstr ""
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
msgid "Broken"
msgstr ""
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161 templates/dash.html:112
+#: templates/dash.html:127
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199 templates/dash.html:150
+#: templates/dash.html:165
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218 templates/dash.html:177
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221 templates/dash.html:180
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224 templates/dash.html:183
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
@@ -684,3 +737,10 @@ msgstr ""
#: templates/wishlist.html:129 templates/wishlist.html:130
msgid "Star this app"
msgstr ""
+
+#: templates/base.html:255
+msgid ""
+"Made with using "
+"Flask "
+"and TailwindCSS"
+msgstr ""
diff --git a/store/translations/uk/LC_MESSAGES/messages.mo b/store/translations/uk/LC_MESSAGES/messages.mo
index b72f95ac..014ea21c 100644
Binary files a/store/translations/uk/LC_MESSAGES/messages.mo and b/store/translations/uk/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/uk/LC_MESSAGES/messages.po b/store/translations/uk/LC_MESSAGES/messages.po
index 022fd734..711184f5 100644
--- a/store/translations/uk/LC_MESSAGES/messages.po
+++ b/store/translations/uk/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:09+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: uk \n"
@@ -19,16 +19,16 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -37,85 +37,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -123,7 +123,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -131,7 +131,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -148,7 +148,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -248,15 +248,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -268,113 +268,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -388,76 +393,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -476,108 +481,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/store/translations/zh_Hans/LC_MESSAGES/messages.mo b/store/translations/zh_Hans/LC_MESSAGES/messages.mo
index 761b969e..0b01dba9 100644
Binary files a/store/translations/zh_Hans/LC_MESSAGES/messages.mo and b/store/translations/zh_Hans/LC_MESSAGES/messages.mo differ
diff --git a/store/translations/zh_Hans/LC_MESSAGES/messages.po b/store/translations/zh_Hans/LC_MESSAGES/messages.po
index 4d7ac1f1..737d089b 100644
--- a/store/translations/zh_Hans/LC_MESSAGES/messages.po
+++ b/store/translations/zh_Hans/LC_MESSAGES/messages.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2024-05-09 23:14+0200\n"
+"POT-Creation-Date: 2024-06-21 14:11+0200\n"
"PO-Revision-Date: 2024-02-21 06:05+0100\n"
"Last-Translator: FULL NAME \n"
"Language-Team: zh_Hans \n"
@@ -18,16 +18,16 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"Generated-By: Babel 2.14.0\n"
-#: app.py:162
+#: app.py:179
#, python-format
msgid "App %(app_id)s not found"
msgstr ""
-#: app.py:165
+#: app.py:182
msgid "You must be logged in to be able to star an app"
msgstr ""
-#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33
+#: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33
msgid ""
"Note that, due to various abuses, we restricted login on the app store to "
"'trust level 1' users.
'Trust level 1' is obtained after "
@@ -36,85 +36,85 @@ msgid ""
"reading posts."
msgstr ""
-#: app.py:210
+#: app.py:227
msgid "You must be logged in to submit an app to the wishlist"
msgstr ""
-#: app.py:225
+#: app.py:242
msgid "Invalid CSRF token, please refresh the page and try again"
msgstr ""
-#: app.py:263
+#: app.py:280
msgid ""
"Proposing wishlist additions is limited to once every 15 days per user. "
"Please try again in a few days."
msgstr ""
-#: app.py:267
+#: app.py:284
msgid "App name should be at least 3 characters"
msgstr ""
-#: app.py:268
+#: app.py:285
msgid "App name should be less than 30 characters"
msgstr ""
-#: app.py:271
+#: app.py:288
msgid "App description should be at least 5 characters"
msgstr ""
-#: app.py:275
+#: app.py:292
msgid "App description should be less than 100 characters"
msgstr ""
-#: app.py:279
+#: app.py:296
msgid "Upstream code repo URL should be at least 10 characters"
msgstr ""
-#: app.py:283
+#: app.py:300
msgid "Upstream code repo URL should be less than 150 characters"
msgstr ""
-#: app.py:287
+#: app.py:304
msgid "License URL should be at least 10 characters"
msgstr ""
-#: app.py:291
+#: app.py:308
msgid "License URL should be less than 250 characters"
msgstr ""
-#: app.py:293
+#: app.py:310
msgid "Website URL should be less than 150 characters"
msgstr ""
-#: app.py:296
+#: app.py:313
msgid "App name contains special characters"
msgstr ""
-#: app.py:303
+#: app.py:320
msgid ""
"Please focus on what the app does, without using marketing, fuzzy terms, or "
"repeating that the app is 'free' and 'self-hostable'."
msgstr ""
-#: app.py:313
+#: app.py:330
msgid "No need to repeat the name of the app. Focus on what the app does."
msgstr ""
-#: app.py:343
+#: app.py:360
#, python-format
msgid ""
"An entry with the name %(slug)s already exists in the wishlist, instead, you "
"can add a star to the app to show your interest."
msgstr ""
-#: app.py:358
+#: app.py:375
#, python-format
msgid ""
"An app with the name %(slug)s already exists in the catalog, you can see its page here."
msgstr ""
-#: app.py:383
+#: app.py:400
#, python-format
msgid ""
"Failed to create the pull request to add the app to the wishlist… Maybe "
@@ -122,7 +122,7 @@ msgid ""
"please report the issue to the YunoHost team."
msgstr ""
-#: app.py:433
+#: app.py:450
#, python-format
msgid ""
"Your proposed app has succesfully been submitted. It must now be validated "
@@ -130,7 +130,7 @@ msgid ""
"%(url)s"
msgstr ""
-#: app.py:528
+#: app.py:632
msgid "Unfortunately, login was denied."
msgstr ""
@@ -147,7 +147,7 @@ msgid ""
msgstr ""
#: templates/app.html:30 templates/app.html:31 templates/catalog.html:41
-#: templates/catalog.html:42 templates/catalog.html:170
+#: templates/catalog.html:42 templates/catalog.html:172
msgid ""
"This is usually a temporary situation which requires packagers to fix "
"something in the app."
@@ -247,15 +247,15 @@ msgstr ""
msgid "YunoHost app store"
msgstr ""
-#: templates/base.html:31 templates/base.html:154 templates/index.html:3
+#: templates/base.html:31 templates/base.html:163 templates/index.html:3
msgid "Home"
msgstr ""
-#: templates/base.html:40 templates/base.html:163 templates/dash.html:66
+#: templates/base.html:40 templates/base.html:172 templates/dash.html:83
msgid "Catalog"
msgstr ""
-#: templates/base.html:46 templates/base.html:172
+#: templates/base.html:46 templates/base.html:181
msgid "Wishlist"
msgstr ""
@@ -267,113 +267,118 @@ msgstr ""
msgid "Charts & history"
msgstr ""
-#: templates/base.html:71 templates/base.html:182
+#: templates/base.html:71 templates/base.html:191
msgid "YunoHost documentation"
msgstr ""
-#: templates/base.html:79 templates/base.html:192
+#: templates/base.html:79 templates/base.html:80
+msgid "Toggle light/dark mode"
+msgstr ""
+
+#: templates/base.html:88 templates/base.html:201
msgid "Login using YunoHost's forum"
msgstr ""
-#: templates/base.html:111 templates/base.html:120 templates/base.html:220
-#: templates/base.html:229
+#: templates/base.html:120 templates/base.html:129 templates/base.html:229
+#: templates/base.html:238
msgid "Packaging boards"
msgstr ""
-#: templates/base.html:127 templates/base.html:237
+#: templates/base.html:136 templates/base.html:246
msgid "Logout"
msgstr ""
-#: templates/base.html:140
+#: templates/base.html:149
msgid "Toggle menu"
msgstr ""
-#: templates/base.html:255
+#: templates/base.html:264
msgid ""
"Made with using "
-"Flask "
-"and TailwindCSS"
+"Flask and TailwindCSS"
msgstr ""
-#: templates/base.html:256
+#: templates/base.html:265
msgid "Source"
msgstr ""
-#: templates/base.html:257
+#: templates/base.html:266
msgid "Terms of Services"
msgstr ""
-#: templates/catalog.html:75 templates/catalog.html:80
+#: templates/catalog.html:77 templates/catalog.html:82
msgid "Application Catalog"
msgstr ""
-#: templates/catalog.html:86 templates/wishlist.html:16
+#: templates/catalog.html:88 templates/wishlist.html:16
msgid "Search"
msgstr ""
-#: templates/catalog.html:91 templates/wishlist.html:21
+#: templates/catalog.html:93 templates/wishlist.html:21
msgid "Search for…"
msgstr ""
-#: templates/catalog.html:107
+#: templates/catalog.html:109
msgid "All apps"
msgstr ""
-#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39
+#: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39
msgid "Sort by"
msgstr ""
-#: templates/catalog.html:123 templates/wishlist.html:45
+#: templates/catalog.html:125 templates/wishlist.html:45
#: templates/wishlist.html:78
msgid "Popularity"
msgstr ""
-#: templates/catalog.html:124
+#: templates/catalog.html:126
msgid "Newest"
msgstr ""
-#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46
+#: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46
msgid "Alphabetical"
msgstr ""
-#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49
+#: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49
msgid "Requires to be logged-in"
msgstr ""
-#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49
-#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60
+#: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66
+#: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60
msgid "Show only apps you starred"
msgstr ""
-#: templates/catalog.html:155 templates/wishlist.html:154
+#: templates/catalog.html:157 templates/wishlist.html:154
msgid "No results found."
msgstr ""
-#: templates/catalog.html:158
+#: templates/catalog.html:160
msgid "Not finding what you are looking for?"
msgstr ""
-#: templates/catalog.html:159
+#: templates/catalog.html:161
msgid "Checkout the wishlist!"
msgstr ""
-#: templates/catalog.html:166
+#: templates/catalog.html:168
msgid "Applications currently flagged as broken"
msgstr ""
-#: templates/catalog.html:169
+#: templates/catalog.html:171
msgid "These are apps which failed our automatic tests."
msgstr ""
-#: templates/catalog.html:184
+#: templates/catalog.html:186
msgid "Deprecated applications"
msgstr ""
-#: templates/catalog.html:187
+#: templates/catalog.html:189
msgid "These are apps who are not maintained anymore."
msgstr ""
-#: templates/catalog.html:188
+#: templates/catalog.html:190
msgid ""
"This means that the developer will no longer update them. We strongly advise "
"against their installation and advise users to find alternatives."
@@ -387,76 +392,76 @@ msgstr ""
msgid "Apps quality level history"
msgstr ""
-#: templates/charts.html:14
+#: templates/charts.html:15
msgid "History"
msgstr ""
-#: templates/charts.html:22
+#: templates/charts.html:27
msgid "Added"
msgstr ""
-#: templates/charts.html:28
+#: templates/charts.html:33
msgid "Repaired"
msgstr ""
-#: templates/charts.html:34
+#: templates/charts.html:39
msgid "Broke"
msgstr ""
-#: templates/charts.html:40
+#: templates/charts.html:45
msgid "Removed"
msgstr ""
-#: templates/charts.html:80
+#: templates/charts.html:93
msgid "Unknown"
msgstr ""
-#: templates/charts.html:81
+#: templates/charts.html:94
msgid "Level 0"
msgstr ""
-#: templates/charts.html:82
+#: templates/charts.html:95
msgid "Level 1"
msgstr ""
-#: templates/charts.html:83
+#: templates/charts.html:96
msgid "Level 2"
msgstr ""
-#: templates/charts.html:84
+#: templates/charts.html:97
msgid "Level 3"
msgstr ""
-#: templates/charts.html:85
+#: templates/charts.html:98
msgid "Level 4"
msgstr ""
-#: templates/charts.html:86
+#: templates/charts.html:99
msgid "Level 5"
msgstr ""
-#: templates/charts.html:87
+#: templates/charts.html:100
msgid "Level 6"
msgstr ""
-#: templates/charts.html:88
+#: templates/charts.html:101
msgid "Level 7"
msgstr ""
-#: templates/charts.html:89
+#: templates/charts.html:102
msgid "Level 8"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
#, python-format
msgid "Level %(level)s:"
msgstr ""
-#: templates/charts.html:107
+#: templates/charts.html:122
msgid "Total:"
msgstr ""
-#: templates/charts.html:108
+#: templates/charts.html:123
#, python-format
msgid "Level %(level)s"
msgstr ""
@@ -475,108 +480,129 @@ msgid ""
"href='https://yunohost.org/chat_rooms'>app packaging chatroom!"
msgstr ""
-#: templates/dash.html:17
+#: templates/dash.html:18
msgid "Filter"
msgstr ""
-#: templates/dash.html:23
+#: templates/dash.html:24
msgid "(None)"
msgstr ""
-#: templates/dash.html:24
+#: templates/dash.html:25
msgid "Regressions on main CI"
msgstr ""
-#: templates/dash.html:25
+#: templates/dash.html:26
msgid "Broken / low quality apps"
msgstr ""
-#: templates/dash.html:26
+#: templates/dash.html:27
msgid "Outdated tests on main CI"
msgstr ""
-#: templates/dash.html:27
+#: templates/dash.html:28
msgid "Major regressions on Bookworm CI"
msgstr ""
-#: templates/dash.html:28
+#: templates/dash.html:29
msgid "Apps with testings PRs"
msgstr ""
-#: templates/dash.html:29
+#: templates/dash.html:30
msgid "Apps with autoupdate PRs"
msgstr ""
-#: templates/dash.html:30
+#: templates/dash.html:31
+msgid "Apps with issues"
+msgstr ""
+
+#: templates/dash.html:32
msgid "Packaging v1 apps"
msgstr ""
-#: templates/dash.html:41
+#: templates/dash.html:43
msgid "Quality level"
msgstr ""
-#: templates/dash.html:42 templates/dash.html:173
+#: templates/dash.html:44 templates/dash.html:214
msgid "Popularity stars"
msgstr ""
-#: templates/dash.html:43
+#: templates/dash.html:45
msgid "Last update on main/master branch"
msgstr ""
-#: templates/dash.html:44
+#: templates/dash.html:46
msgid "Last update on testing branch"
msgstr ""
-#: templates/dash.html:65
+#: templates/dash.html:47
+msgid "Issues number"
+msgstr ""
+
+#: templates/dash.html:53 templates/dash.html:62
+msgid "Hide deprecated/unmaintained apps"
+msgstr ""
+
+#: templates/dash.html:82
msgid "App"
msgstr ""
-#: templates/dash.html:67
+#: templates/dash.html:84
msgid "Main CI"
msgstr ""
-#: templates/dash.html:68
+#: templates/dash.html:85
msgid "Bookworm CI"
msgstr ""
-#: templates/dash.html:69
+#: templates/dash.html:86
msgid "Testing PR"
msgstr ""
-#: templates/dash.html:70
+#: templates/dash.html:87
msgid "Autoupdate PR"
msgstr ""
-#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131
+#: templates/dash.html:88
+msgid "Issues"
+msgstr ""
+
+#: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165
msgid "Broken"
msgstr ""
-#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133
+#: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167
msgid "Low quality"
msgstr ""
-#: templates/dash.html:112 templates/dash.html:127
+#: templates/dash.html:142 templates/dash.html:161
#, python-format
msgid "Outdated test (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:150 templates/dash.html:165
+#: templates/dash.html:184 templates/dash.html:199
#, python-format
msgid "Inactive (%(days)s days ago)"
msgstr ""
-#: templates/dash.html:177
+#: templates/dash.html:218
msgid "Packaging v1"
msgstr ""
-#: templates/dash.html:180
+#: templates/dash.html:221
msgid "Deprecated"
msgstr ""
-#: templates/dash.html:183
+#: templates/dash.html:224
msgid "Not maintained"
msgstr ""
+#: templates/dash.html:238
+#, python-format
+msgid "Last data update %(time)s ago"
+msgstr ""
+
#: templates/index.html:10
msgid "Application Store"
msgstr ""
diff --git a/taplo.toml b/taplo.toml
index dc581f49..25d52a9f 100644
--- a/taplo.toml
+++ b/taplo.toml
@@ -1,4 +1,4 @@
-include = [ "antifeatures.toml", "apps.toml", "categories.toml", "graveyard.toml", "taplo.toml" ]
+include = [ "antifeatures.toml", "apps.toml", "categories.toml", "graveyard.toml", "rejectedlist.toml", "taplo.toml" ]
[formatting]
align_comments = false
diff --git a/tools/app_caches.py b/tools/app_caches.py
index af7b4a0f..d05e99dd 100755
--- a/tools/app_caches.py
+++ b/tools/app_caches.py
@@ -150,6 +150,8 @@ def __run_for_catalog():
if args.verbose:
logging.getLogger().setLevel(logging.INFO)
+ APPS_CACHE_DIR.mkdir(exist_ok=True, parents=True)
+
if args.cleanup:
apps_cache_cleanup(get_catalog())
apps_cache_update_all(
diff --git a/tools/autopatches/autopatch.py b/tools/autopatches/autopatch.py
index f455818c..20190e38 100755
--- a/tools/autopatches/autopatch.py
+++ b/tools/autopatches/autopatch.py
@@ -4,28 +4,35 @@ import json
import os
import subprocess
import sys
+import time
from pathlib import Path
import requests
+import toml
-TOOLS_DIR = Path(__file__).resolve().parent.parent
+# add apps/tools to sys.path
+sys.path.insert(0, str(Path(__file__).parent.parent))
-catalog = requests.get(
- "https://raw.githubusercontent.com/YunoHost/apps/master/apps.json"
-).json()
+from appslib.utils import ( # noqa: E402 pylint: disable=import-error,wrong-import-position
+ REPO_APPS_ROOT,
+ get_catalog,
+)
my_env = os.environ.copy()
my_env["GIT_TERMINAL_PROMPT"] = "0"
os.makedirs(".apps_cache", exist_ok=True)
-login = (TOOLS_DIR / ".github_login").open("r", encoding="utf-8").read().strip()
-token = (TOOLS_DIR / ".github_token").open("r", encoding="utf-8").read().strip()
+login = (
+ (REPO_APPS_ROOT / "tools/.github_login").open("r", encoding="utf-8").read().strip()
+)
+token = (
+ (REPO_APPS_ROOT / "tools/.github_token").open("r", encoding="utf-8").read().strip()
+)
github_api = "https://api.github.com"
def apps(min_level=4):
-
- for app, infos in catalog.items():
+ for app, infos in get_catalog().items():
if infos.get("state") == "working" and infos.get("level", -1) > min_level:
infos["id"] = app
yield infos
@@ -36,7 +43,6 @@ def app_cache_folder(app):
def git(cmd, in_folder=None):
-
if not isinstance(cmd, list):
cmd = cmd.split()
if in_folder:
@@ -67,7 +73,6 @@ def progressbar(it, prefix="", size=60, file=sys.stdout):
def build_cache():
-
for app in progressbar(apps(), "Git cloning: ", 40):
folder = os.path.join(".apps_cache", app["id"])
reponame = app["url"].rsplit("/", 1)[-1]
@@ -79,7 +84,6 @@ def build_cache():
def apply(patch):
-
patch_path = os.path.abspath(os.path.join("patches", patch, "patch.sh"))
for app in progressbar(apps(), "Apply to: ", 40):
@@ -90,7 +94,6 @@ def apply(patch):
def diff():
-
for app in apps():
folder = os.path.join(".apps_cache", app["id"])
if bool(
@@ -107,7 +110,6 @@ def diff():
def push(patch):
-
title = (
"[autopatch] "
+ open(os.path.join("patches", patch, "pr_title.md")).read().strip()
@@ -133,6 +135,7 @@ def push(patch):
for app in progressbar(apps_to_push, "Forking: ", 40):
app["repo"] = app["url"][len("https://github.com/") :].strip("/")
fork_if_needed(app["repo"], s)
+ time.sleep(2) # to avoid rate limiting lol
for app in progressbar(apps_to_push, "Pushing: ", 40):
app["repo"] = app["url"][len("https://github.com/") :].strip("/")
@@ -154,10 +157,10 @@ def push(patch):
)
git(f"push fork {current_branch}:{patch} --quiet --force", in_folder=folder)
create_pull_request(app["repo"], patch, current_branch, s)
+ time.sleep(4) # to avoid rate limiting lol
def fork_if_needed(repo, s):
-
repo_name = repo.split("/")[-1]
r = s.get(github_api + f"/repos/{login}/{repo_name}")
@@ -171,7 +174,6 @@ def fork_if_needed(repo, s):
def create_pull_request(repo, patch, base_branch, s):
-
PR = {
"title": "[autopatch] "
+ open(os.path.join("patches", patch, "pr_title.md")).read().strip(),
@@ -191,7 +193,6 @@ def create_pull_request(repo, patch, base_branch, s):
def main():
-
action = sys.argv[1]
if action == "--help":
print(
diff --git a/tools/autopatches/patches/add-schemas/patch.sh b/tools/autopatches/patches/add-schemas/patch.sh
index 98c94992..6b1f56bd 100644
--- a/tools/autopatches/patches/add-schemas/patch.sh
+++ b/tools/autopatches/patches/add-schemas/patch.sh
@@ -2,6 +2,7 @@
MANIFEST_SCHEMA_LINE='#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/manifest.v2.schema.json'
TESTS_SCHEMA_LINE='#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/tests.v1.schema.json'
+CONFIGPANEL_SCHEMA_LINE='#:schema https://github.com/YunoHost/apps/raw/master/schemas/config_panel.v1.schema.json'
if [ -f "manifest.toml" ]; then
@@ -16,4 +17,10 @@ if [ -f "tests.toml" ]; then
fi
fi
+if [ -f "config_panel.toml" ]; then
+ if ! grep "#:schema" "config_panel.toml" >/dev/null; then
+ sed -i "1 s|^|$CONFIGPANEL_SCHEMA_LINE\n|" tests.toml
+ fi
+fi
+
git add manifest.toml tests.toml
diff --git a/tools/autopatches/patches/delete-log-removal/patch.sh b/tools/autopatches/patches/delete-log-removal/patch.sh
new file mode 100644
index 00000000..56dea7e6
--- /dev/null
+++ b/tools/autopatches/patches/delete-log-removal/patch.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+
+sed -E "/# remove logs/d" -i scripts/remove
+sed -E "/(ynh_secure_remove|ynh_safe_rm|rm).*(\/var\/log\/)/d" -i scripts/remove
diff --git a/tools/autopatches/patches/delete-log-removal/pr_body.md b/tools/autopatches/patches/delete-log-removal/pr_body.md
new file mode 100644
index 00000000..704d4a67
--- /dev/null
+++ b/tools/autopatches/patches/delete-log-removal/pr_body.md
@@ -0,0 +1,3 @@
+This is an ***automated*** patch to fix the following:
+
+Do not delete logs on app removal, else they will be erased if the app upgrade fails. This is handled by the core.
diff --git a/tools/autopatches/patches/delete-log-removal/pr_title.md b/tools/autopatches/patches/delete-log-removal/pr_title.md
new file mode 100644
index 00000000..8bfe3c67
--- /dev/null
+++ b/tools/autopatches/patches/delete-log-removal/pr_title.md
@@ -0,0 +1 @@
+Do not delete logs on app removal
diff --git a/tools/autoupdate_app_sources/autoupdate_app_sources.py b/tools/autoupdate_app_sources/autoupdate_app_sources.py
index bef0844b..aa0c8f86 100755
--- a/tools/autoupdate_app_sources/autoupdate_app_sources.py
+++ b/tools/autoupdate_app_sources/autoupdate_app_sources.py
@@ -216,6 +216,7 @@ class AppAutoUpdater:
raise RuntimeError("There's no resources.sources in manifest.toml ?")
self.main_upstream = self.manifest.get("upstream", {}).get("code")
+ self.latest_commit_weekly = False
def run(
self, edit: bool = False, commit: bool = False, pr: bool = False
@@ -240,9 +241,10 @@ class AppAutoUpdater:
if source == "main":
main_version = version
branch_name = f"ci-auto-update-{version}"
- pr_title = commit_msg = f"Upgrade to v{version}"
- if msg:
- commit_msg += f"\n{msg}"
+ pr_title = f"Upgrade to v{version}"
+
+ if msg:
+ commit_msg += f"\n- `{source}` v{version}: {msg}"
self.repo.manifest_raw = self.replace_version_and_asset_in_manifest(
self.repo.manifest_raw,
@@ -255,6 +257,11 @@ class AppAutoUpdater:
if state == State.up_to_date:
return (State.up_to_date, "", "", "")
+ if main_version == "":
+ self.repo.manifest_raw = self.bump_version(
+ self.repo.manifest_raw, self.current_version, bump_ynh_level=True
+ )
+
if edit:
self.repo.edit_manifest(self.repo.manifest_raw)
@@ -384,7 +391,7 @@ class AppAutoUpdater:
f"Unknown update strategy '{strategy}' for '{name}', expected one of {STRATEGIES}"
)
- result = self.get_latest_version_and_asset(strategy, asset, autoupdate)
+ result = self.get_latest_version_and_asset(strategy, asset, infos)
if result is None:
return None
new_version, assets, more_info = result
@@ -451,8 +458,9 @@ class AppAutoUpdater:
return next(iter(matching_assets.items()))
def get_latest_version_and_asset(
- self, strategy: str, asset: Union[str, dict], autoupdate
+ self, strategy: str, asset: Union[str, dict], infos: dict[str, Any]
) -> Optional[tuple[str, Union[str, dict[str, str]], str]]:
+ autoupdate = infos.get("autoupdate")
upstream = autoupdate.get("upstream", self.main_upstream).strip("/")
version_re = autoupdate.get("version_regex", None)
allow_prereleases = autoupdate.get("allow_prereleases", False)
@@ -495,6 +503,11 @@ class AppAutoUpdater:
latest_assets = latest_release["tarball_url"]
# get the release changelog link
latest_release_html_url = latest_release["html_url"]
+ if latest_release_html_url is None or latest_release_html_url == "":
+ latest_release_html_url = api.changelog_for_ref(
+ latest_version_orig, "", RefType.releases
+ )
+
if asset == "tarball":
latest_tarball = api.url_for_ref(latest_version_orig, RefType.tags)
return latest_version, latest_tarball, latest_release_html_url
@@ -532,9 +545,16 @@ class AppAutoUpdater:
tags, self.app_id, version_re
)
latest_tarball = api.url_for_ref(latest_version_orig, RefType.tags)
- return latest_version, latest_tarball, ""
+ return (
+ latest_version,
+ latest_tarball,
+ api.changelog_for_ref(latest_version, "", RefType.tags),
+ )
if revision_type == "commit":
+ if self.latest_commit_weekly and datetime.now().weekday() != 0:
+ logging.warning("Skipped autoupdater because we're not monday")
+ return None
if asset != "tarball":
raise ValueError(
"For the latest commit strategies, only asset = 'tarball' is supported"
@@ -548,7 +568,23 @@ class AppAutoUpdater:
)
version_format = autoupdate.get("force_version", "%Y.%m.%d")
latest_version = latest_commit_date.strftime(version_format)
- return latest_version, latest_tarball, ""
+ return (
+ latest_version,
+ latest_tarball,
+ api.changelog_for_ref(
+ latest_commit["sha"], self.get_old_ref(infos), RefType.commits
+ ),
+ )
+ return None
+
+ @staticmethod
+ def get_old_ref(infos: dict[str, Any]) -> str:
+ regex = r".*[\/-]([a-f0-9]+)\."
+ if isinstance(infos["url"], str):
+ return re.match(regex, infos["url"]).group(1)
+ if isinstance(infos["url"], dict):
+ for _, url in infos["url"]:
+ return re.match(regex, url).group(1)
return None
def replace_version_and_asset_in_manifest(
@@ -576,19 +612,34 @@ class AppAutoUpdater:
]
if is_main:
-
- def repl(m: re.Match) -> str:
- return m.group(1) + new_version + '~ynh1"'
-
- content = re.sub(
- r"(\s*version\s*=\s*[\"\'])([^~\"\']+)(\~ynh\d+[\"\'])", repl, content
- )
+ content = self.bump_version(content, new_version)
for old, new in replacements:
content = content.replace(old, new)
return content
+ def bump_version(
+ self, content: str, new_version: str, bump_ynh_level: bool = False
+ ) -> str:
+ ynh_level = 1
+ if bump_ynh_level:
+ ynh_level = (
+ int(
+ re.search(
+ r"\s*version\s*=\s*[\"\'][^~\"\']+~ynh(\d+)[\"\']", content
+ ).group(1)
+ )
+ + 1
+ )
+
+ def repl(m: re.Match) -> str:
+ return m.group(1) + new_version + f'~ynh{ynh_level}"'
+
+ return re.sub(
+ r"(\s*version\s*=\s*[\"\'])([^~\"\']+)(~ynh\d+[\"\'])", repl, content
+ )
+
def paste_on_haste(data):
# NB: we hardcode this here and can't use the yunopaste command
@@ -631,10 +682,12 @@ class StdoutSwitch:
def run_autoupdate_for_multiprocessing(data) -> tuple[str, tuple[State, str, str, str]]:
- app, edit, commit, pr = data
+ app, edit, commit, pr, latest_commit_weekly = data
stdoutswitch = StdoutSwitch()
try:
- result = AppAutoUpdater(app).run(edit=edit, commit=commit, pr=pr)
+ autoupdater = AppAutoUpdater(app)
+ autoupdater.latest_commit_weekly = latest_commit_weekly
+ result = autoupdater.run(edit=edit, commit=commit, pr=pr)
return (app, result)
except Exception:
log_str = stdoutswitch.reset()
@@ -652,6 +705,13 @@ def main() -> None:
type=Path,
help="If not passed, the script will run on the catalog. Github keys required.",
)
+ parser.add_argument(
+ "-w",
+ "--latest-commit-weekly",
+ action=argparse.BooleanOptionalAction,
+ default=False,
+ help="For latest_commit versions, only run weekly to prevent too many PRs",
+ )
parser.add_argument(
"--edit",
action=argparse.BooleanOptionalAction,
@@ -694,7 +754,10 @@ def main() -> None:
with multiprocessing.Pool(processes=args.processes) as pool:
tasks = pool.imap(
run_autoupdate_for_multiprocessing,
- ((app, args.edit, args.commit, args.pr) for app in apps),
+ (
+ (app, args.edit, args.commit, args.pr, args.latest_commit_weekly)
+ for app in apps
+ ),
)
for app, result in tqdm.tqdm(tasks, total=len(apps), ascii=" ·#"):
state, current_version, main_version, pr_url = result
diff --git a/tools/autoupdate_app_sources/requirements.txt b/tools/autoupdate_app_sources/requirements.txt
index e1d69833..4acb0cc1 100644
--- a/tools/autoupdate_app_sources/requirements.txt
+++ b/tools/autoupdate_app_sources/requirements.txt
@@ -1,3 +1,4 @@
requests
-github
-toml
\ No newline at end of file
+PyGithub
+toml
+tqdm
diff --git a/tools/autoupdate_app_sources/rest_api.py b/tools/autoupdate_app_sources/rest_api.py
index d097bf35..9c47ca00 100644
--- a/tools/autoupdate_app_sources/rest_api.py
+++ b/tools/autoupdate_app_sources/rest_api.py
@@ -10,6 +10,7 @@ import requests
class RefType(Enum):
tags = 1
commits = 2
+ releases = 3
class GithubAPI:
@@ -41,13 +42,20 @@ class GithubAPI:
def url_for_ref(self, ref: str, ref_type: RefType) -> str:
"""Get a URL for a ref."""
- if ref_type == RefType.tags:
+ if ref_type == RefType.tags or ref_type == RefType.releases:
return f"{self.upstream}/archive/refs/tags/{ref}.tar.gz"
elif ref_type == RefType.commits:
return f"{self.upstream}/archive/{ref}.tar.gz"
else:
raise NotImplementedError
+ def changelog_for_ref(self, new_ref: str, old_ref: str, ref_type: RefType) -> str:
+ """Get a changelog for a ref."""
+ if ref_type == RefType.commits:
+ return f"{self.upstream}/compare/{old_ref}...{new_ref}"
+ else:
+ return f"{self.upstream}/releases/tag/{new_ref}"
+
class GitlabAPI:
def __init__(self, upstream: str):
@@ -135,11 +143,24 @@ class GitlabAPI:
return retval
- def url_for_ref(self, ref: str, ref_type: RefType) -> str:
+ def url_for_ref(self, ref: str, _: RefType) -> str:
name = self.project_path.split("/")[-1]
clean_ref = ref.replace("/", "-")
return f"{self.forge_root}/{self.project_path}/-/archive/{ref}/{name}-{clean_ref}.tar.bz2"
+ def changelog_for_ref(self, new_ref: str, old_ref: str, ref_type: RefType) -> str:
+ """Get a changelog for a ref."""
+ if ref_type == RefType.commits:
+ return (
+ f"{self.forge_root}/{self.project_path}/-/compare/{old_ref}...{new_ref}"
+ )
+ elif ref_type == RefType.tags:
+ return f"{self.forge_root}/{self.project_path}/-/tags/{new_ref}"
+ elif ref_type == RefType.releases:
+ return f"{self.forge_root}/{self.project_path}/-/releases/{new_ref}"
+ else:
+ raise NotImplementedError
+
class GiteaForgejoAPI:
def __init__(self, upstream: str):
@@ -173,6 +194,15 @@ class GiteaForgejoAPI:
"""Get a list of releases for project."""
return self.internal_api(f"repos/{self.project_path}/releases")
- def url_for_ref(self, ref: str, ref_type: RefType) -> str:
+ def url_for_ref(self, ref: str, _: RefType) -> str:
"""Get a URL for a ref."""
return f"{self.forge_root}/{self.project_path}/archive/{ref}.tar.gz"
+
+ def changelog_for_ref(self, new_ref: str, old_ref: str, ref_type: RefType) -> str:
+ """Get a changelog for a ref."""
+ if ref_type == RefType.commits:
+ return (
+ f"{self.forge_root}/{self.project_path}/compare/{old_ref}...{new_ref}"
+ )
+ else:
+ return f"{self.forge_root}/{self.project_path}/releases/tag/{new_ref}"
diff --git a/tools/helpers2.1/convert_to_helpers_2.1.py b/tools/helpers2.1/convert_to_helpers_2.1.py
new file mode 100644
index 00000000..041ca886
--- /dev/null
+++ b/tools/helpers2.1/convert_to_helpers_2.1.py
@@ -0,0 +1,557 @@
+#!/usr/bin/env python3
+
+import argparse
+import os
+import re
+
+
+def cleanup():
+
+ comment_blocks_to_cleanup = [
+ r"#=+\s*\n# GENERIC START\S*\s*\n#=+\s*\n# IMPORT GENERIC HELPERS\n#=+\s*\n",
+ r"#=+\s*\n# EXPERIMENTAL HELPERS\s*\n#=+\s*\n",
+ r"#=+\s*\n# FUTURE OFFICIAL HELPERS\s*\n#=+\s*\n",
+ r"#=+\s*\n# PERSONAL HELPERS\s*\n#=+\s*\n",
+ r"#=+\s*\n# GENERIC FINALIZATION\s*\n",
+ r"#=+\s*\n# GENERIC FINALISATION\s*\n",
+ r"#=+\s*\n# STANDARD MODIFICATIONS\s*\n",
+ r"#=+\s*\n# STANDARD UPGRADE STEPS\s*\n",
+ r"#=+\s*\n# SPECIFIC UPGRADE\s*\n",
+ r"#=+\s*\n# CHECK VERSION\s*\n#=+\s*\n",
+ r"#=+\s*\n# DECLARE DATA AND CONF FILES TO BACKUP\s*\n#=+\s*\n",
+ ]
+
+ removememaybes = [
+ "ynh_legacy_permissions_exists",
+ "ynh_legacy_permissions_delete_all",
+ "ynh_webpath_available",
+ "ynh_webpath_register",
+ "ynh_psql_test_if_first_run",
+ "ynh_backup_before_upgrade",
+ "ynh_restore_upgradebackup",
+ "ynh_find_port",
+ "ynh_port_available",
+ "ynh_require_ram",
+ "--ignore_swap",
+ "--only_swap",
+ "ynh_print_log",
+ "ynh_print_OFF",
+ "ynh_print_ON",
+ "local legacy_args",
+ "ynh_abort_if_errors",
+ "ynh_clean_setup",
+ ]
+
+ replaces = [
+ # Unecessary exec_warn_less
+ (r"ynh_exec_warn_less ynh_secure_remove", "ynh_secure_remove"),
+ (r"ynh_exec_warn_less ynh_systemd_action", "ynh_systemctl"),
+ (r"ynh_exec_warn_less ynh_install_nodejs", "ynh_install_nodejs"),
+ (r"ynh_exec_warn_less ynh_install_go", "ynh_install_go"),
+ (r"ynh_exec_warn_less ynh_install_ruby", "ynh_install_ruby"),
+ (r"ynh_exec_warn_less ynh_composer_exec", "ynh_composer_exec"),
+ (r"ynh_exec_warn_less ynh_install_composer", "ynh_install_composer"),
+ # Setting get/set
+ (r" ?--app=? ?\"?\$app\"?", ""),
+ # Misc
+ (r"ynh_validate_ip4", "ynh_validate_ip --family=4"),
+ (r"ynh_validate_ip4", "ynh_validate_ip --family=6"),
+ (r"\$\(ynh_get_debian_release\)", "$YNH_DEBIAN_VERSION"),
+ (r"ynh_read_manifest --manifest\S*", "ynh_read_manifest"),
+ (r"--manifest_key", "--key"),
+ (r"COMMON VARIABLES\s*$", "COMMON VARIABLES AND CUSTOM HELPERS"),
+ (r"ynh_string_random ([0-9])", "ynh_string_random --length=\\1"),
+ (
+ r"ynh_backup_if_checksum_is_different --file=?",
+ "ynh_backup_if_checksum_is_different ",
+ ),
+ (r"ynh_store_file_checksum --file=?", "ynh_store_file_checksum "),
+ (r"ynh_delete_file_checksum --file=?", "ynh_delete_file_checksum "),
+ (r"\[\[?.*PACKAGE_CHECK_EXEC.*eq.*1.*\]\]?", "ynh_in_ci_tests"),
+ (r"\[\[?.*PACKAGE_CHECK_EXEC.*=.*1.*\]\]?", "ynh_in_ci_tests"),
+ (r"\[\[?.*PACKAGE_CHECK_EXEC.*ne.*1.*\]\]?", "! ynh_in_ci_tests"),
+ (r"\[\[?.*PACKAGE_CHECK_EXEC.*eq.*0.*\]\]?", "! ynh_in_ci_tests"),
+ (r"\[\[?.*PACKAGE_CHECK_EXEC.*ne.*0.*\]\]?", "ynh_in_ci_tests"),
+ # ynh_setup_source
+ (r"--full_replace=1", "--full_replace"),
+ (r"sources/patches", "patches"),
+ (r"sources/extra_files/app", "sources"),
+ (r"sources/extra_files", "sources"),
+ (
+ r"((chmod|chown).*\"?\$install_dir\"?)\s*$",
+ "#REMOVEME? Assuming the install dir is setup using ynh_setup_source, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1",
+ ),
+ # Logging
+ (r"ynh_print_err", "ynh_print_warn"),
+ (r"ynh_exec_quiet ?", ""),
+ (r"ynh_exec_fully_quiet ?", ""),
+ (r"ynh_exec_warn_less", "ynh_hide_warnings"),
+ (r"--message=?", ""),
+ (r"--time ", ""),
+ (r"--last", ""),
+ (r"\s*--weight=?\S*", ""),
+ # rm
+ (r"ynh_secure_remove( --file=?)? ?", "ynh_safe_rm "),
+ # Conf / templating
+ (r"__NAME__", "__APP__"),
+ (r"__NAMETOCHANGE__", "__APP__"),
+ (r"ynh_render_template", "ynh_config_add --jinja"),
+ (r"ynh_add_config", "ynh_config_add"),
+ (r'--template="../conf/', '--template="'),
+ (r"ynh_replace_vars --file=", "ynh_replace_vars "),
+ (r"ynh_replace_vars", "_ynh_replace_vars"),
+ (
+ r"((chmod|chown)\s[^-+].*\"?(\$install_dir\"?/.*(config|.env|settings|credentials)\S*|\$data_dir\"?/\S+|/etc/(sudoers.d|cron.d|\$app)\"?/\S+|\$(config|cron_path)\"?))",
+ "#REMOVEME? Assuming the file is setup using ynh_config_add, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1",
+ ),
+ # Upgrade stuff
+ (
+ r"ynh_compare_current_package_version.*lt.*version\s?=?\"?([0-9\.]+~ynh[0-9])\"?",
+ "ynh_app_upgrading_from_version_before \\1",
+ ),
+ (
+ r"ynh_compare_current_package_version.*le.*version\s?=?\"?([0-9\.]+~ynh[0-9])\"?",
+ "ynh_app_upgrading_from_version_before_or_equal_to \\1",
+ ),
+ (r"upgrade_type=\S*", ""),
+ (
+ r'if \[\s+"?\$upgrade_type"?\s+==\s+"?UPGRADE_APP"? \]',
+ "# FIXME: this is still supported but the recommendation is now to *always* re-setup the app sources wether or not the upstream sources changed\nif ynh_app_upstream_version_changed",
+ ),
+ # Backup/store
+ (r"ynh_restore\s*$", "ynh_restore_everything"),
+ # -> Specific trick to remove the --not_mandatory here, but replace it with || true for the other occurences
+ (r'ynh_restore_file --origin_path="\$data_dir" \S*', 'ynh_restore "$data_dir"'),
+ (r"ynh_restore_file", "ynh_restore"),
+ (r"--src_path=?", ""),
+ (r"--origin_path=?", ""),
+ (r"--is_big\S*", ""),
+ (r"--not_mandatory", "|| true"),
+ # Fail2ban
+ (r"--max_retry=\S*", ""),
+ (r"--ports\S*", ""),
+ (r"ynh_add_fail2ban_config --use_template", "ynh_config_add_fail2ban"),
+ (r"ynh_add_fail2ban_config", "ynh_config_add_fail2ban"),
+ (r"ynh_remove_fail2ban_config", "ynh_config_remove_fail2ban"),
+ # MySQL/Postgresql
+ (r"ynh_mysql_dump_db \S*\$db_name\"?\s", "ynh_mysql_dump_db "),
+ (r"ynh_psql_dump_db \S*\$db_name\"?\s", "ynh_psql_dump_db "),
+ (r"ynh_mysql_connect_as [^<\\]*\s", "ynh_mysql_db_shell "),
+ (r"ynh_psql_connect_as [^<\\]*\s", "ynh_psql_db_shell "),
+ (r"ynh_mysql_execute_as_root --sql=?", "ynh_mysql_db_shell <<< "),
+ (r"ynh_psql_execute_as_root --sql=?", "ynh_psql_db_shell <<< "),
+ (r'ynh_mysql_execute_as_root "', 'ynh_mysql_db_shell <<< "'),
+ (r'ynh_psql_execute_as_root "', 'ynh_psql_db_shell <<< "'),
+ (r"ynh_mysql_execute_as_root '", "ynh_mysql_db_shell <<< '"),
+ (r"ynh_psql_execute_as_root '", "ynh_psql_db_shell <<< '"),
+ (r"ynh_psql_execute_as_root --database=?", "ynh_psql_db_shell "),
+ (r"ynh_mysql_execute_as_root --database=?", "ynh_psql_db_shell "),
+ (r"--sql=", "<<< "),
+ (
+ r"ynh_mysql_execute_file_as_root --database=\"?(\S+)\"? --file=\"?(\S+)\"?",
+ 'ynh_mysql_db_shell "\\1" < "\\2"',
+ ),
+ (
+ r"ynh_mysql_execute_file_as_root --file=\"?(\S+)\"? --database=\"?(\S+)\"?",
+ 'ynh_mysql_db_shell "\\2" < "\\1"',
+ ),
+ (
+ r"ynh_psql_execute_file_as_root --database=\"?(\S+)\"? --file=\"?(\S+)\"?",
+ 'ynh_psql_db_shell "\\1" < "\\2"',
+ ),
+ (
+ r"ynh_psql_execute_file_as_root --file=\"?(\S+)\"? --database=\"?(\S+)\"?",
+ 'ynh_psql_db_shell "\\2" < "\\1"',
+ ),
+ (r'sql_db_shell "?\$db_name"?', "sql_db_shell "),
+ (r'--database="?\$db_name"?', ""),
+ (r'--database="?\$app"?', ""),
+ (r"ynh_mysql_setup_db", "# FIXMEhelpers2.1 ynh_mysql_create_db"),
+ (
+ r"ynh_mysql_remove_db",
+ "# FIXMEhelpers2.1 ynh_mysql_drop_db && ynh_mysql_drop_user",
+ ),
+ (r"ynh_psql_setup_db", "# FIXMEhelpers2.1 ynh_psql_create_db"),
+ (
+ r"ynh_psql_remove_db",
+ "# FIXMEhelpers2.1 ynh_psql_drop_db && ynh_psql_drop_user",
+ ),
+ # PHP / composer
+ (r" ?--phpversion=\S*", ""),
+ (r" ?--composerversion=\S*", ""),
+ (r" ?--usage=\S*", ""),
+ (r" ?--footprint=\S*", ""),
+ (
+ r"--group=www-data",
+ "# FIXMEhelpers2.1 : --group=www-data to be replaced with php_group=www-data to be added in _common.sh",
+ ),
+ (r"YNH_COMPOSER_VERSION=", "composer_version="),
+ (r' --workdir="\$install_dir"', ""),
+ (r"--workdir=\$install_dir ", ""),
+ (
+ r"--workdir",
+ "# FIXMEhelpers2.1 (replace with composer_workdir=... prior to calling this helper, default is $intall_dir) --workdir",
+ ),
+ (r"phpversion", "php_version"),
+ (r"PHPVERSION", "PHP_VERSION"),
+ (r"ynh_add_fpm_config", "ynh_config_add_phpfpm"),
+ (r"ynh_remove_fpm_config", "ynh_config_remove_phpfpm"),
+ (
+ r"ynh_install_composer",
+ "ynh_composer_install\nynh_composer_exec install --no-dev ",
+ ),
+ (r'--install_args="?([^"]+)"?(\s|$)', "\\1\\2"),
+ (r'--commands="([^"]+)"(\s|$)', "\\1\\2"),
+ (
+ r"(^fpm_usage=)",
+ "#REMOVEME? Everything about fpm_usage is removed in helpers2.1... | \\1",
+ ),
+ (
+ r"(^.*\$fpm_usage)",
+ "#REMOVEME? Everything about fpm_usage is removed in helpers2.1... | \\1",
+ ),
+ (
+ r"(^fpm_footprint=)",
+ "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1",
+ ),
+ (
+ r"(^.*\$fpm_footprint)",
+ "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1",
+ ),
+ (
+ r"(^set__fpm_footprint)",
+ "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1",
+ ),
+ (
+ r"(^fpm_free_footprint=)",
+ "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1",
+ ),
+ (
+ r"(^.*\$fpm_free_footprint)",
+ "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1",
+ ),
+ (
+ r"(^set__fpm_free_footprint)",
+ "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1",
+ ),
+ # Nodejs
+ (r'"?\$?ynh_node"?', "node"),
+ (r"NODEJS_VERSION=", "nodejs_version="),
+ (r"ynh_install_nodejs \S*", "ynh_nodejs_install"),
+ (r"ynh_install_nodejs", "ynh_nodejs_install"),
+ (r"ynh_remove_nodejs", "ynh_nodejs_remove"),
+ (r"ynh_use_nodejs", ""),
+ (r'"?\$ynh_node_load_PATH"?', ""),
+ (r'"?\$ynh_node_load_path"?', ""),
+ (r'"?\$?ynh_npm"?', "npm"),
+ (r"(export )?COREPACK_ENABLE_DOWNLOAD_PROMPT=0", ""),
+ (r"env\s+npm", "npm"),
+ (r"env\s+pnpm", "pnpm"),
+ (r"env\s+yarn", "yarn"),
+ (r"env\s+corepack", "corepack"),
+ # Ruby
+ (r'"?\$?ynh_ruby"?', "ruby"),
+ (r'"?\$?ynh_gem"?', "gem"),
+ (r"RUBY_VERSION=", "ruby_version="),
+ (r"ynh_install_ruby \S*", "ynh_ruby_install"),
+ (r"ynh_install_ruby", "ynh_ruby_install"),
+ (r"ynh_remove_ruby", "ynh_ruby_remove"),
+ (r"ynh_use_ruby", ""),
+ (r'"?\$ynh_ruby_load_PATH"?', ""),
+ (r'"?\$ynh_ruby_load_path"?', ""),
+ # Go
+ (r"^\s*GO_VERSION=", "go_version="),
+ (r'"?\$?ynh_go"?', "go"),
+ (r"ynh_install_go \S*", "ynh_go_install"),
+ (r"ynh_install_go", "ynh_go_install"),
+ (r"ynh_remove_go", "ynh_go_remove"),
+ (r"ynh_use_go", ""),
+ # Mongodb
+ (r"YNH_MONGO_VERSION", "mongo_version"),
+ (r"ynh_install_mongo \S*", "ynh_install_mongo"),
+ (r" --eval", ""),
+ # ynh_replace_string
+ (r"ynh_replace_string", "ynh_replace"),
+ (r"ynh_replace_special_string", "ynh_replace_regex"),
+ (r"--match_string", "--match"),
+ (r"--replace_string", "--replace"),
+ (r"--target_file", "--file"),
+ (
+ r"(ynh_replace ('|\"))",
+ "# FIXMEhelpers2.1: ynh_replace used with positional args. Please add the keywords: --match=, --replace=, --file=\n\\1",
+ ),
+ # Nginx
+ (r"ynh_add_nginx_config", "ynh_config_add_nginx"),
+ (r"ynh_remove_nginx_config", "ynh_config_remove_nginx"),
+ (r"ynh_change_url_nginx_config", "ynh_config_change_url_nginx"),
+ # Systemd
+ (r'--log_path="/var/log/\$app/\$app.log"', ""),
+ (r'--service="?\$app"?(\s|$)', "\\1"),
+ (r"--service_name", "--service"),
+ (r"--line_match", "--wait_until"),
+ (r' --template="systemd.service"', ""),
+ (r"ynh_add_systemd_config", "ynh_config_add_systemd"),
+ (r"ynh_remove_systemd_config --service=?", "ynh_config_remove_systemd"),
+ (r"ynh_remove_systemd_config", "ynh_config_remove_systemd"),
+ (r"ynh_systemd_action", "ynh_systemctl"),
+ # Logrotate
+ (r"ynh_use_logrotate", "ynh_config_add_logrotate"),
+ (r"ynh_remove_logrotate", "ynh_config_remove_logrotate"),
+ (r"--specific_user\S*", ""),
+ (r"--logfile=?", ""),
+ (r" ?--non-?append", ""),
+ (
+ r"((chmod|chown).*\"?/var/log/\"?\$app)",
+ "#REMOVEME? Assuming ynh_config_add_logrotate is called, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1",
+ ),
+ # Apt
+ (r"ynh_package_is_installed (--package=)?", "_ynh_apt_package_is_installed"),
+ (r"ynh_package_version (--package=)?", "_ynh_apt_package_version"),
+ (r"ynh_package_install", "_ynh_apt_install"),
+ (
+ r"ynh_install_extra_app_dependencies",
+ "ynh_apt_install_dependencies_from_extra_repository",
+ ),
+ (r"ynh_install_app_dependencies", "ynh_apt_install_dependencies"),
+ (r"ynh_remove_app_dependencies", "ynh_apt_remove_dependencies"),
+ (r"ynh_package_autopurge", "_ynh_apt autoremove --purge"),
+ # Exec as / sudo
+ (r'ynh_exec_as "?\$app"?( env)?', "ynh_exec_as_app"),
+ (r'sudo -u "?\$app"?( env)?', "ynh_exec_as_app"),
+ # Cringy messages?
+ ("Modifying a config file...", "Updating configuration..."),
+ ("Updating a configuration file...", "Updating configuration..."),
+ ("Adding a configuration file...", "Adding $app's configuration..."),
+ (
+ "Restoring the systemd configuration...",
+ "Restoring $app's systemd service...",
+ ),
+ ("Configuring a systemd service...", "Configuring $app's systemd service..."),
+ ("Stopping a systemd service...", "Stopping $app's systemd service..."),
+ ("Starting a systemd service...", "Starting $app's systemd service..."),
+ # Recommend ynh_app_setting_set_default
+ (
+ r"( *if \[.*-z.*:-}.*\].*\n?.*then\n\s+(\S+)=(.+)\n\s+ynh_app_setting_set.*\n\s*fi\n)",
+ "# FIXMEhelpers2.1: maybe replace with: ynh_app_setting_set_default --key=\\2 --value=\\3\n\\1",
+ ),
+ # Trailing spaces
+ (r"\s+$", "\n"),
+ ]
+
+ replaces = [
+ (re.compile(pattern, flags=re.M), replace) for pattern, replace in replaces
+ ]
+ comment_blocks_to_cleanup = [
+ re.compile(pattern, flags=re.M) for pattern in comment_blocks_to_cleanup
+ ]
+
+ for s in [
+ "_common.sh",
+ "install",
+ "remove",
+ "upgrade",
+ "backup",
+ "restore",
+ "change_url",
+ "config",
+ ]:
+
+ script = f"scripts/{s}"
+
+ if not os.path.exists(script):
+ continue
+
+ content = open(script).read()
+
+ if s == "remove":
+ content = re.sub(
+ r"(ynh_secure_remove .*/var/log/\$app.*)",
+ r"#REMOVEME? (Apps should not remove their log dir during remove ... this should only happen if --purge is used, and be handled by the core...) \1",
+ content,
+ )
+
+ for pattern in comment_blocks_to_cleanup:
+ content = pattern.sub("", content)
+
+ for pattern, replace in replaces:
+ content = pattern.sub(replace, content)
+
+ for remove in removememaybes:
+ content = content.replace(remove, r"#REMOVEME? " + remove)
+
+ open(script, "w").write(content)
+
+ # Specific PHP FPM conf patch
+ if os.path.exists("conf/extra_php-fpm.conf"):
+
+ content = open("conf/extra_php-fpm.conf").read()
+
+ pattern_upload_max_filesize = r"\nphp_\S*\[upload_max_filesize\] = (\S*)"
+ pattern_post_max_size = r"\nphp_\S*\[post_max_size\] = (\S*)"
+ pattern_memory_limit = r"\nphp_\S*\[memory_limit\] = (\S*)"
+
+ upload_max_filesize = re.findall(pattern_upload_max_filesize, "\n" + content)
+ memory_limit = re.findall(pattern_memory_limit, "\n" + content)
+
+ if memory_limit:
+ content = re.sub(pattern_memory_limit, "", content)
+ memory_limit = memory_limit[0]
+ install = open("scripts/install").read()
+ install = re.sub(
+ "(source /usr/share/yunohost/helpers)",
+ "\\1\n\nynh_app_setting_set --key=php_memory_limit --value="
+ + memory_limit,
+ install,
+ )
+ open("scripts/install", "w").write(install)
+ upgrade = open("scripts/upgrade").read()
+ upgrade = re.sub(
+ "(source /usr/share/yunohost/helpers)",
+ "\\1\n\nynh_app_setting_set_default --key=php_memory_limit --value="
+ + memory_limit,
+ upgrade,
+ )
+ open("scripts/upgrade", "w").write(upgrade)
+
+ if upload_max_filesize:
+ content = re.sub(pattern_upload_max_filesize, "", content)
+ content = re.sub(pattern_post_max_size, "", content)
+
+ upload_max_filesize = upload_max_filesize[0]
+ if upload_max_filesize != "50M":
+ install = open("scripts/install").read()
+ install = re.sub(
+ "(source /usr/share/yunohost/helpers)",
+ "\\1\n\nynh_app_setting_set --key=php_upload_max_filesize --value="
+ + upload_max_filesize,
+ install,
+ )
+ open("scripts/install", "w").write(install)
+ upgrade = open("scripts/upgrade").read()
+ upgrade = re.sub(
+ "(source /usr/share/yunohost/helpers)",
+ "\\1\n\nynh_app_setting_set_default --key=php_upload_max_filesize --value="
+ + upload_max_filesize,
+ upgrade,
+ )
+ open("scripts/upgrade", "w").write(upgrade)
+
+ new_conf_is_empty = all(
+ line.strip() == "" or line.strip()[0] == ";" for line in content.split("\n")
+ )
+ if new_conf_is_empty:
+ os.system("git rm --quiet -f conf/extra_php-fpm.conf")
+ else:
+ open("conf/extra_php-fpm.conf", "w").write(content)
+
+ conf_replaces = [
+ (r"__NAME__", "__APP__"),
+ (r"__NAMETOCHANGE__", "__APP__"),
+ (r"__USER__", "__APP__"),
+ ("__YNH_NODE__", "__NODEJS_DIR__/node"),
+ ("__YNH_NPM__", "__NODEJS_DIR__/npm"),
+ ("__YNH_NODE_LOAD_PATH__", "PATH=__PATH_WITH_NODEJS__"),
+ ("__YNH_RUBY_LOAD_PATH__", "PATH=__PATH_WITH_RUBY__"),
+ ("__YNH_GO_LOAD_PATH__", "PATH=__PATH_WITH_GO__"),
+ ("__YNH_RUBY__", "__RUBY_DIR__/ruby"),
+ ("__PHPVERSION__", "__PHP_VERSION__"),
+ ]
+
+ for currentpath, folders, files in os.walk("conf"):
+ for file in files:
+ path = os.path.join(currentpath, file)
+ try:
+ content = open(path).read()
+ except UnicodeDecodeError:
+ # Not text?
+ continue
+ for pattern, replace in conf_replaces:
+ content = content.replace(pattern, replace)
+
+ open(path, "w").write(content)
+
+ git_cmds = [
+ "git rm --quiet sources/extra_files/*/.gitignore 2>/dev/null",
+ "git rm --quiet sources/patches/.gitignore 2>/dev/null",
+ "git mv sources/extra_files/* sources/ 2>/dev/null",
+ "git mv sources/app/* sources/ 2>/dev/null",
+ "git mv sources/patches patches/ 2>/dev/null",
+ "test -e conf/app.sh && git rm --quiet conf/app.src",
+ "test -e check_process && git rm --quiet check_process",
+ "test -e scripts/actions && git rm -rf --quiet scripts/actions",
+ "test -e config_panel.json && git rm --quiet config_panel.json",
+ "test -e config_panel.toml.example && git rm --quiet config_panel.toml.example",
+ "git rm $(find ./ -name .DS_Store) 2>/dev/null",
+ r"grep -q '\*\~' .gitignore 2>/dev/null || echo '*~' >> .gitignore",
+ r"grep -q '\*.sw\[op\]' .gitignore || echo '*.sw[op]' >> .gitignore",
+ r"grep -q '\.DS_Store' .gitignore || echo '.DS_Store' >> .gitignore",
+ "git add .gitignore",
+ ]
+
+ for cmd in git_cmds:
+ os.system(cmd)
+
+ # If there's a config panel but the only options are the stupid php usage/footprint stuff
+ if (
+ os.path.exists("config_panel.toml")
+ and os.system(
+ r"grep -oE '^\s*\[\S+\.\S+\.\S+]' config_panel.toml | grep -qv php_fpm_config"
+ )
+ != 0
+ ):
+ os.system("git rm --quiet -f config_panel.toml")
+ os.system("git rm --quiet -f scripts/config")
+
+ # Remove scripts/config if no config panel ... most of the time this is only the example config script :|
+ if os.path.exists("scripts/config") and not os.path.exists("config_panel.toml"):
+ os.system("git rm --quiet -f scripts/config")
+
+ webapp_serving_raw_assets_probably = False
+ if os.path.exists("conf/nginx.conf"):
+ nginx_conf = open("conf/nginx.conf").read()
+ if "alias " in nginx_conf or "root " in nginx_conf:
+ webapp_serving_raw_assets_probably = True
+
+ if os.path.isdir("patches"):
+ for file in os.listdir("patches"):
+ if "-" not in file:
+ continue
+ source_name, patch_name = file.split("-", 1)
+ if source_name == "app":
+ source_name = "main"
+ os.system(f"mkdir -p 'patches/{source_name}'")
+ os.system(f"git mv patches/{file} patches/{source_name}/{patch_name}")
+
+ # Add helpers_version = '2.1' after yunohost requirement in manifest
+ raw_manifest = open("manifest.toml", "r").read()
+ if "helpers_version" not in raw_manifest:
+ raw_manifest = re.sub(
+ "(yunohost = .*)", '\\1\nhelpers_version = "2.1"', raw_manifest
+ )
+ raw_manifest = re.sub(
+ r'yunohost = ">= 11\..*"', 'yunohost = ">= 11.2.18"', raw_manifest
+ )
+ if webapp_serving_raw_assets_probably:
+ raw_manifest = re.sub(
+ r"( *)\[resources.install_dir\]",
+ '\\1[resources.install_dir]\n\\1group = "www-data:r-x"',
+ raw_manifest,
+ )
+
+ open("manifest.toml", "w").write(raw_manifest)
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(
+ description="Attempt to automatically apply changes to use YunoHost helpers v2.1 on a v2 app"
+ )
+ parser.add_argument("app_path", help="Path to the app to convert")
+
+ args = parser.parse_args()
+
+ if not os.path.exists(args.app_path + "/manifest.toml"):
+ raise Exception("There is no manifest.toml. Is this really an app directory ?")
+
+ os.chdir(args.app_path)
+
+ cleanup()
diff --git a/tools/readme_generator/make_readme.py b/tools/readme_generator/make_readme.py
index 9accaaae..f608e02b 100755
--- a/tools/readme_generator/make_readme.py
+++ b/tools/readme_generator/make_readme.py
@@ -99,7 +99,7 @@ def generate_READMEs(app_path: Path):
screenshots_dir = app_path / "doc" / "screenshots"
if screenshots_dir.exists():
- for entry in screenshots_dir.iterdir():
+ for entry in sorted(screenshots_dir.iterdir()):
# only pick files (no folder) on the root of 'screenshots'
if not entry.is_file():
continue
diff --git a/tools/readme_generator/templates/README.md.j2 b/tools/readme_generator/templates/README.md.j2
index bd1e6182..06ace837 100644
--- a/tools/readme_generator/templates/README.md.j2
+++ b/tools/readme_generator/templates/README.md.j2
@@ -21,7 +21,7 @@ It shall NOT be edited by hand.") }}
# {{ _("%(application_name)s for YunoHost")|format(application_name=manifest.name) }}
-[](https://dash.yunohost.org/appci/app/{{manifest.id}})  
+[](https://ci-apps.yunohost.org/ci/apps/{{manifest.id}}/)  
[](https://install-app.yunohost.org/?app={{manifest.id}})
diff --git a/tools/readme_generator/tests/README.md b/tools/readme_generator/tests/README.md
index 761ab549..bdbed25f 100644
--- a/tools/readme_generator/tests/README.md
+++ b/tools/readme_generator/tests/README.md
@@ -5,7 +5,7 @@ It shall NOT be edited by hand.
# GoToSocial for YunoHost
-[](https://dash.yunohost.org/appci/app/gotosocial)  
+[](https://ci-apps.yunohost.org/ci/apps/gotosocial/)  
[](https://install-app.yunohost.org/?app=gotosocial)
diff --git a/tools/readme_generator/translations/es/LC_MESSAGES/messages.mo b/tools/readme_generator/translations/es/LC_MESSAGES/messages.mo
index aa4299eb..2d814444 100644
Binary files a/tools/readme_generator/translations/es/LC_MESSAGES/messages.mo and b/tools/readme_generator/translations/es/LC_MESSAGES/messages.mo differ
diff --git a/tools/readme_generator/translations/es/LC_MESSAGES/messages.po b/tools/readme_generator/translations/es/LC_MESSAGES/messages.po
index 5c75a6e9..01c3dadf 100644
--- a/tools/readme_generator/translations/es/LC_MESSAGES/messages.po
+++ b/tools/readme_generator/translations/es/LC_MESSAGES/messages.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-03-31 19:33+0200\n"
-"PO-Revision-Date: 2024-05-20 21:19+0000\n"
+"PO-Revision-Date: 2024-06-18 16:54+0000\n"
"Last-Translator: rosbeef andino \n"
"Language-Team: Spanish \n"
@@ -181,7 +181,7 @@ msgstr "informaciones importantes"
#: templates/README.md.j2:59
msgid "Antifeatures"
-msgstr "funcionalidades no deseadas"
+msgstr "Características no deseables"
#: templates/README.md.j2:66
msgid "Documentation and resources"
diff --git a/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo b/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo
new file mode 100644
index 00000000..b840eaf3
Binary files /dev/null and b/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo differ
diff --git a/tools/readme_generator/translations/id/LC_MESSAGES/messages.po b/tools/readme_generator/translations/id/LC_MESSAGES/messages.po
index 3ede36c5..f843caa8 100644
--- a/tools/readme_generator/translations/id/LC_MESSAGES/messages.po
+++ b/tools/readme_generator/translations/id/LC_MESSAGES/messages.po
@@ -8,23 +8,26 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-03-31 19:33+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2024-07-27 02:54+0000\n"
+"Last-Translator: cjdw \n"
+"Language-Team: Indonesian \n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
#: templates/ALL_README.md.j2:11
#, python-format
msgid "Read the README in %(language)s"
-msgstr ""
+msgstr "Baca README dalam bahasa %(language)s"
#: templates/README.md.j2:2
msgid "Packaging an app, starting from this example"
-msgstr ""
+msgstr "Memaket satu aplikasi, dimulai dari contoh ini"
#: templates/README.md.j2:4
msgid ""
@@ -32,32 +35,41 @@ msgid ""
"github.com/new?template_name=example_ynh&template_owner=YunoHost) button on "
"the Github repo"
msgstr ""
+"Salin aplikasi ini sebelum mengerjakannya, menggunakan tombol ['Gunakan "
+"templat ini'](https://github.com/"
+"new?template_name=example_ynh&template_owner=YunoHost) di repo Github"
#: templates/README.md.j2:5
msgid "Edit the `manifest.toml` with app specific info"
-msgstr ""
+msgstr "Edit `manifest.toml` dengan info khas aplikasi"
#: templates/README.md.j2:6
msgid ""
"Edit the `install`, `upgrade`, `remove`, `backup` and `restore` scripts, and "
"any relevant conf files in `conf/`"
msgstr ""
+"Edit skrip `install`, `upgrade`, `remove`, `backup` and `restore`, dan "
+"setiap berkas conf yang relevan dalam `conf/`"
#: templates/README.md.j2:7
msgid ""
"Using the [script helpers documentation](https://yunohost.org/"
"packaging_apps_helpers)"
msgstr ""
+"Menggunakan [dokumentasi pembantu skrip](https://yunohost.org/"
+"packaging_apps_helpers)"
#: templates/README.md.j2:8
msgid ""
"Edit the `change_url` and `config` scripts too, or remove them if you have "
"no use of them"
msgstr ""
+"Juga edit skrip `change_url` dan `config`, atau singkirkan mereka bila Anda "
+"sudah tidak memerlukannya"
#: templates/README.md.j2:9
msgid "Add a `LICENSE` file for the package."
-msgstr ""
+msgstr "Tambah berkas `LICENSE` pada paket."
#: templates/README.md.j2:10
msgid ""
@@ -66,18 +78,26 @@ msgid ""
"published with and you can choose it freely! (If you don't know which to "
"choose, we recommend [the AGPL-3](https://www.gnu.org/licenses/agpl-3.0.txt))"
msgstr ""
+"NB: berkas `LICENSE` ini tidak dimaksudkan untuk selalu sama dengan aplikasi "
+"hulu - hanya LICENSE yang Anda inginkan untuk menerbitkan kode paket ini dan "
+"Anda bisa bebas memilihnya! (Bila Anda tidak tahu mana yang harus dipilih, "
+"kami sarankan [the AGPL-3](https://www.gnu.org/licenses/agpl-3.0.txt))"
#: templates/README.md.j2:11
msgid ""
"Edit files under the `doc/` directory ([see the page about documenting "
"packages](https://yunohost.org/packaging_app_doc))"
msgstr ""
+"Edit berkas di bawah direktori `doc/` ([lihat halaman mengenai "
+"mendokumentasikan paket](https://yunohost.org/packaging_app_doc))"
#: templates/README.md.j2:12
msgid ""
"The `README.md` files are to be automatically generated by "
msgstr ""
+"Berkas `README.md` akan dibuat secara otomatis oleh "
#: templates/README.md.j2:18
msgid ""
@@ -85,32 +105,35 @@ msgid ""
"YunoHost/apps/tree/master/tools/readme_generator>\n"
"It shall NOT be edited by hand."
msgstr ""
+"N.B.: README ini dibuat secara otomatis oleh \n"
+"Ini TIDAK boleh diedit dengan tangan."
#: templates/README.md.j2:22
#, python-format
msgid "%(application_name)s for YunoHost"
-msgstr ""
+msgstr "%(application_name)s untuk YunoHost"
#: templates/README.md.j2:24
msgid "Integration level"
-msgstr ""
+msgstr "Tingkat integrasi"
#: templates/README.md.j2:24
msgid "Working status"
-msgstr ""
+msgstr "Status kerja"
#: templates/README.md.j2:24
msgid "Maintenance status"
-msgstr ""
+msgstr "Status pemeliharaan"
#: templates/README.md.j2:26
#, python-format
msgid "Install %(application_name)s with YunoHost"
-msgstr ""
+msgstr "Pasang %(application_name)s dengan YunoHost"
#: templates/README.md.j2:28
msgid "Read this README in other languages."
-msgstr ""
+msgstr "Baca README ini dengan bahasa yang lain."
#: templates/README.md.j2:30
#, python-format
@@ -118,73 +141,78 @@ msgid ""
"This package allows you to install %(application_name)s quickly and simply "
"on a YunoHost server."
msgstr ""
+"Paket ini memperbolehkan Anda untuk memasang %(application_name)s secara "
+"cepat dan mudah pada server YunoHost."
#: templates/README.md.j2:31
msgid ""
"If you don't have YunoHost, please consult [the guide](https://yunohost.org/"
"install) to learn how to install it."
msgstr ""
+"Bila Anda tidak mempunyai YunoHost, silakan berkonsultasi dengan "
+"[panduan](https://yunohost.org/install) untuk mempelajari bagaimana untuk "
+"memasangnya."
#: templates/README.md.j2:33
msgid "Overview"
-msgstr ""
+msgstr "Ringkasan"
#: templates/README.md.j2:37
msgid "Shipped version:"
-msgstr ""
+msgstr "Versi terkirim:"
#: templates/README.md.j2:41
msgid "Demo:"
-msgstr ""
+msgstr "Demo:"
#: templates/README.md.j2:45
msgid "Screenshots"
-msgstr ""
+msgstr "Tangkapan Layar"
#: templates/README.md.j2:48
#, python-format
msgid "Screenshot of %(application_name)s"
-msgstr ""
+msgstr "Tangkapan Layar pada %(application_name)s"
#: templates/README.md.j2:53
msgid "Disclaimers / important information"
-msgstr ""
+msgstr "Sangkalan / informasi penting"
#: templates/README.md.j2:59
msgid "Antifeatures"
-msgstr ""
+msgstr "Antifitur"
#: templates/README.md.j2:66
msgid "Documentation and resources"
-msgstr ""
+msgstr "Dokumentasi dan sumber daya"
#: templates/README.md.j2:68
msgid "Official app website:"
-msgstr ""
+msgstr "Website aplikasi resmi:"
#: templates/README.md.j2:70
msgid "Official user documentation:"
-msgstr ""
+msgstr "Dokumentasi pengguna resmi:"
#: templates/README.md.j2:72
msgid "Official admin documentation:"
-msgstr ""
+msgstr "Dokumentasi admin resmi:"
#: templates/README.md.j2:74
msgid "Upstream app code repository:"
-msgstr ""
+msgstr "Depot kode aplikasi hulu:"
#: templates/README.md.j2:76
msgid "YunoHost Store:"
-msgstr ""
+msgstr "Gudang YunoHost:"
#: templates/README.md.j2:77
msgid "Report a bug:"
-msgstr ""
+msgstr "Laporkan bug:"
#: templates/README.md.j2:79
msgid "Developer info"
-msgstr ""
+msgstr "Info developer"
#: templates/README.md.j2:81
#, python-format
@@ -192,15 +220,16 @@ msgid ""
"Please send your pull request to the [`testing` branch]"
"(%(testing_branch_url)s)."
msgstr ""
+"Silakan kirim pull request ke [`testing` branch](%(testing_branch_url)s)."
#: templates/README.md.j2:83
msgid "To try the `testing` branch, please proceed like that:"
-msgstr ""
+msgstr "Untuk mencoba branch `testing`, silakan dilanjutkan seperti:"
#: templates/README.md.j2:87
msgid "or"
-msgstr ""
+msgstr "atau"
#: templates/README.md.j2:91
msgid "More info regarding app packaging:"
-msgstr ""
+msgstr "Info lebih lanjut mengenai pemaketan aplikasi:"
diff --git a/tools/readme_generator/translations/ru/LC_MESSAGES/messages.mo b/tools/readme_generator/translations/ru/LC_MESSAGES/messages.mo
new file mode 100644
index 00000000..009778e9
Binary files /dev/null and b/tools/readme_generator/translations/ru/LC_MESSAGES/messages.mo differ
diff --git a/tools/readme_generator/translations/ru/LC_MESSAGES/messages.po b/tools/readme_generator/translations/ru/LC_MESSAGES/messages.po
index 5693983a..85d556bc 100644
--- a/tools/readme_generator/translations/ru/LC_MESSAGES/messages.po
+++ b/tools/readme_generator/translations/ru/LC_MESSAGES/messages.po
@@ -8,23 +8,27 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-03-31 19:33+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2024-08-07 06:55+0000\n"
+"Last-Translator: Ivan Davydov \n"
+"Language-Team: Russian \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
#: templates/ALL_README.md.j2:11
#, python-format
msgid "Read the README in %(language)s"
-msgstr ""
+msgstr "Прочитать README на %(language)s"
#: templates/README.md.j2:2
msgid "Packaging an app, starting from this example"
-msgstr ""
+msgstr "Пакетирование приложения, начиная с этого примера"
#: templates/README.md.j2:4
msgid ""
@@ -32,32 +36,41 @@ msgid ""
"github.com/new?template_name=example_ynh&template_owner=YunoHost) button on "
"the Github repo"
msgstr ""
+"Скопируйте приложение перед тем, как работать над ним, используя кнопку ["
+"'Use this template'](https://github.com/"
+"new?template_name=example_ynh&template_owner=YunoHost) на GitHub-репозитории"
#: templates/README.md.j2:5
msgid "Edit the `manifest.toml` with app specific info"
-msgstr ""
+msgstr "Отредактируйте `manifest.toml`, добавив данные приложения"
#: templates/README.md.j2:6
msgid ""
"Edit the `install`, `upgrade`, `remove`, `backup` and `restore` scripts, and "
"any relevant conf files in `conf/`"
msgstr ""
+"Отредактируйте скрипты `install`, `upgrade`, `remove`, `backup` and `restore`"
+", и добавьте необходимые файлы конфигурации в `conf/`"
#: templates/README.md.j2:7
msgid ""
"Using the [script helpers documentation](https://yunohost.org/"
"packaging_apps_helpers)"
msgstr ""
+"Используя [документацию по помощникам скриптов](https://yunohost.org/"
+"packaging_apps_helpers)"
#: templates/README.md.j2:8
msgid ""
"Edit the `change_url` and `config` scripts too, or remove them if you have "
"no use of them"
msgstr ""
+"Также отредактируйте скрипты `change_url` and `config`, или удалите их, если "
+"Вы их не используете"
#: templates/README.md.j2:9
msgid "Add a `LICENSE` file for the package."
-msgstr ""
+msgstr "Добавьте файл `LICENSE` в пакет."
#: templates/README.md.j2:10
msgid ""
@@ -66,18 +79,26 @@ msgid ""
"published with and you can choose it freely! (If you don't know which to "
"choose, we recommend [the AGPL-3](https://www.gnu.org/licenses/agpl-3.0.txt))"
msgstr ""
+"Важно: этот файл `LICENSE` не обязан быть таким же, как и в главной ветке "
+"приложения - это только лицензия, под которой Вы хотите распространять код "
+"данного пакета. (если Вы не знаете, какую выбрать лицензию, мы рекомендуем "
+"[AGPL-3](https://www.gnu.org/licenses/agpl-3.0.txt))"
#: templates/README.md.j2:11
msgid ""
"Edit files under the `doc/` directory ([see the page about documenting "
"packages](https://yunohost.org/packaging_app_doc))"
msgstr ""
+"Отредактируйте файлы в директории `doc/` ([смотрите страницу о "
+"документировании пакетов](https://yunohost.org/packaging_app_doc))"
#: templates/README.md.j2:12
msgid ""
"The `README.md` files are to be automatically generated by "
msgstr ""
+"Файлы `README.md` автоматически генерируются "
#: templates/README.md.j2:18
msgid ""
@@ -85,32 +106,35 @@ msgid ""
"YunoHost/apps/tree/master/tools/readme_generator>\n"
"It shall NOT be edited by hand."
msgstr ""
+"Важно: этот README был автоматически сгенерирован \n"
+"Он НЕ ДОЛЖЕН редактироваться вручную."
#: templates/README.md.j2:22
#, python-format
msgid "%(application_name)s for YunoHost"
-msgstr ""
+msgstr "%(application_name)s для YunoHost"
#: templates/README.md.j2:24
msgid "Integration level"
-msgstr ""
+msgstr "Уровень интеграции"
#: templates/README.md.j2:24
msgid "Working status"
-msgstr ""
+msgstr "Состояние работы"
#: templates/README.md.j2:24
msgid "Maintenance status"
-msgstr ""
+msgstr "Состояние сопровождения"
#: templates/README.md.j2:26
#, python-format
msgid "Install %(application_name)s with YunoHost"
-msgstr ""
+msgstr "Установите %(application_name)s с YunoHost"
#: templates/README.md.j2:28
msgid "Read this README in other languages."
-msgstr ""
+msgstr "Прочтите этот README на других языках."
#: templates/README.md.j2:30
#, python-format
@@ -118,73 +142,77 @@ msgid ""
"This package allows you to install %(application_name)s quickly and simply "
"on a YunoHost server."
msgstr ""
+"Этот пакет позволяет Вам установить %(application_name)s быстро и просто на "
+"YunoHost-сервер."
#: templates/README.md.j2:31
msgid ""
"If you don't have YunoHost, please consult [the guide](https://yunohost.org/"
"install) to learn how to install it."
msgstr ""
+"Если у Вас нет YunoHost, пожалуйста, посмотрите [инструкцию](https://yunohost"
+".org/install), чтобы узнать, как установить его."
#: templates/README.md.j2:33
msgid "Overview"
-msgstr ""
+msgstr "Обзор"
#: templates/README.md.j2:37
msgid "Shipped version:"
-msgstr ""
+msgstr "Поставляемая версия:"
#: templates/README.md.j2:41
msgid "Demo:"
-msgstr ""
+msgstr "Демо-версия:"
#: templates/README.md.j2:45
msgid "Screenshots"
-msgstr ""
+msgstr "Снимки экрана"
#: templates/README.md.j2:48
#, python-format
msgid "Screenshot of %(application_name)s"
-msgstr ""
+msgstr "Снимок экрана %(application_name)s"
#: templates/README.md.j2:53
msgid "Disclaimers / important information"
-msgstr ""
+msgstr "Дисклеймеры / важная информация"
#: templates/README.md.j2:59
msgid "Antifeatures"
-msgstr ""
+msgstr "Анти-функции"
#: templates/README.md.j2:66
msgid "Documentation and resources"
-msgstr ""
+msgstr "Документация и ресурсы"
#: templates/README.md.j2:68
msgid "Official app website:"
-msgstr ""
+msgstr "Официальный веб-сайт приложения:"
#: templates/README.md.j2:70
msgid "Official user documentation:"
-msgstr ""
+msgstr "Официальная документация пользователя:"
#: templates/README.md.j2:72
msgid "Official admin documentation:"
-msgstr ""
+msgstr "Официальная документация администратора:"
#: templates/README.md.j2:74
msgid "Upstream app code repository:"
-msgstr ""
+msgstr "Репозиторий кода главной ветки приложения:"
#: templates/README.md.j2:76
msgid "YunoHost Store:"
-msgstr ""
+msgstr "Магазин YunoHost:"
#: templates/README.md.j2:77
msgid "Report a bug:"
-msgstr ""
+msgstr "Сообщите об ошибке:"
#: templates/README.md.j2:79
msgid "Developer info"
-msgstr ""
+msgstr "Информация для разработчиков"
#: templates/README.md.j2:81
#, python-format
@@ -192,15 +220,17 @@ msgid ""
"Please send your pull request to the [`testing` branch]"
"(%(testing_branch_url)s)."
msgstr ""
+"Пришлите Ваш запрос на слияние в [ветку `testing`](%(testing_branch_url)s)."
#: templates/README.md.j2:83
msgid "To try the `testing` branch, please proceed like that:"
msgstr ""
+"Чтобы попробовать ветку `testing`, пожалуйста, сделайте что-то вроде этого:"
#: templates/README.md.j2:87
msgid "or"
-msgstr ""
+msgstr "или"
#: templates/README.md.j2:91
msgid "More info regarding app packaging:"
-msgstr ""
+msgstr "Больше информации о пакетировании приложений:"
diff --git a/tools/readme_generator/translations/tr/LC_MESSAGES/messages.mo b/tools/readme_generator/translations/tr/LC_MESSAGES/messages.mo
index 0b890d5e..f2d954e6 100644
Binary files a/tools/readme_generator/translations/tr/LC_MESSAGES/messages.mo and b/tools/readme_generator/translations/tr/LC_MESSAGES/messages.mo differ
diff --git a/tools/readme_generator/translations/tr/LC_MESSAGES/messages.po b/tools/readme_generator/translations/tr/LC_MESSAGES/messages.po
index 93db64fa..45362e69 100644
--- a/tools/readme_generator/translations/tr/LC_MESSAGES/messages.po
+++ b/tools/readme_generator/translations/tr/LC_MESSAGES/messages.po
@@ -8,13 +8,16 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-03-31 19:33+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2024-06-20 19:43+0000\n"
+"Last-Translator: Satuk Bug \n"
+"Language-Team: Turkish \n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.4.3\n"
"Generated-By: Babel 2.14.0\n"
#: templates/ALL_README.md.j2:11
@@ -27,11 +30,16 @@ msgid "Packaging an app, starting from this example"
msgstr ""
#: templates/README.md.j2:4
+#, fuzzy
msgid ""
"Copy this app before working on it, using the ['Use this template'](https://"
"github.com/new?template_name=example_ynh&template_owner=YunoHost) button on "
"the Github repo"
msgstr ""
+"Bu uygulama üzerinde çalışmaya başlamadan önce, Github deposunda bulunan ["
+"'Bu şablonu kullan'](https://github.com/"
+"new?template_name=example_ynh&template_owner=YunoHost) düğmesini kullanarak "
+"bu uygulamayı kopyalayın."
#: templates/README.md.j2:5
msgid "Edit the `manifest.toml` with app specific info"
@@ -93,24 +101,25 @@ msgstr ""
#: templates/README.md.j2:24
msgid "Integration level"
-msgstr ""
+msgstr "Entegrasyon seviyesi"
#: templates/README.md.j2:24
msgid "Working status"
-msgstr ""
+msgstr "Çalışma durumu"
#: templates/README.md.j2:24
msgid "Maintenance status"
-msgstr ""
+msgstr "Bakım durumu"
#: templates/README.md.j2:26
-#, python-format
+#, fuzzy, python-format
msgid "Install %(application_name)s with YunoHost"
-msgstr ""
+msgstr "%(application_name)s'i YunoHost ile yükleyin"
#: templates/README.md.j2:28
+#, fuzzy
msgid "Read this README in other languages."
-msgstr ""
+msgstr "Bu README dosyasını diğer dillerde okuyun."
#: templates/README.md.j2:30
#, python-format
@@ -118,33 +127,40 @@ msgid ""
"This package allows you to install %(application_name)s quickly and simply "
"on a YunoHost server."
msgstr ""
+"Bu paket, %(application_name)s'i YunoHost sunucusuna hızlı ve basit bir "
+"şekilde yüklemenizi sağlar."
#: templates/README.md.j2:31
+#, fuzzy
msgid ""
"If you don't have YunoHost, please consult [the guide](https://yunohost.org/"
"install) to learn how to install it."
msgstr ""
+"YunoHost'a sahip değilseniz, nasıl kurulacağını öğrenmek için lütfen "
+"[kılavuza](https://yunohost.org/install) başvurun."
#: templates/README.md.j2:33
+#, fuzzy
msgid "Overview"
-msgstr ""
+msgstr "Genel Bakış"
#: templates/README.md.j2:37
+#, fuzzy
msgid "Shipped version:"
-msgstr ""
+msgstr "Gönderilen sürüm:"
#: templates/README.md.j2:41
msgid "Demo:"
-msgstr ""
+msgstr "Demo:"
#: templates/README.md.j2:45
msgid "Screenshots"
-msgstr ""
+msgstr "Ekran Görüntüleri"
#: templates/README.md.j2:48
-#, python-format
+#, fuzzy, python-format
msgid "Screenshot of %(application_name)s"
-msgstr ""
+msgstr "%(application_name)s'nin ekran görüntüsü"
#: templates/README.md.j2:53
msgid "Disclaimers / important information"
@@ -155,36 +171,41 @@ msgid "Antifeatures"
msgstr ""
#: templates/README.md.j2:66
+#, fuzzy
msgid "Documentation and resources"
-msgstr ""
+msgstr "Belgeler ve kaynaklar"
#: templates/README.md.j2:68
+#, fuzzy
msgid "Official app website:"
-msgstr ""
+msgstr "Resmi uygulama web sitesi:"
#: templates/README.md.j2:70
+#, fuzzy
msgid "Official user documentation:"
-msgstr ""
+msgstr "Resmi kullanıcı belgeleri:"
#: templates/README.md.j2:72
+#, fuzzy
msgid "Official admin documentation:"
-msgstr ""
+msgstr "Resmi yönetici belgeleri:"
#: templates/README.md.j2:74
+#, fuzzy
msgid "Upstream app code repository:"
-msgstr ""
+msgstr "Upstream uygulama kod deposu:"
#: templates/README.md.j2:76
msgid "YunoHost Store:"
-msgstr ""
+msgstr "YunoHost Mağazası:"
#: templates/README.md.j2:77
msgid "Report a bug:"
-msgstr ""
+msgstr "Hata bildir:"
#: templates/README.md.j2:79
msgid "Developer info"
-msgstr ""
+msgstr "Geliştirici bilgisi"
#: templates/README.md.j2:81
#, python-format
diff --git a/tools/webhooks/requirements.txt b/tools/webhooks/requirements.txt
new file mode 100644
index 00000000..0c08cd67
--- /dev/null
+++ b/tools/webhooks/requirements.txt
@@ -0,0 +1,10 @@
+jinja2
+sanic==21.12.2
+GitPython
+pyyaml
+toml
+websockets==10.0
+babel
+langcodes
+language_data
+requests
diff --git a/tools/webhooks/webhook.py b/tools/webhooks/webhook.py
index df30984c..440a6eec 100755
--- a/tools/webhooks/webhook.py
+++ b/tools/webhooks/webhook.py
@@ -1,13 +1,17 @@
#!/usr/bin/env python3
import sys
+import tomlkit
import hashlib
import argparse
import hmac
from functools import cache
import tempfile
+import aiohttp
import logging
from pathlib import Path
+import re
+import requests
from typing import Optional
from git import Actor, Repo, GitCommandError
@@ -62,9 +66,31 @@ async def github_post(request: Request) -> HTTPResponse:
if event == "push":
return on_push(request)
+ if event == "issue_comment":
+ infos = request.json
+ valid_pr_comment = (
+ infos["action"] == "created"
+ and infos["issue"]["state"] == "open"
+ and "pull_request" in infos["issue"]
+ )
+ pr_infos = await get_pr_infos(request)
+
+ if valid_pr_comment:
+ return on_pr_comment(request, pr_infos)
+ else:
+ return response.empty()
+
return response.json({"error": f"Unknown event '{event}'"}, 422)
+async def get_pr_infos(request: Request) -> dict:
+ pr_infos_url = request.json["issue"]["pull_request"]["url"]
+ async with aiohttp.ClientSession() as session:
+ async with session.get(pr_infos_url) as resp:
+ pr_infos = await resp.json()
+ return pr_infos
+
+
def check_webhook_signatures(request: Request) -> Optional[HTTPResponse]:
logging.warning("Unsafe webhook!")
header_signature = request.headers.get("X-Hub-Signature")
@@ -92,33 +118,156 @@ def on_push(request: Request) -> HTTPResponse:
repository = data["repository"]["full_name"]
branch = data["ref"].split("/", 2)[2]
- logging.info(f"{repository} -> branch '{branch}'")
+ if repository.startswith("YunoHost-Apps/"):
- need_push = False
- with tempfile.TemporaryDirectory() as folder_str:
- folder = Path(folder_str)
- repo = Repo.clone_from(
- f"https://{github_login()}:{github_token()}@github.com/{repository}",
- to_path=folder,
- )
+ logging.info(f"{repository} -> branch '{branch}'")
- # First rebase the testing branch if possible
- if branch in ["master", "testing"]:
- result = git_repo_rebase_testing_fast_forward(repo)
+ need_push = False
+ with tempfile.TemporaryDirectory() as folder_str:
+ folder = Path(folder_str)
+ repo = Repo.clone_from(
+ f"https://{github_login()}:{github_token()}@github.com/{repository}",
+ to_path=folder,
+ )
+
+ # First rebase the testing branch if possible
+ if branch in ["master", "testing"]:
+ result = git_repo_rebase_testing_fast_forward(repo)
+ need_push = need_push or result
+
+ repo.git.checkout(branch)
+ result = generate_and_commit_readmes(repo)
need_push = need_push or result
- repo.git.checkout(branch)
- result = generate_and_commit_readmes(repo)
- need_push = need_push or result
+ if not need_push:
+ logging.debug("nothing to do")
+ return response.text("nothing to do")
- if not need_push:
- logging.debug("nothing to do")
- return response.text("nothing to do")
+ logging.debug(f"Pushing {repository}")
+ repo.remote().push(quiet=False, all=True)
- logging.debug(f"Pushing {repository}")
- repo.remote().push(quiet=False, all=True)
+ return response.text("ok")
- return response.text("ok")
+
+def on_pr_comment(request: Request, pr_infos: dict) -> HTTPResponse:
+ body = request.json["comment"]["body"].strip()[:100].lower()
+
+ # Check the comment contains proper keyword trigger
+
+ BUMP_REV_COMMANDS = ["!bump", "!new_revision", "!newrevision"]
+ if any(trigger.lower() in body for trigger in BUMP_REV_COMMANDS):
+ bump_revision(request, pr_infos)
+ return response.text("ok")
+
+ REJECT_WISHLIST_COMMANDS = ["!reject", "!nope"]
+ if any(trigger.lower() in body for trigger in REJECT_WISHLIST_COMMANDS):
+ reason = ""
+ for command in REJECT_WISHLIST_COMMANDS:
+ try:
+ reason = re.search(f"{command} (.*)", body).group(1).rstrip()
+ except:
+ pass
+ reject_wishlist(request, pr_infos, reason)
+ return response.text("ok")
+
+ return response.empty()
+
+
+def bump_revision(request: Request, pr_infos: dict) -> HTTPResponse:
+ data = request.json
+ repository = data["repository"]["full_name"]
+ branch = pr_infos["head"]["ref"]
+
+ if repository.startswith("YunoHost-Apps/"):
+
+ logging.info(f"Will bump revision on {repository} branch {branch}...")
+ with tempfile.TemporaryDirectory() as folder_str:
+ folder = Path(folder_str)
+ repo = Repo.clone_from(
+ f"https://{github_login()}:{github_token()}@github.com/{repository}",
+ to_path=folder,
+ )
+ repo.git.checkout(branch)
+
+ manifest_file = folder / "manifest.toml"
+ manifest = tomlkit.load(manifest_file.open("r", encoding="utf-8"))
+ version, revision = manifest["version"].split("~ynh")
+ revision = str(int(revision) + 1)
+ manifest["version"] = "~ynh".join([version, revision])
+ tomlkit.dump(manifest, manifest_file.open("w", encoding="utf-8"))
+
+ repo.git.add("manifest.toml")
+ repo.index.commit(
+ "Bump package revision",
+ author=Actor("yunohost-bot", "yunohost@yunohost.org"),
+ )
+
+ logging.debug(f"Pushing {repository}")
+ repo.remote().push(quiet=False, all=True)
+ return response.text("ok")
+
+
+def reject_wishlist(request: Request, pr_infos: dict, reason=None) -> HTTPResponse:
+ data = request.json
+ repository = data["repository"]["full_name"]
+ branch = pr_infos["head"]["ref"]
+ pr_number = pr_infos["number"]
+
+ if repository == "YunoHost/apps" and branch.startswith("add-to-wishlist"):
+
+ logging.info(
+ f"Will put the suggested app in the rejected list on {repository} branch {branch}..."
+ )
+ with tempfile.TemporaryDirectory() as folder_str:
+ folder = Path(folder_str)
+ repo = Repo.clone_from(
+ f"https://{github_login()}:{github_token()}@github.com/{repository}",
+ to_path=folder,
+ )
+ repo.git.checkout(branch)
+
+ rejectedlist_file = folder / "rejectedlist.toml"
+ rejectedlist = tomlkit.load(rejectedlist_file.open("r", encoding="utf-8"))
+
+ wishlist_file = folder / "wishlist.toml"
+ wishlist = tomlkit.load(wishlist_file.open("r", encoding="utf-8"))
+
+ suggestedapp_slug = branch.replace("add-to-wishlist-", "")
+ suggestedapp = {suggestedapp_slug: wishlist[suggestedapp_slug]}
+ suggestedapp[suggestedapp_slug]["rejection_pr"] = pr_infos["html_url"]
+ suggestedapp[suggestedapp_slug]["reason"] = reason
+
+ wishlist.pop(suggestedapp_slug)
+ rejectedlist.update(suggestedapp)
+
+ tomlkit.dump(rejectedlist, rejectedlist_file.open("w", encoding="utf-8"))
+ tomlkit.dump(wishlist, wishlist_file.open("w", encoding="utf-8"))
+
+ repo.git.add("rejectedlist.toml")
+ repo.git.add("wishlist.toml")
+
+ suggestedapp_name = suggestedapp[suggestedapp_slug]["name"]
+ repo.index.commit(
+ f"Reject {suggestedapp_name} from catalog",
+ author=Actor("yunohost-bot", "yunohost@yunohost.org"),
+ )
+
+ logging.debug(f"Pushing {repository}")
+ repo.remote().push(quiet=False, all=True, force=True)
+
+ new_pr_title = {"title": f"Add {suggestedapp_name} to rejection list"}
+ with requests.Session() as s:
+ s.headers.update({"Authorization": f"token {github_token()}"})
+ r = s.post(
+ f"https://api.github.com/repos/{repository}/pulls/{pr_number}",
+ json=new_pr_title,
+ )
+ if r.status_code != 200:
+ logging.info(
+ f"PR #{pr_number} renaming failed with code {r.status_code}"
+ )
+
+ return response.text("ok")
def generate_and_commit_readmes(repo: Repo) -> bool:
diff --git a/wishlist.toml b/wishlist.toml
index 605f3f20..5c3b4ec7 100644
--- a/wishlist.toml
+++ b/wishlist.toml
@@ -26,6 +26,14 @@ upstream = "https://github.com/akaunting/akaunting"
website = "https://akaunting.com/"
added_date = 1695656621 # 2023/09/25
+
+[aktivisda]
+name = "Aktivisda"
+description = "Web application to create visuals using an organization's graphic charter."
+upstream = "https://framagit.org/aktivisda/aktivisda"
+website = "https://aktivisda.earth"
+added_date = 1720803998 # 2024/07/12
+
[amara]
name = "Amara"
description = "Collaborative translation of subtitles for videosCollaborative translation of subtitles for videos"
@@ -55,6 +63,14 @@ upstream = "https://github.com/anonaddy/anonaddy"
website = "https://anonaddy.com/"
added_date = 1695656621 # 2023/09/25
+
+[anytype]
+name = "Anytype"
+description = "Local-first note taking and knowledge management software."
+upstream = "https://github.com/anyproto/any-sync"
+website = "https://anytype.io"
+added_date = 1720804319 # 2024/07/12
+
[appflowy]
name = "Appflowy"
description = "Alternative to Notion"
@@ -481,6 +497,14 @@ upstream = "https://github.com/docker/distribution/"
website = ""
added_date = 1695656621 # 2023/09/25
+
+[docmost]
+name = "Docmost."
+description = "Wiki and documentation software"
+upstream = "https://github.com/docmost/docmost"
+website = "https://docmost.com/"
+added_date = 1721053354 # 2024/07/15
+
[docspell]
name = "Docspell"
description = "Simple document organizer"
@@ -587,13 +611,6 @@ upstream = "https://github.com/exoplatform/"
website = "https://www.exoplatform.com"
added_date = 1698609533 # 2023/10/29
-[faircamp]
-name = "Faircamp"
-description = "Static site generator for audio artists and producers"
-upstream = "https://codeberg.org/simonrepp/faircamp"
-website = "https://simonrepp.com/faircamp/"
-added_date = 1703728571 # 2023/12/28
-
[farside]
name = "Farside"
description = "A redirecting service for FOSS alternative frontends"
@@ -686,6 +703,14 @@ upstream = "https://github.com/gatsbyjs/gatsby"
website = "https://www.gatsbyjs.com/"
added_date = 1695656621 # 2023/09/25
+
+[geeftlist]
+name = "Geeftlist"
+description = "Collaborative gift list management"
+upstream = "https://codeberg.org/nanawel/geeftlist"
+website = "https://www.geeftlist.com/"
+added_date = 1723896182 # 2024/08/17
+
[geneweb]
name = "Geneweb"
description = "Genealogy in a web interface"
@@ -771,6 +796,14 @@ upstream = "https://github.com/graphhopper/graphhopper"
website = "https://www.graphhopper.com/"
added_date = 1695656621 # 2023/09/25
+
+[graylog]
+name = "Graylog"
+description = "log management platform"
+upstream = "https://github.com/Graylog2/graylog2-server"
+website = "https://www.graylog.org/"
+added_date = 1721053741 # 2024/07/15
+
[greenlight]
name = "Greenlight"
description = "A really simple end-user interface for your BigBlueButton server"
@@ -828,6 +861,12 @@ upstream = "https://github.com/heyform/heyform"
website = "https://heyform.net"
added_date = 1713542406 # 2024/04/19
+[hydroxide]
+name = "Hydroxide"
+description = "A third party, open-source Proton Mail CardDAV, IMAP and SMTP bridge."
+upstream = "https://github.com/emersion/hydroxide"
+added_date = 1723933578 # 2024/08/17
+
[histopad]
name = "HistoPad"
description = "Log pads (etherpad) and archiving them in a git repository"
@@ -835,6 +874,14 @@ upstream = "https://github.com/24eme/histopad"
website = ""
added_date = 1695656621 # 2023/09/25
+
+[hoarder]
+name = "Hoarder"
+description = "Quickly save links, notes, and images and hoarder will automatically tag them for you using AI."
+upstream = "https://github.com/hoarder-app/hoarder"
+website = "https://hoarder.app/"
+added_date = 1723934417 # 2024/08/17
+
[homebox]
name = "Homebox"
description = "Homebox is the inventory and organization system built for the Home User!"
@@ -1185,6 +1232,7 @@ upstream = "https://github.com/krateng/maloja"
website = "https://maloja.krateng.ch/"
added_date = 1702560886 # 2023/12/14
+
[mautrix-meta]
name = "mautrix-meta"
description = "A Matrix-Facebook Messenger and Instagram DM puppeting bridge."
@@ -1199,6 +1247,14 @@ upstream = "https://gitlab.com/mayan-edms/mayan-edms"
website = "https://www.mayan-edms.com/"
added_date = 1700423402 # 2023/11/19
+
+[mcaptcha]
+name = "mCaptcha"
+description = "No-nonsense CAPTCHA system"
+upstream = "https://github.com/mCaptcha/mCaptcha"
+website = "https://demo.mcaptcha.org"
+added_date = 1723935475 # 2024/08/17
+
[mealie]
name = "Mealie"
description = "Recipe manager and meal planner"
@@ -1552,6 +1608,14 @@ upstream = "https://github.com/pinry/pinry/"
website = "https://docs.getpinry.com/"
added_date = 1695656621 # 2023/09/25
+
+[pixeleye]
+name = "Pixeleye"
+description = "Visual review & testing platform"
+upstream = "https://github.com/pixeleye-io/pixeleye"
+website = "https://pixeleye.io"
+added_date = 1723933650 # 2024/08/17
+
[plane]
name = "Plane"
description = "Project planning tool"
@@ -1645,6 +1709,14 @@ website = "https://pterodactyl.io/"
draft = "https://github.com/YunoHost-Apps/pterodactyl_ynh"
added_date = 1695656621 # 2023/09/25
+
+[puter]
+name = "Puter"
+description = "Internet OS\rPersonal cloud that houses all your files, apps, and games."
+upstream = "https://github.com/HeyPuter/puter"
+website = "https://puter.com/"
+added_date = 1723935551 # 2024/08/17
+
[qgis-server]
name = "QGis server"
description = "Publish QGis desktop projets and maps as OGC-compliant services, that can be used in openlayers, leaflet etc."
@@ -1802,6 +1874,14 @@ upstream = "https://github.com/NickColley/semaphore"
website = "https://semaphore.social/"
added_date = 1695656621 # 2023/09/25
+
+[sentry]
+name = "Sentry"
+description = "Error handling.\rGood option for DevOPS."
+upstream = "https://github.com/getsentry/sentry"
+website = "https://sentry.io"
+added_date = 1723934366 # 2024/08/17
+
[shadowsocks]
name = "shadowsocks"
description = "A SOCKS5 proxy to protect your Internet traffic"
@@ -1860,6 +1940,7 @@ upstream = "https://codeberg.org/grunfink/snac2"
website = "https://comam.es/snac-doc/"
added_date = 1707414547 # 2024/02/08
+
[socialhome]
name = "SocialHome"
description = "A federated personal profile"
@@ -2024,6 +2105,14 @@ upstream = "https://github.com/sismics/docs"
website = "https://teedy.io/"
added_date = 1695656621 # 2023/09/25
+
+[tee-worlds]
+name = "Tee Worlds"
+description = "An online multiplayer game. Battle with up to 16 players in a variety of game modes."
+upstream = "https://github.com/teeworlds/teeworlds"
+website = "https://teeworlds.com/"
+added_date = 1720804005 # 2024/07/12
+
[teleport]
name = "Teleport"
description = "Multi-protocol access proxy which understands SSH, HTTPS, RDP, Kubernetes API, MySQL, MongoDB and PostgreSQL wire protocols."
@@ -2066,6 +2155,14 @@ upstream = "https://github.com/tmate-io/tmate"
website = "https://tmate.io/"
added_date = 1695656621 # 2023/09/25
+
+[tootgroup]
+name = "tootgroup"
+description = "fediverse bot that re-toots content of a group of accounts on its own account"
+upstream = "https://github.com/oe4dns/tootgroup.py"
+website = ""
+added_date = 1720804539 # 2024/07/12
+
[trivy]
name = "trivy"
description = "OSS Vulnerability and Misconfiguration Scanning."
@@ -2080,6 +2177,14 @@ upstream = "https://foss.heptapod.net/tryton/"
website = "https://www.tryton.org/"
added_date = 1698609501 # 2023/10/29
+
+[tube-archivist]
+name = "Tube Archivist"
+description = "Tube Archivist indexes and organizes archived YouTube videos through a convenient web interface."
+upstream = "https://github.com/tubearchivist/tubearchivist"
+website = "https://www.tubearchivist.com/"
+added_date = 1720873225 # 2024/07/13
+
[tubesync]
name = "tubesync"
description = "Syncs YouTube channels and playlists to a locally hosted media server"
@@ -2138,6 +2243,13 @@ upstream = "https://github.com/huridocs/uwazi"
website = "https://www.uwazi.io/"
added_date = 1695656621 # 2023/09/25
+
+[viestireports]
+name = "ViestiReports"
+description = "Provides a way to view DMARC and SMTP-TLS reports (reads the inbox for new reports and process them)"
+upstream = "https://github.com/antedebaas/Viesti-Reports"
+added_date = 1723934299 # 2024/08/17
+
[vod2podrss]
name = "Vod2PodRSS"
description = "Convert YouTube or Twitch channels RSS feed"
|