mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 23:35:44 +00:00
feat(themes): Theme Store install counts, downloads & sort (#1036)
* feat(themes): install counts, downloads, popularity & sort in the Theme Store Each registry theme now carries an install count and a last-changed date. Store rows show them in a dedicated meta panel (author, popularity bar, total downloads, last changed), plus a sort dropdown (most popular / newest / name), zebra-striped rows, a numbered pager, and a note that the stats refresh daily. Adds a shared formatRelativeTime helper (formatLastSeen now delegates to it). * test(themes): cover sort modes, pager jump and relative-time formatting * fix(build): gate nvidia_quirk_active to Linux Its only caller is the Linux branch of theme_animation_risk, so on Windows and macOS the function was dead code and tripped clippy's -D warnings. * docs: CHANGELOG + credits for theme store download stats & sort (#1036)
This commit is contained in:
@@ -329,6 +329,7 @@ export const settings = {
|
||||
themeStoreSubmitText: 'Eigenes Theme gebaut? Teil es mit der Community — mehr Infos im Themes-Repository.',
|
||||
themeStoreSubmitLink: 'Themes-Repository öffnen',
|
||||
themeStoreNetworkNotice: 'Der Theme-Store lädt Katalog und Vorschauen von externen Diensten (jsDelivr-CDN und GitHub). Es werden keine persönlichen Daten gesendet.',
|
||||
themeStoreStatsNotice: 'Download- und „Zuletzt geändert"-Statistiken werden einmal täglich aktualisiert (gegen 04:17 UTC).',
|
||||
themeStoreSearchPlaceholder: 'Themes suchen…',
|
||||
themeStoreFilterMode: 'Nach Modus filtern',
|
||||
themeStoreModeAll: 'Alle',
|
||||
@@ -342,7 +343,13 @@ export const settings = {
|
||||
themeStoreEmpty: 'Keine Themes passen zu deinen Filtern.',
|
||||
themeStoreActive: 'Aktiv',
|
||||
themeStoreEnlarge: 'Vorschau vergrößern',
|
||||
themeStoreByAuthor: 'von {{author}}',
|
||||
themeStoreSortPopular: 'Beliebteste',
|
||||
themeStoreSortNewest: 'Neueste',
|
||||
themeStoreSortName: 'Alphabetisch',
|
||||
themeStoreAuthor: 'Autor',
|
||||
themeStorePopularity: 'Beliebtheit',
|
||||
themeStoreDownloads: 'Downloads gesamt',
|
||||
themeStoreLastChanged: 'Zuletzt geändert',
|
||||
themeMigrationNoticeTitle: 'Theme in den Store gezogen',
|
||||
themeMigrationNoticeBody: '{{themes}} ist nicht mehr in der App enthalten. Du kannst es im Theme-Store neu installieren (Einstellungen → Themes) oder ein anderes Theme wählen.',
|
||||
themeMigrationNoticeOpen: 'Theme-Store öffnen',
|
||||
|
||||
@@ -396,6 +396,7 @@ export const settings = {
|
||||
themeStoreSubmitText: 'Made your own theme? Share it with the community — more info in the themes repository.',
|
||||
themeStoreSubmitLink: 'Open the themes repository',
|
||||
themeStoreNetworkNotice: 'The Theme Store loads its catalogue and previews from external services (the jsDelivr CDN and GitHub). No personal data is sent.',
|
||||
themeStoreStatsNotice: 'Download and last-changed stats refresh once a day (around 04:17 UTC).',
|
||||
themeStoreSearchPlaceholder: 'Search themes…',
|
||||
themeStoreFilterMode: 'Filter by mode',
|
||||
themeStoreModeAll: 'All',
|
||||
@@ -409,7 +410,13 @@ export const settings = {
|
||||
themeStoreEmpty: 'No themes match your filters.',
|
||||
themeStoreActive: 'Active',
|
||||
themeStoreEnlarge: 'Enlarge preview',
|
||||
themeStoreByAuthor: 'by {{author}}',
|
||||
themeStoreSortPopular: 'Most popular',
|
||||
themeStoreSortNewest: 'Newest',
|
||||
themeStoreSortName: 'Alphabetical',
|
||||
themeStoreAuthor: 'Author',
|
||||
themeStorePopularity: 'Popularity',
|
||||
themeStoreDownloads: 'Total downloads',
|
||||
themeStoreLastChanged: 'Last changed',
|
||||
themeMigrationNoticeTitle: 'Theme moved to the Store',
|
||||
themeMigrationNoticeBody: '{{themes}} is no longer bundled with the app. You can reinstall it from the Theme Store (Settings → Themes), or pick another theme.',
|
||||
themeMigrationNoticeOpen: 'Open Theme Store',
|
||||
|
||||
@@ -327,6 +327,7 @@ export const settings = {
|
||||
themeStoreSubmitText: '¿Has creado tu propio tema? Compártelo con la comunidad — más información en el repositorio de temas.',
|
||||
themeStoreSubmitLink: 'Abrir el repositorio de temas',
|
||||
themeStoreNetworkNotice: 'La tienda de temas carga el catálogo y las vistas previas desde servicios externos (la CDN de jsDelivr y GitHub). No se envían datos personales.',
|
||||
themeStoreStatsNotice: 'Las estadísticas de descargas y última modificación se actualizan una vez al día (sobre las 04:17 UTC).',
|
||||
themeStoreSearchPlaceholder: 'Buscar temas…',
|
||||
themeStoreFilterMode: 'Filtrar por modo',
|
||||
themeStoreModeAll: 'Todos',
|
||||
@@ -340,7 +341,13 @@ export const settings = {
|
||||
themeStoreEmpty: 'Ningún tema coincide con tus filtros.',
|
||||
themeStoreActive: 'Activo',
|
||||
themeStoreEnlarge: 'Ampliar vista previa',
|
||||
themeStoreByAuthor: 'por {{author}}',
|
||||
themeStoreSortPopular: 'Más populares',
|
||||
themeStoreSortNewest: 'Más recientes',
|
||||
themeStoreSortName: 'Alfabético',
|
||||
themeStoreAuthor: 'Autor',
|
||||
themeStorePopularity: 'Popularidad',
|
||||
themeStoreDownloads: 'Descargas totales',
|
||||
themeStoreLastChanged: 'Última modificación',
|
||||
themeMigrationNoticeTitle: 'Tema movido a la tienda',
|
||||
themeMigrationNoticeBody: '{{themes}} ya no viene incluido en la app. Puedes reinstalarlo desde la Tienda de Temas (Ajustes → Temas) o elegir otro tema.',
|
||||
themeMigrationNoticeOpen: 'Abrir Tienda de Temas',
|
||||
|
||||
@@ -325,6 +325,7 @@ export const settings = {
|
||||
themeStoreSubmitText: "Vous avez créé votre propre thème ? Partagez-le avec la communauté — plus d'infos dans le dépôt de thèmes.",
|
||||
themeStoreSubmitLink: 'Ouvrir le dépôt de thèmes',
|
||||
themeStoreNetworkNotice: 'Le Theme Store charge son catalogue et ses aperçus depuis des services externes (le CDN jsDelivr et GitHub). Aucune donnée personnelle n’est envoyée.',
|
||||
themeStoreStatsNotice: 'Les statistiques de téléchargements et de dernière modification sont actualisées une fois par jour (vers 04h17 UTC).',
|
||||
themeStoreSearchPlaceholder: 'Rechercher des thèmes…',
|
||||
themeStoreFilterMode: 'Filtrer par mode',
|
||||
themeStoreModeAll: 'Tous',
|
||||
@@ -338,7 +339,13 @@ export const settings = {
|
||||
themeStoreEmpty: 'Aucun thème ne correspond à vos filtres.',
|
||||
themeStoreActive: 'Actif',
|
||||
themeStoreEnlarge: "Agrandir l'aperçu",
|
||||
themeStoreByAuthor: 'par {{author}}',
|
||||
themeStoreSortPopular: 'Les plus populaires',
|
||||
themeStoreSortNewest: 'Plus récents',
|
||||
themeStoreSortName: 'Alphabétique',
|
||||
themeStoreAuthor: 'Auteur',
|
||||
themeStorePopularity: 'Popularité',
|
||||
themeStoreDownloads: 'Téléchargements totaux',
|
||||
themeStoreLastChanged: 'Dernière modification',
|
||||
themeMigrationNoticeTitle: 'Thème déplacé vers la boutique',
|
||||
themeMigrationNoticeBody: "{{themes}} n'est plus inclus dans l'application. Vous pouvez le réinstaller depuis la boutique de thèmes (Paramètres → Thèmes) ou choisir un autre thème.",
|
||||
themeMigrationNoticeOpen: 'Ouvrir la boutique de thèmes',
|
||||
|
||||
@@ -328,6 +328,7 @@ export const settings = {
|
||||
themeStoreSubmitText: 'Laget ditt eget tema? Del det med fellesskapet — mer info i tema-repoet.',
|
||||
themeStoreSubmitLink: 'Åpne tema-repoet',
|
||||
themeStoreNetworkNotice: 'Theme Store laster katalogen og forhåndsvisninger fra eksterne tjenester (jsDelivr-CDN og GitHub). Ingen personopplysninger sendes.',
|
||||
themeStoreStatsNotice: 'Statistikk for nedlastinger og sist endret oppdateres én gang om dagen (rundt 04:17 UTC).',
|
||||
themeStoreSearchPlaceholder: 'Søk i temaer…',
|
||||
themeStoreFilterMode: 'Filtrer etter modus',
|
||||
themeStoreModeAll: 'Alle',
|
||||
@@ -341,7 +342,13 @@ export const settings = {
|
||||
themeStoreEmpty: 'Ingen temaer samsvarer med filtrene dine.',
|
||||
themeStoreActive: 'Aktiv',
|
||||
themeStoreEnlarge: 'Forstørr forhåndsvisning',
|
||||
themeStoreByAuthor: 'av {{author}}',
|
||||
themeStoreSortPopular: 'Mest populære',
|
||||
themeStoreSortNewest: 'Nyeste',
|
||||
themeStoreSortName: 'Alfabetisk',
|
||||
themeStoreAuthor: 'Forfatter',
|
||||
themeStorePopularity: 'Popularitet',
|
||||
themeStoreDownloads: 'Totalt nedlastinger',
|
||||
themeStoreLastChanged: 'Sist endret',
|
||||
themeMigrationNoticeTitle: 'Temaet er flyttet til butikken',
|
||||
themeMigrationNoticeBody: '{{themes}} følger ikke lenger med appen. Du kan installere det på nytt fra temabutikken (Innstillinger → Temaer), eller velge et annet tema.',
|
||||
themeMigrationNoticeOpen: 'Åpne temabutikken',
|
||||
|
||||
@@ -325,6 +325,7 @@ export const settings = {
|
||||
themeStoreSubmitText: 'Eigen thema gemaakt? Deel het met de community — meer info in de themarepository.',
|
||||
themeStoreSubmitLink: 'Themarepository openen',
|
||||
themeStoreNetworkNotice: 'De Theme Store laadt de catalogus en previews van externe diensten (de jsDelivr-CDN en GitHub). Er worden geen persoonlijke gegevens verzonden.',
|
||||
themeStoreStatsNotice: 'Download- en laatst-gewijzigd-statistieken worden eenmaal per dag bijgewerkt (rond 04:17 UTC).',
|
||||
themeStoreSearchPlaceholder: "Thema's zoeken…",
|
||||
themeStoreFilterMode: 'Filteren op modus',
|
||||
themeStoreModeAll: 'Alle',
|
||||
@@ -338,7 +339,13 @@ export const settings = {
|
||||
themeStoreEmpty: "Geen thema's komen overeen met je filters.",
|
||||
themeStoreActive: 'Actief',
|
||||
themeStoreEnlarge: 'Voorbeeld vergroten',
|
||||
themeStoreByAuthor: 'door {{author}}',
|
||||
themeStoreSortPopular: 'Populairste',
|
||||
themeStoreSortNewest: 'Nieuwste',
|
||||
themeStoreSortName: 'Alfabetisch',
|
||||
themeStoreAuthor: 'Auteur',
|
||||
themeStorePopularity: 'Populariteit',
|
||||
themeStoreDownloads: 'Totaal downloads',
|
||||
themeStoreLastChanged: 'Laatst gewijzigd',
|
||||
themeMigrationNoticeTitle: 'Thema verplaatst naar de store',
|
||||
themeMigrationNoticeBody: '{{themes}} wordt niet meer met de app meegeleverd. Je kunt het opnieuw installeren via de Theme Store (Instellingen → Thema\'s) of een ander thema kiezen.',
|
||||
themeMigrationNoticeOpen: 'Theme Store openen',
|
||||
|
||||
@@ -331,6 +331,7 @@ export const settings = {
|
||||
themeStoreSubmitText: 'Ți-ai creat propria temă? Împărtășește-o cu comunitatea — mai multe informații în depozitul de teme.',
|
||||
themeStoreSubmitLink: 'Deschide depozitul de teme',
|
||||
themeStoreNetworkNotice: 'Theme Store încarcă catalogul și previzualizările de la servicii externe (CDN-ul jsDelivr și GitHub). Nu se trimit date personale.',
|
||||
themeStoreStatsNotice: 'Statisticile de descărcări și ultima modificare se actualizează o dată pe zi (în jurul orei 04:17 UTC).',
|
||||
themeStoreSearchPlaceholder: 'Caută teme…',
|
||||
themeStoreFilterMode: 'Filtrează după mod',
|
||||
themeStoreModeAll: 'Toate',
|
||||
@@ -344,7 +345,13 @@ export const settings = {
|
||||
themeStoreEmpty: 'Nicio temă nu corespunde filtrelor tale.',
|
||||
themeStoreActive: 'Activă',
|
||||
themeStoreEnlarge: 'Mărește previzualizarea',
|
||||
themeStoreByAuthor: 'de {{author}}',
|
||||
themeStoreSortPopular: 'Cele mai populare',
|
||||
themeStoreSortNewest: 'Cele mai noi',
|
||||
themeStoreSortName: 'Alfabetic',
|
||||
themeStoreAuthor: 'Autor',
|
||||
themeStorePopularity: 'Popularitate',
|
||||
themeStoreDownloads: 'Descărcări totale',
|
||||
themeStoreLastChanged: 'Ultima modificare',
|
||||
themeMigrationNoticeTitle: 'Tema a fost mutată în magazin',
|
||||
themeMigrationNoticeBody: '{{themes}} nu mai este inclusă în aplicație. O poți reinstala din Magazinul de Teme (Setări → Teme) sau poți alege altă temă.',
|
||||
themeMigrationNoticeOpen: 'Deschide Magazinul de Teme',
|
||||
|
||||
@@ -407,6 +407,7 @@ export const settings = {
|
||||
themeStoreSubmitText: 'Создали свою тему? Поделитесь с сообществом — подробности в репозитории тем.',
|
||||
themeStoreSubmitLink: 'Открыть репозиторий тем',
|
||||
themeStoreNetworkNotice: 'Магазин тем загружает каталог и превью с внешних сервисов (CDN jsDelivr и GitHub). Личные данные не отправляются.',
|
||||
themeStoreStatsNotice: 'Статистика загрузок и даты изменения обновляются раз в день (около 04:17 UTC).',
|
||||
themeStoreSearchPlaceholder: 'Поиск тем…',
|
||||
themeStoreFilterMode: 'Фильтр по режиму',
|
||||
themeStoreModeAll: 'Все',
|
||||
@@ -420,7 +421,13 @@ export const settings = {
|
||||
themeStoreEmpty: 'Нет тем, соответствующих фильтрам.',
|
||||
themeStoreActive: 'Активна',
|
||||
themeStoreEnlarge: 'Увеличить превью',
|
||||
themeStoreByAuthor: 'от {{author}}',
|
||||
themeStoreSortPopular: 'Популярные',
|
||||
themeStoreSortNewest: 'Новые',
|
||||
themeStoreSortName: 'По алфавиту',
|
||||
themeStoreAuthor: 'Автор',
|
||||
themeStorePopularity: 'Популярность',
|
||||
themeStoreDownloads: 'Всего загрузок',
|
||||
themeStoreLastChanged: 'Изменён',
|
||||
themeMigrationNoticeTitle: 'Тема перенесена в магазин',
|
||||
themeMigrationNoticeBody: '{{themes}} больше не входит в приложение. Вы можете переустановить её из магазина тем (Настройки → Темы) или выбрать другую тему.',
|
||||
themeMigrationNoticeOpen: 'Открыть магазин тем',
|
||||
|
||||
@@ -324,6 +324,7 @@ export const settings = {
|
||||
themeStoreSubmitText: '做了自己的主题?与社区分享——更多信息见主题仓库。',
|
||||
themeStoreSubmitLink: '打开主题仓库',
|
||||
themeStoreNetworkNotice: '主题商店从外部服务(jsDelivr CDN 和 GitHub)加载目录和预览。不会发送任何个人数据。',
|
||||
themeStoreStatsNotice: '下载量和最后更新时间等统计数据每天更新一次(约 04:17 UTC)。',
|
||||
themeStoreSearchPlaceholder: '搜索主题…',
|
||||
themeStoreFilterMode: '按模式筛选',
|
||||
themeStoreModeAll: '全部',
|
||||
@@ -337,7 +338,13 @@ export const settings = {
|
||||
themeStoreEmpty: '没有符合筛选条件的主题。',
|
||||
themeStoreActive: '使用中',
|
||||
themeStoreEnlarge: '放大预览',
|
||||
themeStoreByAuthor: '作者:{{author}}',
|
||||
themeStoreSortPopular: '最受欢迎',
|
||||
themeStoreSortNewest: '最新',
|
||||
themeStoreSortName: '按字母',
|
||||
themeStoreAuthor: '作者',
|
||||
themeStorePopularity: '热门度',
|
||||
themeStoreDownloads: '总下载量',
|
||||
themeStoreLastChanged: '最后更新',
|
||||
themeMigrationNoticeTitle: '主题已移至商店',
|
||||
themeMigrationNoticeBody: '{{themes}} 不再内置于应用中。你可以在主题商店(设置 → 主题)重新安装,或选择其他主题。',
|
||||
themeMigrationNoticeOpen: '打开主题商店',
|
||||
|
||||
Reference in New Issue
Block a user