Package: release.debian.org Severity: normal X-Debbugs-Cc: tokodon@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Control: affects -1 + src:tokodon User: release.debian.org@packages.debian.org Usertags: unblock Dear Release Team, please unblock package tokodon. [ Reason ] It contains the following changes: * New upstream release (25.04.1). - Clamp contentY when using the PageUp key. (kde#501936) - Stop registering for push notifications despite them being disabled. - Print out what the old endpoint was in the warning message. - Don't spam network error log with push subscription checks. - Don't bother updating push subscriptions if there is none. - Remove annual_report from push notification rules. - Call updatePushNotifications when toggling the notifications checkbox. * New upstream release (25.04.2). - ModerationTools: Fix opening some subpages. The complete debdiff contains a huge amount of translation fixes so I’m attaching a simple diff trimmed from these for your convenience: diff -ur --exclude=po tokodon-25.04.[02] [ Tests ] - Tested connecting to mastodon with an existing account and browsing through the various pages of the app. - Upstream test suite passes in sbuild. [ Risks ] Upstream point releases only contain targetted commits. Further fixes can easily be backported or the changes reverted. [ Checklist ] [x] all changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in testing Thanks! unblock tokodon/25.04.2-1
Attachment:
tokodon_25.04.0-1.dsc_tokodon_25.04.2-1.dsc.debdiff.gz
Description: application/gzip
diff -ur '--exclude=po' tokodon-25.04.0/CMakeLists.txt tokodon-25.04.2/CMakeLists.txt --- tokodon-25.04.0/CMakeLists.txt 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/CMakeLists.txt 2025-06-03 05:21:40.000000000 +0200 @@ -6,7 +6,7 @@ # KDE Applications version, managed by release script. set(RELEASE_SERVICE_VERSION_MAJOR "25") set(RELEASE_SERVICE_VERSION_MINOR "04") -set(RELEASE_SERVICE_VERSION_MICRO "0") +set(RELEASE_SERVICE_VERSION_MICRO "2") set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") project(tokodon VERSION ${RELEASE_SERVICE_VERSION}) diff -ur '--exclude=po' tokodon-25.04.0/debian/changelog tokodon-25.04.2/debian/changelog --- tokodon-25.04.0/debian/changelog 2025-04-17 22:24:22.000000000 +0200 +++ tokodon-25.04.2/debian/changelog 2025-06-09 23:37:39.000000000 +0200 @@ -1,3 +1,19 @@ +tokodon (25.04.2-1) unstable; urgency=medium + + [ Aurélien COUDERC ] + * New upstream release (25.04.1). + - Clamp contentY when using the PageUp key. (kde#501936) + - Stop registering for push notifications despite them being disabled. + - Print out what the old endpoint was in the warning message. + - Don't spam network error log with push subscription checks. + - Don't bother updating push subscriptions if there is none. + - Remove annual_report from push notification rules. + - Call updatePushNotifications when toggling the notifications checkbox. + * New upstream release (25.04.2). + - ModerationTools: Fix opening some subpages. + + -- Aurélien COUDERC <coucouf@debian.org> Mon, 09 Jun 2025 23:37:39 +0200 + tokodon (25.04.0-1) unstable; urgency=medium [ Aurélien COUDERC ] diff -ur '--exclude=po' tokodon-25.04.0/.gitlab-ci.yml tokodon-25.04.2/.gitlab-ci.yml --- tokodon-25.04.0/.gitlab-ci.yml 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/.gitlab-ci.yml 2025-06-03 05:21:40.000000000 +0200 @@ -6,7 +6,6 @@ file: - /gitlab-templates/reuse-lint.yml - /gitlab-templates/linux-qt6.yml - - /gitlab-templates/linux-qt6-next.yml - /gitlab-templates/freebsd-qt6.yml - /gitlab-templates/android-qt6.yml - /gitlab-templates/craft-android-qt6-apks.yml diff -ur '--exclude=po' tokodon-25.04.0/org.kde.tokodon.appdata.xml tokodon-25.04.2/org.kde.tokodon.appdata.xml --- tokodon-25.04.0/org.kde.tokodon.appdata.xml 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/org.kde.tokodon.appdata.xml 2025-06-03 05:21:40.000000000 +0200 @@ -151,6 +151,8 @@ </screenshot> </screenshots> <releases> + <release version="25.04.2" date="2025-06-05"/> + <release version="25.04.1" date="2025-05-08"/> <release version="25.04.0" date="2025-04-17"/> <release version="24.12.3" date="2025-03-06"/> <release version="24.12.2" date="2025-02-06"/> diff -ur '--exclude=po' tokodon-25.04.0/org.kde.tokodon.desktop tokodon-25.04.2/org.kde.tokodon.desktop --- tokodon-25.04.0/org.kde.tokodon.desktop 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/org.kde.tokodon.desktop 2025-06-03 05:21:40.000000000 +0200 @@ -61,6 +61,7 @@ GenericName[ko]=연합우주 탐색하기 GenericName[lv]=Pārlūkojiet fediversu GenericName[nl]=In de Fediverse bladeren +GenericName[nn]=Bla gjennom Allheimen GenericName[pl]=Przejrzyj Fediverse GenericName[ru]=Просмотр Fediverse GenericName[sa]=Fediverse ब्राउज् कुर्वन्तु diff -ur '--exclude=po' tokodon-25.04.0/snapcraft.yaml tokodon-25.04.2/snapcraft.yaml --- tokodon-25.04.0/snapcraft.yaml 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/snapcraft.yaml 2025-06-03 05:21:40.000000000 +0200 @@ -18,26 +18,39 @@ - audio-record - home - password-manager-service -environment: - ALSA_CONFIG_PATH: "$SNAP/kf6/etc/asound.conf" + environment: + LD_LIBRARY_PATH: "$SNAP/ffmpeg-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$SNAP/kf6/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$LD_LIBRARY_PATH" + PATH: $SNAP/ffmpeg-platform/usr/bin:$SNAP/usr/bin${PATH} + ALSA_CONFIG_PATH: "$SNAP/kf6/etc/asound.conf" + QT_MEDIA_BACKEND: "ffmpeg" + QT_PLUGIN_PATH: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/marble/plugins:/snap/kf6-core24/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/plugins" layout: /usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib: bind: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib +plugs: + ffmpeg-2404: + interface: content + target: ffmpeg-platform # the folder where this content snap will be mounted + default-provider: ffmpeg-2404 slots: session-dbus-interface: interface: dbus name: org.kde.tokodon bus: session -package-repositories: - - type: apt - components: - - main - suites: - - noble - key-id: 444DABCF3667D0283F894EDDE6D4736255751E5D - url: http://origin.archive.neon.kde.org/user - key-server: keyserver.ubuntu.com parts: + kunifiedpush: + source: https://invent.kde.org/libraries/kunifiedpush.git + plugin: cmake + build-packages: + - libssl-dev + build-environment: + - PATH: /snap/bin:${PATH} + - PYTHONPATH: ${CRAFT_STAGE}/lib/python3.12/site-packages:${CRAFT_STAGE}/usr/lib/python3/dist-packages + - LD_LIBRARY_PATH: "/snap/mesa-2404/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$CRAFT_STAGE/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/kde-qt6-core24-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libproxy:$LD_LIBRARY_PATH" + cmake-parameters: + - -DCMAKE_INSTALL_PREFIX=/usr + - -DCMAKE_BUILD_TYPE=Release + - -DBUILD_TESTING=OFF mpvqt: plugin: cmake source: https://invent.kde.org/libraries/mpvqt.git @@ -64,6 +77,7 @@ tokodon: after: - mpvqt + - kunifiedpush parse-info: - usr/share/metainfo/org.kde.tokodon.appdata.xml plugin: cmake @@ -71,6 +85,9 @@ source-type: local build-packages: - libmpv-dev + - libfreetype-dev + build-snaps: + - ffmpeg-2404-sdk stage-packages: - libasound2 - libasound2-data @@ -83,6 +100,8 @@ - gstreamer1.0-plugins-ugly - libblas3 - libsecret-1-0 + - libfreetype6 + - libssl3t64 cmake-parameters: - -DCMAKE_INSTALL_PREFIX=/usr - -DCMAKE_BUILD_TYPE=Release @@ -102,12 +121,9 @@ - -DCMAKE_LIBRARY_PATH=lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR - "-DCMAKE_FIND_ROOT_PATH=$CRAFT_STAGE\\;/snap/kde-qt6-core24-sdk/current\\;/snap/kf6-core24-sdk/current/usr" - "-DCMAKE_PREFIX_PATH=$CRAFT_STAGE\\;/snap/kde-qt6-core24-sdk/current\\;/snap/kf6-core24-sdk/current/usr" - build-environment: &buildenvironment - - PATH: /snap/kde-qt6-core24-sdk/current/usr/bin${PATH:+:$PATH} - - PKG_CONFIG_PATH: /snap/kde-qt6-core24-sdk/current/usr/lib/${CRAFT_ARCH_TRIPLET_BUILD_FOR}/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} - - XDG_DATA_DIRS: $CRAFT_STAGE/usr/share:/snap/kde-qt6-core24-sdk/current/usr/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS} - - XDG_CONFIG_HOME: $CRAFT_STAGE/etc/xdg:/snap/kde-qt6-core24-sdk/current/etc/xdg:/etc/xdg${XDG_CONFIG_HOME:+:$XDG_CONFIG_HOME} - - LD_LIBRARY_PATH: "/snap/kde-qt6-core24-sdk/current/usr/lib/${CRAFT_ARCH_TRIPLET_BUILD_FOR}:/snap/kde-qt6-core24-sdk/current/usr/lib/${CRAFT_ARCH_TRIPLET_BUILD_FOR}/libproxy:/snap/kde-qt6-core24-sdk/current/usr/lib:/snap/kf6-core24-sdk/current/usr/lib/${CRAFT_ARCH_TRIPLET_BUILD_FOR}:/snap/kf6-core24-sdk/current/usr/lib:$CRAFT_STAGE/usr/lib:$CRAFT_STAGE/lib/:$CRAFT_STAGE/usr/lib/${CRAFT_ARCH_TRIPLET_BUILD_FOR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" + build-environment: &build-environment + - PKG_CONFIG_PATH: "$CRAFT_STAGE/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/pkgconfig:/snap/ffmpeg-2404-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/pkgconfig" + - LD_LIBRARY_PATH: "/snap/mesa-2404/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$CRAFT_STAGE/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/ffmpeg-2404-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:/snap/kde-qt6-core24-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libproxy:$LD_LIBRARY_PATH" prime: - -usr/lib/*/cmake/* - -usr/include/* @@ -135,7 +151,7 @@ - kf6-core24 override-prime: | set -eux - for snap in "core24" "kf6-core24"; do + for snap in "core24" "kf6-core24" "ffmpeg-2404"; do cd "/snap/$snap/current" && find . -type f,l -exec rm -rf "${CRAFT_PRIME}/{}" \; done diff -ur '--exclude=po' tokodon-25.04.0/src/account/abstractaccount.h tokodon-25.04.2/src/account/abstractaccount.h --- tokodon-25.04.0/src/account/abstractaccount.h 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/account/abstractaccount.h 2025-06-03 05:21:40.000000000 +0200 @@ -301,12 +301,14 @@ * @param parent The parent object that calls get() or the callback belongs to. * @param callback The callback that should be executed if the request is successful. * @param errorCallback The callback that should be executed if the request is not successful. + * @param fallible Whether the request is okay with failing. If true, also reported in the error log. */ virtual void get(const QUrl &url, bool authenticated, QObject *parent, std::function<void(QNetworkReply *)> callback, - std::function<void(QNetworkReply *)> errorCallback = nullptr) = 0; + std::function<void(QNetworkReply *)> errorCallback = nullptr, + bool fallible = false) = 0; /** * @brief Make an HTTP POST request to the server. diff -ur '--exclude=po' tokodon-25.04.0/src/account/account.cpp tokodon-25.04.2/src/account/account.cpp --- tokodon-25.04.0/src/account/account.cpp 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/account/account.cpp 2025-06-03 05:21:40.000000000 +0200 @@ -49,9 +49,11 @@ bool authenticated, QObject *parent, std::function<void(QNetworkReply *)> reply_cb, - std::function<void(QNetworkReply *)> errorCallback) + std::function<void(QNetworkReply *)> errorCallback, + bool fallible) { QNetworkRequest request = makeRequest(url, authenticated); + request.setAttribute(QNetworkRequest::Attribute::User, fallible); qCDebug(TOKODON_HTTP) << "GET" << url; QNetworkReply *reply = m_qnam->get(request); @@ -178,7 +180,9 @@ { connect(reply, &QNetworkReply::finished, [reply, reply_cb, errorCallback]() { reply->deleteLater(); - if (200 != reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) && !reply->url().toString().contains("nodeinfo"_L1)) { + // these are usually (sometimes meant to be) fallible and end up spamming user logs with these errors + const auto fallible = reply->request().attribute(QNetworkRequest::Attribute::User).toBool(); + if (200 != reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) && !fallible) { NetworkController::instance().logError(reply->url().toString(), reply->errorString()); if (errorCallback) { errorCallback(reply); @@ -318,17 +322,26 @@ Q_EMIT authenticated(true, {}); #ifdef HAVE_KUNIFIEDPUSH + // Query whether or not we have a valid push subscription from the server. get( apiUrl(QStringLiteral("/api/v1/push/subscription")), true, this, [this](QNetworkReply *reply) { + // If the error code is success, then we *do* have a subscription. m_hasPushSubscription = true; const QJsonDocument doc = QJsonDocument::fromJson(reply->readAll()); + // Sometimes - for some reason - we get a successful HTTP code but it's actually an error. Skip! + if (doc.object().contains("error"_L1)) { + m_hasPushSubscription = false; + return; + } + if (!NetworkController::instance().endpoint.isEmpty() && doc["endpoint"_L1] != NetworkController::instance().endpoint) { - qWarning(TOKODON_LOG) << "KUnifiedPush endpoint has changed to" << NetworkController::instance().endpoint << ", resubscribing!"; + qWarning(TOKODON_LOG) << "KUnifiedPush endpoint is now" << NetworkController::instance().endpoint << "and the old one was" + << doc["endpoint"_L1] << "resubscribing!"; deleteResource(apiUrl(QStringLiteral("/api/v1/push/subscription")), true, this, [this](QNetworkReply *reply) { Q_UNUSED(reply) @@ -341,9 +354,11 @@ }, [this](QNetworkReply *reply) { Q_UNUSED(reply); + // Otherwise, no subscription. m_hasPushSubscription = false; - updatePushNotifications(); - }); + }, + true // otherwise it tends to spam your error log + ); #endif }, [this](QNetworkReply *reply) { @@ -536,7 +551,6 @@ addQuery(QStringLiteral("update"), cfg->notifyUpdate()); addQuery(QStringLiteral("admin.sign_up"), cfg->notifySignup()); addQuery(QStringLiteral("admin.report"), cfg->notifyReport()); - addQuery(QStringLiteral("annual_report"), cfg->notifyAnnualReport()); return formdata; } diff -ur '--exclude=po' tokodon-25.04.0/src/account/account.h tokodon-25.04.2/src/account/account.h --- tokodon-25.04.0/src/account/account.h 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/account/account.h 2025-06-03 05:21:40.000000000 +0200 @@ -25,7 +25,8 @@ bool authenticated, QObject *parent, std::function<void(QNetworkReply *)> callback, - std::function<void(QNetworkReply *)> errorCallback = nullptr) override; + std::function<void(QNetworkReply *)> errorCallback = nullptr, + bool fallible = false) override; void post(const QUrl &url, const QJsonDocument &doc, bool authenticated, diff -ur '--exclude=po' tokodon-25.04.0/src/autotests/mockaccount.cpp tokodon-25.04.2/src/autotests/mockaccount.cpp --- tokodon-25.04.0/src/autotests/mockaccount.cpp 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/autotests/mockaccount.cpp 2025-06-03 05:21:40.000000000 +0200 @@ -34,11 +34,13 @@ bool authenticated, QObject *parent, std::function<void(QNetworkReply *)> callback, - std::function<void(QNetworkReply *)> errorCallback) + std::function<void(QNetworkReply *)> errorCallback, + bool fallible) { Q_UNUSED(authenticated) Q_UNUSED(parent) Q_UNUSED(errorCallback) + Q_UNUSED(fallible) if (m_getReplies.contains(url)) { auto reply = m_getReplies[url]; diff -ur '--exclude=po' tokodon-25.04.0/src/autotests/mockaccount.h tokodon-25.04.2/src/autotests/mockaccount.h --- tokodon-25.04.0/src/autotests/mockaccount.h 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/autotests/mockaccount.h 2025-06-03 05:21:40.000000000 +0200 @@ -16,7 +16,8 @@ bool authenticated, QObject *parent, std::function<void(QNetworkReply *)> callback, - std::function<void(QNetworkReply *)> errorCallback = nullptr) override; + std::function<void(QNetworkReply *)> errorCallback = nullptr, + bool fallible = false) override; void post(const QUrl &url, const QJsonDocument &doc, diff -ur '--exclude=po' tokodon-25.04.0/src/content/ui/Components/TimelineView.qml tokodon-25.04.2/src/content/ui/Components/TimelineView.qml --- tokodon-25.04.0/src/content/ui/Components/TimelineView.qml 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/content/ui/Components/TimelineView.qml 2025-06-03 05:21:40.000000000 +0200 @@ -30,6 +30,9 @@ if (event.key === Qt.Key_PageUp && !root.atYBeginning) { event.accepted = true; root.contentY -= height; + if (root.contentY < 0) { + root.contentY = 0; + } } else if (event.key === Qt.Key_PageDown && !root.atYEnd) { event.accepted = true; root.contentY += height; diff -ur '--exclude=po' tokodon-25.04.0/src/content/ui/ModerationTools/AccountToolPage.qml tokodon-25.04.2/src/content/ui/ModerationTools/AccountToolPage.qml --- tokodon-25.04.0/src/content/ui/ModerationTools/AccountToolPage.qml 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/content/ui/ModerationTools/AccountToolPage.qml 2025-06-03 05:21:40.000000000 +0200 @@ -233,7 +233,7 @@ implicitWidth: ListView.view.width Layout.fillWidth: true - onClicked: applicationWindow().pageStack.layers.push(Qt.createComponent("org.kde.tokodon", "MainAccountToolPage"), { + onClicked: root.QQC2.ApplicationWindow.window.pageStack.layers.push(Qt.createComponent("org.kde.tokodon", "MainAccountToolPage"), { identity: delegate.identity, index: delegate.index, model: accountView.model diff -ur '--exclude=po' tokodon-25.04.0/src/content/ui/ModerationTools/FederationToolPage.qml tokodon-25.04.2/src/content/ui/ModerationTools/FederationToolPage.qml --- tokodon-25.04.0/src/content/ui/ModerationTools/FederationToolPage.qml 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/content/ui/ModerationTools/FederationToolPage.qml 2025-06-03 05:21:40.000000000 +0200 @@ -258,7 +258,7 @@ width: ListView.view.width onClicked: if (root.isDomainBlock) { - applicationWindow().pageStack.layers.push(Qt.createComponent("org.kde.tokodon", "MainFederationToolPage"), { + root.QQC2.ApplicationWindow.window.pageStack.layers.push(Qt.createComponent("org.kde.tokodon", "MainFederationToolPage"), { index: delegate.index, model: federationView.model, id: delegate.id, diff -ur '--exclude=po' tokodon-25.04.0/src/content/ui/ModerationTools/IpRulePage.qml tokodon-25.04.2/src/content/ui/ModerationTools/IpRulePage.qml --- tokodon-25.04.0/src/content/ui/ModerationTools/IpRulePage.qml 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/content/ui/ModerationTools/IpRulePage.qml 2025-06-03 05:21:40.000000000 +0200 @@ -163,7 +163,7 @@ width: ListView.view.width - onClicked: applicationWindow().pageStack.layers.push(Qt.createComponent("org.kde.tokodon", "MainIpRulePage"), + onClicked: root.QQC2.ApplicationWindow.window.pageStack.layers.push(Qt.createComponent("org.kde.tokodon", "MainIpRulePage"), { index: delegate.index, model: ipRuleView.model, diff -ur '--exclude=po' tokodon-25.04.0/src/content/ui/Settings/NotificationsPage.qml tokodon-25.04.2/src/content/ui/Settings/NotificationsPage.qml --- tokodon-25.04.0/src/content/ui/Settings/NotificationsPage.qml 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/content/ui/Settings/NotificationsPage.qml 2025-06-03 05:21:40.000000000 +0200 @@ -41,6 +41,7 @@ onToggled: { root.config.enableNotifications = checked; root.saveConfig(); + root.account.updatePushNotifications(); } } } diff -ur '--exclude=po' tokodon-25.04.0/src/tokodon.notifyrc tokodon-25.04.2/src/tokodon.notifyrc --- tokodon-25.04.0/src/tokodon.notifyrc 2025-04-10 05:11:52.000000000 +0200 +++ tokodon-25.04.2/src/tokodon.notifyrc 2025-06-03 05:21:40.000000000 +0200 @@ -649,11 +649,13 @@ Name[fr]=Rapport annuel Name[gl]=Informe anual Name[he]=דוח שנתי +Name[hu]=Éves jelentés Name[it]=Resoconto annuale Name[ka]=წლიური ანგარიში Name[ko]=연간 보고 Name[lv]=Ikgadējais ziņojums Name[nl]=Jaarlijks rapport +Name[nn]=Årsrapport Name[pl]=Roczne sprawozdanie Name[ru]=Годовой отчёт Name[sa]=वार्षिक प्रतिवेदन @@ -675,20 +677,23 @@ Comment[fr]=Dévoilez les moments forts et mémorables de l'année dans le Fediverse ! Comment[gl]=Revele o salientábel e memorábel do seu último ano no Fediverso! Comment[he]=חשיפת הרגעים הבלתי נשכחים מהשנה שחלפה בפדיברס! +Comment[hu]=Mutassa be az év fénypontjait és emlékezetes pillanatait a Fediverse-en! Comment[it]=Scopri i momenti più belli e memorabili del tuo anno sul Fediverso! Comment[ka]=გამოაქვეყნეთ თქვენი წლის მაჩვენებლები და დასამახსოვრებელი მომენტები Fediverse-ზე! Comment[ko]=연합우주에서의 올해의 하이라이트와 기억에 남는 순간을 발견하세요! Comment[lv]=Apskati savus gada Fediversa spilgtākos un atmiņā paliekošākos brīžus! Comment[nl]=Onthul de hoogtepunten en memorabele momenten van uw jaar op Fediverse! +Comment[nn]=Vis årets høgdepunkt og minneverdige augneblink på Allheimen! Comment[pl]=Udostępnij swoje wyróżnione wydarzenia i pamiętne chwile na Fediverse! Comment[ru]=Ваши самые яркие события и незабываемые моменты в Fediverse за год Comment[sa]=Fediverse इत्यत्र स्वस्य वर्षस्य मुख्यविषयाणां स्मरणीयक्षणानाञ्च अनावरणं कुर्वन्तु! Comment[sl]=Razkrijte vrhunce svojega leta in nepozabne trenutke na Fediverse! -Comment[sq]=Zbuloni gjërat në pah dhe çastet e paharrueshme të vitit në Fedivers! +Comment[sq]=Zbuloni kulmet tuaja për vitin dhe çaste të paharrueshme në Fedivers! Comment[sv]=Avslöja årets höjdpunkter och minnesvärda ögonblick på Fediverse. Comment[tr]=Mastodon’da geçtiğimiz yılın önemli noktalarını ve unutulmaz anlarını ortaya çıkarın! Comment[uk]=Ознайомтеся із акцентами року та незабутніми моментами у Fediverse! Comment[x-test]=xxUnveil your year's highlights and memorable moments on the Fediverse!xx +Comment[zh_TW]=發現您今年在聯邦宇宙上的精選與回憶時光吧! Action=Popup [Event/other] @@ -704,16 +709,18 @@ Name[fr]=Autre Name[gl]=Outras Name[he]=אחר +Name[hu]=Egyéb Name[it]=Altro Name[ka]=სხვა Name[ko]=기타 Name[lv]=Citi Name[nl]=Overige +Name[nn]=Andre Name[pl]=Inne Name[ru]=Прочее Name[sa]=अन्ये Name[sl]=Druge -Name[sq]=Të tjera +Name[sq]=Tjetër Name[sv]=Övriga Name[tr]=Diğer Name[uk]=Інше @@ -730,11 +737,13 @@ Comment[fr]=Notifications ne correspondant à aucune autre catégorie Comment[gl]=Notificacións que non casan noutras categorías. Comment[he]=התראות שלא מתאימות לקטגוריות אחרות +Comment[hu]=Más kategóriákba nem illő értesítések Comment[it]=Notifiche che non rientrano in altre categorie Comment[ka]=შეტყობინებები, რომლებიც არ ჯდება სხვა კატეგორიებში Comment[ko]=다른 모든 분류에 포함되지 않는 알림 Comment[lv]=Paziņojumi, kas neietilpst citā kategorijās. Comment[nl]=Meldingen die niet passen in andere categorieën +Comment[nn]=Varslingar som ikkje passar i andre kategoriar Comment[pl]=Powiadomienia, które nie pasują do żadnej z pozostałych kategorii Comment[ru]=Уведомления, которые не попадают в другие категории Comment[sa]=अन्येषु वर्गेषु न उपयुज्यन्ते ये सूचनाः