From fa90decdd155a3f7308baa76bc6a450a0bbb6025 Mon Sep 17 00:00:00 2001 From: crowdin Date: Fri, 4 Nov 2022 11:03:24 +0000 Subject: [PATCH] chore(i18n): new Crowdin updates --- app/Language/de/Podcast.php | 12 +- app/Language/nn-NO/Common.php | 2 +- app/Language/nn-NO/Podcast.php | 16 +- app/Language/sv/Comment.php | 32 +- app/Language/sv/Common.php | 30 +- app/Language/sv/Episode.php | 30 +- app/Language/sv/Fediverse.php | 34 +- app/Language/sv/Home.php | 12 +- app/Language/sv/Page.php | 6 +- app/Language/sv/Podcast.php | 52 +- app/Language/sv/Post.php | 40 +- docs/src/ar/getting-started/auth.md | 87 ++++ docs/src/ar/getting-started/docker.md | 35 +- docs/src/br/getting-started/auth.md | 87 ++++ docs/src/br/getting-started/docker.md | 35 +- docs/src/ca/getting-started/auth.md | 87 ++++ docs/src/ca/getting-started/docker.md | 41 +- docs/src/ca/index.md | 4 +- docs/src/de/getting-started/auth.md | 87 ++++ docs/src/de/getting-started/docker.md | 35 +- docs/src/de/getting-started/install.md | 2 + docs/src/el/getting-started/auth.md | 87 ++++ docs/src/el/getting-started/docker.md | 35 +- docs/src/es/getting-started/auth.md | 87 ++++ docs/src/es/getting-started/docker.md | 43 +- docs/src/es/getting-started/install.md | 11 +- docs/src/es/getting-started/update.md | 8 +- docs/src/es/index.md | 2 +- docs/src/fa/getting-started/auth.md | 87 ++++ docs/src/fa/getting-started/docker.md | 35 +- docs/src/fr/getting-started/auth.md | 87 ++++ docs/src/fr/getting-started/docker.md | 35 +- docs/src/gd/getting-started/auth.md | 87 ++++ docs/src/gd/getting-started/docker.md | 35 +- docs/src/gd/index.md | 5 + docs/src/gl/getting-started/auth.md | 87 ++++ docs/src/gl/getting-started/docker.md | 35 +- docs/src/id/getting-started/auth.md | 87 ++++ docs/src/id/getting-started/docker.md | 35 +- docs/src/it/getting-started/auth.md | 87 ++++ docs/src/it/getting-started/docker.md | 35 +- docs/src/ko/getting-started/auth.md | 87 ++++ docs/src/ko/getting-started/docker.md | 35 +- docs/src/nl/getting-started/auth.md | 87 ++++ docs/src/nl/getting-started/docker.md | 35 +- docs/src/nn-NO/getting-started/auth.md | 87 ++++ docs/src/nn-NO/getting-started/docker.md | 35 +- docs/src/nn-NO/index.md | 5 + docs/src/oc/getting-started/auth.md | 87 ++++ docs/src/oc/getting-started/docker.md | 35 +- docs/src/oc/index.md | 5 + docs/src/pl/getting-started/auth.md | 87 ++++ docs/src/pl/getting-started/docker.md | 35 +- docs/src/pt-BR/getting-started/auth.md | 87 ++++ docs/src/pt-BR/getting-started/docker.md | 35 +- docs/src/pt-BR/getting-started/install.md | 2 + docs/src/pt/getting-started/auth.md | 87 ++++ docs/src/pt/getting-started/docker.md | 35 +- docs/src/pt/getting-started/install.md | 2 + docs/src/ru/getting-started/auth.md | 87 ++++ docs/src/ru/getting-started/docker.md | 35 +- docs/src/ru/getting-started/install.md | 2 + docs/src/sk/getting-started/auth.md | 87 ++++ docs/src/sk/getting-started/docker.md | 35 +- docs/src/sv/getting-started/auth.md | 87 ++++ docs/src/sv/getting-started/docker.md | 99 ++-- docs/src/sv/getting-started/install.md | 173 +++---- docs/src/sv/getting-started/security.md | 26 +- docs/src/sv/getting-started/update.md | 111 ++-- docs/src/sv/index.md | 356 ++++++------- docs/src/zh-Hans/getting-started/auth.md | 87 ++++ docs/src/zh-Hans/getting-started/docker.md | 41 +- docs/src/zh-Hans/getting-started/install.md | 2 + docs/src/zh-Hans/getting-started/update.md | 75 ++- docs/src/zh-Hans/index.md | 10 +- modules/Admin/Language/de/AboutCastopod.php | 16 +- modules/Admin/Language/de/Breadcrumb.php | 12 +- modules/Admin/Language/de/Charts.php | 4 +- modules/Admin/Language/de/Dashboard.php | 18 +- modules/Admin/Language/de/Episode.php | 52 +- modules/Admin/Language/de/Navigation.php | 2 +- modules/Admin/Language/de/Notifications.php | 14 +- modules/Admin/Language/de/Person.php | 2 +- modules/Admin/Language/de/Podcast.php | 44 +- modules/Admin/Language/de/PodcastImport.php | 2 +- .../Admin/Language/de/PodcastNavigation.php | 4 +- modules/Admin/Language/de/Settings.php | 6 +- modules/Admin/Language/gl/AboutCastopod.php | 16 +- modules/Admin/Language/gl/Breadcrumb.php | 10 +- modules/Admin/Language/gl/Episode.php | 16 +- modules/Admin/Language/sk/Breadcrumb.php | 10 +- modules/Admin/Language/sk/Countries.php | 112 +++-- modules/Admin/Language/sk/Episode.php | 64 +-- .../Admin/Language/sk/EpisodeNavigation.php | 2 +- modules/Admin/Language/sv/AboutCastopod.php | 12 +- modules/Admin/Language/sv/Breadcrumb.php | 76 +-- modules/Admin/Language/sv/Charts.php | 52 +- modules/Admin/Language/sv/Common.php | 62 +-- modules/Admin/Language/sv/Countries.php | 282 +++++------ modules/Admin/Language/sv/Dashboard.php | 18 +- modules/Admin/Language/sv/Episode.php | 292 +++++------ .../Admin/Language/sv/EpisodeNavigation.php | 22 +- modules/Admin/Language/sv/Fediverse.php | 28 +- modules/Admin/Language/sv/Home.php | 4 +- modules/Admin/Language/sv/Install.php | 56 +-- modules/Admin/Language/sv/Navigation.php | 52 +- modules/Admin/Language/sv/Notifications.php | 14 +- modules/Admin/Language/sv/Page.php | 28 +- modules/Admin/Language/sv/Pager.php | 18 +- modules/Admin/Language/sv/Person.php | 74 +-- modules/Admin/Language/sv/Platforms.php | 26 +- modules/Admin/Language/sv/Podcast.php | 472 +++++++++--------- modules/Admin/Language/sv/PodcastImport.php | 36 +- .../Admin/Language/sv/PodcastNavigation.php | 50 +- modules/Admin/Language/sv/Settings.php | 72 +-- modules/Admin/Language/sv/Soundbite.php | 26 +- modules/Admin/Language/sv/Validation.php | 4 +- modules/Admin/Language/sv/VideoClip.php | 86 ++-- .../Admin/Language/zh-Hans/AboutCastopod.php | 16 +- modules/Admin/Language/zh-Hans/Breadcrumb.php | 6 +- modules/Admin/Language/zh-Hans/Episode.php | 14 +- modules/Admin/Language/zh-Hans/Navigation.php | 2 +- modules/Auth/Language/ar/Auth.php | 1 + modules/Auth/Language/ar/Contributor.php | 10 +- modules/Auth/Language/ar/User.php | 15 +- modules/Auth/Language/br/Auth.php | 1 + modules/Auth/Language/br/Contributor.php | 10 +- modules/Auth/Language/br/User.php | 15 +- modules/Auth/Language/ca/Auth.php | 1 + modules/Auth/Language/ca/Contributor.php | 10 +- modules/Auth/Language/ca/User.php | 15 +- modules/Auth/Language/de/Auth.php | 59 +-- modules/Auth/Language/de/Contributor.php | 10 +- modules/Auth/Language/de/User.php | 15 +- modules/Auth/Language/el/Auth.php | 1 + modules/Auth/Language/el/Contributor.php | 10 +- modules/Auth/Language/el/User.php | 15 +- modules/Auth/Language/es/Auth.php | 1 + modules/Auth/Language/es/Contributor.php | 10 +- modules/Auth/Language/es/User.php | 15 +- modules/Auth/Language/fa/Auth.php | 1 + modules/Auth/Language/fa/Contributor.php | 10 +- modules/Auth/Language/fa/User.php | 15 +- modules/Auth/Language/fr/Auth.php | 1 + modules/Auth/Language/fr/Contributor.php | 10 +- modules/Auth/Language/fr/User.php | 15 +- modules/Auth/Language/gd/Auth.php | 1 + modules/Auth/Language/gd/Contributor.php | 10 +- modules/Auth/Language/gd/User.php | 15 +- modules/Auth/Language/gl/Auth.php | 1 + modules/Auth/Language/gl/Contributor.php | 10 +- modules/Auth/Language/gl/User.php | 15 +- modules/Auth/Language/id/Auth.php | 1 + modules/Auth/Language/id/Contributor.php | 10 +- modules/Auth/Language/id/User.php | 15 +- modules/Auth/Language/it/Auth.php | 1 + modules/Auth/Language/it/Contributor.php | 10 +- modules/Auth/Language/it/User.php | 15 +- modules/Auth/Language/ko/Auth.php | 1 + modules/Auth/Language/ko/Contributor.php | 47 ++ modules/Auth/Language/ko/MyAccount.php | 18 + modules/Auth/Language/ko/User.php | 60 +++ modules/Auth/Language/nl/Auth.php | 1 + modules/Auth/Language/nl/Contributor.php | 10 +- modules/Auth/Language/nl/User.php | 15 +- modules/Auth/Language/nn-NO/Auth.php | 1 + modules/Auth/Language/nn-NO/Contributor.php | 10 +- modules/Auth/Language/nn-NO/User.php | 15 +- modules/Auth/Language/oc/Auth.php | 1 + modules/Auth/Language/oc/Contributor.php | 10 +- modules/Auth/Language/oc/User.php | 15 +- modules/Auth/Language/pl/Auth.php | 1 + modules/Auth/Language/pl/Contributor.php | 10 +- modules/Auth/Language/pl/User.php | 15 +- modules/Auth/Language/pt-BR/Auth.php | 1 + modules/Auth/Language/pt-BR/Contributor.php | 10 +- modules/Auth/Language/pt-BR/User.php | 15 +- modules/Auth/Language/pt/Auth.php | 1 + modules/Auth/Language/pt/Contributor.php | 10 +- modules/Auth/Language/pt/User.php | 15 +- modules/Auth/Language/ru/Auth.php | 1 + modules/Auth/Language/ru/Contributor.php | 10 +- modules/Auth/Language/ru/User.php | 15 +- modules/Auth/Language/sk/Auth.php | 1 + modules/Auth/Language/sk/Contributor.php | 10 +- modules/Auth/Language/sk/User.php | 15 +- modules/Auth/Language/sv/Auth.php | 97 ++-- modules/Auth/Language/sv/Contributor.php | 10 +- modules/Auth/Language/sv/User.php | 15 +- modules/Auth/Language/zh-Hans/Auth.php | 101 ++-- modules/Auth/Language/zh-Hans/Contributor.php | 10 +- modules/Auth/Language/zh-Hans/User.php | 15 +- modules/Install/Language/sv/Install.php | 56 +-- .../Language/de/Subscription.php | 54 +- .../Language/sv/PremiumPodcasts.php | 36 +- .../Language/sv/Subscription.php | 142 +++--- 196 files changed, 5321 insertions(+), 2182 deletions(-) create mode 100644 docs/src/ar/getting-started/auth.md create mode 100644 docs/src/br/getting-started/auth.md create mode 100644 docs/src/ca/getting-started/auth.md create mode 100644 docs/src/de/getting-started/auth.md create mode 100644 docs/src/el/getting-started/auth.md create mode 100644 docs/src/es/getting-started/auth.md create mode 100644 docs/src/fa/getting-started/auth.md create mode 100644 docs/src/fr/getting-started/auth.md create mode 100644 docs/src/gd/getting-started/auth.md create mode 100644 docs/src/gl/getting-started/auth.md create mode 100644 docs/src/id/getting-started/auth.md create mode 100644 docs/src/it/getting-started/auth.md create mode 100644 docs/src/ko/getting-started/auth.md create mode 100644 docs/src/nl/getting-started/auth.md create mode 100644 docs/src/nn-NO/getting-started/auth.md create mode 100644 docs/src/oc/getting-started/auth.md create mode 100644 docs/src/pl/getting-started/auth.md create mode 100644 docs/src/pt-BR/getting-started/auth.md create mode 100644 docs/src/pt/getting-started/auth.md create mode 100644 docs/src/ru/getting-started/auth.md create mode 100644 docs/src/sk/getting-started/auth.md create mode 100644 docs/src/sv/getting-started/auth.md create mode 100644 docs/src/zh-Hans/getting-started/auth.md create mode 100644 modules/Auth/Language/ko/Contributor.php create mode 100644 modules/Auth/Language/ko/MyAccount.php create mode 100644 modules/Auth/Language/ko/User.php diff --git a/app/Language/de/Podcast.php b/app/Language/de/Podcast.php index d4f19356..238b680d 100644 --- a/app/Language/de/Podcast.php +++ b/app/Language/de/Podcast.php @@ -18,12 +18,12 @@ return [ 'follow' => 'Folgen', 'followTitle' => 'Folge {actorDisplayName} im Fediversum', 'followers' => '{numberOfFollowers, plural, - one {# follower} - other {# followers} + one {# Follower} + other {# Follower} }', 'posts' => '{numberOfPosts, plural, - one {# post} - other {# posts} + one {# Beitrag} + other {# Beiträge} }', 'activity' => 'Aktivitäten', 'episodes' => 'Episoden', @@ -32,8 +32,8 @@ return [ 'stats' => [ 'title' => 'Statistiken', 'number_of_seasons' => '{0, plural, - one {# season} - other {# seasons} + one {# Staffel} + other {# Staffeln} }', 'number_of_episodes' => '{0, plural, one {# Episode} diff --git a/app/Language/nn-NO/Common.php b/app/Language/nn-NO/Common.php index d772c042..47310aef 100644 --- a/app/Language/nn-NO/Common.php +++ b/app/Language/nn-NO/Common.php @@ -26,5 +26,5 @@ return [ 'read_less' => 'Les mindre', 'see_more' => 'Sjå meir', 'see_less' => 'Sjå mindre', - 'legal_notice' => 'Legal notice', + 'legal_notice' => 'Juridisk merknad', ]; diff --git a/app/Language/nn-NO/Podcast.php b/app/Language/nn-NO/Podcast.php index ec81b1af..7f3b760f 100644 --- a/app/Language/nn-NO/Podcast.php +++ b/app/Language/nn-NO/Podcast.php @@ -18,12 +18,12 @@ return [ 'follow' => 'Fylg', 'followTitle' => 'Fylg {actorDisplayName} på fødiverset!', 'followers' => '{numberOfFollowers, plural, - one {# follower} - other {# followers} + one {# fylgjar} + other {# fylgjarar} }', 'posts' => '{numberOfPosts, plural, - one {# post} - other {# posts} + one {# innlegg} + other {# innlegg} }', 'activity' => 'Aktivitet', 'episodes' => 'Episodar', @@ -32,14 +32,14 @@ return [ 'stats' => [ 'title' => 'Statistikk', 'number_of_seasons' => '{0, plural, - one {# season} - other {# seasons} + one {# sesong} + other {# sesongar} }', 'number_of_episodes' => '{0, plural, one {# episode} - other {# episodes} + other {# episodar} }', - 'first_published_at' => 'First episode published on {0, date, medium}', + 'first_published_at' => 'Den fyrste episoden vart utgjeven {0, date, medium}', ], 'sponsor' => 'Sponsor', 'funding_links' => 'Finansieringslenker for {podcastTitle}', diff --git a/app/Language/sv/Comment.php b/app/Language/sv/Comment.php index 1dd8f5ea..5b619a3a 100644 --- a/app/Language/sv/Comment.php +++ b/app/Language/sv/Comment.php @@ -9,26 +9,26 @@ declare(strict_types=1); */ return [ - 'title' => "{actorDisplayName}'s comment for {episodeTitle}", - 'back_to_comments' => 'Back to comments', + 'title' => "{actorDisplayName}s kommentar till {episodeTitle}", + 'back_to_comments' => 'Tillbaka till kommentarer', 'form' => [ - 'episode_message_placeholder' => 'Write a comment…', - 'reply_to_placeholder' => 'Reply to @{actorUsername}', - 'submit' => 'Send', - 'submit_reply' => 'Reply', + 'episode_message_placeholder' => 'Skriv en kommentar…', + 'reply_to_placeholder' => 'Svara på @{actorUsername}', + 'submit' => 'Skicka', + 'submit_reply' => 'Svara', ], 'likes' => '{numberOfLikes, plural, - one {# like} - other {# likes} + one {# gillar} + other {# gillar} }', 'replies' => '{numberOfReplies, plural, - one {# reply} - other {# replies} + one {# svar} + other {# svar} }', - 'like' => 'Like', - 'reply' => 'Reply', - 'view_replies' => 'View replies ({numberOfReplies})', - 'block_actor' => 'Block user @{actorUsername}', - 'block_domain' => 'Block domain @{actorDomain}', - 'delete' => 'Delete comment', + 'like' => 'Gilla', + 'reply' => 'Svara', + 'view_replies' => 'Visa svar ({numberOfReplies})', + 'block_actor' => 'Blockera användare @{actorUsername}', + 'block_domain' => 'Blockera domän @{actorDomain}', + 'delete' => 'Radera kommentar', ]; diff --git a/app/Language/sv/Common.php b/app/Language/sv/Common.php index 1258afcc..c173b343 100644 --- a/app/Language/sv/Common.php +++ b/app/Language/sv/Common.php @@ -9,22 +9,22 @@ declare(strict_types=1); */ return [ - 'yes' => 'Yes', - 'no' => 'No', - 'cancel' => 'Cancel', - 'optional' => 'Optional', - 'close' => 'Close', - 'home' => 'Home', + 'yes' => 'Ja', + 'no' => 'Nej', + 'cancel' => 'Avbryt', + 'optional' => 'Valfritt', + 'close' => 'Stäng', + 'home' => 'Hem', 'explicit' => 'Explicit', - 'powered_by' => 'Powered by {castopod}', - 'go_back' => 'Go back', + 'powered_by' => 'Drivs av {castopod}', + 'go_back' => 'Gå tillbaka', 'play_episode_button' => [ - 'play' => 'Play', - 'playing' => 'Playing', + 'play' => 'Spela', + 'playing' => 'Spelar', ], - 'read_more' => 'Read more', - 'read_less' => 'Read less', - 'see_more' => 'See more', - 'see_less' => 'See less', - 'legal_notice' => 'Legal notice', + 'read_more' => 'Läs mer', + 'read_less' => 'Läs mindre', + 'see_more' => 'Se mer', + 'see_less' => 'Se mindre', + 'legal_notice' => 'Villkor', ]; diff --git a/app/Language/sv/Episode.php b/app/Language/sv/Episode.php index ebe39336..3571750c 100644 --- a/app/Language/sv/Episode.php +++ b/app/Language/sv/Episode.php @@ -9,25 +9,25 @@ declare(strict_types=1); */ return [ - 'season' => 'Season {seasonNumber}', + 'season' => 'Säsong {seasonNumber}', 'season_abbr' => 'S{seasonNumber}', - 'number' => 'Episode {episodeNumber}', - 'number_abbr' => 'Ep. {episodeNumber}', - 'season_episode' => 'Season {seasonNumber} episode {episodeNumber}', - 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}', + 'number' => 'Avsnitt {episodeNumber}', + 'number_abbr' => 'Av. {episodeNumber}', + 'season_episode' => 'Säsong {seasonNumber} avsnitt {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}:A{episodeNumber}', 'persons' => '{personsCount, plural, one {# person} - other {# persons} + other {# personer} }', - 'persons_list' => 'Persons', - 'back_to_episodes' => 'Back to episodes of {podcast}', - 'comments' => 'Comments', - 'activity' => 'Activity', - 'description' => 'Episode description', + 'persons_list' => 'Personer', + 'back_to_episodes' => 'Tillbaka till avsnitten av {podcast}', + 'comments' => 'Kommentarer', + 'activity' => 'Aktivitet', + 'description' => 'Beskrivning av avsnitt', 'number_of_comments' => '{numberOfComments, plural, - one {# comment} - other {# comments} + one {# kommentar} + other {# kommentarer} }', - 'all_podcast_episodes' => 'All podcast episodes', - 'back_to_podcast' => 'Go back to podcast', + 'all_podcast_episodes' => 'Alla podcast avsnitt', + 'back_to_podcast' => 'Gå tillbaka till podcasten', ]; diff --git a/app/Language/sv/Fediverse.php b/app/Language/sv/Fediverse.php index 32f54c07..162260ec 100644 --- a/app/Language/sv/Fediverse.php +++ b/app/Language/sv/Fediverse.php @@ -9,29 +9,29 @@ declare(strict_types=1); */ return [ - 'your_handle' => 'Your handle', - 'your_handle_hint' => 'Enter the @username@domain you want to act from.', + 'your_handle' => 'Ditt handtag', + 'your_handle_hint' => 'Ange @användarnamn@domän som du vill agera från.', 'follow' => [ - 'label' => 'Follow', - 'title' => 'Follow {actorDisplayName}', - 'subtitle' => 'You are going to follow:', - 'accountNotFound' => 'The account could not be found.', - 'remoteFollowNotAllowed' => 'Seems like the account server does not allow remote follows…', - 'submit' => 'Proceed to follow', + 'label' => 'Följ', + 'title' => 'Följ {actorDisplayName}', + 'subtitle' => 'Du kommer att följa:', + 'accountNotFound' => 'Det gick inte att hitta kontot.', + 'remoteFollowNotAllowed' => 'Verkar som om kontots server inte tillåter fjärråtkomst följare…', + 'submit' => 'Fortsätt för att följa', ], 'favourite' => [ - 'title' => "Favourite {actorDisplayName}'s post", - 'subtitle' => 'You are going to favourite:', - 'submit' => 'Proceed to favourite', + 'title' => "Favorit {actorDisplayName}s inlägg", + 'subtitle' => 'Du kommer att favorisera:', + 'submit' => 'Fortsätt för att favorisera', ], 'reblog' => [ - 'title' => "Share {actorDisplayName}'s post", - 'subtitle' => 'You are going to share:', - 'submit' => 'Proceed to share', + 'title' => "Dela {actorDisplayName}s inlägg", + 'subtitle' => 'Du kommer att dela:', + 'submit' => 'Fortsätt för att dela', ], 'reply' => [ - 'title' => "Reply to {actorDisplayName}'s post", - 'subtitle' => 'You are going to reply to:', - 'submit' => 'Proceed to reply', + 'title' => "Svara på {actorDisplayName}s inlägg", + 'subtitle' => 'Du kommer att svara på:', + 'submit' => 'Fortsätt för att svara', ], ]; diff --git a/app/Language/sv/Home.php b/app/Language/sv/Home.php index 1518239b..618585a3 100644 --- a/app/Language/sv/Home.php +++ b/app/Language/sv/Home.php @@ -9,12 +9,12 @@ declare(strict_types=1); */ return [ - 'all_podcasts' => 'All podcasts', - 'sort_by' => 'Sort by', + 'all_podcasts' => 'Alla podcasts', + 'sort_by' => 'Sortera efter', 'sort_options' => [ - 'activity' => 'Recent activity', - 'created_desc' => 'Newest first', - 'created_asc' => 'Oldest first', + 'activity' => 'Senaste aktivitet', + 'created_desc' => 'Nyaste först', + 'created_asc' => 'Äldsta först', ], - 'no_podcast' => 'No podcast found', + 'no_podcast' => 'Ingen podcast hittades', ]; diff --git a/app/Language/sv/Page.php b/app/Language/sv/Page.php index 7cd60669..7c5ebc11 100644 --- a/app/Language/sv/Page.php +++ b/app/Language/sv/Page.php @@ -9,9 +9,9 @@ declare(strict_types=1); */ return [ - 'back_to_home' => 'Back to home', + 'back_to_home' => 'Tillbaka till startsidan', 'map' => [ - 'title' => 'Map', - 'description' => 'Discover podcast episodes on {siteName} that are placed on a map! Travel through the map and listen to episodes that talk about specific locations.', + 'title' => 'Karta', + 'description' => 'Upptäck podcast avsnitt på {siteName} som placeras på en karta! Res genom kartan och lyssna på avsnitt som talar om specifika platser.', ], ]; diff --git a/app/Language/sv/Podcast.php b/app/Language/sv/Podcast.php index 9b1e749a..067056f2 100644 --- a/app/Language/sv/Podcast.php +++ b/app/Language/sv/Podcast.php @@ -9,45 +9,45 @@ declare(strict_types=1); */ return [ - 'feed' => 'RSS Podcast feed', - 'season' => 'Season {seasonNumber}', - 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'feed' => 'RSS Podcast flöde', + 'season' => 'Säsong {seasonNumber}', + 'list_of_episodes_year' => '{year} avsnitt ({episodeCount})', 'list_of_episodes_season' => - 'Season {seasonNumber} episodes ({episodeCount})', - 'no_episode' => 'No episode found!', - 'follow' => 'Follow', - 'followTitle' => 'Follow {actorDisplayName} on the fediverse!', + 'Säsong {seasonNumber} avsnitt ({episodeCount})', + 'no_episode' => 'Inga avsnitt hittades!', + 'follow' => 'Följ', + 'followTitle' => 'Följ {actorDisplayName} på fediverse!', 'followers' => '{numberOfFollowers, plural, - one {# follower} - other {# followers} + one {# följare} + other {# följare} }', 'posts' => '{numberOfPosts, plural, - one {# post} - other {# posts} + one {# inlägg} + other {# inlägg} }', - 'activity' => 'Activity', - 'episodes' => 'Episodes', - 'episodes_title' => 'Episodes of {podcastTitle}', - 'about' => 'About', + 'activity' => 'Aktivitet', + 'episodes' => 'Avsnitt', + 'episodes_title' => 'Avsnitt av {podcastTitle}', + 'about' => 'Om', 'stats' => [ - 'title' => 'Stats', + 'title' => 'Statistik', 'number_of_seasons' => '{0, plural, - one {# season} - other {# seasons} + one {# säsong} + other {# säsonger} }', 'number_of_episodes' => '{0, plural, - one {# episode} - other {# episodes} + one {# avsnitt} + other {# avsnitt} }', - 'first_published_at' => 'First episode published on {0, date, medium}', + 'first_published_at' => 'Första avsnittet publicerades den {0, date, medium}', ], 'sponsor' => 'Sponsor', - 'funding_links' => 'Funding links for {podcastTitle}', - 'find_on' => 'Find {podcastTitle} on', - 'listen_on' => 'Listen on', + 'funding_links' => 'Finansiera länkar för {podcastTitle}', + 'find_on' => 'Hitta {podcastTitle} på', + 'listen_on' => 'Lyssna på', 'persons' => '{personsCount, plural, one {# person} - other {# persons} + other {# personer} }', - 'persons_list' => 'Persons', + 'persons_list' => 'Personer', ]; diff --git a/app/Language/sv/Post.php b/app/Language/sv/Post.php index 58d1cf80..cafe1ac4 100644 --- a/app/Language/sv/Post.php +++ b/app/Language/sv/Post.php @@ -9,32 +9,32 @@ declare(strict_types=1); */ return [ - 'title' => "{actorDisplayName}'s post", - 'back_to_actor_posts' => 'Back to {actor} posts', - 'actor_shared' => '{actor} shared', - 'reply_to' => 'Reply to @{actorUsername}', + 'title' => "{actorDisplayName}s inlägg", + 'back_to_actor_posts' => 'Tillbaka till {actor} inlägg', + 'actor_shared' => '{actor} delades', + 'reply_to' => 'Svara på @{actorUsername}', 'form' => [ - 'message_placeholder' => 'Write a message…', - 'episode_message_placeholder' => 'Write a message for the episode…', - 'episode_url_placeholder' => 'Episode URL', - 'reply_to_placeholder' => 'Reply to @{actorUsername}', - 'submit' => 'Send', - 'submit_reply' => 'Reply', + 'message_placeholder' => 'Skriv ett meddelande…', + 'episode_message_placeholder' => 'Skriv ett meddelande för avsnittet…', + 'episode_url_placeholder' => 'Avsnitt URL', + 'reply_to_placeholder' => 'Svara på @{actorUsername}', + 'submit' => 'Skicka', + 'submit_reply' => 'Svara', ], 'favourites' => '{numberOfFavourites, plural, - one {# favourite} - other {# favourites} + one {# favorit} + other {# favoriter} }', 'reblogs' => '{numberOfReblogs, plural, - one {# share} - other {# shares} + one {# delning} + other {# delningar} }', 'replies' => '{numberOfReplies, plural, - one {# reply} - other {# replies} + one {# svar} + other {# svar} }', - 'expand' => 'Expand post', - 'block_actor' => 'Block user @{actorUsername}', - 'block_domain' => 'Block domain @{actorDomain}', - 'delete' => 'Delete post', + 'expand' => 'Expandera inlägg', + 'block_actor' => 'Blockera användare @{actorUsername}', + 'block_domain' => 'Blockera domän @{actorDomain}', + 'delete' => 'Ta bort inlägg', ]; diff --git a/docs/src/ar/getting-started/auth.md b/docs/src/ar/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/ar/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/ar/getting-started/docker.md b/docs/src/ar/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/ar/getting-started/docker.md +++ b/docs/src/ar/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/br/getting-started/auth.md b/docs/src/br/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/br/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/br/getting-started/docker.md b/docs/src/br/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/br/getting-started/docker.md +++ b/docs/src/br/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/ca/getting-started/auth.md b/docs/src/ca/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/ca/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/ca/getting-started/docker.md b/docs/src/ca/getting-started/docker.md index 7b967d92..d1aea27f 100644 --- a/docs/src/ca/getting-started/docker.md +++ b/docs/src/ca/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Imatges Docker oficials -Castopod envia 2 imatges de Docker al Docker Hub durant el seu procés de creació -automatitzada: +Castopod pushes 3 Docker images to the Docker Hub during its automated build +process: - [** code>castopod/app**](https://hub.docker.com/r/castopod/app): el paquet incloent Castopod i totes les dependències - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una configuració de Nginx per a Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg A més, Castopod requereix una base de dades compatible amb MySQL. Es pot afegir una base de dades Redis com a gestor de memòria cau. @@ -21,6 +23,8 @@ una base de dades Redis com a gestor de memòria cau. - `develop` [no-estable], darrera versió de la branca de desenvolupament - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Exemple d'ús @@ -33,7 +37,7 @@ una base de dades Redis com a gestor de memòria cau. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ una base de dades Redis com a gestor de memòria cau. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ una base de dades Redis com a gestor de memòria cau. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -117,9 +136,19 @@ una base de dades Redis com a gestor de memòria cau. ## Variables d'entorn +- **castopod/video-clipper** + + | Nom de la variable | Tipus (`default`) | Default | + | -------------------------- | ----------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** - | Nom de la variable | Tipus (`default`) | Default | + | Nom de la variable | Type (`default`) | Default | | ---------------------------- | ----------------------- | ---------------- | | **`CP_BASEURL`** | string | `undefined` | | **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | @@ -145,6 +174,6 @@ una base de dades Redis com a gestor de memòria cau. - **castopod/web-server** - | Nom de la variable | Type | Default | + | Variable name | Type | Default | | --------------------- | ------- | ------- | | **`CP_APP_HOSTNAME`** | ?string | `"app"` | diff --git a/docs/src/ca/index.md b/docs/src/ca/index.md index a2df1fd6..d8ea821b 100644 --- a/docs/src/ca/index.md +++ b/docs/src/ca/index.md @@ -87,8 +87,8 @@ descentralització i així garantir que la creativitat dels podcasters pugui expressar-se. Aquest projecte és impulsat per la comunitat de codi obert, i concretament pels -moviments [Fediverse](https://fediverse.party/en/fediverse/) i [Podcasting -2.0](https://podcastindex .org/). +moviments [Fediverse](https://fediverse.party/en/fediverse/) i \[Podcasting +2.0\](https://podcastindex .org/). ## Comparació amb altres solucions diff --git a/docs/src/de/getting-started/auth.md b/docs/src/de/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/de/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/de/getting-started/docker.md b/docs/src/de/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/de/getting-started/docker.md +++ b/docs/src/de/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/de/getting-started/install.md b/docs/src/de/getting-started/install.md index c68be846..3c99e225 100644 --- a/docs/src/de/getting-started/install.md +++ b/docs/src/de/getting-started/install.md @@ -142,6 +142,8 @@ You may add your email configuration in your instance's `.env` like so: ```ini # […] +# […] + email.fromEmail="your_email_address" email.SMTPHost="your_smtp_host" email.SMTPUser="your_smtp_user" diff --git a/docs/src/el/getting-started/auth.md b/docs/src/el/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/el/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/el/getting-started/docker.md b/docs/src/el/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/el/getting-started/docker.md +++ b/docs/src/el/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/es/getting-started/auth.md b/docs/src/es/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/es/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/es/getting-started/docker.md b/docs/src/es/getting-started/docker.md index 2fb21b1b..849b2478 100644 --- a/docs/src/es/getting-started/docker.md +++ b/docs/src/es/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Imágenes oficiales de Docker -Castopod lanza 2 imágenes Docker al Docker Hub durante su proceso de -construcción automatizada: +Castopod pushes 3 Docker images to the Docker Hub during its automated build +process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquete completo de Castopod con todas las dependencias. - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una configuración Nginx para Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Adicionalmente, Castopod requiere una base de datos compatible con MySQL. También se puede añadir una base de datos Redis como gestor de caché. @@ -21,6 +23,8 @@ También se puede añadir una base de datos Redis como gestor de caché. - `develop` [unstable], última rama de desarrollo construida - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Ejemplo de uso @@ -33,7 +37,7 @@ También se puede añadir una base de datos Redis como gestor de caché. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ También se puede añadir una base de datos Redis como gestor de caché. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ También se puede añadir una base de datos Redis como gestor de caché. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -113,13 +132,23 @@ También se puede añadir una base de datos Redis como gestor de caché. `https://castopod.mi_dominio.com/cp-install` para terminar de configurar Castopod! -5. Todo listo, empieza a hacer podcasting! 🎙️🚀 +5. Todo listo, empieza a hacer podcasting! 🎙️🚀 🎙️🚀 ## Variables de Entorno +- **castopod/video-clipper** + + | Nombre de la Variable | Tipo (`predeterminado`) | Default | + | -------------------------- | ----------------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** - | Nombre de la Variable | Tipo (`predeterminado`) | Default | + | Nombre de la variable | Type (`default`) | Default | | ---------------------------- | ----------------------- | ---------------- | | **`CP_URLBASE`** | string | `undefined` | | **`CP_MEDIA_URLBASE`** | ?string | `CP_BASEURL` | @@ -145,6 +174,6 @@ También se puede añadir una base de datos Redis como gestor de caché. - **castopod/web-server** - | Nombre de la variable | Type | Default | + | Variable name | Type | Default | | --------------------- | ------- | ------- | | **`CP_APP_HOSTNAME`** | ?string | `"app"` | diff --git a/docs/src/es/getting-started/install.md b/docs/src/es/getting-started/install.md index b7febe86..6b271739 100644 --- a/docs/src/es/getting-started/install.md +++ b/docs/src/es/getting-started/install.md @@ -120,9 +120,7 @@ extensiones: > Estas tareas así definidas se ejecutarán **cada minuto**. Pero puedes > definir una frecuencia más acorde a tus necesidades: cada 5, 10 minutos o - > más. Ejemplo: si reemplazas el último asterisco por \*/30 se ejecutará cada - > 30 minutos. - > ([más ejemplos](https://blog.carreralinux.com.ar/2016/09/ejemplos-de-cron-tareas-linux/)) + > más. ### (recomendado) Asistente web de instalación @@ -150,10 +148,9 @@ You may add your email configuration in your instance's `.env` like so: ```ini # […] -email.fromEmail="your_email_address" -email.SMTPHost="your_smtp_host" -email.SMTPUser="your_smtp_user" -email.SMTPPass="your_smtp_password" +SMTPHost="your_smtp_host" +email. SMTPUser="your_smtp_user" +email. SMTPPass="your_smtp_password" ``` #### Email config options diff --git a/docs/src/es/getting-started/update.md b/docs/src/es/getting-started/update.md index 601afbeb..af9d1215 100644 --- a/docs/src/es/getting-started/update.md +++ b/docs/src/es/getting-started/update.md @@ -66,7 +66,7 @@ Releases may come with additional update instructions (see ## Fully Automated updates -> Próximamente... 👀 +> Próximamente... ## Preguntas Frecuentes (FAQ) @@ -80,9 +80,9 @@ file. ### No he actualizado mi instancia en mucho tiempo… ¿Qué debo hacer? -No problem! Just get the latest release as described above. Only, when going -through the release instructions (4), perform them sequentially, from the oldest -to the newest. +No problem! No problem! Just get the latest release as described above. Only, +when going through the release instructions (4), perform them sequentially, from +the oldest to the newest. > Puede que quieras hacer una copia de seguridad de tu instancia dependiendo del > tiempo que no hayas actualizado Castopod. diff --git a/docs/src/es/index.md b/docs/src/es/index.md index 7475549b..b0566d29 100644 --- a/docs/src/es/index.md +++ b/docs/src/es/index.md @@ -149,7 +149,7 @@ y usar Castopod si quieres alojar tus podcasts. ### Castopod vs. otras plataformas de podcast Hay muchas soluciones para alojar tus podcasts, algunas de las cuales son -realmente geniales y [muchas de ellas](https://podcastindex. org/apps) están +realmente geniales y \[muchas de ellas\](https://podcastindex. org/apps) están dando el salto al tren del Podcasting 2.0, ¡como ya ha hecho Castopod! Cada una de estas soluciones difiere entre sí, puedes compararlas en esta diff --git a/docs/src/fa/getting-started/auth.md b/docs/src/fa/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/fa/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/fa/getting-started/docker.md b/docs/src/fa/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/fa/getting-started/docker.md +++ b/docs/src/fa/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/fr/getting-started/auth.md b/docs/src/fr/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/fr/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/fr/getting-started/docker.md b/docs/src/fr/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/fr/getting-started/docker.md +++ b/docs/src/fr/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/gd/getting-started/auth.md b/docs/src/gd/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/gd/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/gd/getting-started/docker.md b/docs/src/gd/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/gd/getting-started/docker.md +++ b/docs/src/gd/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/gd/index.md b/docs/src/gd/index.md index d89daccb..335197e0 100644 --- a/docs/src/gd/index.md +++ b/docs/src/gd/index.md @@ -285,6 +285,11 @@ https://img.shields.io/github/license/ad-aures/castopod?color=blue https://img.shields.io/badge/contributions-welcome-brightgreen.svg https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg https://img.shields.io/github/stars/ad-aures/castopod?style=social +https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release +https://img.shields.io/github/license/ad-aures/castopod?color=blue +https://img.shields.io/badge/contributions-welcome-brightgreen.svg +https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg +https://img.shields.io/github/stars/ad-aures/castopod?style=social [release]: https://code.castopod.org/adaures/castopod/-/releases [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md diff --git a/docs/src/gl/getting-started/auth.md b/docs/src/gl/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/gl/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/gl/getting-started/docker.md b/docs/src/gl/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/gl/getting-started/docker.md +++ b/docs/src/gl/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/id/getting-started/auth.md b/docs/src/id/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/id/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/id/getting-started/docker.md b/docs/src/id/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/id/getting-started/docker.md +++ b/docs/src/id/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/it/getting-started/auth.md b/docs/src/it/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/it/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/it/getting-started/docker.md b/docs/src/it/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/it/getting-started/docker.md +++ b/docs/src/it/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/ko/getting-started/auth.md b/docs/src/ko/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/ko/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/ko/getting-started/docker.md b/docs/src/ko/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/ko/getting-started/docker.md +++ b/docs/src/ko/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/nl/getting-started/auth.md b/docs/src/nl/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/nl/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/nl/getting-started/docker.md b/docs/src/nl/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/nl/getting-started/docker.md +++ b/docs/src/nl/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/nn-NO/getting-started/auth.md b/docs/src/nn-NO/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/nn-NO/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/nn-NO/getting-started/docker.md b/docs/src/nn-NO/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/nn-NO/getting-started/docker.md +++ b/docs/src/nn-NO/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/nn-NO/index.md b/docs/src/nn-NO/index.md index 38881ecd..0c7598cc 100644 --- a/docs/src/nn-NO/index.md +++ b/docs/src/nn-NO/index.md @@ -286,6 +286,11 @@ https://img.shields.io/github/license/ad-aures/castopod?color=blue https://img.shields.io/badge/contributions-welcome-brightgreen.svg https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg https://img.shields.io/github/stars/ad-aures/castopod?style=social +https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release +https://img.shields.io/github/license/ad-aures/castopod?color=blue +https://img.shields.io/badge/contributions-welcome-brightgreen.svg +https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg +https://img.shields.io/github/stars/ad-aures/castopod?style=social [release]: https://code.castopod.org/adaures/castopod/-/releases [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md diff --git a/docs/src/oc/getting-started/auth.md b/docs/src/oc/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/oc/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/oc/getting-started/docker.md b/docs/src/oc/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/oc/getting-started/docker.md +++ b/docs/src/oc/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/oc/index.md b/docs/src/oc/index.md index d89daccb..335197e0 100644 --- a/docs/src/oc/index.md +++ b/docs/src/oc/index.md @@ -285,6 +285,11 @@ https://img.shields.io/github/license/ad-aures/castopod?color=blue https://img.shields.io/badge/contributions-welcome-brightgreen.svg https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg https://img.shields.io/github/stars/ad-aures/castopod?style=social +https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release +https://img.shields.io/github/license/ad-aures/castopod?color=blue +https://img.shields.io/badge/contributions-welcome-brightgreen.svg +https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg +https://img.shields.io/github/stars/ad-aures/castopod?style=social [release]: https://code.castopod.org/adaures/castopod/-/releases [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md diff --git a/docs/src/pl/getting-started/auth.md b/docs/src/pl/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/pl/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/pl/getting-started/docker.md b/docs/src/pl/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/pl/getting-started/docker.md +++ b/docs/src/pl/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/pt-BR/getting-started/auth.md b/docs/src/pt-BR/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/pt-BR/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/pt-BR/getting-started/docker.md b/docs/src/pt-BR/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/pt-BR/getting-started/docker.md +++ b/docs/src/pt-BR/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/pt-BR/getting-started/install.md b/docs/src/pt-BR/getting-started/install.md index d27d6c59..760a0a6a 100644 --- a/docs/src/pt-BR/getting-started/install.md +++ b/docs/src/pt-BR/getting-started/install.md @@ -144,6 +144,8 @@ You may add your email configuration in your instance's `.env` like so: ```ini # […] +# […] + email.fromEmail="your_email_address" email.SMTPHost="your_smtp_host" email.SMTPUser="your_smtp_user" diff --git a/docs/src/pt/getting-started/auth.md b/docs/src/pt/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/pt/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/pt/getting-started/docker.md b/docs/src/pt/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/pt/getting-started/docker.md +++ b/docs/src/pt/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/pt/getting-started/install.md b/docs/src/pt/getting-started/install.md index c68be846..3c99e225 100644 --- a/docs/src/pt/getting-started/install.md +++ b/docs/src/pt/getting-started/install.md @@ -142,6 +142,8 @@ You may add your email configuration in your instance's `.env` like so: ```ini # […] +# […] + email.fromEmail="your_email_address" email.SMTPHost="your_smtp_host" email.SMTPUser="your_smtp_user" diff --git a/docs/src/ru/getting-started/auth.md b/docs/src/ru/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/ru/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/ru/getting-started/docker.md b/docs/src/ru/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/ru/getting-started/docker.md +++ b/docs/src/ru/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/ru/getting-started/install.md b/docs/src/ru/getting-started/install.md index c68be846..3c99e225 100644 --- a/docs/src/ru/getting-started/install.md +++ b/docs/src/ru/getting-started/install.md @@ -142,6 +142,8 @@ You may add your email configuration in your instance's `.env` like so: ```ini # […] +# […] + email.fromEmail="your_email_address" email.SMTPHost="your_smtp_host" email.SMTPUser="your_smtp_user" diff --git a/docs/src/sk/getting-started/auth.md b/docs/src/sk/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/sk/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/sk/getting-started/docker.md b/docs/src/sk/getting-started/docker.md index ededc582..e19320f2 100644 --- a/docs/src/sk/getting-started/docker.md +++ b/docs/src/sk/getting-started/docker.md @@ -5,13 +5,15 @@ sidebarDepth: 3 # Official Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an Nginx configuration for Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler. @@ -21,6 +23,8 @@ can be added as a cache handler. - `develop` [unstable], latest development branch build - `beta` [stable], latest beta version build - `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) ## Example usage @@ -33,7 +37,7 @@ can be added as a cache handler. services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -115,6 +134,16 @@ can be added as a cache handler. ## Environment Variables +- **castopod/video-clipper** + + | Variable name | Type (`default`) | Default | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** | Variable name | Type (`default`) | Default | diff --git a/docs/src/sv/getting-started/auth.md b/docs/src/sv/getting-started/auth.md new file mode 100644 index 00000000..6c0ccd75 --- /dev/null +++ b/docs/src/sv/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: Authentication & Authorization +sidebarDepth: 3 +--- + +# Authentication & Authorization + +Castopod handles authentication and authorization using `codeigniter/shield` +coupled with custom rules. Roles and permissions are defined at two levels: + +1. [instance wide](#1-instance-wide-roles-and-permissions) +2. [per podcast](#2-per-podcast-roles-and-permissions) + +## 1. Instance wide roles and permissions + +### Instance roles + + + +| role | description | permissions | +| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ | +| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage | +| Podcaster | General users of Castopod. | admin.access | + + + +### Instance permissions + + + +| permission | description | +| ----------------------- | ------------------------------------------------------------------ | +| admin.access | Can access the Castopod admin area. | +| admin.settings | Can access the Castopod settings. | +| users.manage | Can manage Castopod users. | +| persons.manage | Can manage persons. | +| pages.manage | Can manage pages. | +| podcasts.view | Can view all podcasts. | +| podcasts.create | Can create new podcasts. | +| podcasts.import | Can import podcasts. | +| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | + + + +## 2. Per podcast roles and permissions + +### Per podcast roles + + + +| role | description | permissions | +| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Admin | Has complete control of podcast #{id}. | \* | +| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| Guest | General contributor of the podcast #{id}. | view, episodes.view | + + + +### Per podcast permissions + + + +| permission | description | +| ---------------------------- | ------------------------------------------------------------------------ | +| view | Can view dashboard and analytics of podcast #{id}. | +| edit | Can edit podcast #{id}. | +| delete | Can delete podcast #{id}. | +| manage-import | Can synchronize imported podcast #{id}. | +| manage-persons | Can manage subscriptions of podcast #{id}. | +| manage-subscriptions | Can manage subscriptions of podcast #{id}. | +| manage-contributors | Can manage contributors of podcast #{id}. | +| manage-platforms | Can set/remove platform links of podcast #{id}. | +| manage-publications | Can publish podcast #{id}. | +| manage-notifications | Can view and mark notifications as read for podcast #{id}. | +| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | +| episodes.view | Can view dashboard and analytics of podcast #{id}. | +| episodes.create | Can create episodes for podcast #{id}. | +| episodes.edit | Can edit podcast #{id}. | +| episodes.delete | Can delete podcast #{id}. | +| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | +| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. | +| episodes.manage-publications | Can publish podcast #{id}. | +| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. | + + diff --git a/docs/src/sv/getting-started/docker.md b/docs/src/sv/getting-started/docker.md index ededc582..c6fabe52 100644 --- a/docs/src/sv/getting-started/docker.md +++ b/docs/src/sv/getting-started/docker.md @@ -1,39 +1,43 @@ --- -title: Official Docker images +title: Officiella Docker images sidebarDepth: 3 --- -# Official Docker images +# Officiella Docker images -Castopod pushes 2 Docker images to the Docker Hub during its automated build +Castopod pushes 3 Docker images to the Docker Hub during its automated build process: -- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle - with all of Castopod dependencies -- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an - Nginx configuration for Castopod +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): apppaketet med + alla Castopod-beroenden +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): en + Nginx konfiguration för Castopod +- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper): + an optional image building videoclips thanks to ffmpeg -Additionally, Castopod requires a MySQL-compatible database. A Redis database -can be added as a cache handler. +Dessutom kräver Castopod en MySQL-kompatibel databas. En Redis databas kan +läggas till som cachehanterare. -## Supported tags +## Taggar som stöds -- `develop` [unstable], latest development branch build -- `beta` [stable], latest beta version build -- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`) +- `utveckla` [unstable], senaste utvecklingsgrenen +- `beta` [stable], senaste betaversionen bygger +- `1.0.0-beta.x` [stable], specifik betaversion build (sedan `1.0.0-beta.22`) +- `latest` [stable], latest version build +- `1.x.x` [stable], specific version build (since `1.0.0`) -## Example usage +## Exempel på användning -1. Install [docker](https://docs.docker.com/get-docker/) and - [docker-compose](https://docs.docker.com/compose/install/) -2. Create a `docker-compose.yml` file with the following: +1. Installera [docker](https://docs.docker.com/get-docker/) och + [docker-komponera](https://docs.docker.com/compose/install/) +2. Skapa en `docker-compose.yml` fil med följande: ```yml version: "3.7" services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -51,7 +55,7 @@ can be added as a cache handler. restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -83,6 +87,21 @@ can be added as a cache handler. networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -93,13 +112,14 @@ can be added as a cache handler. castopod-db: ``` - You have to adapt some variables to your needs (e.g. `CP_BASEURL`, - `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + Du måste anpassa vissa variabler efter dina behov (t.ex. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` och `CP_ANALYTICS_SALT`). -3. Setup a reverse proxy for TLS (SSL/HTTPS) +3. Ställ in en omvänd proxy för TLS (SSL/HTTPS) - TLS is mandatory for ActivityPub to work. This job can easily be handled by - a reverse proxy, for example with [Caddy](https://caddyserver.com/): + TLS är obligatoriskt för ActivityPub att arbeta. Detta jobb kan enkelt + hanteras av en omvänd proxy, till exempel med + [Caddy](https://caddyserver.com/): ``` #castopod @@ -108,28 +128,39 @@ can be added as a cache handler. } ``` -4. Run `docker-compose up -d`, wait for it to initialize and head on to - `https://castopod.example.com/cp-install` to finish setting up Castopod! +4. Kör `docker-komponera upp -d`, vänta på att den initieras och gå vidare till + `https://castopod.example.com/cp-install` för att slutföra installationen av + Castopod! -5. You're all set, start podcasting! 🎙️🚀 +5. Ni är alla klara, börja podcasting! 🎙️🚀 -## Environment Variables +## Miljövariabler + +- **castopod/video-clipper** + + | Variabel namn | Type (`default`) | Standard | + | -------------------------- | ---------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?sträng | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | - **castopod/app** - | Variable name | Type (`default`) | Default | + | Variabelt namn | Type (`default`) | Standard | | ---------------------------- | ----------------------- | ---------------- | - | **`CP_BASEURL`** | string | `undefined` | + | **`CP_BASEURL`** | sträng | `odefinierad` | | **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | | **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` | | **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` | - | **`CP_ANALYTICS_SALT`** | string | `undefined` | + | **`CP_ANALYTICS_SALT`** | string | `odefinierad` | | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | - | **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` | + | **`CP_CACHE_HANDLER`** | [`"file"` 或 `"redis"`] | `"file"` | | **`CP_REDIS_HOST`** | ?string | `"localhost"` | | **`CP_REDIS_PASSWORD`** | ?string | `null` | | **`CP_REDIS_PORT`** | ?number | `6379` | @@ -139,10 +170,10 @@ can be added as a cache handler. | **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` | | **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` | | **`CP_EMAIL_SMTP_PORT`** | ?number | `25` | - | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` | + | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` eller `"ssl"`] | `"tls"` | - **castopod/web-server** - | Variable name | Type | Default | + | Variable name | Typ | Default | | --------------------- | ------- | ------- | | **`CP_APP_HOSTNAME`** | ?string | `"app"` | diff --git a/docs/src/sv/getting-started/install.md b/docs/src/sv/getting-started/install.md index c68be846..703b01bb 100644 --- a/docs/src/sv/getting-started/install.md +++ b/docs/src/sv/getting-started/install.md @@ -3,25 +3,26 @@ title: Installation sidebarDepth: 3 --- -# How to install Castopod? +# Hur man installerar Castopod? -Castopod was thought-out to be easy to install. Whether using dedicated or -shared hosting, you can install it on most PHP-MySQL compatible web servers. +Castopod var tänkt att vara lätt att installera. Oavsett om du använder +dedikerade eller delade webbhotell kan du installera det på de flesta +PHP-MySQL-kompatibla webbservrar. -::: tip Note +::: tips Anteckning -We've released official Docker images for Castopod! +Vi har släppt officiella Docker-bilder för Castopod! -If you prefer using Docker, you may skip this and go straight to the -[docker documentation](./docker.md) for Castopod. +Om du föredrar att använda Docker, kan du hoppa över detta och gå direkt till +[dockerdokumentationen](./docker.md) för Castopod. ::: -## Requirements +## Krav - PHP v8.1 or higher -- MySQL version 5.7 or higher or MariaDB version 10.2 or higher -- HTTPS support +- MySQL version 5.7 eller högre eller MariaDB version 10.2 eller högre +- Stöd för HTTPS ### PHP v8.1 or higher @@ -30,114 +31,114 @@ PHP version 8.1 or higher is required, with the following extensions installed: - [intl](https://php.net/manual/en/intl.requirements.php) - [libcurl](https://php.net/manual/en/curl.requirements.php) - [mbstring](https://php.net/manual/en/mbstring.installation.php) -- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**, - **PNG** and **WEBP** libraries. +- [gd](https://www.php.net/manual/en/image.installation.php) med **JPEG**, + **PNG** och **WEBP** bibliotek. - [exif](https://www.php.net/manual/en/exif.installation.php) -Additionally, make sure that the following extensions are enabled in your PHP: +Se dessutom till att följande tillägg är aktiverade i din PHP: -- json (enabled by default - don't turn it off) -- xml (enabled by default - don't turn it off) +- json (aktiverad som standard - stäng inte av) +- xml (aktiverat som standard - stäng inte av) - [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) -### MySQL compatible database +### MySQL kompatibel databas -> We recommend using [MariaDB](https://mariadb.org). +> Vi rekommenderar att du använder [MariaDB](https://mariadb.org). -::: warning Warning +::: varning Varning -Castopod only works with supported MySQL 5.7 or higher compatible databases. It -will break with the previous MySQL v5.6 for example as its end of life was on -February 5, 2021. +Castopod fungerar endast med stödda MySQL 5.7 eller högre kompatibla databaser. +Den kommer att bryta med den tidigare MySQL v5.6 till exempel eftersom dess slut +var den 5 februari 2021. ::: -You will need the server hostname, database name, username and password to -complete the installation process. If you do not have these, please contact your -server administrator. +Du behöver serverns värdnamn, databasnamn, användarnamn och lösenord för att +slutföra installationen. Om du inte har dessa kontaktar du din +serveradministratör. -#### Privileges +#### Privilegier -User must have at least these privileges on the database for Castopod to work: -`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`, -`REFERENCES`, `CREATE VIEW`. +Användare måste ha minst dessa rättigheter i databasen för att Castopod ska +fungera: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, +`UPDATE`, `REFERENCES`, `CREATE VIEW`. -### (Optional) FFmpeg v4.1.8 or higher for Video Clips +### (Valfritt) FFmpeg v4.1.8 eller högre för videoklipp -[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you -want to generate Video Clips. The following extensions must be installed: +[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 eller högre krävs om du vill +generera videoklipp. Följande tillägg måste installeras: -- **FreeType 2** library for +- **FreeType 2** bibliotek för [gd](https://www.php.net/manual/en/image.installation.php). -### (Optional) Other recommendations +### (Valfritt) Andra rekommendationer -- Redis for better cache performances. -- CDN for static files caching and better performances. -- e-mail gateway for lost passwords. +- Redis för bättre cache-prestanda. +- CDN för statiska filer caching och bättre prestanda. +- e-post gateway för förlorade lösenord. -## Install instructions +## Installationsanvisningar -### Pre-requisites +### Förutsättningar -0. Get a Web Server with [requirements](#requirements) installed -1. Create a MySQL database for Castopod with a user having access and - modification privileges (for more info, see - [MySQL compatible database](#mysql-compatible-database)). -2. Activate HTTPS on your domain with an _SSL certificate_. -3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto - the web server if you haven’t already. - - ⚠️ Set the web server document root to the `public/` sub-folder within the - `castopod` folder. -4. Add **cron tasks** on your web server for various background processes - (replace the paths accordingly): +0. Skaffa en webbserver med [krav](#requirements) installerat +1. Skapa en MySQL-databas för Castopod med en användare som har åtkomst till och + modifieringsrättigheter (för mer info, se + [MySQL-kompatibel databas](#mysql-compatible-database)). +2. Aktivera HTTPS på din domän med ett _SSL-certifikat_. +3. Ladda ner och packa upp det senaste [Castopod Package](https://castopod.org/) + på webbservern om du inte redan har det. + - ⚠️ Sätt webbserverdokumentroten till `public/` undermappen i mappen + `castopod`. +4. Lägg till **cron-uppgifter** på din webbserver för olika bakgrundsprocesser + (byt ut sökvägarna därefter): - - For social features to work properly, this task is used to broadcast social - activities to your followers on the fediverse: + - För att sociala funktioner ska fungera korrekt, används denna uppgift för + att sända sociala aktiviteter till dina anhängare på fediverse: ```bash * * * * * /path/to/php /path/to/castopod/public/index.php scheduled-activities ``` - - For having your episodes be broadcasted on open hubs upon publication using + - För att dina episoder ska sändas på öppna hubbar vid publicering med [WebSub](https://en.wikipedia.org/wiki/WebSub): ```bash * * * * * /usr/local/bin/php /castopod/public/index.php scheduled-websub-publish ``` - - For Video Clips to be created (see - [FFmpeg requirements](#ffmpeg-v418-or-higher-for-video-clips)): + - För att videoklipp ska skapas (se + [FFmpeg krav](#ffmpeg-v418-or-higher-for-video-clips)): ```bash * * * * * /path/to/php /path/to/castopod/public/index.php scheduled-video-clips ``` - > These tasks run **every minute**. You may set the frequency depending on - > your needs: every 5, 10 minutes or more. + > Dessa uppgifter körs **varje minut**. Du kan ställa in frekvensen beroende + > på dina behov: var 5, 10 minuter eller mer. -### (recommended) Install Wizard +### (rekommenderas) Installationsguide -1. Run the Castopod install script by going to the install wizard page - (`https://your_domain_name.com/cp-install`) in your favorite web browser. -2. Follow the instructions on your screen. -3. Start podcasting! +1. Kör Castopod install script genom att gå till installationsguiden sidan + (`https://your_domain_name.com/cp-install`) i din favorit webbläsare. +2. Följ instruktionerna på din enhet. +3. Börja podcasting! -::: info Note +::: info Notering -The install script writes a `.env` file in the package root. If you cannot go -through the install wizard, you can create and edit the `.env` file manually -based on the `.env.example` file. +Installationsskriptet skriver en `.env` -fil i paketroten. Om du inte kan gå via +installationsguiden kan du skapa och redigera `. nv` filen manuellt baserat på +`.env.example` filen. ::: ### Email/SMTP setup -Email configuration is required for some features to work properly (eg. -retrieving your forgotten password, sending instructions to premium subscribers, +E-postkonfiguration krävs för att vissa funktioner ska fungera korrekt (t.ex. +att hämta ditt glömda lösenord, skicka instruktioner till premiumprenumeranter, …) -You may add your email configuration in your instance's `.env` like so: +Du kan lägga till din e-postkonfiguration i din instans `.env` som så: ```ini # […] @@ -148,33 +149,33 @@ email.SMTPUser="your_smtp_user" email.SMTPPass="your_smtp_password" ``` -#### Email config options +#### Alternativ för e-postkonfiguration -| Variable name | Type | Default | -| ---------------- | -------------------- | ------------ | -| **`fromEmail`** | string | `undefined` | -| **`fromName`** | string | `"Castopod"` | -| **`SMTPHost`** | string | `undefined` | -| **`SMTPUser`** | string | `undefined` | -| **`SMTPPass`** | string | `undefined` | -| **`SMTPPort`** | number | `25` | -| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` | +| Variabelt namn | Typ | Standard | +| ---------------- | ----------------------- | ------------- | +| **`fromEmail`** | sträng | `odefinierad` | +| **`fromName`** | sträng | `"Castopod"` | +| **`SMTPHost`** | sträng | `odefinierad` | +| **`SMTPUser`** | sträng | `odefinierad` | +| **`SMTPPass`** | sträng | `odefinierad` | +| **`SMTPPort`** | nummer | `25` | +| **`SMTPCrypto`** | [`"tls"` eller `"ssl"`] | `"tls"` | -## Community packages +## Gemenskapspaket -If you don't want to bother with installing Castopod manually, you may use one -of the packages created and maintained by the open-source community. +Om du inte vill bry dig om att installera Castopod manuellt, kan du använda ett +av de paket som skapats och underhålls av open source-miljön. -### Install with YunoHost +### Installera med YunoHost -[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux -made up of free and open-source software packages. It manages the hardships of -self-hosting for you. +[YunoHost](https://yunohost.org/) är en distribution baserad på Debian GNU/Linux +som består av mjukvarupaket med fri och öppen källkod. Det hanterar +svårigheterna med self-hosting för dig.
- Install Castopod with YunoHost + Installera Castopod med YunoHost `About` page or by - running: +4. Uppdatera ditt databasschema från din `Castopod Admin` > `Om` sida eller kör: ```bash php spark castopod:database-update ``` -5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > - `Housekeeping` -6. ✨ Enjoy your fresh instance, you're all done! +5. Rensa din cache från `Castopod Admin` > `Inställningar` > `allmän` > + `Hushållning` +6. ✨ Njut av din färska instans, du är alla klara! -::: info Note +::: info Notering -Releases may come with additional update instructions (see -[releases page](https://code.castopod.org/adaures/castopod/-/releases)). +Utgåvor kan komma med ytterligare uppdateringsinstruktioner (se +[utgåvor sidan](https://code.castopod.org/adaures/castopod/-/releases)). - cf. - [I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do) + [Jag har inte uppdaterat min instans på länge… Vad ska jag göra?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do) ::: -## Fully Automated updates +## Helt automatiserade uppdateringar -> Coming soon... 👀 +> Kommer snart... 👀 -## Frequently asked questions (FAQ) +## Vanliga frågor (FAQ) -### Where can I find my Castopod version? +### Var hittar jag min Castopod-version? -Go to your Castopod admin panel, the version is displayed on the bottom left -corner. +Gå till din Castopod admin-panel, versionen visas längst ner till vänster hörn. -Alternatively, you can find the version in the `app > Config > Constants.php` -file. +Alternativt kan du hitta versionen i `appen > Config > Constants.php` filen. -### I haven't updated my instance in a long time… What should I do? +### Jag har inte uppdaterat min instans på länge… Vad ska jag göra? -No problem! Just get the latest release as described above. Only, when going -through the release instructions (4), perform them sequentially, from the oldest -to the newest. +Inga problem! Bara få den senaste versionen som beskrivs ovan. Endast när du går +genom utgivningsinstruktionerna (4), utför dem sekventiellt, från de äldsta till +de nyaste. -> You may want to backup your instance depending on how long you haven't updated -> Castopod. +> Du kanske vill säkerhetskopiera din instans beroende på hur länge du inte har +> uppdaterat Castopod. -For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +Till exempel, om du är på `v1.0.0-alpha.42` och vill uppgradera till `v1.0.0-beta.1`: -0. (highly recommended) Make a backup of your files and database. +0. (rekommenderas starkt) Gör en säkerhetskopia av dina filer och databaser. -1. Download the latest release, overwrite your files whilst keeping `.env` and - `public/media`. +1. Ladda ner den senaste utgåvan, skriv över dina filer samtidigt som du + behåller `.env` och `public/media`. -2. Go through each release update instructions sequentially (from oldest to - newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`, +2. Gå igenom varje utgåva uppdateringsinstruktioner sekventiellt (från äldsta + till nyaste) börjar med `v1.0.0-alpha. 3`, `v1.0.0-alpha.44`, `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. -3. ✨ Enjoy your fresh instance, you're all done! +3. ✨ Njut av din färska instans, du är alla klara! -### Should I make a backup before updating? +### Ska jag göra en säkerhetskopia innan jag uppdaterar? -We advise you do, so you don't lose everything if anything goes wrong! +Vi råder dig att göra, så att du inte förlorar allt om något går fel! -More generally, we advise you make regular backups of your Castopod files and -database to prevent you from losing it all… +Mer generellt, rekommenderar vi att du gör regelbundna säkerhetskopior av dina +Castopod filer och databas för att hindra dig från att förlora allt… diff --git a/docs/src/sv/index.md b/docs/src/sv/index.md index d89daccb..46d6ec05 100644 --- a/docs/src/sv/index.md +++ b/docs/src/sv/index.md @@ -2,239 +2,244 @@ sidebarDepth: 2 --- -# Welcome 👋 +# Välkommen 👋 [![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![stars-badge]][stars] -Castopod is a free & open-source hosting platform made for podcasters who want -engage and interact with their audience. +Castopod är en gratis hostingplattform med öppen källkod gjord för podcastare +som vill engagera och interagera med sin publik. -Castopod is easy to install and was built on top of -[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very -small footprint. +Castopod är lätt att installera och byggdes ovanpå +[CodeIgniter4](https://codeigniter.com/), ett kraftfullt PHP-ramverk med ett +mycket litet fotavtryck. ::: info Status -Castopod is currently in **beta** but already quite stable and used by -podcasters around the world! +Castopod är för närvarande i **beta** men redan ganska stabil och används av +podcastare runt den världen! ::: -## Features +## Funktioner -- 🌱  Free & open-source (AGPL v3 License) -- 🔐  Focused on data sovereignty: your content, audience, and analytics - belong to you, and you only -- 🪄  Podcasting 2.0 features: GUID, locked, transcripts, funding, - chapters, location, persons, soundbites, … -- 💬  Built-in social network: - - 🚀  Castopod is part of the Fediverse, a decentralized social network - - ❤️  Create posts, share, favourite, and comment on episodes -- 📈  Built-in analytics: - - ⚖️  GDPR / CCPA / LGPD compliant - - 🪙  Standard IABv2 audience measurement - - 🏡  On-premises analytics, no third party involved -- 📢  Built-in marketing tools: +- 🌱  Gratis & öppen källkod (AGPL v3-licens) +- 🔐  Fokuserad på datasuveränitet: ditt innehåll, målgrupp och analys + tillhör dig, och du bara +-  Podcasting 2.0 funktioner: GUID, låst, avskrifter, finansiering, + kapitel, plats, personer, ljud, … +- 💬  Inbyggt socialt nätverk: + - 🚀  Castopod är en del av Fediverse, ett decentraliserat socialt + nätverk + - ❤️  Skapa inlägg, dela, favorit och kommentera avsnitt +- 📈  Inbyggd analys: + - ⚖️  GDPR / CCPA / LGPD kompatibel + -  Standard IABv2 målgruppsmätning + - 🏡  Lokalanalys, ingen tredje part involverad +- 📢  Inbyggda marknadsföringsverktyg: - ✅  SEO ready (open-graph meta-tags, JSON-LD, …) - - 📱  PWA: install as a standalone app - - 🎨  Customizable theme colors - - 🎬  Generate ready-to-share Video clips from episodes - - 🔉  Generate soundbites - - ▶️  Embeddable player, embed your episodes on any website + - 📱  PWA: installera som en fristående app + - 🎨  Anpassningsbara temafärger + - 🎬  Generera att dela videoklipp från avsnitt + - 🔉  Generera ljudbitar + - \_button_selector:  Inbäddbar spelare, bädda in dina avsnitt på + valfri webbplats - 💸  Monetization: - - 🔗  Funding links - - 📲  listen-to-click ads + - 🔗  Finansierar länkar + - 📲  lista-att-klicka annonser - 🤝  value4value / WebMonetization - 💎  Premium podcasts -- 📡  Publish your episodes everywhere with RSS: - - 📱  On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, +- 📡  Publicera dina avsnitt överallt med RSS: + - 📱  På alla index och appar: Podcast Index, Apple Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, … - - ⚡  Broadcast your episodes instantly with WebSub -- 📥  Podcast import: move your existing podcast into Castopod -- 📤  Move your podcast out of Castopod -- 🔀  Multi-tenant: host as many podcasts as you want -- 👥  Multi-user: add contributors and set roles -- 🌎  i18n support: translated in English, French, Polish, German, - Brazilian Portuguese & Spanish… with - [more to come](https://translate.castopod.org)! + - ⚡  Sänd dina avsnitt direkt med WebSub +- 📥  Podcast import: flytta din befintliga podcast till Castopod +- 📤  Flytta ut din podcast från Castopod +- :shuffle_tracks  Flera hyresgäst: värd så många podcasts du vill +- 👥  Flera användare: lägg till bidragslämnare och ange roller +- 🌎  i18n support: översatt till engelska, franska, polska, tyska, + brasilianska portugisiska & spanska… med + [mer att komma](https://translate.castopod.org)! ## Motivation -The podcasting ecosystem is decentralized by nature: you can create your podcast -as an RSS file, publish it on the web and have it shared everywhere online. +Den podcasting ekosystem är decentraliserad av naturen: du kan skapa din podcast +som en RSS-fil, publicera den på webben och få den delad överallt på nätet. -It is in fact one of the only media to have stayed this way for a long time. +Det är i själva verket en av de enda medierna som har stannat kvar på detta sätt +under en lång tid. -As usages are evolving, more and more people are getting into podcasts: whether -it is creators finding new ways to share their ideas, or listeners in the search -for better content. +I takt med att användningsområden utvecklas kommer fler och fler människor in i +podcasts: om det är skapare att hitta nya sätt att dela sina idéer, eller +lyssnare i sökningen för bättre innehåll. -With podcasting becoming more widely used, some companies are trying to shift it -towards a more controlled and centralized medium. +När podcasting blir mer allmänt använd försöker vissa företag flytta den till +ett mer kontrollerat och centraliserat medium. -Castopod was created in an effort to provide an open and sustainable alternative -to hosting your podcasts, promoting decentralization to ensure that podcasters -creativity can express itself. +Castopod skapades i ett försök att ge ett öppet och hållbart alternativ för att +vara värd för dina podcasts, främja decentralisering för att säkerställa att +podcastare kreativitet kan uttrycka sig. -This project is pushed by the open-source community, and specifically by the -[Fediverse](https://fediverse.party/en/fediverse/) and -[Podcasting 2.0](https://podcastindex.org/) movements. +Detta projekt drivs av open source-communityn och specifikt av +[Fediverse](https://fediverse.party/en/fediverse/) och +[Podcasting 2.0](https://podcastindex.org/) rörelser. -## Comparison with other solutions +## Jämförelse med andra lösningar -We believe that a solution is not necessarily right for everyone, it highly -depends on your needs. So, here are comparisons with other tools to help you to -gauge whether Castopod is the right fit for you. +Vi tror att en lösning inte nödvändigtvis är rätt för alla, det mycket beror på +dina behov. Så, här är jämförelser med andra verktyg för att hjälpa dig att mäta +om Castopod är rätt passform för du. ### Castopod vs Wordpress -Castopod is often referred to as "the Wordpress for podcasts" because of the -similarities between the two. In some ways this is true. And actually, Castopod -was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption -from the community and the number of websites running it. +Castopod kallas ofta för "Wordpress för podcasts" på grund av de likheter mellan +de två. På vissa sätt är detta sant. Och faktiskt, Castopod var mycket +inspirerad av Wordpress ekosystem, se lätthet att adoptera från gemenskapen och +antalet webbplatser som kör den. -Just like Wordpress, Castopod is free & open source, built using PHP with a -MySQL database and is packaged in a way that you can easily install on most web -servers. +Precis som Wordpress är Castopod gratis & öppen källkod, byggd med PHP med en +MySQL-databas och är paketerad på ett sätt som du enkelt kan installera på de +flesta webb -servrar. -Wordpress is a great way to create your website and extend it with plugins to -get what you want. It is a full fledged CMS that helps you get any type of -website online. +Wordpress är ett bra sätt att skapa din webbplats och utöka den med plugins för +att få vad du vill. Det är en fullfjädrad CMS som hjälper dig att få någon typ +av webbplats online. -On the other hand, Castopod is meant to address the podcasters needs -specifically, focusing on podcasting, and nothing else. You don't need any -plugin to get you started on your podcasting journey. +Å andra sidan, Castopod är tänkt att ta itu med podcasters behöver specifikt, +med fokus på podcasting, och inget annat. Du behöver inte någon plugin för att +komma igång med din podcasting resa. -This allows optimizing the processes specific to podcasting: ranging from the -creation of your podcasts and the publication of new episodes all the way to -broadcasting, marketing and analytics. +Detta gör det möjligt att optimera de processer som är specifika för podcasting: +allt från skapandet av dina podcasts och publiceringen av nya avsnitt hela vägen +till sändning, marknadsföring och analys. -Finally, depending on your needs, Wordpress and Castopod can even live side by -side as they share the same requirements! +Slutligen, beroende på dina behov, Wordpress och Castopod kan även leva sida vid +sida eftersom de delar samma krav! ### Castopod vs Funkwhale -Funkwhale is a self-hosted, modern free and open-source music server. Just as -Castopod, Funkwhale is on the fediverse, a decentralized social network allowing -interoperability between the two. +Funkwhale är en självvärd, modern gratis och öppen källkod musikserver. Precis +som Castopod, Funkwhale är på fediverse, ett decentraliserat socialt nätverk som +möjliggör interoperabilitet mellan de två. -Funkwhale was initially built around music. And later on, as the project -evolved, the ability to host podcasts was introduced. +Funkwhale byggdes ursprungligen runt musik. Och senare när projektet utvecklades +introducerades förmågan att vara värd för podcasts. -Unlike Funkwhale, Castopod has been designed and built around podcasting -exclusively. This allows easier implementation for features related to the -podcasting ecosystem, such as the podcasting 2.0 features (transcripts, -chapters, locations, persons, …). +Till skillnad från Funkwhale har Castopod designats och byggts kring podcasting +exklusivt. Detta möjliggör enklare implementering av funktioner relaterade till +podcasting ekosystem, såsom podcasting 2.0 funktioner (transkript, kapitel, +platser, personer, …). -So, you should probably use Funkwhale if you want to host your music, and use -Castopod if you want to host your podcasts. +Så, du bör förmodligen använda Funkwhale om du vill vara värd för din musik, och +använda Castopod om du vill vara värd för dina podcasts. -### Castopod vs other podcast hosts +### Castopod vs andra podcast värdar -There are many solutions for you to host your podcasts, some of which are really -great and [a lot of them](https://podcastindex.org/apps) are jumping into the -Podcasting 2.0 wagon just like Castopod! +Det finns många lösningar för dig att vara värd för dina podcasts, några av dem +är verkligen bra och [en hel del av dem](https://podcastindex.org/apps) hoppar +in i Podcasting 2. vagn precis som Castopod! -Each of these solutions differ from one another, you may compare with the -[list of features](#features). +Var och en av dessa lösningar skiljer sig från varandra, kan du jämföra med +[listan över funktioner](#features). -That being said, there are two main differences with other podcasting solutions: +Med detta sagt, det finns två huvudsakliga skillnader med andra podcasting +lösningar: -- Castopod can be self-hosted and is the only solution that allows you to keep - full control over what you produce. Also, as it is open-source, you can even - customize it as you wish. +- Castopod kan vara själv värd och är den enda lösningen som gör att du kan + hålla full kontroll över vad du producerar. Dessutom, eftersom det är öppen + källkod, kan du även anpassa det som du vill. -- Castopod is the only solution that currently integrates both a decentralized - social network with ActivityPub as well as many of the podcasting 2.0 - features, hoping to bridge the gap between the two. +- Castopod är den enda lösningen som för närvarande integrerar både ett + decentraliserat socialt nätverk med ActivityPub samt många av podcasting 2. + funktioner, i hopp om att överbrygga gapet mellan de två. -## Contributing +## Hjälp till -Love Castopod and would like to help? Take a look at the following documentation -to get you started. +Älskar du Castopod och vill hjälpa till? Ta en titt på följande dokumentation +för att få dig igång. -### Code of conduct +### Uppförandekod -Castopod has adopted a Code of Conduct that we expect project participants to -adhere to. Please read the -[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md) -so that you can understand what actions will and will not be tolerated. +Castopod har antagit en uppförandekod som vi förväntar oss projektdeltagare att +hålla sig till. Läs +[CODE_OF_CONDUCT manualen](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md) +så att du kan förstå vilka åtgärder som kommer och inte kommer +att tolereras. -### Contributing guide +### Bidragande guide -Read our [contributing guide](./contributing/guidelines.md) to learn about our -development process, how to propose bugfixes and improvements, and how to build -and test your changes to Castopod. +Läs vår [bidragande guide](./contributing/guidelines.md) för att lära dig om vår +utvecklingsprocess, hur du föreslår buggfixar och förbättringar, och hur du +bygger och testar dina ändringar till Castopod. -## Contributors ✨ +## Alla bidragsgivare ✨ -Thanks goes to these wonderful people -([emoji key](https://allcontributors.org/docs/en/emoji-key)): +Tack går till dessa underbara människor +([emoji nyckel](https://allcontributors.org/docs/en/emoji-key)): - - + + + - - - + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - +

Yassine Doghri

💻 🐛 📖 👀 🚧 🖋 🎨 ️️️️♿️ 🌍 💬 🧑‍🏫 🚇 🤔 📆 📝

Benjamin Bellamy

💻 🐛 👀 🖋 🌍 💬 🚇 🤔 📝 📆 📢

Yassine Doghri

💻 🐛 📖 👀 🚧 🖋 :artist_palett: 🌍 💬 🧑 🏫 🚇 🤔 📆 memo:

Yassine Doghri

💻 🐛 📖 👀 🚧 🖋 :artist_palett: 🌍 💬 🧑 🏫 🚇 🤔 📆 memo:

Ola Hneini

💻 👀 📖 🚧 💬 🤔

Ola Hneini

💻 👀 📖 🚧 💬 🤔

Romain de Laage

💻 🚇 📖 🌍 🤔

Lyonel Bernard

🐛 💬 🔊 🤔

Christopher Lagonick-Weitzel

🐛 💬 🔊 🤔

Ernesto Acosta

🐛 🔊 🌍 💬 🤔

Lyonel Bernard

🐛 💬 🔊 🤔

Lyonel Bernard

🐛 💬 🔊 🤔

Bastien Luneteau

💻 🐛

Cécile Ricordeau

🎨

Patryk Miś

🌍

Marcin Lewandowski

🐛 🤔

Sebastian Janik

💻

Patryk Karczmarczyk

💻

denis d

🐛 🤔

Patryk Miś

🌍

Patryk Miś

🌍

Bastien Luneteau

💻 🐛

Patryk Miś

🌍

Patryk Miś

🌍

Bastien Luneteau

💻 🐛

Douglas Kastle

🐛 🤔

cExplorer

🐛 🌍

ImaCrea

🐛 🤔

Jonas S

💻

LEFEBVRE Yann

🐛

Sebastian Späth

🐛 🤔

rocky III

🐛

Bastien Luneteau

💻 🐛

Bastien Luneteau

💻 🐛

Bastien Luneteau

💻 🐛

Patryk Miś

🌍

Patryk Miś

🌍

Bastien Luneteau

💻 🐛

Patryk Miś

🌍

Hermann Josef Eckl

🐛

Delhaye Cyrille

🐛 🤔

João Leandro

🌍 🤔

Angelos Chouvardas

🌍

Eivind

🌍

Ewen

🌍 🤔

forght

🌍

Patryk Miś

🌍

Bastien Luneteau

💻 🐛

João Leandro

🌍 🤔

Patryk Miś

🌍

Patryk Miś

🌍

Bastien Luneteau

💻 🐛

Patryk Miś

🌍

glottis0q

🌍

ButterflyOfFire

🌍

Lucian I. Last

🌍

LuuzViir

🌍

CTHTC

🌍

Russian Retro

🌍

Marek L'ach

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

GunChleoc

🌍

GabiSnow

🌍

bendaha

🌍

Samuel Roland

🌍

Dimitri Regnier

🤔

irithys

🌍

Sergi

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

Patryk Miś

🌍

ghose (XoseM)

🌍

patryk Miś

🌍
@@ -243,48 +248,47 @@ Thanks goes to these wonderful people -This project follows the -[all-contributors](https://github.com/all-contributors/all-contributors) -specification. Contributions of any kind welcome! +Detta projekt följer specifikationen +[för alla bidragsgivare](https://github.com/all-contributors/all-contributors) . +Bidrag av något slag välkomna! -## Contact +## Kontakt -You may reach us for help or ask any question you have on: +Du kan nå oss för hjälp eller ställa någon fråga du har på: -- [Discord](https://castopod.org/discord) (for direct interaction with - developers and the community) -- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for - feature requests & bug reports) +- [Discord](https://castopod.org/discord) (för direkt interaktion med + -utvecklare och gemenskapen) +- [Ärendespårare](https://code.castopod.org/adaures/castopod/-/issues) (för + funktionsförfrågningar & felrapporter) -Alternatively, you can follow us on social media platforms to get news about -Castopod: +Alternativt kan du följa oss på sociala medier för att få nyheter om Castopod: - [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance) - [Twitter](https://twitter.com/castopod) - [LinkedIn](https://linkedin.com/company/castopod) - [Facebook](https://www.facebook.com/castopod) -## Sponsors +## Sponsorer -The ongoing development of Castopod is made possible with the support of its -backers. If you'd like to help, please consider -[sponsoring Castopod's development](https://opencollective.com/castopod/contribute). +Den pågående utvecklingen av Castopod möjliggörs med stöd av sina backers. Om du +vill hjälpa till, överväg +[sponsra Castopods utveckling](https://opencollective.com/castopod/contribute).
Ad Aures Logo NLnet Logo
-## License +## Licens -[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/) +[GNU Lesser General Public License](https://choosealicense.com/licenses/agpl-3.0/) Copyright © 2020-present, [Ad Aures](https://adaures.com/). https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release -https://img.shields.io/github/license/ad-aures/castopod?color=blue -https://img.shields.io/badge/contributions-welcome-brightgreen.svg -https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg -https://img.shields.io/github/stars/ad-aures/castopod?style=social +https://img.shields.io/github/license/ad-aures/castopod?color=blå +https://img.shields. o/badge/contributions-welcome-brightgreen.svg +https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantik--release-e10079. +vg https://img.shields.io/github/stars/ad-aures/castopod?style=sociala [release]: https://code.castopod.org/adaures/castopod/-/releases [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md diff --git a/docs/src/zh-Hans/getting-started/auth.md b/docs/src/zh-Hans/getting-started/auth.md new file mode 100644 index 00000000..09dceb0c --- /dev/null +++ b/docs/src/zh-Hans/getting-started/auth.md @@ -0,0 +1,87 @@ +--- +title: 验证 & 授权 +sidebarDepth: 3 +--- + +# 验证 & 授权 + +Castopod 使用 `codeigniter/shield` 处理身份验证和授权 与自定义规则。 角色和权限 +在两个级别上定义: + +1. [实例范围](#1-instance-wide-roles-and-permissions) +2. [每个播客](#2-per-podcast-roles-and-permissions) + +## 1. 实例范围的角色和权限 + +### 实例角色 + + + +| 角色 | 描述 | 权限 | +| ---------- | ---------------------------- | ------------------------------------------------------------------------------------------ | +| 超级管理员 | 拥有对 Castopod 的完全控制。 | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | +| 管理 | 管理 Castopod 的内容。 | podcasts.create, podcasts.import, persons.manage, pages.manage | +| 播客 | Castopod 的普通用户。 | admin.access | + + + +### 实例权限 + + + +| 权限 | 描述 | +| ----------------------- | ------------------------------------------- | +| admin.access | 可以访问 Castopod 管理区域。 | +| admin.settings | 可以访问 Castopod 设置。 | +| users.manage | 可以管理 Castopod 用户。 | +| persons.manage | 可以管理人员。 | +| pages.manage | 可以管理页面。 | +| podcasts.view | 可以查看所有播客。 | +| podcasts.create | 可以创建新播客。 | +| podcasts.import | 可以导入播客。 | +| fediverse.manage-blocks | 可以阻止联邦宇宙参与者/域与 Castopod 交互。 | + + + +## 2. 每个播客角色与权限 + +### 每个播客角色 + + + +| 角色 | 描述 | 权限 | +| ------ | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 管理员 | 完全控制播客 #{id}。 | \* | +| 编辑 | 管理播客 #{id} 的内容和出版物。 | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications | +| 作者 | 管理播客 #{id} 的内容,但不能发布。 | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips | +| 访客 | 播客 #{id} 的普通贡献者。 | view, episodes.view | + + + +### 每个播客权限 + + + +| 权限 | 描述 | +| ---------------------------- | --------------------------------------------------- | +| view | 可以查看播客 #{id} 的仪表板和分析。 | +| edit | 可以编辑播客 #{id}。 | +| 删除 | 可以删除播客 #{id}。 | +| manage-import | 可以同步导入的播客 #{id}。 | +| manage-persons | 可以管理播客 #{id} 的订阅。 | +| manage-subscriptions | 可以管理播客 #{id} 的订阅。 | +| manage-contributors | 可以管理播客 #{id} 的贡献者。 | +| manage-platforms | 可以设置/删除播客 #{id} 的平台链接。 | +| manage-publications | 可以发布播客 #{id}。 | +| manage-notifications | 可以查看播客 #{id} 的通知并将其标记为已读。 | +| interact-as | 可以在播客 #{id} 进行互动,以收藏、分享或回复帖子。 | +| episodes.view | 可以查看播客 #{id} 的仪表板和分析。 | +| episodes.create | 可以为播客 #{id} 创建剧集。 | +| episodes.edit | 可以编辑播客 #{id}。 | +| episodes.delete | 可以删除播客 #{id}。 | +| episodes.manage-persons | 可以管理播客 #{id} 的订阅。 | +| episodes.manage-clips | 可以管理播客 #{id} 的视频剪辑或声音片段。 | +| episodes.manage-publications | 可以发布播客 #{id}。 | +| episodes.manage-comments | 可以创建/删除播客 #{id} 的剧集评论。 | + + diff --git a/docs/src/zh-Hans/getting-started/docker.md b/docs/src/zh-Hans/getting-started/docker.md index 9e9135a7..e68fc89d 100644 --- a/docs/src/zh-Hans/getting-started/docker.md +++ b/docs/src/zh-Hans/getting-started/docker.md @@ -5,12 +5,14 @@ sidebarDepth: 3 # 官方 Docker 镜像 -Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker Hub : +Castopod 在其自动构建期间会将 3 个 Docker 映像推送到 Docker Hub : - [**`castopod/app`**](https://hub.docker.com/r/castopod/app):应用程序包,包含 所有 Castopod 依赖关系 - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server):Castopod 的 Nginx 配置 +- [**`castopod/video-clipper`** ](https://hub.docker.com/r/castopod/video-clipper): + 感谢 ffmpeg 提供可选图像构建视频剪辑 此外,Castopod 需要一个与 MySQL 兼容的数据库。 Redis 数据库 可以添加为缓存处理器 。 @@ -20,6 +22,8 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker - `develop` [unstable], 最新开发分支版本 - `beta` [stable],最新的 beta 版本构建 - `1.0.0-beta.x` [stable],特定 beta 版本构建 (自 `1.0.0-beta.22` 起) +- `latest` [stable],最新版本构建 +- `1.x.x` [stable],特定版本构建(自 `1.0.0` 起) ## 用法示例: @@ -32,7 +36,7 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker services: app: - image: castopod/app:beta + image: castopod/app:latest container_name: "castopod-app" volumes: - castopod-media:/opt/castopod/public/media @@ -50,7 +54,7 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker restart: unless-stopped web-server: - image: castopod/web-server:beta + image: castopod/web-server:latest container_name: "castopod-web-server" volumes: - castopod-media:/var/www/html/media @@ -82,6 +86,21 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker networks: - castopod-app + # this container is optional + # add this if you want to use the videoclips feature + ffmpeg: + image: castopod/video-clipper:latest + container_name: "castopod-video-clipper" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + networks: + - castopod-db + restart: unless-stopped + volumes: castopod-media: castopod-db: @@ -92,7 +111,7 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker castopod-db: ``` - 你还需要调整一些变量。(例如:`CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, + 你还需要调整一些变量。 (例如:`CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSSWORD` 和 `CP_ANALYTICS_SALT`) 3. 设置 TLS 反向代理 (SSL/HTTPS) @@ -114,9 +133,19 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker ## 环境变量 +- **castopod/video-clipper** + + | 变量名称 | 类型 (`默认值`) | Default | + | -------------------------- | --------------- | ---------------- | + | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | + | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | + | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | + | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | + | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | + - **castopod/app** - | 变量名称 | 类型 (`默认值`) | Default | + | 变量名称 | 类型 (`default`) | Default | | ---------------------------- | ----------------------- | ---------------- | | **`CP_BASEURL`** | string | `undefined` | | **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | @@ -142,6 +171,6 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker - **castopod/web-server** - | 变量名称 | Type | Default | + | 变量名称 | Type | 默认 | | --------------------- | ------- | ------- | | **`CP_APP_HOSTNAME`** | ?string | `"app"` | diff --git a/docs/src/zh-Hans/getting-started/install.md b/docs/src/zh-Hans/getting-started/install.md index 16960906..57a4e6f7 100644 --- a/docs/src/zh-Hans/getting-started/install.md +++ b/docs/src/zh-Hans/getting-started/install.md @@ -132,6 +132,8 @@ Castopod 仅适用于受支持的 MySQL 5.7 或更高版本的兼容数据库。 ```ini # […] +# […] + email.fromEmail="你的邮件地址" email.SMTPHost="你的邮件主机" email.SMTPUser="你的邮件用户名" diff --git a/docs/src/zh-Hans/getting-started/update.md b/docs/src/zh-Hans/getting-started/update.md index 6e8b2b18..f8f7c4ef 100644 --- a/docs/src/zh-Hans/getting-started/update.md +++ b/docs/src/zh-Hans/getting-started/update.md @@ -8,62 +8,57 @@ sidebarDepth: 3 安装 Castopod 后,你可能希望将实例更新到最新版本 版本以享受最新功能 ✨, 修复错误 🐛 和性能提升 ⚡。 -## Update instructions +## 更新说明 -0. ⚠️ Before any update, we highly recommend you backup your Castopod files and - database. +0. ⚠️ 在更新之前,我们强烈建议你备份 Castopod 文件和数据库。 - - cf. - [Should I make a backup before updating?](#should-i-make-a-backup-before-updating) + - 参看. [我应该在更新前进行备份吗?](#should-i-make-a-backup-before-updating) -1. Go to the - [releases page](https://code.castopod.org/adaures/castopod/-/releases) and - see if your instance is up to date with the latest Castopod version +1. 前往 [发布页面](https://code.castopod.org/adaures/castopod/-/releases) 和 查 + 看您的实例是否是最新的 Castopod 版本 - - cf. - [Where can I find my Castopod version?](#where-can-i-find-my-castopod-version) + - 参看 + [我在哪里可以找到我的 Castopod 版本?](#where-can-i-find-my-castopod-version) -2. Download the latest release package named `Castopod Package`, you may choose - between the `zip` or `tar.gz` archives +2. 下载名为`Castopod Package`的最新发布包,你可以在 `zip` 或 `tar.gz` 压缩包之间 + 选择 - - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code - - Note that you can also download the latest package from - [castopod.org](https://castopod.org/) + - ⚠️ 请确保你下载的是 Castopod 软件包而 **不是** 源代码 + - 请注意,你还可以从 [castopod.org](https://castopod.org/) -3. On your server: +3. 在你的服务器上: - - Remove all files except `.env` and `public/media` - - Copy the new files from the downloaded package into your server + - 删除除 `.env` 文件和 `public/media` 目录之外的所有文件 + - 将下载软件包中的新文件复制到你的服务器中 - ::: info Note + ::: 注意 You may need to reset files permissions as during the install process. - Check [Security Concerns](./security.md). + Check [Security Concerns](./security.md). 检查 [安全问题](./security.md)。 ::: -4. Update your database schema from your `Castopod Admin` > `About` page or by - running: +4. 从你的 `后台管理` > 更新你的数据库架构 `关于` 页或开始: ```bash php spark castopod:database-update ``` -5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > - `Housekeeping` -6. ✨ Enjoy your fresh instance, you're all done! +5. 从 `Castopod 管理页面` > `设置` > `通常` > `维护` 清理你的缓存 +6. ✨ 享受你的新实例, 你已经更新完毕! -::: info Note +::: 注意 -Releases may come with additional update instructions (see -[releases page](https://code.castopod.org/adaures/castopod/-/releases)). +新版本可能有额外的更新说明(请参阅 +[发布页面](https://code.castopod.org/adaures/castopod/-/releases))。 - cf. [I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do) + 我该怎么办? ::: -## Fully Automated updates +## 全自动更新 > 即将到来... 👀 @@ -71,22 +66,19 @@ Releases may come with additional update instructions (see ### 在哪里可以找到我的 Castopod 版本号? -Go to your Castopod admin panel, the version is displayed on the bottom left -corner. +跳转到你的 Castopod 管理面板,版本号显示在左下角。 -Alternatively, you can find the version in the `app > Config > Constants.php` -file. +或者,你可以在 `应用程序 > 配置 > Constants.php` 文件中找到版本号。 -### 我很长时间没有更新我的实例… 我该怎么办? +### 我很长时间没有更新我的实例… 我该怎么办? 我该怎么办? -No problem! Just get the latest release as described above. Only, when going -through the release instructions (4), perform them sequentially, from the oldest -to the newest. +没问题! 只需如上所述获取最新版本。 No problem! Just get the latest release as +described above. Only, when going through the release instructions (4), perform +them sequentially, from the oldest to the newest. > 你可能想要备份你的实例,这取决于您多久没有更新过 Castopod 。 -For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to -`v1.0.0-beta.1`: +例如,如果你在 `v1.0.0-alpha.42` 并想要升级到 `v1.0.0-beta.1` 0. (强烈推荐) 备份你的文件和数据库。 @@ -99,7 +91,6 @@ For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to ### 我是否应该在更新前备份? -We advise you do, so you don't lose everything if anything goes wrong! +我们建议你这样做,这样就不会在出现任何问题时丢失数据! -More generally, we advise you make regular backups of your Castopod files and -database to prevent you from losing it all… +更笼统地说,我们建议你定期备份您的 Castopod 文件和数据库,防止丢失所有内容…… diff --git a/docs/src/zh-Hans/index.md b/docs/src/zh-Hans/index.md index 20a0b1a0..0cd5b07e 100644 --- a/docs/src/zh-Hans/index.md +++ b/docs/src/zh-Hans/index.md @@ -133,7 +133,8 @@ Funkwhale 最初是围绕音乐制作的。 后来,随着项目的发展,引 ## 贡献 -喜欢 Castopod 并且想帮忙吗? 请查看以下文档以帮助你入门。 +喜欢 Castopod 并且想帮忙吗? 请查看以下文档以帮助你入门。 请查看以下文档以帮助你 +入门。 ### 行为准则 @@ -143,8 +144,8 @@ Castopod 已经通过了一项行为准则,并希望所有的参与者都能 ### 贡献指南 -阅读我们的 [贡献指南](./contributing/guidelines.md) ,了解我们的开发过程。提出错 -误修正和改进想法,以及如何构建和测试 Castopod 。 +阅读我们的 [贡献指南](./contributing/guidelines.md) ,了解我们的开发过程。 提出 +错 误修正和改进想法,以及如何构建和测试 Castopod 。 ## 贡献者 ✨ @@ -251,7 +252,8 @@ Castopod 的发展离不开赞助商的支持。 如果你想要帮助我们, [GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/) -Copyright © 2020-present, [Ad Aures](https://adaures.com/). +Copyright © 2020-present, [Ad Aures](https://adaures.com/). Copyright © +2020-present, [Ad Aures](https://adaures.com/). https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release https://img.shields.io/github/license/ad-aures/castopod?color=blue https://img.shields.io/badge/contributions-welcome-brightgreen.svg diff --git a/modules/Admin/Language/de/AboutCastopod.php b/modules/Admin/Language/de/AboutCastopod.php index 3fb62aff..7e8780ad 100644 --- a/modules/Admin/Language/de/AboutCastopod.php +++ b/modules/Admin/Language/de/AboutCastopod.php @@ -9,14 +9,14 @@ declare(strict_types=1); */ return [ - 'title' => 'About Castopod', - 'host_name' => 'Host name', - 'version' => 'Castopod version', - 'php_version' => 'PHP version', - 'os' => 'Operating System', - 'languages' => 'Languages', - 'update_database' => 'Update database', + 'title' => 'Über Castopod', + 'host_name' => 'Hostname', + 'version' => 'Castopod Version', + 'php_version' => 'PHP Version', + 'os' => 'Betriebssystem', + 'languages' => 'Sprachen', + 'update_database' => 'Datenbank aktualisieren', 'messages' => [ - 'databaseUpdateSuccess' => 'Database is up to date!', + 'databaseUpdateSuccess' => 'Die Datenbank ist aktuell!', ], ]; diff --git a/modules/Admin/Language/de/Breadcrumb.php b/modules/Admin/Language/de/Breadcrumb.php index 188481fb..037c53f5 100644 --- a/modules/Admin/Language/de/Breadcrumb.php +++ b/modules/Admin/Language/de/Breadcrumb.php @@ -14,22 +14,22 @@ return [ ->gateway => 'Startseite', 'podcasts' => 'Podcasts', 'episodes' => 'Folgen', - 'subscriptions' => 'subscriptions', + 'subscriptions' => 'Abonnements', 'contributors' => 'Administratoren', 'pages' => 'Seiten', 'settings' => 'Einstellungen', 'theme' => 'Erscheinungsbild', - 'about' => 'about', + 'about' => 'Über', 'add' => 'hinzufügen', 'new' => 'neu', 'edit' => 'bearbeiten', 'persons' => 'Mitwirkende', 'publish' => 'veröffentlichen', 'publish-edit' => 'Veröffentlichung bearbeiten', - 'publish-date-edit' => 'edit publication date', + 'publish-date-edit' => 'Veröffentlichungsdatum bearbeiten', 'unpublish' => 'Veröffentlichung aufheben', 'delete' => 'löschen', - 'remove' => 'remove', + 'remove' => 'Entfernen', 'fediverse' => 'Fediversum', 'block-lists' => 'Sperrlisten', 'users' => 'Benutzer', @@ -49,6 +49,6 @@ return [ 'soundbites' => 'Tonschnipsel', 'video-clips' => 'Videoclips', 'embed' => 'einbettbarer Spieler', - 'notifications' => 'notifications', - 'suspend' => 'suspend', + 'notifications' => 'Benachrichtigungen', + 'suspend' => 'Unterbrechen', ]; diff --git a/modules/Admin/Language/de/Charts.php b/modules/Admin/Language/de/Charts.php index c96b1dcb..efbf2ee4 100644 --- a/modules/Admin/Language/de/Charts.php +++ b/modules/Admin/Language/de/Charts.php @@ -35,6 +35,6 @@ return [ 'by_weekday' => 'Nach Wochentag (für die letzten 60 Tage)', 'by_hour' => 'Nach Tageszeit (für die letzten 60 Tage)', 'podcast_by_bandwidth' => 'Täglich genutzte Bandbreite (in MB)', - 'total_storage_by_month' => 'Monthly storage (in MB)', - 'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)', + 'total_storage_by_month' => 'Monatlicher Speicher (in MB)', + 'total_bandwidth_by_month' => 'Monatlich genutzte Bandbreite (in MB)', ]; diff --git a/modules/Admin/Language/de/Dashboard.php b/modules/Admin/Language/de/Dashboard.php index 881073fd..48170243 100644 --- a/modules/Admin/Language/de/Dashboard.php +++ b/modules/Admin/Language/de/Dashboard.php @@ -9,20 +9,20 @@ declare(strict_types=1); */ return [ - 'home' => 'Admin dashboard', - 'welcome_message' => 'Welcome to the admin area!', + 'home' => 'Admin-Dashboard', + 'welcome_message' => 'Willkommen im Administrationsbereich!', 'podcasts' => [ 'title' => 'Podcasts', - 'not_found' => 'No published podcast', - 'last_published' => 'Last published on {lastPublicationDate}', + 'not_found' => 'Kein veröffentlichter Podcast', + 'last_published' => 'Zuletzt veröffentlicht am {lastPublicationDate}', ], 'episodes' => [ - 'title' => 'Episodes', - 'not_found' => 'No published episode', - 'last_published' => 'Last published on {lastPublicationDate}', + 'title' => 'Episoden', + 'not_found' => 'Keine veröffentlichte Episode', + 'last_published' => 'Zuletzt veröffentlicht am {lastPublicationDate}', ], 'storage' => [ - 'title' => 'Storage', - 'subtitle' => '{totalUploaded} out of {totalStorage}', + 'title' => 'Speicher', + 'subtitle' => '{totalUploaded} von {totalStorage}', ], ]; diff --git a/modules/Admin/Language/de/Episode.php b/modules/Admin/Language/de/Episode.php index d20fd716..fd48ae94 100644 --- a/modules/Admin/Language/de/Episode.php +++ b/modules/Admin/Language/de/Episode.php @@ -24,25 +24,25 @@ return [ 'edit' => 'Bearbeiten', 'publish' => 'Veröffentllichen', 'publish_edit' => 'Veröffentlichung bearbeiten', - 'publish_date_edit' => 'Edit publication date', + 'publish_date_edit' => 'Veröffentlichungsdatum bearbeiten', 'unpublish' => 'Veröffentlichung zurücknehmen', 'publish_error' => 'Folge ist bereits veröffentlicht.', 'publish_edit_error' => 'Folge ist bereits veröffentlicht.', 'publish_cancel_error' => 'Folge ist bereits veröffentlicht.', - 'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.', - 'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.', - 'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!', + 'publish_date_edit_error' => 'Die Folge wurde noch nicht veröffentlicht, Sie können das Veröffentlichungsdatum nicht bearbeiten.', + 'publish_date_edit_future_error' => 'Das Veröffentlichungsdatum der Folge kann nur auf ein vergangenes Datum gesetzt werden! Wenn Sie es neu planen möchten, heben Sie die Veröffentlichung zuerst auf.', + 'publish_date_edit_success' => 'Das Veröffentlichungsdatum der Folge wurde erfolgreich aktualisiert!', 'unpublish_error' => 'Folge ist nicht veröffentlicht.', 'delete' => 'Löschen', 'go_to_page' => 'Gehe zu Seite', 'create' => 'Folge hinzufügen', 'publication_status' => [ 'published' => 'Veröffentlicht', - 'with_podcast' => 'Published', + 'with_podcast' => 'Veröffentlicht', 'scheduled' => 'Geplant', 'not_published' => 'Nicht veröffentlicht', ], - 'with_podcast_hint' => 'To be published at the same time as the podcast', + 'with_podcast_hint' => 'Wird zeitgleich mit dem Podcast veröffentlicht', 'list' => [ 'search' => [ 'placeholder' => 'Suche nach einer Episode', @@ -50,8 +50,8 @@ return [ 'submit' => 'Suche', ], 'number_of_episodes' => '{numberOfEpisodes, plural, - one {# episode} - other {# episodes} + one {# Folge} + other {# Folgen} }', 'episode' => 'Folge', 'visibility' => 'Sichtweite', @@ -62,14 +62,14 @@ return [ 'createSuccess' => 'Folge wurde erfolgreich erstellt!', 'editSuccess' => 'Folge wurde erfolgreich aktualisiert!', 'publishSuccess' => '{publication_status, select, - published {Episode successfully published!} - scheduled {Episode publication successfully scheduled!} - with_podcast {This episode will be published at the same time as the podcast.} - other {This episode is not published.} + published {Folge erfolgreich veröffentlicht!} + scheduled {Veröffentlichung der Folge erfolgreich geplant!} + with_podcast {Diese Folge wird zeitgleich mit dem Podcast veröffentlicht.} + other {Diese Folge ist nicht veröffentlicht.} }', 'publishCancelSuccess' => 'Veröffentlichung der Episode erfolgreich abgebrochen!', 'unpublishBeforeDeleteTip' => 'Du musst die Episode zurückziehen, bevor du sie löschst.', - 'scheduleDateError' => 'Schedule date must be set!', + 'scheduleDateError' => 'Veröffentlichungsdatum muss gesetzt sein!', 'deletePublishedEpisodeError' => 'Bitte ziehe die Episode zurück, bevor du sie löschst.', 'deleteSuccess' => 'Folge erfolgreich gelöscht!', 'deleteError' => 'Failed to delete episode {type, select, @@ -79,13 +79,13 @@ return [ audio {audio} other {media} }.', - 'deleteFileError' => 'Failed to delete {type, select, - transcript {transcript} - chapters {chapters} - image {cover} - audio {audio} - other {media} - } file {file_path}. You may manually remove it from your disk.', + 'deleteFileError' => 'Fehler beim Löschen der {type, select, + transcript {Abschrift} + chapters {Kapitel} + image {Cover} + audio {Audio} + other {Medien} + }-Datei {file_path}. Sie können es manuell von der Festplatte entfernen.', 'sameSlugError' => 'Eine Folge mit dem ausgewählten Slug existiert bereits.', ], 'form' => [ @@ -97,7 +97,7 @@ return [ 'cover' => 'Episoden-Cover', 'cover_hint' => 'Wenn Du kein Cover festlegst, wird stattdessen das Podcast-Cover verwendet.', - 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', + 'cover_size_hint' => 'Das Cover muss quadratisch und mindestens 1400px breit und hoch sein.', 'title' => 'Titel', 'title_hint' => 'Nutze einen klaren und einprägsamen Episodennamen. Gib hier nicht die Episoden- oder Staffelnummern an.', @@ -169,7 +169,7 @@ return [ 'publication_method' => [ 'now' => 'Jetzt', 'schedule' => 'Zeitplan', - 'with_podcast' => 'Publish alongside podcast', + 'with_podcast' => 'Zusammen mit dem Podcast veröffentlichen', ], 'scheduled_publication_date' => 'Geplantes Veröffentlichungsdatum', 'scheduled_publication_date_clear' => 'Veröffentlichungsdatum löschen', @@ -183,9 +183,9 @@ return [ 'message_warning_submit' => 'Trotzdem veröffentlichen', ], 'publish_date_edit_form' => [ - 'new_publication_date' => 'New publication date', - 'new_publication_date_hint' => 'Must be set to a past date.', - 'submit' => 'Edit publication date', + 'new_publication_date' => 'Neues Veröffentlichungsdatum', + 'new_publication_date_hint' => 'Muss auf ein vergangenes Datum gesetzt werden.', + 'submit' => 'Veröffentlichungsdatum bearbeiten', ], 'unpublish_form' => [ 'disclaimer' => @@ -197,7 +197,7 @@ return [ 'disclaimer' => "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'Ich verstehe, ich möchte die Folge löschen', - 'submit' => 'Delete', + 'submit' => 'Löschen', ], 'embed' => [ 'title' => 'Einbettbarer Spieler', diff --git a/modules/Admin/Language/de/Navigation.php b/modules/Admin/Language/de/Navigation.php index d2264e25..1c98e0e5 100644 --- a/modules/Admin/Language/de/Navigation.php +++ b/modules/Admin/Language/de/Navigation.php @@ -33,7 +33,7 @@ return [ 'settings' => 'Einstellungen', 'settings-general' => 'Allgemein', 'settings-theme' => 'Erscheinungsbild', - 'about' => 'About', + 'about' => 'Über', 'account' => [ 'my-account' => 'Mein Konto', 'change-password' => 'Passwort ändern', diff --git a/modules/Admin/Language/de/Notifications.php b/modules/Admin/Language/de/Notifications.php index 2b139d51..88439bb4 100644 --- a/modules/Admin/Language/de/Notifications.php +++ b/modules/Admin/Language/de/Notifications.php @@ -9,11 +9,11 @@ declare(strict_types=1); */ return [ - 'title' => 'Notifications', - 'reply' => '{actor_username} replied to your post', - 'favourite' => '{actor_username} favourited your post', - 'reblog' => '{actor_username} shared your post', - 'follow' => '{actor_username} started following you', - 'no_notifications' => 'No notifications', - 'mark_all_as_read' => 'Mark all as read', + 'title' => 'Benachrichtigungen', + 'reply' => '{actor_username} hat auf Ihren Beitrag geantwortet', + 'favourite' => '{actor_username} hat Ihren Beitrag favorisiert', + 'reblog' => '{actor_username} hat Ihren Beitrag geteilt', + 'follow' => '{actor_username} folgt Ihnen jetzt', + 'no_notifications' => 'Keine Benachrichtigungen', + 'mark_all_as_read' => 'Alle als gelesen markieren', ]; diff --git a/modules/Admin/Language/de/Person.php b/modules/Admin/Language/de/Person.php index 96724be0..d0c8de9c 100644 --- a/modules/Admin/Language/de/Person.php +++ b/modules/Admin/Language/de/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Profilbild', 'avatar_size_hint' => - 'Avatar must be squared and at least 400px wide and tall.', + 'Das Profilbild muss quadratisch und mindestens 400px breit und hoch sein.', 'full_name' => 'Vollständiger Name', 'full_name_hint' => 'Dies ist der vollständige Name oder der Alias der Person.', 'unique_name' => 'Eindeutiger Name', diff --git a/modules/Admin/Language/de/Podcast.php b/modules/Admin/Language/de/Podcast.php index 8cff53a1..9121a8d4 100644 --- a/modules/Admin/Language/de/Podcast.php +++ b/modules/Admin/Language/de/Podcast.php @@ -16,7 +16,7 @@ return [ 'new_episode' => 'Neue Folge', 'view' => 'Podcast ansehen', 'edit' => 'Podcast bearbeiten', - 'publish' => 'Publish podcast', + 'publish' => 'Podcast veröffentlichen', 'publish_edit' => 'Edit publication', 'delete' => 'Podcast löschen', 'see_episodes' => 'Episoden ansehen', @@ -24,12 +24,12 @@ return [ 'go_to_page' => 'Gehe zur Seite', 'latest_episodes' => 'Neueste Folgen', 'see_all_episodes' => 'Alle Folgen anzeigen', - 'draft' => 'Draft', + 'draft' => 'Entwurf', 'messages' => [ - 'createSuccess' => 'Podcast successfully created!', + 'createSuccess' => 'Podcast erfolgreich erstellt!', 'editSuccess' => 'Der Podcast wurde erfolgreich aktualisiert!', 'importSuccess' => 'Der Podcast wurde erfolgreich importiert!', - 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deleteSuccess' => 'Podcast @{podcast_handle} erfolgreich gelöscht!', 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, cover {cover} banner {banner} @@ -47,18 +47,18 @@ return [ one {# episode was} other {# episodes were} } added to the podcast!', - 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastFeedUpToDate' => 'Der Podcast ist bereits auf dem neuesten Stand.', 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', 'publishError' => 'This podcast is either already published or scheduled for publication.', 'publishEditError' => 'This podcast is not scheduled for publication.', 'publishCancelSuccess' => 'Podcast publication successfully cancelled!', - 'scheduleDateError' => 'Schedule date must be set!', + 'scheduleDateError' => 'Veröffentlichungsdatum muss gesetzt sein!', ], 'form' => [ 'identity_section_title' => 'Podcast-Identität', 'identity_section_subtitle' => 'Diese Felder erlauben es dir, Aufmerksamkeit zu bekommen.', 'cover' => 'Podcast-Cover', - 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', + 'cover_size_hint' => 'Das Cover muss quadratisch und mindestens 1400px breit und hoch sein.', 'banner' => 'Podcast-Banner', 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Podcast-Banner löschen', @@ -120,8 +120,8 @@ return [ 'custom_rss_hint' => 'Dies wird innerhalb des ❬channel❭ Tags eingefügt.', 'new_feed_url' => 'Neue Feed-URL', 'new_feed_url_hint' => 'Benutzen Sie dieses Feld, wenn Sie zu einer anderen Domain oder Podcast-Plattform wechseln. Standardmäßig wird der Wert auf die aktuelle RSS URL gesetzt, wenn der Podcast importiert wird.', - 'old_feed_url' => 'Old feed URL', - 'update_feed' => 'Update feed', + 'old_feed_url' => 'Alte Feed-URL', + 'update_feed' => 'Feed aktualisieren', 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnerschaft:en', 'partner_id' => 'ID', @@ -259,12 +259,12 @@ return [ 'post' => 'Your announcement post', 'post_hint' => "Write a message to announce the publication of your podcast. The message will be featured in your podcast's homepage.", - 'message_placeholder' => 'Write your message…', - 'submit' => 'Publish', + 'message_placeholder' => 'Schreiben Sie Ihre Nachricht…', + 'submit' => 'Veröffentlichen', 'publication_date' => 'Publication date', 'publication_method' => [ - 'now' => 'Now', - 'schedule' => 'Schedule', + 'now' => 'Jetzt', + 'schedule' => 'Planen', ], 'scheduled_publication_date' => 'Scheduled publication date', 'scheduled_publication_date_hint' => @@ -273,18 +273,18 @@ return [ 'cancel_publication' => 'Cancel publication', 'message_warning' => 'You did not write a message for your announcement post!', 'message_warning_hint' => 'Having a message increases social engagement, resulting in a better visibility for your podcast.', - 'message_warning_submit' => 'Publish anyway', + 'message_warning_submit' => 'Dennoch veröffentlichen', ], 'publication_status_banner' => [ - 'draft_mode' => 'draft mode', - 'not_published' => 'This podcast is not yet published.', + 'draft_mode' => 'Entwurfsmodus', + 'not_published' => 'Dieser Podcast ist noch nicht veröffentlicht.', 'scheduled' => 'This podcast is scheduled for publication on {publication_date}.', ], 'delete_form' => [ 'disclaimer' => "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", - 'understand' => 'I understand, I want the podcast to be permanently deleted', - 'submit' => 'Delete', + 'understand' => 'Ich verstehe, ich möchte, dass der Podcast dauerhaft gelöscht wird', + 'submit' => 'Löschen', ], 'by' => 'Von {publisher}', 'season' => 'Staffel {seasonNumber}', @@ -294,12 +294,12 @@ return [ 'no_episode' => 'Keine Folge gefunden!', 'follow' => 'Folgen', 'followers' => '{numberOfFollowers, plural, - one {# follower} - other {# followers} + one {# Follower} + other {# Follower} }', 'posts' => '{numberOfPosts, plural, - one {# post} - other {# posts} + one {# Beitrag} + other {# Beiträge} }', 'activity' => 'Aktivitäten', 'episodes' => 'Folgen', diff --git a/modules/Admin/Language/de/PodcastImport.php b/modules/Admin/Language/de/PodcastImport.php index 20153bc7..7eb3d60a 100644 --- a/modules/Admin/Language/de/PodcastImport.php +++ b/modules/Admin/Language/de/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + 'Der Import kann lange dauern. Da die aktuelle Version keinen Fortschritt anzeigt, werden Sie bis zur Beendigung keine Veränderung sehen. Im Falle eines Timeouts, erhöhen Sie den `max_execution_time` Wert.', 'old_podcast_section_title' => 'Der zu importierende Podcast', 'old_podcast_section_subtitle' => 'Stellen Sie sicher, dass Sie die Rechte für diesen Podcast besitzen, bevor Sie ihn importieren. Vervielfältigung und Ausstrahlung eines Podcasts ohne die entsprechenden Rechte sind Piraterie und strafbar.', diff --git a/modules/Admin/Language/de/PodcastNavigation.php b/modules/Admin/Language/de/PodcastNavigation.php index 088887f3..4feafcfb 100644 --- a/modules/Admin/Language/de/PodcastNavigation.php +++ b/modules/Admin/Language/de/PodcastNavigation.php @@ -26,8 +26,8 @@ return [ 'podcast-analytics-listening-time' => 'Hörzeit', 'podcast-analytics-time-periods' => 'Zeiträume', 'premium' => 'Premium', - 'subscription-list' => 'All subscriptions', - 'subscription-add' => 'Add subscription', + 'subscription-list' => 'Alle Abonnements', + 'subscription-add' => 'Abonnement hinzufügen', 'contributors' => 'Administratoren', 'contributor-list' => 'Alle Unterstützer', 'contributor-add' => 'Administrator hinzufügen', diff --git a/modules/Admin/Language/de/Settings.php b/modules/Admin/Language/de/Settings.php index 9484c30e..551f4070 100644 --- a/modules/Admin/Language/de/Settings.php +++ b/modules/Admin/Language/de/Settings.php @@ -15,7 +15,7 @@ return [ 'site_icon' => 'Webseiten-Icon', 'site_icon_delete' => 'Lösche Webseiten-Icon', 'site_icon_hint' => 'Webseiten-Icons sind das, was Sie auf Ihrem Browser Tabs, Lesezeichenleiste und wenn Sie eine Website als Verknüpfung auf mobilen Geräten hinzufügen, sehen.', - 'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', + 'site_icon_helper' => 'Das Icon muss quadratisch und mindestens 512px breit und hoch sein.', 'site_name' => 'Seitenname', 'site_description' => 'Seitenbeschreibung', 'submit' => 'Speichern', @@ -35,8 +35,8 @@ return [ 'reset_counts_helper' => 'Diese Option wird alle Datenzähler neu berechnen und zurücksetzen (Anzahl der Follower, Beiträge, Kommentare, …).', 'rewrite_media' => 'Medien-Metadaten neu schreiben', 'rewrite_media_helper' => 'Diese Option wird alle überflüssigen Mediendateien löschen und neu erstellen (Bilder, Audiodateien, Transkripte, Kapitel …)', - 'rename_episodes_files' => 'Rename episode audio files', - 'rename_episodes_files_hint' => 'This option will rename all episodes audio files to a random string of characters. Use this if one of your private episodes link was leaked as this will effectively hide it.', + 'rename_episodes_files' => 'Audiodateien der Episode umbenennen', + 'rename_episodes_files_hint' => 'Diese Option wird alle Audiodateien der Episode mit einer zufälligen Zeichenkette umbenennen. Benutzen Sie diese Option, wenn einer Ihrer privaten Episoden-Links durchsickert, da diese dadurch versteckt werden.', 'clear_cache' => 'Alle Caches löschen', 'clear_cache_helper' => 'Diese Option leert den redis-Cache oder beschreibbare/cache-Dateien.', 'run' => 'Systempflege starten', diff --git a/modules/Admin/Language/gl/AboutCastopod.php b/modules/Admin/Language/gl/AboutCastopod.php index 3fb62aff..3c26b13f 100644 --- a/modules/Admin/Language/gl/AboutCastopod.php +++ b/modules/Admin/Language/gl/AboutCastopod.php @@ -9,14 +9,14 @@ declare(strict_types=1); */ return [ - 'title' => 'About Castopod', - 'host_name' => 'Host name', - 'version' => 'Castopod version', - 'php_version' => 'PHP version', - 'os' => 'Operating System', - 'languages' => 'Languages', - 'update_database' => 'Update database', + 'title' => 'Acerca de Castopod', + 'host_name' => 'Nome do servidor', + 'version' => 'Versión de Castopod', + 'php_version' => 'Versión de PHP', + 'os' => 'Sistema Operativo', + 'languages' => 'Idiomas', + 'update_database' => 'Anovar base de datos', 'messages' => [ - 'databaseUpdateSuccess' => 'Database is up to date!', + 'databaseUpdateSuccess' => 'A base de datos está ao día!', ], ]; diff --git a/modules/Admin/Language/gl/Breadcrumb.php b/modules/Admin/Language/gl/Breadcrumb.php index 4716a004..60a9c487 100644 --- a/modules/Admin/Language/gl/Breadcrumb.php +++ b/modules/Admin/Language/gl/Breadcrumb.php @@ -14,22 +14,22 @@ return [ ->gateway => 'Inicio', 'podcasts' => 'podcasts', 'episodes' => 'episodios', - 'subscriptions' => 'subscriptions', + 'subscriptions' => 'subscricións', 'contributors' => 'contribúen', 'pages' => 'páxinas', 'settings' => 'axustes', 'theme' => 'decorado', - 'about' => 'about', + 'about' => 'acerca de', 'add' => 'engadir', 'new' => 'novo', 'edit' => 'editar', 'persons' => 'persoas', 'publish' => 'publicar', 'publish-edit' => 'editar publicación', - 'publish-date-edit' => 'edit publication date', + 'publish-date-edit' => 'editar data de publicación', 'unpublish' => 'retirar publicación', 'delete' => 'eliminar', - 'remove' => 'remove', + 'remove' => 'eliminar', 'fediverse' => 'fediverso', 'block-lists' => 'listas de bloqueo', 'users' => 'usuarias', @@ -50,5 +50,5 @@ return [ 'video-clips' => 'clips de vídeo', 'embed' => 'reprodutor para incluír', 'notifications' => 'notificacións', - 'suspend' => 'suspend', + 'suspend' => 'suspender', ]; diff --git a/modules/Admin/Language/gl/Episode.php b/modules/Admin/Language/gl/Episode.php index 9e2da4b4..aa6e2a88 100644 --- a/modules/Admin/Language/gl/Episode.php +++ b/modules/Admin/Language/gl/Episode.php @@ -24,14 +24,14 @@ return [ 'edit' => 'Editar', 'publish' => 'Publicar', 'publish_edit' => 'Editar publicación', - 'publish_date_edit' => 'Edit publication date', + 'publish_date_edit' => 'Editar data de publicación', 'unpublish' => 'Retirar publicación', 'publish_error' => 'O episodio xa está publicado.', 'publish_edit_error' => 'O episodio xa está publicado.', 'publish_cancel_error' => 'O episodio xa está publicado.', - 'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.', - 'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.', - 'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!', + 'publish_date_edit_error' => 'O episodio aínda non se publicou, non podes editar a súa data de publicación.', + 'publish_date_edit_future_error' => 'A data de publicación do episodio só pode establecerse nun momento do pasado! Se queres reprogramalo, primeiro retira a súa publicación.', + 'publish_date_edit_success' => 'Actualizada correctamente a data de publicación do episodio!', 'unpublish_error' => 'O episodio non foi publicado.', 'delete' => 'Eliminar', 'go_to_page' => 'Ir á páxina', @@ -114,7 +114,7 @@ return [ 'bonus_hint' => 'Contido extra para o programa (por exemplo, info sobre a elaboración ou conversa casual cos participantes) ou contido promocional de outras creadoras', ], 'premium_title' => 'Premium', - 'premium' => 'Episode must be accessible to premium subscribers only', + 'premium' => 'Episodio dispoñible só para subscricións premium', 'parental_advisory' => [ 'label' => 'Aviso sobre o contido', 'hint' => 'Contén o episodio elementos explícitos?', @@ -183,9 +183,9 @@ return [ 'message_warning_submit' => 'Publicar igualmente', ], 'publish_date_edit_form' => [ - 'new_publication_date' => 'New publication date', - 'new_publication_date_hint' => 'Must be set to a past date.', - 'submit' => 'Edit publication date', + 'new_publication_date' => 'Nova data de publicación', + 'new_publication_date_hint' => 'Ten que ser unha data do pasado.', + 'submit' => 'Editar data de publicación', ], 'unpublish_form' => [ 'disclaimer' => diff --git a/modules/Admin/Language/sk/Breadcrumb.php b/modules/Admin/Language/sk/Breadcrumb.php index 4afaa5d4..e9daf15e 100644 --- a/modules/Admin/Language/sk/Breadcrumb.php +++ b/modules/Admin/Language/sk/Breadcrumb.php @@ -14,22 +14,22 @@ return [ ->gateway => 'Úvod', 'podcasts' => 'podcasty', 'episodes' => 'časti', - 'subscriptions' => 'subscriptions', + 'subscriptions' => 'odbery', 'contributors' => 'prispievatelia', 'pages' => 'stránky', 'settings' => 'nastavenia', 'theme' => 'vzhľad', - 'about' => 'about', + 'about' => 'informácie', 'add' => 'pridať', 'new' => 'pridať', 'edit' => 'upraviť', 'persons' => 'osobnosti', 'publish' => 'zverejniť', 'publish-edit' => 'upraviť zverejnené', - 'publish-date-edit' => 'edit publication date', + 'publish-date-edit' => 'upraviť dátum publikovania', 'unpublish' => 'zrušiť zverejnenie', 'delete' => 'vymazať', - 'remove' => 'remove', + 'remove' => 'odstrániť', 'fediverse' => 'fediverse', 'block-lists' => 'zoznamy blokovaných', 'users' => 'používatelia', @@ -50,5 +50,5 @@ return [ 'video-clips' => 'video klipy', 'embed' => 'vnorený', 'notifications' => 'oboznámenia', - 'suspend' => 'suspend', + 'suspend' => 'pozastaviť', ]; diff --git a/modules/Admin/Language/sk/Countries.php b/modules/Admin/Language/sk/Countries.php index 1077917e..870a5a5b 100644 --- a/modules/Admin/Language/sk/Countries.php +++ b/modules/Admin/Language/sk/Countries.php @@ -13,7 +13,7 @@ declare(strict_types=1); return [ 'AD' => 'Andorra', 'AE' => 'Spojené Arabské Emiráty', - 'AF' => 'Afghanistan', + 'AF' => 'Afganistan', 'AG' => 'Antigua a Barbuda', 'AI' => 'Anguilla', 'AL' => 'Albánsko', @@ -25,7 +25,7 @@ return [ 'AT' => 'Rakúsko', 'AU' => 'Austrália', 'AW' => 'Aruba', - 'AX' => 'Åland Islands', + 'AX' => 'Ålandy', 'AZ' => 'Azerbajdžan', 'BA' => 'Bosna a Hercegovina', 'BB' => 'Barbados', @@ -33,36 +33,41 @@ return [ 'BE' => 'Belgicko', 'BF' => 'Burkina Faso', 'BG' => 'Bulharsko', - 'BH' => 'Bahrain', + 'BH' => 'Bahrajn', 'BI' => 'Burundi', 'BJ' => 'Benin', - 'BL' => 'Saint Barthélemy', - 'BM' => 'Bermuda', - 'BN' => 'Brunei Darussalam', - 'BO' => 'Bolivia, Plurinational State of', - 'BQ' => 'Bonaire, Sint Eustatius and Saba', - 'BR' => 'Brazil', - 'BS' => 'Bahamas', - 'BT' => 'Bhutan', - 'BV' => 'Bouvet Island', + 'BL' => 'Svätý Bartolomej', + 'BM' => 'Bermudy', + 'BN' => 'Brunejsko-Darussalamsky Štát', + 'BO' => 'Bolívia, plurinský štát', + 'BQ' => 'Bonaire, Sint Eustatius a Sabaj', + 'BR' => 'Brazília', + 'BS' => 'Bahamy', + 'BT' => 'Bhután', + 'BV' => 'Bouvetov ostrov', 'BW' => 'Botswana', - 'BY' => 'Belarus', + 'BY' => 'Bielorusko', 'BZ' => 'Belize', - 'CA' => 'Canada', - 'CC' => 'Cocos (Keeling) Islands', - 'CD' => 'Congo, the Democratic Republic of the', - 'CF' => 'Central African Republic', - 'CG' => 'Congo', - 'CH' => 'Switzerland', - 'CI' => "Côte d'Ivoire", - 'CK' => 'Cook Islands', - 'CL' => 'Chile', - 'CM' => 'Cameroon', + 'CA' => 'Kanada', + 'CC' => 'Kokosové ostrovy', + 'CD' => ' +Bhután +Bouvetov ostrov +Bielorusko +Kokosové ostrovy +Konžská demokratická republika', + 'CF' => 'Stredoafrická republika', + 'CG' => 'Kongo', + 'CH' => 'Švajčiarsko', + 'CI' => "Pobrežie slonoviny", + 'CK' => 'Cookove ostrovy', + 'CL' => 'Čile', + 'CM' => 'Kamerun', 'CN' => 'Čína', 'CO' => 'Kolumbia', 'CR' => 'Kostarika', 'CU' => 'Kuba', - 'CV' => 'Cape Verde', + 'CV' => 'Kapverdy', 'CW' => 'Curaçao', 'CX' => 'Vianočný Ostrov', 'CY' => 'Cyprus', @@ -70,7 +75,7 @@ return [ 'DE' => 'Nemecko', 'DJ' => 'Džibutsko', 'DK' => 'Dánsko', - 'DM' => 'Dominica', + 'DM' => 'Dominika', 'DO' => 'Dominikánska republika', 'DZ' => 'Alžírsko', 'EC' => 'Ekvádor', @@ -83,22 +88,22 @@ return [ 'FI' => 'Fínsko', 'FJ' => 'Fidži', 'FK' => 'Falklandské ostrovy (Malvíny)', - 'FM' => 'Micronesia, Federated States of', + 'FM' => 'Mikronézia, federatívne štáty', 'FO' => 'Faerské Ostrovy', 'FR' => 'Francúzsko', 'GA' => 'Gabon', 'GB' => 'Spojené Kráľovstvo', 'GD' => 'Grenada', 'GE' => 'Gruzínsko', - 'GF' => 'French Guiana', + 'GF' => 'Francúzska Guayana', 'GG' => 'Guernsey', 'GH' => 'Ghana', - 'GI' => 'Gibraltar', + 'GI' => 'Gibraltár', 'GL' => 'Grónsko', 'GM' => 'Gambia', 'GN' => 'Guinea', 'GP' => 'Guadeloupe', - 'GQ' => 'Equatorial Guinea', + 'GQ' => 'Rovníková Guinea', 'GR' => 'Grécko', 'GS' => 'Južná Georgia a Južné Sandwichove ostrovy', 'GT' => 'Guatemala', @@ -113,7 +118,7 @@ return [ 'HU' => 'Maďarsko', 'ID' => 'Indonézia', 'IE' => 'Írsko', - 'IL' => 'Israel', + 'IL' => 'Izrael', 'IM' => 'Ostrov Man', 'IN' => 'India', 'IO' => 'Britské indickooceánske územie', @@ -129,18 +134,31 @@ return [ 'KG' => 'Kirgizsko', 'KH' => 'Kambodža', 'KI' => 'Kiribati', - 'KM' => 'Comoros', - 'KN' => 'Saint Kitts and Nevis', - 'KP' => "Korea, Democratic People's Republic of", - 'KR' => 'Korea, Republic of', - 'KW' => 'Kuwait', - 'KY' => 'Cayman Islands', - 'KZ' => 'Kazakhstan', - 'LA' => "Lao People's Democratic Republic", + 'KM' => 'Komory', + 'KN' => 'Svätý Krištof a Nevis', + 'KP' => "Kórea, Demokratická ľudová republika", + 'KR' => 'Kórejská Republika', + 'KW' => 'Kuvajt', + 'KY' => 'Kajmanské ostrovy', + 'KZ' => 'Kazachstan', + 'LA' => "_03 slovutny poprad. mp3 +Kapverdy +Dominika +Mikronézia, federatívne štáty +Francúzska Guayana +Rovníková Guinea +Komory +Svätý Krištof a Nevis +Kórea, Demokratická ľudová republika +Kórejská Republika +Kuvajt +Kajmanské ostrovy +Kazachstan +Laoská ľudovodemokratická Republika", 'LB' => 'Libanon', 'LC' => 'Svätá Lucia', 'LI' => 'Lichtenštajnsko', - 'LK' => 'Sri Lanka', + 'LK' => 'Srí Lanka', 'LR' => 'Libéria', 'LS' => 'Lesotho', 'LT' => 'Litva', @@ -151,21 +169,21 @@ return [ 'MC' => 'Monako', 'MD' => 'Moldavská Republika', 'ME' => 'Čierna Hora', - 'MF' => 'Saint Martin (French part)', + 'MF' => 'Svätý Martin (Francúzska časť)', 'MG' => 'Madagaskar', - 'MH' => 'Marshall Islands', + 'MH' => 'Marshallove ostrovy', 'MK' => 'Macedónsko-Bývalá Juhoslovanská Republika', 'ML' => 'Mali', 'MM' => 'Mjanmarsko', 'MN' => 'Mongolsko', 'MO' => 'Macao', - 'MP' => 'Northern Mariana Islands', - 'MQ' => 'Martinique', - 'MR' => 'Mauritania', + 'MP' => 'Severné Mariány', + 'MQ' => 'Martinik', + 'MR' => 'Mauritánia', 'MS' => 'Montserrat', 'MT' => 'Malta', - 'MU' => 'Mauritius', - 'MV' => 'Maldives', + 'MU' => 'Maurícius', + 'MV' => 'Maledivy', 'MW' => 'Malawi', 'MX' => 'Mexiko', 'MY' => 'Malajzia', @@ -254,7 +272,7 @@ return [ 'VI' => 'Americké Panenské ostrovy', 'VN' => 'Vietnam', 'VU' => 'Vanuatu', - 'WF' => 'Wallis and Futuna', + 'WF' => 'Wallis a Futuna', 'WS' => 'Samoa', 'YE' => 'Jemen', 'YT' => 'Mayotte', diff --git a/modules/Admin/Language/sk/Episode.php b/modules/Admin/Language/sk/Episode.php index a731c0e2..69edd601 100644 --- a/modules/Admin/Language/sk/Episode.php +++ b/modules/Admin/Language/sk/Episode.php @@ -26,14 +26,14 @@ return [ 'edit' => 'Upraviť', 'publish' => 'Zverejniť', 'publish_edit' => 'Upraviť zverejnenie', - 'publish_date_edit' => 'Edit publication date', + 'publish_date_edit' => 'Upraviť dátum zverejnenia', 'unpublish' => 'Zrušiť zverejnenie', 'publish_error' => 'Epizóda je už zverejnená.', 'publish_edit_error' => 'Epizóda je už zverejnená.', 'publish_cancel_error' => 'Epizóda je už zverejnená.', - 'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.', - 'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.', - 'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!', + 'publish_date_edit_error' => 'Epizóda zatiaľ nie je zverejnená, nie je možné upraviť dátum zverejnenia.', + 'publish_date_edit_future_error' => 'Dátum zverejnenia musí byť v minulosti! Ak si zverejnenie želáte naplánovať v budúcnosti, musíte ho najskôr zrušiť.', + 'publish_date_edit_success' => 'Dátum zverejnenia epizódy bol úspešne aktualizovaný!', 'unpublish_error' => 'Epizóda nie je zverejnená.', 'delete' => 'Vymazať', 'go_to_page' => 'Prejsť na stránku', @@ -94,45 +94,45 @@ return [ ], 'form' => [ 'file_size_error' => - 'Your file size is too big! Max size is {0}. Increase the `memory_limit`, `upload_max_filesize` and `post_max_size` values in your php configuration file then restart your web server to upload your file.', + 'Súbor je príliš veľký! Maximálna povolená veľkosť je {0}. V konfigurácii Php zvýšte hodnoty nastavení `memory_limit`, `upload_max_filesize` a `post_max_size` a následne reštartujte web server, aby ste súbor mohli nahrať znovu.', 'audio_file' => 'Zvukový súbor', 'audio_file_hint' => 'Vyberte zvukový súbor .mp3, alebo .m4a.', 'info_section_title' => 'Informácie o časti', 'cover' => 'Obal k časti', 'cover_hint' => - 'If you do not set a cover, the podcast cover will be used instead.', - 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', + 'Ak obrázok nepridáte, použije sa obrázok podcastu.', + 'cover_size_hint' => 'Obrázok musí byť štvorcový minimálny rozmer 1400px.', 'title' => 'Názov', 'title_hint' => - 'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.', + 'Má obsahovať jasný a výstižný názov. Nepridávajte čísla sérií a epizód.', 'permalink' => 'Trvalý odkaz', - 'season_number' => 'Season', + 'season_number' => 'Séria', 'episode_number' => 'Epizóda', 'type' => [ - 'label' => 'Type', - 'full' => 'Full', - 'full_hint' => 'Complete content (the episode)', - 'trailer' => 'Trailer', - 'trailer_hint' => 'Short, promotional piece of content that represents a preview of the current show', + 'label' => 'Typ', + 'full' => 'Celá epizóda', + 'full_hint' => '´Uplný obsah', + 'trailer' => 'Upútavka', + 'trailer_hint' => 'Krátky promočný úryvok obsahu, ktorý slúži ako ukážka podcastu', 'bonus' => 'Bonus', - 'bonus_hint' => 'Extra content for the show (for example, behind the scenes info or interviews with the cast) or cross-promotional content for another show', + 'bonus_hint' => 'Doplnkový obsah podcastu (Informácie zo zákulisia alebo rozhovor s účinkujúcimi) alebo upútavka iného podcastu', ], - 'premium_title' => 'Premium', - 'premium' => 'Episode must be accessible to premium subscribers only', + 'premium_title' => 'Prémiový obsah', + 'premium' => 'Epizóda je prístupná len pre predplatiteľov prémiového obsahu', 'parental_advisory' => [ - 'label' => 'Parental advisory', - 'hint' => 'Does the episode contain explicit content?', - 'undefined' => 'undefined', - 'clean' => 'Clean', + 'label' => 'Rodičovská kontrola', + 'hint' => 'Obsahuje epizóda explicitný obsah?', + 'undefined' => 'neuvedené', + 'clean' => 'Čisté', 'explicit' => 'Chúlostivé', ], - 'show_notes_section_title' => 'Show notes', + 'show_notes_section_title' => 'Poznámky epizódy', 'show_notes_section_subtitle' => - 'Up to 4000 characters, be clear and concise. Show notes help potential listeners in finding the episode.', + 'Maximálne 4000 znakov, buďte jasní a výstižní.', 'description' => 'Popis', - 'description_footer' => 'Description footer', + 'description_footer' => 'Päta popisu', 'description_footer_hint' => - 'This text is added at the end of each episode description, it is a good place to input your social links for example.', + 'Tento text je pridaný na koniec popisu každej epizódy, je vhodný napríklad na zverejnenie odkazov na sociálne siete.', 'additional_files_section_title' => 'Dodatočné súbory', 'additional_files_section_subtitle' => 'Tieto súbory sú určené na použitie s inými platformami s cieľom poslucháčom poskytovať bohačšiu skúsenosť. Pre viac informácií si pozrite {podcastNamespaceLink}.', @@ -187,13 +187,13 @@ return [ 'message_warning_submit' => 'Napriek tomu zverejniť', ], 'publish_date_edit_form' => [ - 'new_publication_date' => 'New publication date', - 'new_publication_date_hint' => 'Must be set to a past date.', - 'submit' => 'Edit publication date', + 'new_publication_date' => 'Nový dátum zverejnenia', + 'new_publication_date_hint' => 'Musí byť dátum v minulosti.', + 'submit' => 'Upraviť dátum zverejnenia', ], 'unpublish_form' => [ 'disclaimer' => - "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", + "Zrušenie zverejnenia odstráni všetky pridružené príspevky a komentáre a odstráni epizódu z kanála RSS.", 'understand' => 'Rozumiem, chcem zrušiť zverejnenie epizódy', 'submit' => 'Zrušiť zverejnenie', ], @@ -210,8 +210,8 @@ return [ 'clipboard_iframe' => 'Skopírovať kód prehrávača do schránky', 'clipboard_url' => 'Skopírovať adresu do schránky', 'dark' => 'Tmavý', - 'dark-transparent' => 'Dark transparent', - 'light' => 'Light', - 'light-transparent' => 'Light transparent', + 'dark-transparent' => 'Tmavý priehľadný', + 'light' => 'Svetlý', + 'light-transparent' => 'Svetlý priehľadný', ], ]; diff --git a/modules/Admin/Language/sk/EpisodeNavigation.php b/modules/Admin/Language/sk/EpisodeNavigation.php index d60ef396..6283072b 100644 --- a/modules/Admin/Language/sk/EpisodeNavigation.php +++ b/modules/Admin/Language/sk/EpisodeNavigation.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'go_to_page' => 'Zobraziť stránku časti', - 'dashboard' => 'Episode dashboard', + 'dashboard' => 'Nástenka epizódy', 'episode-view' => 'Domov', 'episode-edit' => 'Upraviť časť', 'episode-persons-manage' => 'Manage persons', diff --git a/modules/Admin/Language/sv/AboutCastopod.php b/modules/Admin/Language/sv/AboutCastopod.php index 3fb62aff..f9707cbe 100644 --- a/modules/Admin/Language/sv/AboutCastopod.php +++ b/modules/Admin/Language/sv/AboutCastopod.php @@ -9,14 +9,14 @@ declare(strict_types=1); */ return [ - 'title' => 'About Castopod', - 'host_name' => 'Host name', + 'title' => 'Om Castopod', + 'host_name' => 'Värdnamn', 'version' => 'Castopod version', 'php_version' => 'PHP version', - 'os' => 'Operating System', - 'languages' => 'Languages', - 'update_database' => 'Update database', + 'os' => 'Operativsystem', + 'languages' => 'Språk', + 'update_database' => 'Uppdatera databas', 'messages' => [ - 'databaseUpdateSuccess' => 'Database is up to date!', + 'databaseUpdateSuccess' => 'Databasen är uppdaterad!', ], ]; diff --git a/modules/Admin/Language/sv/Breadcrumb.php b/modules/Admin/Language/sv/Breadcrumb.php index b1742abf..84778eaa 100644 --- a/modules/Admin/Language/sv/Breadcrumb.php +++ b/modules/Admin/Language/sv/Breadcrumb.php @@ -11,44 +11,44 @@ declare(strict_types=1); return [ 'label' => 'breadcrumb', config('Admin') - ->gateway => 'Home', + ->gateway => 'Hem', 'podcasts' => 'podcasts', - 'episodes' => 'episodes', - 'subscriptions' => 'subscriptions', - 'contributors' => 'contributors', - 'pages' => 'pages', - 'settings' => 'settings', - 'theme' => 'theme', - 'about' => 'about', - 'add' => 'add', - 'new' => 'new', - 'edit' => 'edit', - 'persons' => 'persons', - 'publish' => 'publish', - 'publish-edit' => 'edit publication', - 'publish-date-edit' => 'edit publication date', - 'unpublish' => 'unpublish', - 'delete' => 'delete', - 'remove' => 'remove', + 'episodes' => 'avsnitt', + 'subscriptions' => 'prenumerationer', + 'contributors' => 'bidragsgivare', + 'pages' => 'sidor', + 'settings' => 'inställningar', + 'theme' => 'tema', + 'about' => 'om', + 'add' => 'lägg till', + 'new' => 'ny', + 'edit' => 'redigera', + 'persons' => 'personer', + 'publish' => 'publicera', + 'publish-edit' => 'redigera publikation', + 'publish-date-edit' => 'redigera publiceringsdatum', + 'unpublish' => 'avpublicera', + 'delete' => 'radera', + 'remove' => 'ta bort', 'fediverse' => 'fediverse', - 'block-lists' => 'block lists', - 'users' => 'users', - 'my-account' => 'my account', - 'change-password' => 'change password', - 'import' => 'feed import', - 'platforms' => 'platforms', - 'social' => 'social networks', - 'funding' => 'funding', - 'analytics' => 'analytics', - 'locations' => 'locations', - 'webpages' => 'web pages', - 'unique-listeners' => 'unique listeners', - 'players' => 'players', - 'listening-time' => 'listening time', - 'time-periods' => 'time periods', - 'soundbites' => 'soundbites', - 'video-clips' => 'video clips', - 'embed' => 'embeddable player', - 'notifications' => 'notifications', - 'suspend' => 'suspend', + 'block-lists' => 'block listor', + 'users' => 'användare', + 'my-account' => 'mitt konto', + 'change-password' => 'ändra lösenord', + 'import' => 'import av flöde', + 'platforms' => 'plattformar', + 'social' => 'sociala nätverk', + 'funding' => 'finansiering', + 'analytics' => 'analys', + 'locations' => 'platser', + 'webpages' => 'webbplatser', + 'unique-listeners' => 'unika lyssnare', + 'players' => 'spelare', + 'listening-time' => 'lyssningstid', + 'time-periods' => 'tidsperiod', + 'soundbites' => 'ljudklipp', + 'video-clips' => 'videoklipp', + 'embed' => 'inbäddad spelare', + 'notifications' => 'aviseringar', + 'suspend' => 'suspendera', ]; diff --git a/modules/Admin/Language/sv/Charts.php b/modules/Admin/Language/sv/Charts.php index 4b33530e..708e96f8 100644 --- a/modules/Admin/Language/sv/Charts.php +++ b/modules/Admin/Language/sv/Charts.php @@ -9,32 +9,32 @@ declare(strict_types=1); */ return [ - 'by_service_weekly' => 'Episode downloads by service (for the past week)', - 'by_player_weekly' => 'Episode downloads by player (for the past week)', - 'by_player_yearly' => 'Episode downloads by player (for the past year)', - 'by_device_weekly' => 'Episode downloads by device (for the past week)', - 'by_os_weekly' => 'Episode downloads by O.S. (for the past week)', - 'podcast_by_region' => 'Episode downloads by region (for the past week)', - 'unique_daily_listeners' => 'Daily unique listeners', - 'unique_monthly_listeners' => 'Monthly unique listeners', - 'by_browser' => 'Web pages usage by browser (for the past week)', - 'podcast_by_day' => 'Episode daily downloads', - 'podcast_by_month' => 'Episode monthly downloads', - 'episode_by_day' => 'Episode daily downloads (first 60 days)', - 'episode_by_month' => 'Episode monthly downloads', + 'by_service_weekly' => 'Avsnitt nedladdningar via tjänst (under den senaste veckan)', + 'by_player_weekly' => 'Nedladdningar av avsnitt via spelare (under den senaste veckan)', + 'by_player_yearly' => 'Nedladdningar av avsnitt via spelare (under det gångna året)', + 'by_device_weekly' => 'Avsnitt nedladdningar per enhet (föregående veckan)', + 'by_os_weekly' => 'Avsnitt nedladdningar av O.S. (för den föregående veckan)', + 'podcast_by_region' => 'Nedladdningar av avsnitt efter region (under den föregående veckan)', + 'unique_daily_listeners' => 'Dagliga unika lyssnare', + 'unique_monthly_listeners' => 'Unika lyssnare varje månad', + 'by_browser' => 'Webbsidor användning av webbläsare (under den föregående veckan)', + 'podcast_by_day' => 'Avsnitt dagliga nedladdningar', + 'podcast_by_month' => 'Månatliga nedladdningar av avsnitt', + 'episode_by_day' => 'Avsnitt dagliga nedladdningar (första 60 dagar)', + 'episode_by_month' => 'Månatliga nedladdningar av avsnitt', 'episodes_by_day' => - '5 latest episodes downloads (during their first 60 days)', - 'by_country_weekly' => 'Episode downloads by country (for the past week)', - 'by_country_yearly' => 'Episode downloads by country (for the past year)', - 'by_domain_weekly' => 'Web pages visits by source (for the past week)', - 'by_domain_yearly' => 'Web pages visits by source (for the past year)', - 'by_entry_page' => 'Web pages visits by landing page (for the past week)', + '5 senaste avsnitt nedladdningar (under sina första 60 dagar)', + 'by_country_weekly' => 'Nedladdningar av avsnitt per land (under den föregående veckan)', + 'by_country_yearly' => 'Nedladdningar av avsnitt per land (för föregående året)', + 'by_domain_weekly' => 'Webbsidor besök per källa (under föregående veckan)', + 'by_domain_yearly' => 'Webbsidor besök per källa (för det gångna året)', + 'by_entry_page' => 'Webbsidor besök via startsida (under den föregående veckan)', 'podcast_bots' => 'Bots (crawlers)', - 'daily_listening_time' => 'Daily cumulative listening time', - 'monthly_listening_time' => 'Monthly cumulative listening time', - 'by_weekday' => 'By week day (for the past 60 days)', - 'by_hour' => 'By time of day (for the past 60 days)', - 'podcast_by_bandwidth' => 'Daily used bandwidth (in MB)', - 'total_storage_by_month' => 'Monthly storage (in MB)', - 'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)', + 'daily_listening_time' => 'Daglig kumulativ lyssningstid', + 'monthly_listening_time' => 'Månatlig kumulativ lyssningstid', + 'by_weekday' => 'Efter veckodag (för de senaste 60 dagarna)', + 'by_hour' => 'Via tiden på dagen (de senaste 60 dagarna)', + 'podcast_by_bandwidth' => 'Dagligen använd bandbredd (i MB)', + 'total_storage_by_month' => 'Månadslagring (i MB)', + 'total_bandwidth_by_month' => 'Månatlig använd bandbredd (i MB)', ]; diff --git a/modules/Admin/Language/sv/Common.php b/modules/Admin/Language/sv/Common.php index 596c8bcd..ce69e0eb 100644 --- a/modules/Admin/Language/sv/Common.php +++ b/modules/Admin/Language/sv/Common.php @@ -9,43 +9,43 @@ declare(strict_types=1); */ return [ - 'yes' => 'Yes', - 'no' => 'No', - 'cancel' => 'Cancel', - 'optional' => 'Optional', - 'more' => 'More', - 'no_data' => 'No data found!', - 'close' => 'Close', - 'edit' => 'Edit', - 'copy' => 'Copy', - 'copied' => 'Copied!', - 'home' => 'Home', - 'explicit' => 'Explicit', - 'powered_by' => 'Powered by {castopod}', - 'actions' => 'Actions', - 'pageInfo' => 'Page {currentPage} out of {pageCount}', - 'go_back' => 'Go back', + 'yes' => 'Ja', + 'no' => 'Nej', + 'cancel' => 'Avbryt', + 'optional' => 'Valfritt', + 'more' => 'Mer', + 'no_data' => 'Ingen data hittades!', + 'close' => 'Stäng', + 'edit' => 'Redigera', + 'copy' => 'Kopiera', + 'copied' => 'Kopierad!', + 'home' => 'Hem', + 'explicit' => 'Uteslutande', + 'powered_by' => 'Drivs av {castopod}', + 'actions' => 'Åtgärder', + 'pageInfo' => 'Sida {currentPage} av {pageCount}', + 'go_back' => 'Gå tillbaka', 'forms' => [ 'editor' => [ - 'write' => 'Write', - 'preview' => 'Preview', - 'help' => 'Powered by markdown', + 'write' => 'Skriv', + 'preview' => 'Förhandsgranska', + 'help' => 'Drivs av markdown', ], 'multiSelect' => [ - 'selectText' => 'Press to select', - 'loadingText' => 'Loading…', - 'noResultsText' => 'No results found', - 'noChoicesText' => 'No choices to choose from', - 'maxItemText' => 'Cannot add more items', + 'selectText' => 'Tryck för att välja', + 'loadingText' => 'Laddar…', + 'noResultsText' => 'Hittade inga resultat', + 'noChoicesText' => 'Inga val att välja mellan', + 'maxItemText' => 'Kan inte lägga till fler objekt', ], - 'upload_file' => 'Upload a file', - 'remote_url' => 'Remote URL', + 'upload_file' => 'Ladda upp en fil', + 'remote_url' => 'Fjärr URL', ], 'play_episode_button' => [ - 'play' => 'Play', - 'playing' => 'Playing', + 'play' => 'Spela', + 'playing' => 'Spelar', ], - 'size_limit' => 'Size limit: {0}.', - 'choose_interact' => 'Choose how to interact', - 'view' => 'View', + 'size_limit' => 'Storleksgräns: {0}.', + 'choose_interact' => 'Välj hur du vill interagera', + 'view' => 'Visa', ]; diff --git a/modules/Admin/Language/sv/Countries.php b/modules/Admin/Language/sv/Countries.php index 4cd5d9c8..1aed3bb0 100644 --- a/modules/Admin/Language/sv/Countries.php +++ b/modules/Admin/Language/sv/Countries.php @@ -12,253 +12,253 @@ declare(strict_types=1); return [ 'AD' => 'Andorra', - 'AE' => 'United Arab Emirates', + 'AE' => 'Förenade Arabemiraten', 'AF' => 'Afghanistan', - 'AG' => 'Antigua and Barbuda', + 'AG' => 'Antigua och Barbuda', 'AI' => 'Anguilla', - 'AL' => 'Albania', - 'AM' => 'Armenia', + 'AL' => 'Albanien', + 'AM' => 'Armenien', 'AO' => 'Angola', - 'AQ' => 'Antarctica', + 'AQ' => 'Antarktis', 'AR' => 'Argentina', - 'AS' => 'American Samoa', - 'AT' => 'Austria', - 'AU' => 'Australia', + 'AS' => 'Amerikanska Samoaöarna', + 'AT' => 'Österrike', + 'AU' => 'Australien', 'AW' => 'Aruba', - 'AX' => 'Åland Islands', - 'AZ' => 'Azerbaijan', - 'BA' => 'Bosnia and Herzegovina', + 'AX' => 'Åland', + 'AZ' => 'Azerbajdzjan', + 'BA' => 'Bosnien och Hercegovina', 'BB' => 'Barbados', 'BD' => 'Bangladesh', - 'BE' => 'Belgium', + 'BE' => 'Belgien', 'BF' => 'Burkina Faso', - 'BG' => 'Bulgaria', + 'BG' => 'Bulgarien', 'BH' => 'Bahrain', 'BI' => 'Burundi', 'BJ' => 'Benin', 'BL' => 'Saint Barthélemy', 'BM' => 'Bermuda', 'BN' => 'Brunei Darussalam', - 'BO' => 'Bolivia, Plurinational State of', - 'BQ' => 'Bonaire, Sint Eustatius and Saba', - 'BR' => 'Brazil', + 'BO' => 'Bolivia', + 'BQ' => 'Bonaire', + 'BR' => 'Brasilien', 'BS' => 'Bahamas', 'BT' => 'Bhutan', - 'BV' => 'Bouvet Island', + 'BV' => 'Bouvetön', 'BW' => 'Botswana', - 'BY' => 'Belarus', + 'BY' => 'Vitryssland', 'BZ' => 'Belize', - 'CA' => 'Canada', - 'CC' => 'Cocos (Keeling) Islands', - 'CD' => 'Congo, the Democratic Republic of the', - 'CF' => 'Central African Republic', - 'CG' => 'Congo', - 'CH' => 'Switzerland', - 'CI' => "Côte d'Ivoire", - 'CK' => 'Cook Islands', + 'CA' => 'Kanada', + 'CC' => 'Kokosöarna', + 'CD' => 'Kongo, Demokratiska republiken Kongo', + 'CF' => 'Centralafrikanska republiken', + 'CG' => 'Kongo', + 'CH' => 'Schweiz', + 'CI' => "Elfenbenskusten", + 'CK' => 'Cooköarna', 'CL' => 'Chile', - 'CM' => 'Cameroon', - 'CN' => 'China', + 'CM' => 'Kamerun', + 'CN' => 'Kina', 'CO' => 'Colombia', 'CR' => 'Costa Rica', - 'CU' => 'Cuba', - 'CV' => 'Cape Verde', - 'CW' => 'Curaçao', - 'CX' => 'Christmas Island', - 'CY' => 'Cyprus', - 'CZ' => 'Czech Republic', - 'DE' => 'Germany', + 'CU' => 'Kuba', + 'CV' => 'Kap Verde', + 'CW' => 'Curacao', + 'CX' => 'Julön', + 'CY' => 'Cypern', + 'CZ' => 'Tjeckien', + 'DE' => 'Tyskland', 'DJ' => 'Djibouti', - 'DK' => 'Denmark', + 'DK' => 'Danmark', 'DM' => 'Dominica', - 'DO' => 'Dominican Republic', - 'DZ' => 'Algeria', + 'DO' => 'Dominikanska republiken', + 'DZ' => 'Algeriet', 'EC' => 'Ecuador', - 'EE' => 'Estonia', - 'EG' => 'Egypt', - 'EH' => 'Western Sahara', + 'EE' => 'Estland', + 'EG' => 'Egypten', + 'EH' => 'Västsahara', 'ER' => 'Eritrea', - 'ES' => 'Spain', - 'ET' => 'Ethiopia', + 'ES' => 'Spanien', + 'ET' => 'Etiopien', 'FI' => 'Finland', 'FJ' => 'Fiji', - 'FK' => 'Falkland Islands (Malvinas)', - 'FM' => 'Micronesia, Federated States of', - 'FO' => 'Faroe Islands', - 'FR' => 'France', + 'FK' => 'Falklandsöarna (Malvinas)', + 'FM' => 'Mikronesien, Federerade Stater', + 'FO' => 'Färöarna', + 'FR' => 'Frankrike', 'GA' => 'Gabon', - 'GB' => 'United Kingdom', + 'GB' => 'Storbritannien', 'GD' => 'Grenada', - 'GE' => 'Georgia', - 'GF' => 'French Guiana', + 'GE' => 'Georgien', + 'GF' => 'Franska Guyana', 'GG' => 'Guernsey', 'GH' => 'Ghana', 'GI' => 'Gibraltar', - 'GL' => 'Greenland', + 'GL' => 'Grönland', 'GM' => 'Gambia', 'GN' => 'Guinea', 'GP' => 'Guadeloupe', 'GQ' => 'Equatorial Guinea', - 'GR' => 'Greece', - 'GS' => 'South Georgia and the South Sandwich Islands', + 'GR' => 'Grekland', + 'GS' => 'Sydgeorgien och Sydsandwichöarna', 'GT' => 'Guatemala', 'GU' => 'Guam', 'GW' => 'Guinea-Bissau', 'GY' => 'Guyana', - 'HK' => 'Hong Kong', - 'HM' => 'Heard Island and McDonald Islands', + 'HK' => 'Hongkong', + 'HM' => 'Heard Island och McDonaldsöarna', 'HN' => 'Honduras', - 'HR' => 'Croatia', + 'HR' => 'Kroatien', 'HT' => 'Haiti', - 'HU' => 'Hungary', - 'ID' => 'Indonesia', - 'IE' => 'Ireland', + 'HU' => 'Ungern', + 'ID' => 'Indonesien', + 'IE' => 'Irland', 'IL' => 'Israel', 'IM' => 'Isle of Man', - 'IN' => 'India', - 'IO' => 'British Indian Ocean Territory', - 'IQ' => 'Iraq', - 'IR' => 'Iran, Islamic Republic of', - 'IS' => 'Iceland', - 'IT' => 'Italy', + 'IN' => 'Indien', + 'IO' => 'Brittiska territoriet i Indiska oceanen', + 'IQ' => 'Irak', + 'IR' => 'Iran, Islamiska republiken av', + 'IS' => 'Island', + 'IT' => 'Italien', 'JE' => 'Jersey', 'JM' => 'Jamaica', - 'JO' => 'Jordan', + 'JO' => 'Jordanien', 'JP' => 'Japan', 'KE' => 'Kenya', 'KG' => 'Kyrgyzstan', - 'KH' => 'Cambodia', + 'KH' => 'Kambodja', 'KI' => 'Kiribati', - 'KM' => 'Comoros', - 'KN' => 'Saint Kitts and Nevis', - 'KP' => "Korea, Democratic People's Republic of", - 'KR' => 'Korea, Republic of', + 'KM' => 'Komorerna', + 'KN' => 'Saint Kitts och Nevis', + 'KP' => "Nordkorea", + 'KR' => 'Sydkorea', 'KW' => 'Kuwait', - 'KY' => 'Cayman Islands', - 'KZ' => 'Kazakhstan', - 'LA' => "Lao People's Democratic Republic", - 'LB' => 'Lebanon', - 'LC' => 'Saint Lucia', + 'KY' => 'Caymanöarna', + 'KZ' => 'Kazakstan', + 'LA' => "Laos", + 'LB' => 'Libanon', + 'LC' => 'Sankt Lucia', 'LI' => 'Liechtenstein', 'LK' => 'Sri Lanka', - 'LR' => 'Liberia', + 'LR' => 'Liberien', 'LS' => 'Lesotho', - 'LT' => 'Lithuania', + 'LT' => 'Litauen', 'LU' => 'Luxembourg', - 'LV' => 'Latvia', - 'LY' => 'Libya', - 'MA' => 'Morocco', + 'LV' => 'Lettland', + 'LY' => 'Libyen', + 'MA' => 'Marocko', 'MC' => 'Monaco', - 'MD' => 'Moldova, Republic of', + 'MD' => 'Moldavien', 'ME' => 'Montenegro', - 'MF' => 'Saint Martin (French part)', - 'MG' => 'Madagascar', - 'MH' => 'Marshall Islands', - 'MK' => 'Macedonia, the Former Yugoslav Republic of', + 'MF' => 'Saint Martin', + 'MG' => 'Madagaskar', + 'MH' => 'Marshallöarna', + 'MK' => 'Makedonien', 'ML' => 'Mali', 'MM' => 'Myanmar', - 'MN' => 'Mongolia', + 'MN' => 'Mongoliet', 'MO' => 'Macao', - 'MP' => 'Northern Mariana Islands', + 'MP' => 'Nordmarianerna', 'MQ' => 'Martinique', 'MR' => 'Mauritania', 'MS' => 'Montserrat', 'MT' => 'Malta', 'MU' => 'Mauritius', - 'MV' => 'Maldives', + 'MV' => 'Maldiverna', 'MW' => 'Malawi', - 'MX' => 'Mexico', + 'MX' => 'Mexiko', 'MY' => 'Malaysia', - 'MZ' => 'Mozambique', - 'N/A' => 'Not Applicable (local IP…)', + 'MZ' => 'Moçambique', + 'N/A' => 'Ej tillämplig (lokal IP…)', 'NA' => 'Namibia', - 'NC' => 'New Caledonia', + 'NC' => 'Nya Kaledonien', 'NE' => 'Niger', - 'NF' => 'Norfolk Island', + 'NF' => 'Norfolkön', 'NG' => 'Nigeria', 'NI' => 'Nicaragua', - 'NL' => 'Netherlands', - 'NO' => 'Norway', + 'NL' => 'Nederländerna', + 'NO' => 'Norge', 'NP' => 'Nepal', 'NR' => 'Nauru', 'NU' => 'Niue', - 'NZ' => 'New Zealand', + 'NZ' => 'Nya Zeeland', 'OM' => 'Oman', 'PA' => 'Panama', 'PE' => 'Peru', - 'PF' => 'French Polynesia', - 'PG' => 'Papua New Guinea', - 'PH' => 'Philippines', + 'PF' => 'Franska Polynesien', + 'PG' => 'Papua Nya Guinea', + 'PH' => 'Filippinerna', 'PK' => 'Pakistan', - 'PL' => 'Poland', - 'PM' => 'Saint Pierre and Miquelon', + 'PL' => 'Polen', + 'PM' => 'Saint Pierre och Miquelon', 'PN' => 'Pitcairn', 'PR' => 'Puerto Rico', - 'PS' => 'Palestine, State of', + 'PS' => 'Palestina', 'PT' => 'Portugal', 'PW' => 'Palau', 'PY' => 'Paraguay', 'QA' => 'Qatar', 'RE' => 'Réunion', - 'RO' => 'Romania', - 'RS' => 'Serbia', - 'RU' => 'Russian Federation', + 'RO' => 'Rumänien', + 'RS' => 'Serbien', + 'RU' => 'Ryssland', 'RW' => 'Rwanda', - 'SA' => 'Saudi Arabia', - 'SB' => 'Solomon Islands', - 'SC' => 'Seychelles', + 'SA' => 'Saudiarabien', + 'SB' => 'Salomonöarna', + 'SC' => 'Seychellerna', 'SD' => 'Sudan', - 'SE' => 'Sweden', + 'SE' => 'Sverige', 'SG' => 'Singapore', - 'SH' => 'Saint Helena, Ascension and Tristan da Cunha', - 'SI' => 'Slovenia', - 'SJ' => 'Svalbard and Jan Mayen', - 'SK' => 'Slovakia', + 'SH' => 'Sankta Helena, Ascension och Tristan da Cunha', + 'SI' => 'Slovenien', + 'SJ' => 'Svalbard', + 'SK' => 'Slovakien', 'SL' => 'Sierra Leone', 'SM' => 'San Marino', 'SN' => 'Senegal', 'SO' => 'Somalia', - 'SR' => 'Suriname', - 'SS' => 'South Sudan', - 'ST' => 'Sao Tome and Principe', + 'SR' => 'Surinam', + 'SS' => 'Sydsudan', + 'ST' => 'Sao Tome och Principe', 'SV' => 'El Salvador', - 'SX' => 'Sint Maarten (Dutch part)', - 'SY' => 'Syrian Arab Republic', + 'SX' => 'Sint Maarten (nederländska delen)', + 'SY' => 'Syrien', 'SZ' => 'Swaziland', - 'TC' => 'Turks and Caicos Islands', - 'TD' => 'Chad', - 'TF' => 'French Southern Territories', + 'TC' => 'Turks- och Caicosöarna', + 'TD' => 'Tchad', + 'TF' => 'Franska sydterritorierna', 'TG' => 'Togo', 'TH' => 'Thailand', 'TJ' => 'Tajikistan', - 'TK' => 'Tokelau', - 'TL' => 'Timor-Leste', + 'TK' => 'Tokelauöarna', + 'TL' => 'Östtimor', 'TM' => 'Turkmenistan', - 'TN' => 'Tunisia', + 'TN' => 'Tunisien', 'TO' => 'Tonga', - 'TR' => 'Turkey', - 'TT' => 'Trinidad and Tobago', + 'TR' => 'Turkiet', + 'TT' => 'Trinidad och Tobago', 'TV' => 'Tuvalu', - 'TW' => 'Taiwan, Province of China', - 'TZ' => 'Tanzania, United Republic of', - 'UA' => 'Ukraine', + 'TW' => 'Taiwan', + 'TZ' => 'Tanzania', + 'UA' => 'Ukraina', 'UG' => 'Uganda', - 'UM' => 'United States Minor Outlying Islands', - 'US' => 'United States', + 'UM' => 'Förenta staternas mindre öar i Oceanien och Västindien', + 'US' => 'USA', 'UY' => 'Uruguay', 'UZ' => 'Uzbekistan', - 'VA' => 'Holy See (Vatican City State)', - 'VC' => 'Saint Vincent and the Grenadines', - 'VE' => 'Venezuela, Bolivarian Republic of', - 'VG' => 'Virgin Islands, British', - 'VI' => 'Virgin Islands, U.S.', - 'VN' => 'Viet Nam', + 'VA' => 'Vatikanstaten', + 'VC' => 'Saint Vincent och Grenadinerna', + 'VE' => 'Venezuela', + 'VG' => 'Brittiska Jungfruöarna', + 'VI' => 'Amerikanska Jungfruöarna.', + 'VN' => 'Vietnam', 'VU' => 'Vanuatu', - 'WF' => 'Wallis and Futuna', + 'WF' => 'Wallis- och Futunaöarna', 'WS' => 'Samoa', - 'YE' => 'Yemen', + 'YE' => 'Jemen', 'YT' => 'Mayotte', - 'ZA' => 'South Africa', + 'ZA' => 'Sydafrika', 'ZM' => 'Zambia', 'ZW' => 'Zimbabwe', ]; diff --git a/modules/Admin/Language/sv/Dashboard.php b/modules/Admin/Language/sv/Dashboard.php index 881073fd..cf127945 100644 --- a/modules/Admin/Language/sv/Dashboard.php +++ b/modules/Admin/Language/sv/Dashboard.php @@ -9,20 +9,20 @@ declare(strict_types=1); */ return [ - 'home' => 'Admin dashboard', - 'welcome_message' => 'Welcome to the admin area!', + 'home' => 'Admin kontrollpanel', + 'welcome_message' => 'Välkommen till adminområdet!', 'podcasts' => [ 'title' => 'Podcasts', - 'not_found' => 'No published podcast', - 'last_published' => 'Last published on {lastPublicationDate}', + 'not_found' => 'Ingen publicerad podcast', + 'last_published' => 'Senast publicerad den {lastPublicationDate}', ], 'episodes' => [ - 'title' => 'Episodes', - 'not_found' => 'No published episode', - 'last_published' => 'Last published on {lastPublicationDate}', + 'title' => 'Avsnitt', + 'not_found' => 'Inga publicerade avsnitt', + 'last_published' => 'Senast publicerad den {lastPublicationDate}', ], 'storage' => [ - 'title' => 'Storage', - 'subtitle' => '{totalUploaded} out of {totalStorage}', + 'title' => 'Lagring', + 'subtitle' => '{totalUploaded} av {totalStorage}', ], ]; diff --git a/modules/Admin/Language/sv/Episode.php b/modules/Admin/Language/sv/Episode.php index 91313a7c..4daf1a0b 100644 --- a/modules/Admin/Language/sv/Episode.php +++ b/modules/Admin/Language/sv/Episode.php @@ -9,205 +9,205 @@ declare(strict_types=1); */ return [ - 'season' => 'Season {seasonNumber}', + 'season' => 'Säsong {seasonNumber}', 'season_abbr' => 'S{seasonNumber}', - 'number' => 'Episode {episodeNumber}', - 'number_abbr' => 'Ep. {episodeNumber}', - 'season_episode' => 'Season {seasonNumber} episode {episodeNumber}', - 'season_episode_abbr' => 'S{seasonNumber}E{episodeNumber}', + 'number' => 'Avsnitt {episodeNumber}', + 'number_abbr' => 'Av. {episodeNumber}', + 'season_episode' => 'Säsong {seasonNumber} avsnitt {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}A{episodeNumber}', 'number_of_comments' => '{numberOfComments, plural, - one {# comment} - other {# comments} + one {# kommentar} + other {# kommentarer} }', - 'all_podcast_episodes' => 'All podcast episodes', - 'back_to_podcast' => 'Go back to podcast', - 'edit' => 'Edit', - 'publish' => 'Publish', - 'publish_edit' => 'Edit publication', - 'publish_date_edit' => 'Edit publication date', - 'unpublish' => 'Unpublish', - 'publish_error' => 'Episode is already published.', - 'publish_edit_error' => 'Episode is already published.', - 'publish_cancel_error' => 'Episode is already published.', - 'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.', - 'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.', - 'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!', - 'unpublish_error' => 'Episode is not published.', - 'delete' => 'Delete', - 'go_to_page' => 'Go to page', - 'create' => 'Add an episode', + 'all_podcast_episodes' => 'Alla podcast avsnitt', + 'back_to_podcast' => 'Gå tillbaka till podcasten', + 'edit' => 'Redigera', + 'publish' => 'Publicera', + 'publish_edit' => 'Redigera publikation', + 'publish_date_edit' => 'Redigera publiceringsdatum', + 'unpublish' => 'Avpublicera', + 'publish_error' => 'Avsnittet är redan publicerat.', + 'publish_edit_error' => 'Avsnittet är redan publicerat.', + 'publish_cancel_error' => 'Avsnittet är redan publicerat.', + 'publish_date_edit_error' => 'Avsnittet har inte publicerats ännu, du kan inte redigera dess publiceringsdatum.', + 'publish_date_edit_future_error' => 'Avsnittets publiceringsdatum kan bara ställas in till ett tidigare datum! Om du vill boka om det, avpublicera det först.', + 'publish_date_edit_success' => 'Avsnittets publiceringsdatum har uppdaterats!', + 'unpublish_error' => 'Avsnittet är inte publicerat.', + 'delete' => 'Radera', + 'go_to_page' => 'Gå till sida', + 'create' => 'Lägg till ett avsnitt', 'publication_status' => [ - 'published' => 'Published', - 'with_podcast' => 'Published', - 'scheduled' => 'Scheduled', - 'not_published' => 'Not published', + 'published' => 'Publicerad', + 'with_podcast' => 'Publicerad', + 'scheduled' => 'Schemalagd', + 'not_published' => 'Ej publicerat', ], - 'with_podcast_hint' => 'To be published at the same time as the podcast', + 'with_podcast_hint' => 'Publiceras samtidigt som podcasten', 'list' => [ 'search' => [ - 'placeholder' => 'Search for an episode', - 'clear' => 'Clear search', - 'submit' => 'Search', + 'placeholder' => 'Sök efter ett avsnitt', + 'clear' => 'Rensa sökning', + 'submit' => 'Sök', ], 'number_of_episodes' => '{numberOfEpisodes, plural, - one {# episode} - other {# episodes} + one {# avsnitt} + other {# avsnitt} }', - 'episode' => 'Episode', - 'visibility' => 'Visibility', - 'comments' => 'Comments', - 'actions' => 'Actions', + 'episode' => 'Avsnitt', + 'visibility' => 'Synlighet', + 'comments' => 'Kommentarer', + 'actions' => 'Åtgärder', ], 'messages' => [ - 'createSuccess' => 'Episode has been successfully created!', - 'editSuccess' => 'Episode has been successfully updated!', + 'createSuccess' => 'Avsnittet har skapats!', + 'editSuccess' => 'Avsnittet har uppdaterats!', 'publishSuccess' => '{publication_status, select, - published {Episode successfully published!} - scheduled {Episode publication successfully scheduled!} - with_podcast {This episode will be published at the same time as the podcast.} - other {This episode is not published.} + published {Avsnittet har publicerats!} + scheduled {Avsnittspubliceringen har planerats!} + with_podcast {Detta avsnitt kommer att publiceras samtidigt som podcasten.} + other {Detta avsnitt är inte publicerad.} }', - 'publishCancelSuccess' => 'Episode publication successfully cancelled!', - 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', - 'scheduleDateError' => 'Schedule date must be set!', - 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', - 'deleteSuccess' => 'Episode successfully deleted!', - 'deleteError' => 'Failed to delete episode {type, select, + 'publishCancelSuccess' => 'Avsnitt publicering har avbrutits!', + 'unpublishBeforeDeleteTip' => 'Du måste avpublicera avsnittet innan du tar bort det.', + 'scheduleDateError' => 'Schemaläggningsdatum måste anges!', + 'deletePublishedEpisodeError' => 'Avpublicera avsnittet innan du tar bort det.', + 'deleteSuccess' => 'Avsnittet har tagits bort!', + 'deleteError' => 'Misslyckades att ta bort avsnitt {type, select, transcript {transcript} - chapters {chapters} - image {cover} - audio {audio} + chapters {kapitel} + image {omslag} + audio {ljud} other {media} }.', - 'deleteFileError' => 'Failed to delete {type, select, + 'deleteFileError' => 'Det gick inte att ta bort {type, select, transcript {transcript} - chapters {chapters} - image {cover} - audio {audio} + chapters {kapitel} + image {omslag} + audio {ljud} other {media} - } file {file_path}. You may manually remove it from your disk.', - 'sameSlugError' => 'An episode with the chosen slug already exists.', + } fil {file_path}. Du kan manuellt ta bort den från disken.', + 'sameSlugError' => 'Ett avsnitt med den valda slug finns redan.', ], 'form' => [ 'file_size_error' => - 'Your file size is too big! Max size is {0}. Increase the `memory_limit`, `upload_max_filesize` and `post_max_size` values in your php configuration file then restart your web server to upload your file.', - 'audio_file' => 'Audio file', - 'audio_file_hint' => 'Choose an .mp3 or .m4a audio file.', - 'info_section_title' => 'Episode info', - 'cover' => 'Episode cover', + 'Din filstorlek är för stor! Max storlek är {0}. Öka värdena `memory_limit`, `upload_max_filesize` och `post_max_size` i din php-konfigurationsfil och starta sedan om din webbserver för att ladda upp filen.', + 'audio_file' => 'Ljudfil', + 'audio_file_hint' => 'Välj en. mp3 eller . m4a ljudfil.', + 'info_section_title' => 'Avsnitt information', + 'cover' => 'Avsnitt omslag', 'cover_hint' => - 'If you do not set a cover, the podcast cover will be used instead.', - 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', - 'title' => 'Title', + 'Om du inte sätter ett omslag kommer podcast-omslaget att användas istället.', + 'cover_size_hint' => 'Omslaget måste vara fyrkantigt och minst 1400px brett och högt.', + 'title' => 'Rubrik', 'title_hint' => - 'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.', - 'permalink' => 'Permalink', - 'season_number' => 'Season', - 'episode_number' => 'Episode', + 'Bör innehålla ett tydligt och koncist avsnittsnamn. Ange inte avsnitt eller säsongsnummer här.', + 'permalink' => 'Permalänk', + 'season_number' => 'Säsong', + 'episode_number' => 'Avsnitt', 'type' => [ - 'label' => 'Type', + 'label' => 'Typ', 'full' => 'Full', - 'full_hint' => 'Complete content (the episode)', + 'full_hint' => 'Komplett innehåll (avsnittet)', 'trailer' => 'Trailer', - 'trailer_hint' => 'Short, promotional piece of content that represents a preview of the current show', + 'trailer_hint' => 'Kort, PR-del av innehåll som representerar en förhandsvisning av den aktuella serien', 'bonus' => 'Bonus', - 'bonus_hint' => 'Extra content for the show (for example, behind the scenes info or interviews with the cast) or cross-promotional content for another show', + 'bonus_hint' => 'Extra innehåll för showen (till exempel bakom scenens info eller intervjuer med cast) eller korspremiellt innehåll för en annan show', ], 'premium_title' => 'Premium', - 'premium' => 'Episode must be accessible to premium subscribers only', + 'premium' => 'Avsnitt måste endast vara tillgängligt för premiumprenumeranter', 'parental_advisory' => [ - 'label' => 'Parental advisory', - 'hint' => 'Does the episode contain explicit content?', - 'undefined' => 'undefined', - 'clean' => 'Clean', - 'explicit' => 'Explicit', + 'label' => 'Föräldrarådgivande', + 'hint' => 'Innehåller avsnittet olämpligt innehåll?', + 'undefined' => 'odefinierad', + 'clean' => 'Ren', + 'explicit' => 'Uteslutande', ], - 'show_notes_section_title' => 'Show notes', + 'show_notes_section_title' => 'Visa anteckningar', 'show_notes_section_subtitle' => - 'Up to 4000 characters, be clear and concise. Show notes help potential listeners in finding the episode.', - 'description' => 'Description', - 'description_footer' => 'Description footer', + 'Upp till 4000 tecken, var tydlig och koncis. Visa anteckningar hjälper potentiella lyssnare att hitta avsnittet.', + 'description' => 'Beskrivning', + 'description_footer' => 'Beskrivning sidfot', 'description_footer_hint' => - 'This text is added at the end of each episode description, it is a good place to input your social links for example.', - 'additional_files_section_title' => 'Additional files', + 'Denna text läggs till i slutet av varje avsnitt beskrivning, det är ett bra ställe att skriva in dina sociala länkar till exempel.', + 'additional_files_section_title' => 'Ytterligare filer', 'additional_files_section_subtitle' => - 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', - 'location_section_title' => 'Location', - 'location_section_subtitle' => 'What place is this episode about?', - 'location_name' => 'Location name or address', - 'location_name_hint' => 'This can be a real or fictional location', - 'transcript' => 'Transcript (subtitles / closed captions)', - 'transcript_hint' => 'Only .srt are allowed.', - 'transcript_download' => 'Download transcript', - 'transcript_file' => 'Transcript file (.srt)', - 'transcript_remote_url' => 'Remote url for transcript', - 'transcript_file_delete' => 'Delete transcript file', - 'chapters' => 'Chapters', - 'chapters_hint' => 'File must be in JSON Chapters format.', - 'chapters_download' => 'Download chapters', - 'chapters_file' => 'Chapters file', - 'chapters_remote_url' => 'Remote url for chapters file', - 'chapters_file_delete' => 'Delete chapters file', - 'advanced_section_title' => 'Advanced Parameters', + 'Dessa filer kan användas av andra plattformar för att ge bättre upplevelse till din publik. Se {podcastNamespaceLink} för mer information.', + 'location_section_title' => 'Plats', + 'location_section_subtitle' => 'Vilken plats handlar detta avsnitt om?', + 'location_name' => 'Platsnamn eller adress', + 'location_name_hint' => 'Detta kan vara en verklig eller fiktiv plats', + 'transcript' => 'Avskrift (undertexter / undertexter)', + 'transcript_hint' => 'Endast .srt är tillåtna.', + 'transcript_download' => 'Ladda ner avskrift', + 'transcript_file' => 'Avskrift av fil (.srt)', + 'transcript_remote_url' => 'Fjärr-URL för avskrift', + 'transcript_file_delete' => 'Ta bort avskrift', + 'chapters' => 'Kapitel', + 'chapters_hint' => 'Filen måste vara i JSON Kapitelformat.', + 'chapters_download' => 'Ladda ner kapitel', + 'chapters_file' => 'Kapitel fil', + 'chapters_remote_url' => 'Fjärr-URL för kapitelfil', + 'chapters_file_delete' => 'Ta bort kapitelfil', + 'advanced_section_title' => 'Avancerade parametrar', 'advanced_section_subtitle' => - 'If you need RSS tags that Castopod does not handle, set them here.', - 'custom_rss' => 'Custom RSS tags for the episode', - 'custom_rss_hint' => 'This will be injected within the ❬item❭ tag.', - 'block' => 'Episode should be hidden from public catalogues', + 'Om du behöver RSS-taggar som Castopod inte hanterar, ställ in dem här.', + 'custom_rss' => 'Anpassade RSS-taggar för avsnittet', + 'custom_rss_hint' => 'Detta kommer att injiceras inom item taggen.', + 'block' => 'Avsnitt bör döljas från offentliga kataloger', 'block_hint' => - 'The episode show or hide status: toggling this on prevents the episode from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)', - 'submit_create' => 'Create episode', - 'submit_edit' => 'Save episode', + 'Avsnitten visa eller dölja status: växla detta hindrar avsnitten från att visas i Apple Podcasts, Google Podcasts, och alla tredjepartsappar som drar program från dessa kataloger. (Inte garanterat)', + 'submit_create' => 'Skapa avsnitt', + 'submit_edit' => 'Spara avsnitt', ], 'publish_form' => [ - 'back_to_episode_dashboard' => 'Back to episode dashboard', - 'post' => 'Your announcement post', + 'back_to_episode_dashboard' => 'Tillbaka till avsnittets instrumentpanel', + 'post' => 'Ditt meddelande inlägg', 'post_hint' => - "Write a message to announce the publication of your episode. The message will be broadcasted to all your followers in the fediverse and be featured in your podcast's homepage.", - 'message_placeholder' => 'Write your message…', - 'publication_date' => 'Publication date', + "Skriv ett meddelande för att meddela publiceringen av ditt avsnitt. Meddelandet kommer att sändas till alla dina följare i fediverse och presenteras på din podcasts hemsida.", + 'message_placeholder' => 'Skriv ditt meddelande…', + 'publication_date' => 'Publiceringsdatum', 'publication_method' => [ - 'now' => 'Now', - 'schedule' => 'Schedule', - 'with_podcast' => 'Publish alongside podcast', + 'now' => 'Nu', + 'schedule' => 'Schemalägg', + 'with_podcast' => 'Publicera tillsammans med podcast', ], - 'scheduled_publication_date' => 'Scheduled publication date', - 'scheduled_publication_date_clear' => 'Clear publication date', + 'scheduled_publication_date' => 'Planerat publiceringsdatum', + 'scheduled_publication_date_clear' => 'Rensa publiceringsdatum', 'scheduled_publication_date_hint' => - 'You can schedule the episode release by setting a future publication date. This field must be formatted as YYYY-MM-DD HH:mm', - 'submit' => 'Publish', - 'submit_edit' => 'Edit publication', - 'cancel_publication' => 'Cancel publication', - 'message_warning' => 'You did not write a message for your announcement post!', - 'message_warning_hint' => 'Having a message increases social engagement, resulting in a better visibility for your episode.', - 'message_warning_submit' => 'Publish anyways', + 'Du kan schemalägga avsnittet genom att ställa in ett framtida publiceringsdatum. Detta fält måste formateras som ÅÅÅ-MM-DD HH:mm', + 'submit' => 'Publicera', + 'submit_edit' => 'Redigera publikation', + 'cancel_publication' => 'Avbryt publicering', + 'message_warning' => 'Du skrev inte ett meddelande för ditt tillkännagivande!', + 'message_warning_hint' => 'Att ha ett meddelande ökar socialt engagemang, vilket resulterar i en bättre synlighet för ditt avsnitt.', + 'message_warning_submit' => 'Publicera ändå', ], 'publish_date_edit_form' => [ - 'new_publication_date' => 'New publication date', - 'new_publication_date_hint' => 'Must be set to a past date.', - 'submit' => 'Edit publication date', + 'new_publication_date' => 'Nytt publiceringsdatum', + 'new_publication_date_hint' => 'Måste vara inställd till ett tidigare datum.', + 'submit' => 'Redigera publiceringsdatum', ], 'unpublish_form' => [ 'disclaimer' => - "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", - 'understand' => 'I understand, I want to unpublish the episode', - 'submit' => 'Unpublish', + "Avpublicera avsnittet kommer att ta bort alla kommentarer och inlägg som är associerade med det och ta bort det från podcastens RSS-flöde.", + 'understand' => 'Jag förstår, jag vill avpublicera avsnittet', + 'submit' => 'Avpublicera', ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", - 'understand' => 'I understand, I want to delete the episode', - 'submit' => 'Delete', + "Borttagning av avsnittet kommer att ta bort alla mediefiler, kommentarer, videoklipp och ljudfiler som är associerade med det.", + 'understand' => 'Jag förstår, Jag vill ta bort avsnittet', + 'submit' => 'Radera', ], 'embed' => [ - 'title' => 'Embeddable player', + 'title' => 'Inbäddad spelare', 'label' => - 'Pick a theme color, copy the embeddable player to clipboard, then paste it on your website.', - 'clipboard_iframe' => 'Copy embeddable player to clipboard', - 'clipboard_url' => 'Copy address to clipboard', - 'dark' => 'Dark', - 'dark-transparent' => 'Dark transparent', - 'light' => 'Light', - 'light-transparent' => 'Light transparent', + 'Välj ett tema färg, kopiera den inbäddade spelaren till urklipp, sedan klistra in den på din webbplats.', + 'clipboard_iframe' => 'Kopiera inbäddbar spelare till urklipp', + 'clipboard_url' => 'Kopiera adress till urklipp', + 'dark' => 'Mörk', + 'dark-transparent' => 'Mörk transparent', + 'light' => 'Ljust', + 'light-transparent' => 'Ljus transparent', ], ]; diff --git a/modules/Admin/Language/sv/EpisodeNavigation.php b/modules/Admin/Language/sv/EpisodeNavigation.php index 1406e301..59f92a52 100644 --- a/modules/Admin/Language/sv/EpisodeNavigation.php +++ b/modules/Admin/Language/sv/EpisodeNavigation.php @@ -9,15 +9,15 @@ declare(strict_types=1); */ return [ - 'go_to_page' => 'View episode page', - 'dashboard' => 'Episode dashboard', - 'episode-view' => 'Home', - 'episode-edit' => 'Edit episode', - 'episode-persons-manage' => 'Manage persons', - 'embed-add' => 'Embeddable player', - 'clips' => 'Clips', - 'video-clips-list' => 'Video clips', - 'video-clips-create' => 'New video clip', - 'soundbites-list' => 'Soundbites', - 'soundbites-create' => 'New soundbite', + 'go_to_page' => 'Visa avsnittssida', + 'dashboard' => 'Avsnittets instrumentpanel', + 'episode-view' => 'Hem', + 'episode-edit' => 'Redigera avsnitt', + 'episode-persons-manage' => 'Hantera personer', + 'embed-add' => 'Inbäddad spelare', + 'clips' => 'Klipp', + 'video-clips-list' => 'Videoklipp', + 'video-clips-create' => 'Nytt videoklipp', + 'soundbites-list' => 'Ljudklipp', + 'soundbites-create' => 'Ny ljudbit', ]; diff --git a/modules/Admin/Language/sv/Fediverse.php b/modules/Admin/Language/sv/Fediverse.php index 0e4ca66d..18a1b209 100644 --- a/modules/Admin/Language/sv/Fediverse.php +++ b/modules/Admin/Language/sv/Fediverse.php @@ -10,23 +10,23 @@ declare(strict_types=1); return [ 'messages' => [ - 'actorNotFound' => 'The account could not be found!', - 'blockActorSuccess' => '{actor} has been blocked!', - 'unblockActorSuccess' => 'Actor has been unblocked!', - 'blockDomainSuccess' => '{domain} has been blocked!', - 'unblockDomainSuccess' => '{domain} has been unblocked!', + 'actorNotFound' => 'Det gick inte att hitta kontot!', + 'blockActorSuccess' => '{actor} har blockerats!', + 'unblockActorSuccess' => 'Aktören har blivit avblockerad!', + 'blockDomainSuccess' => '{domain} har blockerats!', + 'unblockDomainSuccess' => '{domain} har blivit avblockerad!', ], - 'blocked_actors' => 'Blocked accounts', - 'blocked_domains' => 'Blocked domains', + 'blocked_actors' => 'Blockerade konton', + 'blocked_domains' => 'Blockerade domäner', 'block_lists_form' => [ - 'handle' => 'Account handle', - 'handle_hint' => 'Input @username@domain account.', - 'domain' => 'Domain name', - 'submit' => 'Block!', + 'handle' => 'Hantera konto', + 'handle_hint' => 'Skriv in @användarnamn@domänkonto.', + 'domain' => 'Domännamn', + 'submit' => 'Blockera!', ], 'list' => [ - 'actor' => 'Account', - 'domain' => 'Domain name', - 'unblock' => 'Unblock', + 'actor' => 'Konto', + 'domain' => 'Domännamn', + 'unblock' => 'Avblockera', ], ]; diff --git a/modules/Admin/Language/sv/Home.php b/modules/Admin/Language/sv/Home.php index 3ff4c04d..493b5d18 100644 --- a/modules/Admin/Language/sv/Home.php +++ b/modules/Admin/Language/sv/Home.php @@ -9,6 +9,6 @@ declare(strict_types=1); */ return [ - 'all_podcasts' => 'All podcasts', - 'no_podcast' => 'No podcast found', + 'all_podcasts' => 'Alla podcasts', + 'no_podcast' => 'Ingen podcast hittades', ]; diff --git a/modules/Admin/Language/sv/Install.php b/modules/Admin/Language/sv/Install.php index 36e373a2..9e7de812 100644 --- a/modules/Admin/Language/sv/Install.php +++ b/modules/Admin/Language/sv/Install.php @@ -9,53 +9,53 @@ declare(strict_types=1); */ return [ - 'manual_config' => 'Manual configuration', + 'manual_config' => 'Manuell konfiguration', 'manual_config_subtitle' => - 'Create a `.env` file with your settings and refresh the page to continue installation.', + 'Skapa en \'.env\' fil med dina inställningar och uppdatera sidan för att fortsätta installationen.', 'form' => [ - 'instance_config' => 'Instance configuration', - 'hostname' => 'Hostname', - 'media_base_url' => 'Media base URL', + 'instance_config' => 'Konfiguration av instans', + 'hostname' => 'Servernamn', + 'media_base_url' => 'Bas-URL för media', 'media_base_url_hint' => - 'If you use a CDN and/or an external analytics service, you may set them here.', + 'Om du använder en CDN och/eller en extern analystjänst kan du ställa in dem här.', 'admin_gateway' => 'Admin gateway', 'admin_gateway_hint' => - 'The route to access the admin area (eg. https://example.com/cp-admin). It is set by default as cp-admin, we recommend you change it for security reasons.', + 'Rutten för att komma åt adminområdet (t.ex. https://example.com/cp-admin). Det är som standard inställt som cp-admin, vi rekommenderar att du ändrar det av säkerhetsskäl.', 'auth_gateway' => 'Auth gateway', 'auth_gateway_hint' => - 'The route to access the authentication pages (eg. https://example.com/cp-auth). It is set by default as cp-auth, we recommend you change it for security reasons.', - 'database_config' => 'Database configuration', + 'Rutten för att komma åt autentiseringssidorna (t.ex. https://example.com/cp-auth). Den är som standard inställd som cp-auth, vi rekommenderar att du ändrar den av säkerhetsskäl.', + 'database_config' => 'Databas konfiguration', 'database_config_hint' => - 'Castopod needs to connect to your MySQL (or MariaDB) database. If you do not have these required info, please contact your server administrator.', - 'db_hostname' => 'Database hostname', - 'db_name' => 'Database name', - 'db_username' => 'Database username', - 'db_password' => 'Database password', - 'db_prefix' => 'Database prefix', + 'Castopod måste ansluta till din MySQL (eller MariaDB) databas. Om du inte har dessa nödvändiga uppgifter, kontakta din serveradministratör.', + 'db_hostname' => 'Databasens värdnamn', + 'db_name' => 'Databasnamn', + 'db_username' => 'Användarnamn till databasen', + 'db_password' => 'Databasens lösenord', + 'db_prefix' => 'Databas prefix', 'db_prefix_hint' => - "The prefix of the Castopod table names, leave as is if you don't know what it means.", - 'cache_config' => 'Cache configuration', + "Prefixet för Castopod tabellnamn, lämna som om du inte vet vad det betyder.", + 'cache_config' => 'Cache-konfiguration', 'cache_config_hint' => - 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.', + 'Välj önskad cachehanterare. Lämna det som standardvärde om du inte har någon aning om vad det innebär.', 'cache_handler' => 'Cache handler', 'cacheHandlerOptions' => [ - 'file' => 'File', + 'file' => 'Fil', 'redis' => 'Redis', 'predis' => 'Predis', ], - 'next' => 'Next', - 'submit' => 'Finish install', - 'create_superadmin' => 'Create your superadmin account', - 'email' => 'Email', - 'username' => 'Username', - 'password' => 'Password', + 'next' => 'Nästa', + 'submit' => 'Slutför installationen', + 'create_superadmin' => 'Skapa ditt superadministratörskonto', + 'email' => 'Epost', + 'username' => 'Användarnamn', + 'password' => 'Lösenord', ], 'messages' => [ 'createSuperAdminSuccess' => - 'Your superadmin account has been created successfully. Login to start podcasting!', + 'Ditt superadministratörskonto har skapats. Logga in för att starta podcasting!', 'databaseConnectError' => - 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'Castopod kunde inte ansluta till din databas. Redigera din databaskonfiguration och försök igen.', 'writeError' => - "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + "Kunde inte skapa/skriva `.env`-filen. Du måste skapa den manuellt genom att följa filmallen `.env.exempel` i Castopod-paketet.", ], ]; diff --git a/modules/Admin/Language/sv/Navigation.php b/modules/Admin/Language/sv/Navigation.php index 610f1434..ea1f6de5 100644 --- a/modules/Admin/Language/sv/Navigation.php +++ b/modules/Admin/Language/sv/Navigation.php @@ -9,34 +9,34 @@ declare(strict_types=1); */ return [ - 'toggle_sidebar' => 'Toggle sidebar', - 'go_to_website' => 'Go to website', - 'go_to_admin' => 'Go to admin', - 'dashboard' => 'Dashboard', - 'admin' => 'Home', + 'toggle_sidebar' => 'Växla sidofält', + 'go_to_website' => 'Gå till webbsidan', + 'go_to_admin' => 'Gå till admin', + 'dashboard' => 'Översiktspanel', + 'admin' => 'Hem', 'podcasts' => 'Podcasts', - 'podcast-list' => 'All podcasts', - 'podcast-create' => 'New podcast', - 'podcast-import' => 'Import a podcast', - 'persons' => 'Persons', - 'person-list' => 'All persons', - 'person-create' => 'New person', + 'podcast-list' => 'Alla podcasts', + 'podcast-create' => 'Ny podcast', + 'podcast-import' => 'Importera en podcast', + 'persons' => 'Personer', + 'person-list' => 'Alla personer', + 'person-create' => 'Ny person', 'fediverse' => 'Fediverse', - 'fediverse-blocked-actors' => 'Blocked accounts', - 'fediverse-blocked-domains' => 'Blocked domains', - 'users' => 'Users', - 'user-list' => 'All users', - 'user-create' => 'New user', - 'pages' => 'Pages', - 'page-list' => 'All pages', - 'page-create' => 'New Page', - 'settings' => 'Settings', - 'settings-general' => 'General', - 'settings-theme' => 'Theme', - 'about' => 'About', + 'fediverse-blocked-actors' => 'Blockerade konton', + 'fediverse-blocked-domains' => 'Blockerade domäner', + 'users' => 'Användare', + 'user-list' => 'Alla användare', + 'user-create' => 'Ny användare', + 'pages' => 'Sidor', + 'page-list' => 'Alla sidor', + 'page-create' => 'Ny sida', + 'settings' => 'Inställningar', + 'settings-general' => 'Allmänt', + 'settings-theme' => 'Tema', + 'about' => 'Om', 'account' => [ - 'my-account' => 'My account', - 'change-password' => 'Change password', - 'logout' => 'Logout', + 'my-account' => 'Mitt konto', + 'change-password' => 'Ändra lösenord', + 'logout' => 'Logga ut', ], ]; diff --git a/modules/Admin/Language/sv/Notifications.php b/modules/Admin/Language/sv/Notifications.php index 2b139d51..cacbb79a 100644 --- a/modules/Admin/Language/sv/Notifications.php +++ b/modules/Admin/Language/sv/Notifications.php @@ -9,11 +9,11 @@ declare(strict_types=1); */ return [ - 'title' => 'Notifications', - 'reply' => '{actor_username} replied to your post', - 'favourite' => '{actor_username} favourited your post', - 'reblog' => '{actor_username} shared your post', - 'follow' => '{actor_username} started following you', - 'no_notifications' => 'No notifications', - 'mark_all_as_read' => 'Mark all as read', + 'title' => 'Aviseringar', + 'reply' => '{actor_username} svarade på ditt inlägg', + 'favourite' => '{actor_username} favoriterade ditt inlägg', + 'reblog' => '{actor_username} delade ditt inlägg', + 'follow' => '{actor_username} började följa dig', + 'no_notifications' => 'Inga aviseringar', + 'mark_all_as_read' => 'Markera alla som lästa', ]; diff --git a/modules/Admin/Language/sv/Page.php b/modules/Admin/Language/sv/Page.php index b6f49de5..89f48754 100644 --- a/modules/Admin/Language/sv/Page.php +++ b/modules/Admin/Language/sv/Page.php @@ -9,22 +9,22 @@ declare(strict_types=1); */ return [ - 'back_to_home' => 'Back to home', - 'page' => 'Page', - 'all_pages' => 'All pages', - 'create' => 'New page', - 'go_to_page' => 'Go to page', - 'edit' => 'Edit page', - 'delete' => 'Delete page', + 'back_to_home' => 'Tillbaka till startsidan', + 'page' => 'Sida', + 'all_pages' => 'Alla sidor', + 'create' => 'Ny sida', + 'go_to_page' => 'Gå till sida', + 'edit' => 'Redigera sida', + 'delete' => 'Ta bort sida', 'form' => [ - 'title' => 'Title', - 'permalink' => 'Permalink', - 'content' => 'Content', - 'submit_create' => 'Create page', - 'submit_edit' => 'Save', + 'title' => 'Rubrik', + 'permalink' => 'Permalänk', + 'content' => 'Innehåll', + 'submit_create' => 'Skapa sida', + 'submit_edit' => 'Spara', ], 'messages' => [ - 'createSuccess' => 'The page “{pageTitle}” was created successfully!', - 'editSuccess' => 'The page was successfully updated!', + 'createSuccess' => 'Sidan ”{pageTitle}” skapades framgångsrikt!', + 'editSuccess' => 'Sidan har uppdaterats!', ], ]; diff --git a/modules/Admin/Language/sv/Pager.php b/modules/Admin/Language/sv/Pager.php index e25ee638..32a18e90 100644 --- a/modules/Admin/Language/sv/Pager.php +++ b/modules/Admin/Language/sv/Pager.php @@ -9,13 +9,13 @@ declare(strict_types=1); */ return [ - 'pageNavigation' => 'Page navigation', - 'first' => 'First', - 'previous' => 'Previous', - 'next' => 'Next', - 'last' => 'Last', - 'older' => 'Older', - 'newer' => 'Newer', - 'invalidTemplate' => '{0} is not a valid Pager template.', - 'invalidPaginationGroup' => '{0} is not a valid Pagination group.', + 'pageNavigation' => 'Sidnavigering', + 'first' => 'Första', + 'previous' => 'Föregående', + 'next' => 'Nästa', + 'last' => 'Sista', + 'older' => 'Äldre', + 'newer' => 'Nyare', + 'invalidTemplate' => '{0} är inte en giltig sidmall.', + 'invalidPaginationGroup' => '{0} är inte en giltig sidnumreringsgrupp.', ]; diff --git a/modules/Admin/Language/sv/Person.php b/modules/Admin/Language/sv/Person.php index a652be9f..f5007527 100644 --- a/modules/Admin/Language/sv/Person.php +++ b/modules/Admin/Language/sv/Person.php @@ -9,57 +9,57 @@ declare(strict_types=1); */ return [ - 'persons' => 'Persons', - 'all_persons' => 'All persons', - 'no_person' => 'Nobody found!', - 'create' => 'Create a person', - 'view' => 'View person', - 'edit' => 'Edit person', - 'delete' => 'Delete person', + 'persons' => 'Personer', + 'all_persons' => 'Alla personer', + 'no_person' => 'Ingen hittades!', + 'create' => 'Skapa en person', + 'view' => 'Visa person', + 'edit' => 'Redigera person', + 'delete' => 'Ta bort person', 'messages' => [ - 'createSuccess' => 'Person has been successfully created!', - 'editSuccess' => 'Person has been successfully updated!', - 'deleteSuccess' => 'Person has been removed!', + 'createSuccess' => 'Person har skapats framgångsrikt!', + 'editSuccess' => 'Person har uppdaterats!', + 'deleteSuccess' => 'Person har tagits bort!', ], 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared and at least 400px wide and tall.', - 'full_name' => 'Full name', - 'full_name_hint' => 'This is the full name or alias of the person.', - 'unique_name' => 'Unique name', - 'unique_name_hint' => 'Used for URLs', + 'Avatar måste vara kvadratisk och minst 400px bred och hög.', + 'full_name' => 'Fullständigt namn', + 'full_name_hint' => 'Detta är personens fullständiga namn eller alias.', + 'unique_name' => 'Unikt namn', + 'unique_name_hint' => 'Används för URL: er', 'information_url' => 'Information URL', 'information_url_hint' => - 'Url to a relevant resource of information about the person, such as a homepage or third-party profile platform.', - 'submit_create' => 'Create person', - 'submit_edit' => 'Save person', + 'Url till en relevant resurs av information om personen, såsom en hemsida eller en tredje parts profilplattform.', + 'submit_create' => 'Skapa person', + 'submit_edit' => 'Spara person', ], 'podcast_form' => [ - 'title' => 'Manage persons', - 'add_section_title' => 'Add persons to this podcast', - 'add_section_subtitle' => 'You may pick several persons and roles.', - 'persons' => 'Persons', + 'title' => 'Hantera personer', + 'add_section_title' => 'Lägg till personer till denna podcast', + 'add_section_subtitle' => 'Du kan välja flera personer och roller.', + 'persons' => 'Personer', 'persons_hint' => - 'You may select one or several persons with the same roles. You need to create the persons first.', - 'roles' => 'Roles', + 'Du kan välja en eller flera personer med samma roller. Du måste skapa personerna först.', + 'roles' => 'Roller', 'roles_hint' => - 'You may select none, one or several roles for a person.', - 'submit_add' => 'Add person(s)', - 'remove' => 'Remove', + 'Du kan välja ingen, en eller flera roller för en person.', + 'submit_add' => 'Lägg till person(er)', + 'remove' => 'Ta bort', ], 'episode_form' => [ - 'title' => 'Manage persons', - 'add_section_title' => 'Add persons to this episode', - 'add_section_subtitle' => 'You may pick several persons and roles.', - 'persons' => 'Persons', + 'title' => 'Hantera personer', + 'add_section_title' => 'Lägg till personer till detta avsnitt', + 'add_section_subtitle' => 'Du kan välja flera personer och roller.', + 'persons' => 'Personer', 'persons_hint' => - 'You may select one or several persons with the same roles. You need to create the persons first.', - 'roles' => 'Roles', + 'Du kan välja en eller flera personer med samma roller. Du måste skapa personerna först.', + 'roles' => 'Roller', 'roles_hint' => - 'You may select none, one or several roles for a person.', - 'submit_add' => 'Add person(s)', - 'remove' => 'Remove', + 'Du kan välja ingen, en eller flera roller för en person.', + 'submit_add' => 'Lägg till person(er)', + 'remove' => 'Ta bort', ], - 'credits' => 'Credits', + 'credits' => 'Tack till', ]; diff --git a/modules/Admin/Language/sv/Platforms.php b/modules/Admin/Language/sv/Platforms.php index ab17d599..1ab090f9 100644 --- a/modules/Admin/Language/sv/Platforms.php +++ b/modules/Admin/Language/sv/Platforms.php @@ -9,22 +9,22 @@ declare(strict_types=1); */ return [ - 'title' => 'Platforms', - 'home_url' => 'Go to {platformName} website', - 'submit_url' => 'Submit your podcast on {platformName}', - 'visible' => 'Display in podcast homepage?', - 'on_embed' => 'Display on embeddable player?', - 'remove' => 'Remove {platformName}', - 'submit' => 'Save', + 'title' => 'Plattformar', + 'home_url' => 'Gå till {platformName} webbplats', + 'submit_url' => 'Skicka din podcast den {platformName}', + 'visible' => 'Visa på podcastens hemsida?', + 'on_embed' => 'Visa på inbäddbar spelare?', + 'remove' => 'Ta bort {platformName}', + 'submit' => 'Spara', 'messages' => [ - 'updateSuccess' => 'Platform links have been successfully updated!', - 'removeLinkSuccess' => 'The platform link has been removed.', + 'updateSuccess' => 'Plattformslänkarna har uppdaterats!', + 'removeLinkSuccess' => 'Plattformslänken har tagits bort.', 'removeLinkError' => - 'The platform link could not be removed. Try again.', + 'Plattformslänken kunde inte tas bort. Försök igen.', ], 'description' => [ - 'podcasting' => 'The podcast ID on this platform', - 'social' => 'The podcast account ID on this platform', - 'funding' => 'Call to action message', + 'podcasting' => 'Podcast ID på denna plattform', + 'social' => 'Den podcast konto ID på denna plattform', + 'funding' => 'Ring till åtgärdsmeddelande', ], ]; diff --git a/modules/Admin/Language/sv/Podcast.php b/modules/Admin/Language/sv/Podcast.php index 426b763b..6e817ffe 100644 --- a/modules/Admin/Language/sv/Podcast.php +++ b/modules/Admin/Language/sv/Podcast.php @@ -9,302 +9,302 @@ declare(strict_types=1); */ return [ - 'all_podcasts' => 'All podcasts', - 'no_podcast' => 'No podcast found!', - 'create' => 'Create podcast', - 'import' => 'Import podcast', - 'new_episode' => 'New Episode', - 'view' => 'View podcast', - 'edit' => 'Edit podcast', - 'publish' => 'Publish podcast', - 'publish_edit' => 'Edit publication', - 'delete' => 'Delete podcast', - 'see_episodes' => 'See episodes', - 'see_contributors' => 'See contributors', - 'go_to_page' => 'Go to page', - 'latest_episodes' => 'Latest episodes', - 'see_all_episodes' => 'See all episodes', - 'draft' => 'Draft', + 'all_podcasts' => 'Alla podcasts', + 'no_podcast' => 'Ingen podcast hittades!', + 'create' => 'Skapa podcast', + 'import' => 'Importera podcast', + 'new_episode' => 'Nytt avsnitt', + 'view' => 'Visa podcast', + 'edit' => 'Redigera podcast', + 'publish' => 'Publicera podcasten', + 'publish_edit' => 'Redigera publikation', + 'delete' => 'Ta bort podcast', + 'see_episodes' => 'Se avsnitt', + 'see_contributors' => 'Se bidragsgivare', + 'go_to_page' => 'Gå till sida', + 'latest_episodes' => 'Senaste avsnitt', + 'see_all_episodes' => 'Se alla avsnitt', + 'draft' => 'Utkast', 'messages' => [ - 'createSuccess' => 'Podcast successfully created!', - 'editSuccess' => 'Podcast has been successfully updated!', - 'importSuccess' => 'Podcast has been successfully imported!', - 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', - 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, - cover {cover} + 'createSuccess' => 'Podcast har skapats!', + 'editSuccess' => 'Podcasten har uppdaterats!', + 'importSuccess' => 'Podcasten har importerats!', + 'deleteSuccess' => 'Podcast @{podcast_handle} har raderats!', + 'deletePodcastMediaError' => 'Kunde inte ta bort podcast {type, select, + cover {omslag} banner {banner} other {media} }.', - 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + 'deleteEpisodeMediaError' => 'Misslyckades att ta bort avsnitt {episode_slug} {type, select, transcript {transcript} - chapters {chapters} - image {cover} - audio {audio} + chapters {kapitel} + image {omslag} + audio {ljud} other {media} }.', - 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', - 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, - one {# episode was} - other {# episodes were} - } added to the podcast!', - 'podcastFeedUpToDate' => 'Podcast is already up to date.', - 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', - 'publishError' => 'This podcast is either already published or scheduled for publication.', - 'publishEditError' => 'This podcast is not scheduled for publication.', - 'publishCancelSuccess' => 'Podcast publication successfully cancelled!', - 'scheduleDateError' => 'Schedule date must be set!', + 'deletePodcastMediaFolderError' => 'Det gick inte att ta bort podcast-mediamappen {folder_path}. Du kan manuellt ta bort den från disken.', + 'podcastFeedUpdateSuccess' => 'Lyckad uppdatering: {number_of_new_episodes, plural, + one {# episoden var} + other {# episoder var} + } lades till i podcasten!', + 'podcastFeedUpToDate' => 'Podcasten är redan uppdaterad.', + 'podcastNotImported' => 'Podcast kunde inte uppdateras eftersom den inte importerades.', + 'publishError' => 'Denna podcast är antingen redan publicerad eller schemalagd för publicering.', + 'publishEditError' => 'Denna podcast är inte schemalagd för publicering.', + 'publishCancelSuccess' => 'Podcast publicering avbröts!', + 'scheduleDateError' => 'Schemaläggningsdatum måste anges!', ], 'form' => [ - 'identity_section_title' => 'Podcast identity', - 'identity_section_subtitle' => 'These fields allow you to get noticed.', - 'cover' => 'Podcast cover', - 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', + 'identity_section_title' => 'Podcast identitet', + 'identity_section_subtitle' => 'Dessa fält gör att du kan bli uppmärksammad.', + 'cover' => 'Podcast omslag', + 'cover_size_hint' => 'Omslaget måste vara fyrkantigt och minst 1400px brett och högt.', 'banner' => 'Podcast banner', - 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', - 'banner_delete' => 'Delete podcast banner', - 'title' => 'Title', - 'handle' => 'Handle', + 'banner_size_hint' => 'Banner måste ha ett 3:1-förhållande och vara minst 1500px bred.', + 'banner_delete' => 'Ta bort podcast banner', + 'title' => 'Rubrik', + 'handle' => 'Hantera', 'handle_hint' => - 'Used to identify the podcast. Uppercase, lowercase, numbers and underscores are accepted.', + 'Används för att identifiera podcasten. Versaler, gemener, siffror och understrykningar accepteras.', 'type' => [ - 'label' => 'Type', + 'label' => 'Typ', 'episodic' => 'Episodic', - 'episodic_hint' => 'If episodes are intended to be consumed without any specific order. Newest episodes will be presented first.', - 'serial' => 'Serial', - 'serial_hint' => 'If episodes are intended to be consumed in sequential order. The oldest episodes will be presented first.', + 'episodic_hint' => 'Om avsnitt är avsedda att konsumeras utan någon specifik ordning. Nyaste avsnitt kommer att presenteras först.', + 'serial' => 'Serie', + 'serial_hint' => 'Om avsnitt är avsedda att konsumeras i sekventiell ordning. De äldsta avsnitten kommer att presenteras först.', ], - 'description' => 'Description', - 'classification_section_title' => 'Classification', + 'description' => 'Beskrivning', + 'classification_section_title' => 'Klassificering', 'classification_section_subtitle' => - 'These fields will impact your audience and competition.', - 'language' => 'Language', - 'category' => 'Category', - 'category_placeholder' => 'Select a category…', - 'other_categories' => 'Other categories', + 'Dessa fält kommer att påverka din publik och konkurrens.', + 'language' => 'Språk', + 'category' => 'Kategori', + 'category_placeholder' => 'Välj en kategori…', + 'other_categories' => 'Andra kategorier', 'parental_advisory' => [ - 'label' => 'Parental advisory', - 'hint' => 'Does it contain explicit content?', - 'undefined' => 'undefined', - 'clean' => 'Clean', - 'explicit' => 'Explicit', + 'label' => 'Föräldrarådgivande', + 'hint' => 'Innehåller det olämpligt innehåll?', + 'undefined' => 'odefinierad', + 'clean' => 'Ren', + 'explicit' => 'Uteslutande', ], - 'author_section_title' => 'Author', - 'author_section_subtitle' => 'Who is managing the podcast?', - 'owner_name' => 'Owner name', + 'author_section_title' => 'Författare', + 'author_section_subtitle' => 'Vem hanterar podcasten?', + 'owner_name' => 'Ägarens namn', 'owner_name_hint' => - 'For administrative use only. Visible in the public RSS feed.', - 'owner_email' => 'Owner email', + 'Endast för administrativt bruk. Synlig i det offentliga RSS-flödet.', + 'owner_email' => 'Ägarens e-post', 'owner_email_hint' => - 'Will be used by most platforms to verify the podcast ownership. Visible in the public RSS feed.', - 'publisher' => 'Publisher', + 'Kommer att användas av de flesta plattformar för att verifiera podcast-ägandet. Synlig i det offentliga RSS-flödet.', + 'publisher' => 'Utgivare', 'publisher_hint' => - 'The group responsible for creating the show. Often refers to the parent company or network of a podcast. This field is sometimes labeled as ’Author’.', + 'Gruppen som ansvarar för att skapa showen. Ofta hänvisar man till moderbolaget eller nätverket av en podcast. Detta fält är ibland märkt som "Författare".', 'copyright' => 'Copyright', - 'location_section_title' => 'Location', - 'location_section_subtitle' => 'What place is this podcast about?', - 'location_name' => 'Location name or address', - 'location_name_hint' => 'This can be a real place or fictional', - 'monetization_section_title' => 'Monetization', + 'location_section_title' => 'Plats', + 'location_section_subtitle' => 'Vilken plats handlar denna podcast om?', + 'location_name' => 'Platsnamn eller adress', + 'location_name_hint' => 'Detta kan vara en riktig plats eller fiktiv', + 'monetization_section_title' => 'Inkomster', 'monetization_section_subtitle' => - 'Earn money thanks to your audience.', + 'Tjäna pengar tack vare din publik.', 'premium' => 'Premium', - 'premium_by_default' => 'Episodes must be set as premium by default', - 'premium_by_default_hint' => 'Podcast episodes will be marked as premium by default. You can still choose to set some episodes, trailers or bonuses as public.', - 'payment_pointer' => 'Payment Pointer for Web Monetization', + 'premium_by_default' => 'Avsnitt måste anges som premium som standard', + 'premium_by_default_hint' => 'Podcast avsnitt kommer att markeras som premium som standard. Du kan fortfarande välja att ställa in några avsnitt, trailers eller bonusar som offentliga.', + 'payment_pointer' => 'Betalning pekare för Web Monetization', 'payment_pointer_hint' => - 'This is your where you will receive money thanks to Web Monetization', - 'advanced_section_title' => 'Advanced Parameters', + 'Detta är din där du kommer att få pengar tack vare Web Monetization', + 'advanced_section_title' => 'Avancerade parametrar', 'advanced_section_subtitle' => - 'If you need RSS tags that Castopod does not handle, set them here.', - 'custom_rss' => 'Custom RSS tags for the podcast', - 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', - 'new_feed_url' => 'New feed URL', - 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', - 'old_feed_url' => 'Old feed URL', - 'update_feed' => 'Update feed', - 'update_feed_tip' => 'Import this podcast\'s latest episodes', - 'partnership' => 'Partnership', + 'Om du behöver RSS-taggar som Castopod inte hanterar, ställ in dem här.', + 'custom_rss' => 'Anpassade RSS-taggar för podcasten', + 'custom_rss_hint' => 'Detta kommer att injiceras i kanal taggen.', + 'new_feed_url' => 'Ny flödes-URL', + 'new_feed_url_hint' => 'Använd detta fält när du flyttar till en annan domän eller podcast webbhotell. Som standard är värdet inställt på nuvarande RSS-URL om podcasten importeras.', + 'old_feed_url' => 'Gammal flödes-URL', + 'update_feed' => 'Uppdatera flöde', + 'update_feed_tip' => 'Importera den här podcastens senaste avsnitt', + 'partnership' => 'Samarbete', 'partner_id' => 'ID', - 'partner_link_url' => 'Link URL', - 'partner_image_url' => 'Image URL', - 'partner_id_hint' => 'Your own partner ID', - 'partner_link_url_hint' => 'The generic partner link address', - 'partner_image_url_hint' => 'The generic partner image address', + 'partner_link_url' => 'Länk url', + 'partner_image_url' => 'Bild-URL', + 'partner_id_hint' => 'Din egen partner ID', + 'partner_link_url_hint' => 'Den generiska partnerns länkadress', + 'partner_image_url_hint' => 'Den generiska partnerns bildadress', 'status_section_title' => 'Status', - 'block' => 'Podcast should be hidden from public catalogues', + 'block' => 'Podcast bör döljas från offentliga kataloger', 'block_hint' => - 'The podcast show or hide status: toggling this on prevents the entire podcast from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)', - 'complete' => 'Podcast will not be having new episodes', - 'lock' => 'Prevent podcast from being copied', + 'Podcasten visar eller dölj status: att växla på detta hindrar hela podcasten från att visas i Apple Podcasts, Google Podcasts, och alla tredjepartsappar som drar program från dessa kataloger. (Inte garanterat)', + 'complete' => 'Podcast kommer inte att ha nya avsnitt', + 'lock' => 'Förhindra podcast från att kopieras', 'lock_hint' => - 'The purpose is to tell other podcast platforms whether they are allowed to import this feed. A value of yes means that any attempt to import this feed into a new platform should be rejected.', - 'submit_create' => 'Create podcast', - 'submit_edit' => 'Save podcast', + 'Syftet är att berätta för andra podcast-plattformar om de får importera detta flöde. Ett värde av ja innebär att varje försök att importera detta flöde till en ny plattform bör avvisas.', + 'submit_create' => 'Skapa podcast', + 'submit_edit' => 'Spara podcast', ], 'category_options' => [ - 'uncategorized' => 'uncategorized', - 'arts' => 'Arts', - 'business' => 'Business', - 'comedy' => 'Comedy', - 'education' => 'Education', - 'fiction' => 'Fiction', - 'government' => 'Government', - 'health_and_fitness' => 'Health & Fitness', - 'history' => 'History', - 'kids_and_family' => 'Kids & Family', - 'leisure' => 'Leisure', - 'music' => 'Music', - 'news' => 'News', - 'religion_and_spirituality' => 'Religion & Spirituality', - 'science' => 'Science', - 'society_and_culture' => 'Society & Culture', - 'sports' => 'Sports', - 'technology' => 'Technology', - 'true_crime' => 'True Crime', - 'tv_and_film' => 'TV & Film', - 'books' => 'Books', + 'uncategorized' => 'okategoriserad', + 'arts' => 'Konst', + 'business' => 'Företagande', + 'comedy' => 'Komedi', + 'education' => 'Utbildning', + 'fiction' => 'Fiktion', + 'government' => 'Myndighet', + 'health_and_fitness' => 'Hälsa & Träning', + 'history' => 'Historia', + 'kids_and_family' => 'Barn & Familj', + 'leisure' => 'Fritid', + 'music' => 'Musik', + 'news' => 'Nyheter', + 'religion_and_spirituality' => 'Religion & Andlighet', + 'science' => 'Vetenskap', + 'society_and_culture' => 'Samhälle & Kultur', + 'sports' => 'Sport', + 'technology' => 'Teknologi', + 'true_crime' => 'Sann brottslighet', + 'tv_and_film' => 'TV & Film', + 'books' => 'Böcker', 'design' => 'Design', - 'fashion_and_beauty' => 'Fashion & Beauty', - 'food' => 'Food', - 'performing_arts' => 'Performing Arts', - 'visual_arts' => 'Visual Arts', - 'careers' => 'Careers', - 'entrepreneurship' => 'Entrepreneurship', - 'investing' => 'Investing', + 'fashion_and_beauty' => 'Mode & Skönhet', + 'food' => 'Mat', + 'performing_arts' => 'Scenkonst', + 'visual_arts' => 'Visuell konst', + 'careers' => 'Karriärer', + 'entrepreneurship' => 'Entreprenörskap', + 'investing' => 'Investering', 'management' => 'Management', - 'marketing' => 'Marketing', - 'non_profit' => 'Non-Profit', - 'comedy_interviews' => 'Comedy Interviews', - 'improv' => 'Improv', + 'marketing' => 'Marknadsföring', + 'non_profit' => 'Ideell organisation', + 'comedy_interviews' => 'Komedi Intervjuer', + 'improv' => 'Förbättra', 'stand_up' => 'Stand-Up', - 'courses' => 'Courses', - 'how_to' => 'How To', - 'language_learning' => 'Language Learning', - 'self_improvement' => 'Self-Improvement', - 'comedy_fiction' => 'Comedy Fiction', + 'courses' => 'Kurser', + 'how_to' => 'Så funkar det', + 'language_learning' => 'Språkinlärning', + 'self_improvement' => 'Självförbättring', + 'comedy_fiction' => 'Komedi fiktion', 'drama' => 'Drama', 'science_fiction' => 'Science Fiction', - 'alternative_health' => 'Alternative Health', - 'fitness' => 'Fitness', - 'medicine' => 'Medicine', - 'mental_health' => 'Mental Health', - 'nutrition' => 'Nutrition', - 'sexuality' => 'Sexuality', - 'education_for_kids' => 'Education for Kids', - 'parenting' => 'Parenting', - 'pets_and_animals' => 'Pets & Animals', - 'stories_for_kids' => 'Stories for Kids', - 'animation_and_manga' => 'Animation & Manga', - 'automotive' => 'Automotive', - 'aviation' => 'Aviation', - 'crafts' => 'Crafts', - 'games' => 'Games', - 'hobbies' => 'Hobbies', - 'home_and_garden' => 'Home & Garden', - 'video_games' => 'Video Games', - 'music_commentary' => 'Music Commentary', - 'music_history' => 'Music History', - 'music_interviews' => 'Music Interviews', - 'business_news' => 'Business News', - 'daily_news' => 'Daily News', - 'entertainment_news' => 'Entertainment News', - 'news_commentary' => 'News Commentary', - 'politics' => 'Politics', - 'sports_news' => 'Sports News', - 'tech_news' => 'Tech News', - 'buddhism' => 'Buddhism', - 'christianity' => 'Christianity', + 'alternative_health' => 'Alternativ Hälsa', + 'fitness' => 'Träning', + 'medicine' => 'Medicin', + 'mental_health' => 'Mental hälsa', + 'nutrition' => 'Näring', + 'sexuality' => 'Sexualitet', + 'education_for_kids' => 'Utbildning för barn', + 'parenting' => 'Föräldraskap', + 'pets_and_animals' => 'Husdjur & djur', + 'stories_for_kids' => 'Berättelser för barn', + 'animation_and_manga' => 'Animering & Manga', + 'automotive' => 'Fordon', + 'aviation' => 'Luftfart', + 'crafts' => 'Hantverk', + 'games' => 'Spel', + 'hobbies' => 'Fritidsintressen', + 'home_and_garden' => 'Hem och trädgård', + 'video_games' => 'Videospel', + 'music_commentary' => 'Kommentar från musik', + 'music_history' => 'Musikhistorik', + 'music_interviews' => 'Musikintervjuer', + 'business_news' => 'Företagsnyheter', + 'daily_news' => 'Dagliga nyheter', + 'entertainment_news' => 'Underhållningsnyheter', + 'news_commentary' => 'Nyheter Kommentar', + 'politics' => 'Politik', + 'sports_news' => 'Sportnyheter', + 'tech_news' => 'Tekniknyheter', + 'buddhism' => 'Budism', + 'christianity' => 'Kristendom', 'hinduism' => 'Hinduism', 'islam' => 'Islam', - 'judaism' => 'Judaism', + 'judaism' => 'Judendom', 'religion' => 'Religion', - 'spirituality' => 'Spirituality', - 'astronomy' => 'Astronomy', - 'chemistry' => 'Chemistry', - 'earth_sciences' => 'Earth Sciences', - 'life_sciences' => 'Life Sciences', - 'mathematics' => 'Mathematics', - 'natural_sciences' => 'Natural Sciences', - 'nature' => 'Nature', - 'physics' => 'Physics', - 'social_sciences' => 'Social Sciences', - 'documentary' => 'Documentary', - 'personal_journals' => 'Personal Journals', - 'philosophy' => 'Philosophy', - 'places_and_travel' => 'Places & Travel', - 'relationships' => 'Relationships', + 'spirituality' => 'Andlighet', + 'astronomy' => 'Astronomi', + 'chemistry' => 'Kemi', + 'earth_sciences' => 'Jordvetenskap', + 'life_sciences' => 'Livsvetenskaper', + 'mathematics' => 'Matematik', + 'natural_sciences' => 'Naturvetenskap', + 'nature' => 'Natur', + 'physics' => 'Fysik', + 'social_sciences' => 'Samhällsvetenskap', + 'documentary' => 'Dokumentär', + 'personal_journals' => 'Personliga tidsskrifter', + 'philosophy' => 'Filosofi', + 'places_and_travel' => 'Resor & Resmål', + 'relationships' => 'Relationer', 'baseball' => 'Baseball', - 'basketball' => 'Basketball', - 'cricket' => 'Cricket', - 'fantasy_sports' => 'Fantasy Sports', - 'football' => 'Football', + 'basketball' => 'Basket', + 'cricket' => 'Kricket', + 'fantasy_sports' => 'Fantasy Sport', + 'football' => 'Fotboll', 'golf' => 'Golf', 'hockey' => 'Hockey', 'rugby' => 'Rugby', - 'running' => 'Running', - 'soccer' => 'Soccer', - 'swimming' => 'Swimming', + 'running' => 'Löpning', + 'soccer' => 'Fotboll', + 'swimming' => 'Simning', 'tennis' => 'Tennis', - 'volleyball' => 'Volleyball', - 'wilderness' => 'Wilderness', - 'wrestling' => 'Wrestling', - 'after_shows' => 'After Shows', - 'film_history' => 'Film History', - 'film_interviews' => 'Film Interviews', - 'film_reviews' => 'Film Reviews', - 'tv_reviews' => 'TV Reviews', + 'volleyball' => 'Volleyboll', + 'wilderness' => 'Vildmark', + 'wrestling' => 'Brottning', + 'after_shows' => 'Efter serier', + 'film_history' => 'Film Historik', + 'film_interviews' => 'Filmintervjuer', + 'film_reviews' => 'Filmrecensioner', + 'tv_reviews' => 'TV recensioner', ], 'publish_form' => [ - 'back_to_podcast_dashboard' => 'Back to podcast dashboard', - 'post' => 'Your announcement post', + 'back_to_podcast_dashboard' => 'Tillbaka till podcast instrumentpanel', + 'post' => 'Ditt meddelande inlägg', 'post_hint' => - "Write a message to announce the publication of your podcast. The message will be featured in your podcast's homepage.", - 'message_placeholder' => 'Write your message…', - 'submit' => 'Publish', - 'publication_date' => 'Publication date', + "Skriv ett meddelande för att meddela publiceringen av din podcast. Meddelandet kommer att visas på din podcasts hemsida.", + 'message_placeholder' => 'Skriv ditt meddelande…', + 'submit' => 'Publicera', + 'publication_date' => 'Publiceringsdatum', 'publication_method' => [ - 'now' => 'Now', - 'schedule' => 'Schedule', + 'now' => 'Nu', + 'schedule' => 'Schemalägg', ], - 'scheduled_publication_date' => 'Scheduled publication date', + 'scheduled_publication_date' => 'Planerat publiceringsdatum', 'scheduled_publication_date_hint' => - 'You can schedule the podcast release by setting a future publication date. This field must be formatted as YYYY-MM-DD HH:mm', - 'submit_edit' => 'Edit publication', - 'cancel_publication' => 'Cancel publication', - 'message_warning' => 'You did not write a message for your announcement post!', - 'message_warning_hint' => 'Having a message increases social engagement, resulting in a better visibility for your podcast.', - 'message_warning_submit' => 'Publish anyway', + 'Du kan schemalägga podcast-utgåvan genom att ställa in ett framtida publiceringsdatum. Detta fält måste formateras som YYYY-MM-DD HH:mm', + 'submit_edit' => 'Redigera publikation', + 'cancel_publication' => 'Avbryt publicering', + 'message_warning' => 'Du skrev inte ett meddelande för ditt tillkännagivande!', + 'message_warning_hint' => 'Att ha ett meddelande ökar socialt engagemang, vilket resulterar i en bättre synlighet för din podcast.', + 'message_warning_submit' => 'Publicera ändå', ], 'publication_status_banner' => [ - 'draft_mode' => 'draft mode', - 'not_published' => 'This podcast is not yet published.', - 'scheduled' => 'This podcast is scheduled for publication on {publication_date}.', + 'draft_mode' => 'utkastläge', + 'not_published' => 'Denna podcast är ännu inte publicerad.', + 'scheduled' => 'Denna podcast är schemalagd för publicering på {publication_date}.', ], 'delete_form' => [ 'disclaimer' => - "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", - 'understand' => 'I understand, I want the podcast to be permanently deleted', - 'submit' => 'Delete', + "Ta bort podcasten kommer att ta bort alla avsnitt, mediefiler, inlägg och analytics i samband med det. Denna åtgärd är oåterkallelig, du kommer inte att kunna hämta dem efteråt.", + 'understand' => 'Jag förstår, jag vill att podcasten ska raderas permanent', + 'submit' => 'Radera', ], - 'by' => 'By {publisher}', - 'season' => 'Season {seasonNumber}', - 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'by' => 'Av {publisher}', + 'season' => 'Säsong {seasonNumber}', + 'list_of_episodes_year' => '{year} avsnitt ({episodeCount})', 'list_of_episodes_season' => - 'Season {seasonNumber} episodes ({episodeCount})', - 'no_episode' => 'No episode found!', - 'follow' => 'Follow', + 'Säsong {seasonNumber} avsnitt ({episodeCount})', + 'no_episode' => 'Inga avsnitt hittades!', + 'follow' => 'Följ', 'followers' => '{numberOfFollowers, plural, - one {# follower} - other {# followers} + one {# följare} + other {# följare} }', 'posts' => '{numberOfPosts, plural, - one {# post} - other {# posts} + one {# inlägg} + other {# inlägg} }', - 'activity' => 'Activity', - 'episodes' => 'Episodes', + 'activity' => 'Aktivitet', + 'episodes' => 'Avsnitt', 'sponsor' => 'Sponsor', - 'funding_links' => 'Funding links for {podcastTitle}', - 'find_on' => 'Find {podcastTitle} on', - 'listen_on' => 'Listen on', + 'funding_links' => 'Finansierar länkar för {podcastTitle}', + 'find_on' => 'Hitta {podcastTitle} på', + 'listen_on' => 'Lyssna på', ]; diff --git a/modules/Admin/Language/sv/PodcastImport.php b/modules/Admin/Language/sv/PodcastImport.php index 7c3ef67d..36f517ad 100644 --- a/modules/Admin/Language/sv/PodcastImport.php +++ b/modules/Admin/Language/sv/PodcastImport.php @@ -10,28 +10,28 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', - 'old_podcast_section_title' => 'The podcast to import', + 'Denna procedur kan ta lång tid. Eftersom den aktuella versionen inte visar några framsteg medan den körs, kommer du inte se något uppdaterat förrän det är gjort. Vid timeoutfel, öka värdet `max_execution_time`.', + 'old_podcast_section_title' => 'Podcast att importera', 'old_podcast_section_subtitle' => - 'Make sure you own the rights for this podcast before importing it. Copying and broadcasting a podcast without the proper rights is piracy and is liable to prosecution.', - 'imported_feed_url' => 'Feed URL', - 'imported_feed_url_hint' => 'The feed must be in xml or rss format.', - 'new_podcast_section_title' => 'The new podcast', - 'advanced_params_section_title' => 'Advanced parameters', + 'Se till att du äger rättigheterna för den här podcasten innan du importerar den. Kopiering och sändning av en podcast utan rätt rättigheter är piratkopiering och riskerar att åtalas.', + 'imported_feed_url' => 'URL för flöde', + 'imported_feed_url_hint' => 'Flödet måste vara i xml- eller rss-format.', + 'new_podcast_section_title' => 'Den nya podcasten', + 'advanced_params_section_title' => 'Avancerade parametrar', 'advanced_params_section_subtitle' => - 'Keep the default values if you have no idea of what the fields are for.', - 'slug_field' => 'Field to be used to calculate episode slug', + 'Behåll standardvärdena om du inte har någon aning om vad fälten är för.', + 'slug_field' => 'Fält som ska användas för att beräkna avsnitt slug', 'description_field' => - 'Source field used for episode description / show notes', - 'force_renumber' => 'Force episodes renumbering', + 'Källfält som används för avsnittsbeskrivning / visa anteckningar', + 'force_renumber' => 'Tvinga avsnitts åternumrering', 'force_renumber_hint' => - 'Use this if your podcast does not have episode numbers but wish to set them during import.', - 'season_number' => 'Season number', + 'Använd detta om din podcast inte har avsnittsnummer men vill ange dem under import.', + 'season_number' => 'Säsong nummer', 'season_number_hint' => - 'Use this if your podcast does not have a season number but wish to set one during import. Leave blank otherwise.', - 'max_episodes' => 'Maximum number of episodes to import', - 'max_episodes_hint' => 'Leave blank to import all episodes', + 'Använd detta om din podcast inte har ett säsongsnummer men vill ange en under import. Lämna tomt annars.', + 'max_episodes' => 'Maximalt antal avsnitt att importera', + 'max_episodes_hint' => 'Lämna tomt för att importera alla avsnitt', 'lock_import' => - 'This feed is protected. You cannot import it. If you are the owner, unprotect it on the origin platform.', - 'submit' => 'Import podcast', + 'Detta flöde är skyddat. Du kan inte importera det. Om du är ägare, sluta skydda det på ursprungsplattformen.', + 'submit' => 'Importera podcast', ]; diff --git a/modules/Admin/Language/sv/PodcastNavigation.php b/modules/Admin/Language/sv/PodcastNavigation.php index b4d7ddc0..6fe010c8 100644 --- a/modules/Admin/Language/sv/PodcastNavigation.php +++ b/modules/Admin/Language/sv/PodcastNavigation.php @@ -9,30 +9,30 @@ declare(strict_types=1); */ return [ - 'go_to_page' => 'Go to podcast page', - 'dashboard' => 'Podcast dashboard', - 'podcast-view' => 'Home', - 'podcast-edit' => 'Edit podcast', - 'podcast-persons-manage' => 'Manage persons', - 'episodes' => 'Episodes', - 'episode-list' => 'All episodes', - 'episode-create' => 'New episode', - 'analytics' => 'Analytics', - 'podcast-analytics' => 'Audience overview', - 'podcast-analytics-webpages' => 'Web pages visits', - 'podcast-analytics-locations' => 'Locations', - 'podcast-analytics-unique-listeners' => 'Unique listeners', - 'podcast-analytics-players' => 'Players', - 'podcast-analytics-listening-time' => 'Listening time', - 'podcast-analytics-time-periods' => 'Time periods', + 'go_to_page' => 'Gå till podcast sida', + 'dashboard' => 'Podcast instrumentpanel', + 'podcast-view' => 'Hem', + 'podcast-edit' => 'Redigera podcast', + 'podcast-persons-manage' => 'Hantera personer', + 'episodes' => 'Avsnitt', + 'episode-list' => 'Alla avsnitt', + 'episode-create' => 'Nytt avsnitt', + 'analytics' => 'Statistik', + 'podcast-analytics' => 'Lyssnar översikt', + 'podcast-analytics-webpages' => 'Besök på webbsidor', + 'podcast-analytics-locations' => 'Platser', + 'podcast-analytics-unique-listeners' => 'Unika lyssnare', + 'podcast-analytics-players' => 'Spelare', + 'podcast-analytics-listening-time' => 'Lyssningstid', + 'podcast-analytics-time-periods' => 'Tidsperioder', 'premium' => 'Premium', - 'subscription-list' => 'All subscriptions', - 'subscription-add' => 'Add subscription', - 'contributors' => 'Contributors', - 'contributor-list' => 'All contributors', - 'contributor-add' => 'Add contributor', - 'platforms' => 'External platforms', - 'platforms-podcasting' => 'Podcasting', - 'platforms-social' => 'Social networks', - 'platforms-funding' => 'Funding', + 'subscription-list' => 'Alla prenumerationer', + 'subscription-add' => 'Lägg till en prenumeration', + 'contributors' => 'Bidragsgivare', + 'contributor-list' => 'Alla bidragsgivare', + 'contributor-add' => 'Lägg till bidragsgivare', + 'platforms' => 'Externa plattformar', + 'platforms-podcasting' => 'Poddsändning', + 'platforms-social' => 'Sociala nätverk', + 'platforms-funding' => 'Finansiering', ]; diff --git a/modules/Admin/Language/sv/Settings.php b/modules/Admin/Language/sv/Settings.php index 4a70dcba..6a595e0a 100644 --- a/modules/Admin/Language/sv/Settings.php +++ b/modules/Admin/Language/sv/Settings.php @@ -9,50 +9,50 @@ declare(strict_types=1); */ return [ - 'title' => 'General settings', + 'title' => 'Allmänna inställningar', 'instance' => [ - 'title' => 'Instance', - 'site_icon' => 'Site icon', - 'site_icon_delete' => 'Delete site icon', - 'site_icon_hint' => 'Site icons are what you see on your browser tabs, bookmarks bar, and when you add a website as a shortcut on mobile devices.', - 'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', - 'site_name' => 'Site name', - 'site_description' => 'Site description', - 'submit' => 'Save', - 'editSuccess' => 'Instance has been updated successfully!', - 'deleteIconSuccess' => 'Site icon has been remove successfully!', + 'title' => 'Instans', + 'site_icon' => 'Ikon för webbplats', + 'site_icon_delete' => 'Ta bort webbplatsikonen', + 'site_icon_hint' => 'Webbplatsikoner är vad du ser på dina webbläsarflikar, bokmärkesfältet och när du lägger till en webbplats som en genväg på mobila enheter.', + 'site_icon_helper' => 'Ikonen måste vara kvadratisk och minst 512px bred och hög.', + 'site_name' => 'Webbplatsens namn', + 'site_description' => 'Webbplatsbeskrivning', + 'submit' => 'Spara', + 'editSuccess' => 'Instansen har uppdaterats!', + 'deleteIconSuccess' => 'Webbplatsikonen har tagits bort!', ], 'images' => [ - 'title' => 'Images', - 'subtitle' => 'Here you can regenerate all images based on the originals that were uploaded. To be used if you find that some images are missing. This task may take a while.', - 'regenerate' => 'Regenerate images', - 'regenerationSuccess' => 'All images have been regenerated successfully!', + 'title' => 'Bilder', + 'subtitle' => 'Här kan du regenerera alla bilder baserat på originalen som laddats upp. Att användas om du upptäcker att vissa bilder saknas. Denna uppgift kan ta ett tag.', + 'regenerate' => 'Regenerera bilder', + 'regenerationSuccess' => 'Alla bilder har återskapats framgångsrikt!', ], 'housekeeping' => [ - 'title' => 'Housekeeping', - 'subtitle' => 'Runs various housekeeping tasks. Use this feature if you ever encounter issues with media files or data integrity. These tasks may take a while.', - 'reset_counts' => 'Reset counts', - 'reset_counts_helper' => 'This option will recalculate and reset all data counts (number of followers, posts, comments, …).', - 'rewrite_media' => 'Rewrite media metadata', - 'rewrite_media_helper' => 'This option will delete all superfluous media files and recreate them (images, audio files, transcripts, chapters, …)', - 'rename_episodes_files' => 'Rename episode audio files', - 'rename_episodes_files_hint' => 'This option will rename all episodes audio files to a random string of characters. Use this if one of your private episodes link was leaked as this will effectively hide it.', - 'clear_cache' => 'Clear all cache', - 'clear_cache_helper' => 'This option will flush redis cache or writable/cache files.', - 'run' => 'Run housekeeping', - 'runSuccess' => 'Housekeeping has been run successfully!', + 'title' => 'Städning', + 'subtitle' => 'Kör olika städuppgifter. Använd denna funktion om du någonsin stöter på problem med mediefiler eller dataintegritet. Dessa uppgifter kan ta ett tag.', + 'reset_counts' => 'Återställ räknare', + 'reset_counts_helper' => 'Detta alternativ kommer att räkna om och återställa alla data räknas (antal följare, inlägg, kommentarer, …).', + 'rewrite_media' => 'Skriv om media metadata', + 'rewrite_media_helper' => 'Detta alternativ kommer att ta bort alla överflödiga mediefiler och återskapa dem (bilder, ljudfiler, avskrifter, kapitel, …)', + 'rename_episodes_files' => 'Döp om avsnittets ljudfiler', + 'rename_episodes_files_hint' => 'Detta alternativ kommer att byta namn på alla avsnitt ljudfiler till en slumpmässig sträng av tecken. Använd detta om en av dina privata episoder länk läckte eftersom detta effektivt kommer att dölja det.', + 'clear_cache' => 'Rensa all cache', + 'clear_cache_helper' => 'Det här alternativet kommer att radera redis cache eller skrivbara/cache-filer.', + 'run' => 'Kör städning', + 'runSuccess' => 'Städning har körts framgångsrikt!', ], 'theme' => [ - 'title' => 'Theme', - 'accent_section_title' => 'Accent color', - 'accent_section_subtitle' => 'Choose the color to determine the look and feel of all public pages.', - 'pine' => 'Pine', - 'crimson' => 'Crimson', - 'amber' => 'Amber', - 'lake' => 'Lake', + 'title' => 'Tema', + 'accent_section_title' => 'Accentfärg', + 'accent_section_subtitle' => 'Välj färg för att bestämma utseendet och känslan på alla offentliga sidor.', + 'pine' => 'Tall', + 'crimson' => 'Karmosinröd', + 'amber' => 'Bärnsten', + 'lake' => 'Sjö', 'jacaranda' => 'Jacaranda', 'onyx' => 'Onyx', - 'submit' => 'Save', - 'setInstanceThemeSuccess' => 'Theme has been updated successfully!', + 'submit' => 'Spara', + 'setInstanceThemeSuccess' => 'Temat har uppdaterats!', ], ]; diff --git a/modules/Admin/Language/sv/Soundbite.php b/modules/Admin/Language/sv/Soundbite.php index a3f828fe..fd80f828 100644 --- a/modules/Admin/Language/sv/Soundbite.php +++ b/modules/Admin/Language/sv/Soundbite.php @@ -10,22 +10,22 @@ declare(strict_types=1); return [ 'list' => [ - 'title' => 'Soundbites', - 'soundbite' => 'Soundbite', + 'title' => 'Ljudklipp', + 'soundbite' => 'Ljudklipp', ], 'messages' => [ - 'createSuccess' => 'Soundbite has been successfully created!', - 'deleteSuccess' => 'Soundbite has been successfully removed!', + 'createSuccess' => 'Ljudklipp har skapats!', + 'deleteSuccess' => 'Ljudklipp har tagits bort!', ], 'form' => [ - 'title' => 'New soundbite', - 'soundbite_title' => 'Soundbite title', - 'start_time' => 'Start at', - 'duration' => 'Duration', - 'submit' => 'Create soundbite', + 'title' => 'Nytt ljudklipp', + 'soundbite_title' => 'Ljudklipp titel', + 'start_time' => 'Starta vid', + 'duration' => 'Längd', + 'submit' => 'Skapa ljudklipp', ], - 'play' => 'Play soundbite', - 'stop' => 'Stop soundbite', - 'create' => 'New soundbite', - 'delete' => 'Delete soundbite', + 'play' => 'Spela ljudklipp', + 'stop' => 'Stoppa ljudklipp', + 'create' => 'Nytt ljudklipp', + 'delete' => 'Ta bort ljudklipp', ]; diff --git a/modules/Admin/Language/sv/Validation.php b/modules/Admin/Language/sv/Validation.php index 3bc78cfe..e9112946 100644 --- a/modules/Admin/Language/sv/Validation.php +++ b/modules/Admin/Language/sv/Validation.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'min_dims' => - '{field} is either not an image, or it is not wide or tall enough.', + '{field} är antingen inte en bild, eller så är den inte bred eller tillräckligt hög.', 'is_image_ratio' => - '{field} is either not an image or not of the right ratio.', + '{field} är antingen inte en bild eller inte av rätt förhållande.', ]; diff --git a/modules/Admin/Language/sv/VideoClip.php b/modules/Admin/Language/sv/VideoClip.php index 638de697..a94406b9 100644 --- a/modules/Admin/Language/sv/VideoClip.php +++ b/modules/Admin/Language/sv/VideoClip.php @@ -10,63 +10,63 @@ declare(strict_types=1); return [ 'list' => [ - 'title' => 'Video clips', + 'title' => 'Videoklipp', 'status' => [ 'label' => 'Status', - 'queued' => 'queued', - 'queued_hint' => 'Clip is waiting to be processed.', - 'pending' => 'pending', - 'pending_hint' => 'Clip will be generated shortly.', - 'running' => 'running', - 'running_hint' => 'Clip is being generated.', - 'failed' => 'failed', - 'failed_hint' => 'Clip could not be generated: script failure.', - 'passed' => 'passed', - 'passed_hint' => 'Clip was generated successfully!', + 'queued' => 'köad', + 'queued_hint' => 'Klipp väntar på att bearbetas.', + 'pending' => 'väntande', + 'pending_hint' => 'Klipp kommer att genereras inom kort.', + 'running' => 'körs', + 'running_hint' => 'Klipp genereras.', + 'failed' => 'misslyckades', + 'failed_hint' => 'Klipp kunde inte genereras: skript misslyckades.', + 'passed' => 'godkänd', + 'passed_hint' => 'Klipp har skapats framgångsrikt!', ], - 'clip' => 'Clip', - 'duration' => 'Job duration', + 'clip' => 'Klipp', + 'duration' => 'Varaktighet för jobb', ], - 'title' => 'Video clip: {videoClipLabel}', - 'download_clip' => 'Download clip', - 'create' => 'New video clip', - 'go_to_page' => 'Go to clip page', - 'retry' => 'Retry clip generation', - 'delete' => 'Delete clip', + 'title' => 'Videoklipp: {videoClipLabel}', + 'download_clip' => 'Ladda ner klipp', + 'create' => 'Nytt videoklipp', + 'go_to_page' => 'Gå till klippsida', + 'retry' => 'Generering av nytt klipp', + 'delete' => 'Ta bort klipp', 'logs' => 'Job logs', 'messages' => [ - 'alreadyExistingError' => 'The video clip you are trying to create already exists!', - 'addToQueueSuccess' => 'Video clip has been added to queue, awaiting to be created!', - 'deleteSuccess' => 'Video clip has been successfully removed!', + 'alreadyExistingError' => 'Det videoklipp du försöker skapa finns redan!', + 'addToQueueSuccess' => 'Videoklipp har lagts till i kön, väntar på att skapas!', + 'deleteSuccess' => 'Videoklipp har tagits bort!', ], 'format' => [ - 'landscape' => 'Landscape', - 'portrait' => 'Portrait', - 'squared' => 'Squared', + 'landscape' => 'Liggande', + 'portrait' => 'Stående', + 'squared' => 'Kvadrat', ], 'form' => [ - 'title' => 'New video clip', - 'params_section_title' => 'Video clip parameters', - 'clip_title' => 'Clip title', + 'title' => 'Nytt videoklipp', + 'params_section_title' => 'Parametrar för videoklipp', + 'clip_title' => 'Klipp titel', 'format' => [ - 'label' => 'Choose a format', - 'landscape_hint' => 'With a 16:9 ratio, landscape videos are great for PeerTube, Youtube and Vimeo.', - 'portrait_hint' => 'With a 9:16 ratio, portrait videos are great for TikTok, Youtube shorts and Instagram stories.', - 'squared_hint' => 'With a 1:1 ratio, squared videos are great for Mastodon, Facebook, Twitter and LinkedIn.', + 'label' => 'Välj ett format', + 'landscape_hint' => 'Med ett 16:9 förhållande, landskapsvideor är bra för PeerTube, Youtube och Vimeo.', + 'portrait_hint' => 'Med 9:16 förhållande, porträttfilmer är bra för TikTok, Youtube shorts och Instagram berättelser.', + 'squared_hint' => 'Med en 1:1 förhållande, fyrkantiga videor är bra för Mastodon, Facebook, Twitter och LinkedIn.', ], - 'theme' => 'Select a theme', - 'start_time' => 'Start at', - 'duration' => 'Duration', - 'trim_start' => 'Trim start', - 'trim_end' => 'Trim end', - 'submit' => 'Create video clip', + 'theme' => 'Välj ett tema', + 'start_time' => 'Starta vid', + 'duration' => 'Längd', + 'trim_start' => 'Trimma start', + 'trim_end' => 'Trimma slut', + 'submit' => 'Skapa videoklipp', ], 'requirements' => [ - 'title' => 'Missing requirements', - 'missing' => 'You have missing requirements. Make sure to add all the required items to be allowed creating a video for this episode!', + 'title' => 'Krav ej uppfyllda', + 'missing' => 'Du har saknade krav. Se till att lägga till alla nödvändiga objekt som tillåts att skapa en video för detta avsnitt!', 'ffmpeg' => 'FFmpeg', - 'gd' => 'Graphics Draw (GD)', - 'freetype' => 'Freetype library for GD', - 'transcript' => 'Transcript file (.srt)', + 'gd' => 'Grafik Rita (GD)', + 'freetype' => 'Freetyp bibliotek för GD', + 'transcript' => 'Avskrift fil (.srt)', ], ]; diff --git a/modules/Admin/Language/zh-Hans/AboutCastopod.php b/modules/Admin/Language/zh-Hans/AboutCastopod.php index 3fb62aff..9817b219 100644 --- a/modules/Admin/Language/zh-Hans/AboutCastopod.php +++ b/modules/Admin/Language/zh-Hans/AboutCastopod.php @@ -9,14 +9,14 @@ declare(strict_types=1); */ return [ - 'title' => 'About Castopod', - 'host_name' => 'Host name', - 'version' => 'Castopod version', - 'php_version' => 'PHP version', - 'os' => 'Operating System', - 'languages' => 'Languages', - 'update_database' => 'Update database', + 'title' => '关于 Castopod', + 'host_name' => '主机名', + 'version' => 'Castopod 版本', + 'php_version' => 'PHP 版本', + 'os' => '操作系统', + 'languages' => '语言', + 'update_database' => '更新数据库', 'messages' => [ - 'databaseUpdateSuccess' => 'Database is up to date!', + 'databaseUpdateSuccess' => '数据库是最新的!', ], ]; diff --git a/modules/Admin/Language/zh-Hans/Breadcrumb.php b/modules/Admin/Language/zh-Hans/Breadcrumb.php index 9d90fe90..3bf06845 100644 --- a/modules/Admin/Language/zh-Hans/Breadcrumb.php +++ b/modules/Admin/Language/zh-Hans/Breadcrumb.php @@ -19,17 +19,17 @@ return [ 'pages' => '页', 'settings' => '设置', 'theme' => '主题', - 'about' => 'about', + 'about' => '关于', 'add' => '添加', 'new' => '新建', 'edit' => '编辑', 'persons' => '人', 'publish' => '发布', 'publish-edit' => '编辑发布', - 'publish-date-edit' => 'edit publication date', + 'publish-date-edit' => '编辑发布日期', 'unpublish' => '取消发布', 'delete' => '删除', - 'remove' => 'remove', + 'remove' => '移除', 'fediverse' => '联邦宇宙', 'block-lists' => '封禁列表', 'users' => '用户', diff --git a/modules/Admin/Language/zh-Hans/Episode.php b/modules/Admin/Language/zh-Hans/Episode.php index 7a8f335a..736faa96 100644 --- a/modules/Admin/Language/zh-Hans/Episode.php +++ b/modules/Admin/Language/zh-Hans/Episode.php @@ -24,14 +24,14 @@ return [ 'edit' => '编辑', 'publish' => '发布', 'publish_edit' => '编辑发布', - 'publish_date_edit' => 'Edit publication date', + 'publish_date_edit' => '编辑发布日期', 'unpublish' => '取消发布', 'publish_error' => '剧集已被发布。', 'publish_edit_error' => '剧集已被发布。', 'publish_cancel_error' => '剧集已被发布。', - 'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.', - 'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.', - 'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!', + 'publish_date_edit_error' => '剧集尚未发布,你不能编辑其发布日期。', + 'publish_date_edit_future_error' => '剧集的发布日期只能设置为过去的日期! 如果你想重新安排日期,请先取消发布。', + 'publish_date_edit_success' => '剧集的发布日期已成功更新!', 'unpublish_error' => '剧集尚未发布。', 'delete' => '删除', 'go_to_page' => '转到页面', @@ -183,9 +183,9 @@ return [ 'message_warning_submit' => '仍然发布', ], 'publish_date_edit_form' => [ - 'new_publication_date' => 'New publication date', - 'new_publication_date_hint' => 'Must be set to a past date.', - 'submit' => 'Edit publication date', + 'new_publication_date' => '新发布日期', + 'new_publication_date_hint' => '必须设置为过去的日期。', + 'submit' => '编辑发布日期', ], 'unpublish_form' => [ 'disclaimer' => diff --git a/modules/Admin/Language/zh-Hans/Navigation.php b/modules/Admin/Language/zh-Hans/Navigation.php index 4be56290..52d57ac3 100644 --- a/modules/Admin/Language/zh-Hans/Navigation.php +++ b/modules/Admin/Language/zh-Hans/Navigation.php @@ -33,7 +33,7 @@ return [ 'settings' => '设置', 'settings-general' => '通用', 'settings-theme' => '主题', - 'about' => 'About', + 'about' => '关于', 'account' => [ 'my-account' => '我的帐户', 'change-password' => '修改密码', diff --git a/modules/Auth/Language/ar/Auth.php b/modules/Auth/Language/ar/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/ar/Auth.php +++ b/modules/Auth/Language/ar/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/ar/Contributor.php b/modules/Auth/Language/ar/Contributor.php index 92ddf0b8..4731c799 100644 --- a/modules/Auth/Language/ar/Contributor.php +++ b/modules/Auth/Language/ar/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'إضافة مساهم', 'submit_edit' => 'حدّث الدور', ], - 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "لا يمكنك إزالة صاحب البودكاست!", 'removeSuccess' => 'You have successfully removed {username} from {podcastTitle}', diff --git a/modules/Auth/Language/ar/User.php b/modules/Auth/Language/ar/User.php index 7607ad97..39f78c2e 100644 --- a/modules/Auth/Language/ar/User.php +++ b/modules/Auth/Language/ar/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'احذف', @@ -18,7 +18,7 @@ return [ 'all_users' => 'كافة المستخدمين', 'list' => [ 'user' => 'مستخدم', - 'roles' => 'الأدوار', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'اسم المستخدم', 'password' => 'كلمة المرور', 'new_password' => 'كلمة المرور الجديدة', + 'role' => 'Role', 'roles' => 'الأدوار', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'حفظ', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/br/Auth.php b/modules/Auth/Language/br/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/br/Auth.php +++ b/modules/Auth/Language/br/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/br/Contributor.php b/modules/Auth/Language/br/Contributor.php index 637fe9f1..60995c44 100644 --- a/modules/Auth/Language/br/Contributor.php +++ b/modules/Auth/Language/br/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Ouzhpennañ ur perzhiad pe ur berzhiadez', 'submit_edit' => 'Hizivaat ar roll', ], - 'roles' => [ - 'podcast_admin' => 'Merour podkastoù', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Ne c'hellit ket lemel perc'henn ar podkast!", 'removeSuccess' => 'Lamet ho peus {username} diouzh {podcastTitle} gant berzh', diff --git a/modules/Auth/Language/br/User.php b/modules/Auth/Language/br/User.php index 1fa37c2a..d2c07933 100644 --- a/modules/Auth/Language/br/User.php +++ b/modules/Auth/Language/br/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Kemm rolloù {username}", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Dilemel', @@ -18,7 +18,7 @@ return [ 'all_users' => 'An holl implijerien·ezed', 'list' => [ 'user' => 'Implijer·ez', - 'roles' => 'Rolloù', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Anv implijer·ez', 'password' => 'Ger-tremen', 'new_password' => 'Ger-tremen nevez', + 'role' => 'Role', 'roles' => 'Rolloù', 'permissions' => 'Aotreoù', 'submit_create' => 'Krouiñ an implijer·ez', 'submit_edit' => 'Enrollañ', 'submit_password_change' => 'Kemm!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => 'Dilamet eo bet {username}.', diff --git a/modules/Auth/Language/ca/Auth.php b/modules/Auth/Language/ca/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/ca/Auth.php +++ b/modules/Auth/Language/ca/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/ca/Contributor.php b/modules/Auth/Language/ca/Contributor.php index 61a8b380..e17f7fe0 100644 --- a/modules/Auth/Language/ca/Contributor.php +++ b/modules/Auth/Language/ca/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Afegir un col·laborador', 'submit_edit' => 'Actualitzar el rol', ], - 'roles' => [ - 'podcast_admin' => 'Administrador del podcast', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "No podeu eliminar al propietari del podcast!", 'removeSuccess' => 'S\'ha eliminat a {username} de {podcastTitle}', diff --git a/modules/Auth/Language/ca/User.php b/modules/Auth/Language/ca/User.php index d0065c45..6520db70 100644 --- a/modules/Auth/Language/ca/User.php +++ b/modules/Auth/Language/ca/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Editar els rols de {username}", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Bandejar', 'unban' => 'Re-admetre', 'delete' => 'Eliminar', @@ -18,7 +18,7 @@ return [ 'all_users' => 'Tots els usuaris', 'list' => [ 'user' => 'Usuari', - 'roles' => 'Rols', + 'role' => 'Role', 'banned' => 'Bandejat?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Nom de l\'usuari', 'password' => 'Contrasenya', 'new_password' => 'Nova contrasenya', + 'role' => 'Role', 'roles' => 'Rols', 'permissions' => 'Permisos', 'submit_create' => 'Crea un usuari', 'submit_edit' => 'Desar', 'submit_password_change' => 'Canviat!', ], - 'roles' => [ - 'superadmin' => 'Super administrador/a', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} és un superadministrador, hom simplement no bandeja a un superadministrador...', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} és un superadministrador, hom simplement no elimina a un superadministrador...', 'deleteSuccess' => '{username} ha estat eliminat.', diff --git a/modules/Auth/Language/de/Auth.php b/modules/Auth/Language/de/Auth.php index 09e3cd6b..ef2db93d 100644 --- a/modules/Auth/Language/de/Auth.php +++ b/modules/Auth/Language/de/Auth.php @@ -11,16 +11,16 @@ declare(strict_types=1); return [ 'instance_groups' => [ 'owner' => [ - 'title' => 'Instance Owner', - 'description' => 'The Castopod owner.', + 'title' => 'Instanzbesitzer', + 'description' => 'Der Castopod-Besitzer.', ], 'superadmin' => [ - 'title' => 'Super admin', - 'description' => 'Has complete control over Castopod.', + 'title' => 'Super-Administrator', + 'description' => 'Hat die vollständige Kontrolle über Castopod.', ], 'manager' => [ 'title' => 'Manager', - 'description' => 'Manages Castopod\'s content.', + 'description' => 'Verwaltet Castopods Inhalte.', ], 'podcaster' => [ 'title' => 'Podcaster', @@ -28,35 +28,35 @@ return [ ], ], 'instance_permissions' => [ - 'admin.access' => 'Can access the Castopod admin area.', - 'admin.settings' => 'Can access the Castopod settings.', - 'users.manage' => 'Can manage Castopod users.', - 'persons.manage' => 'Can manage persons.', - 'pages.manage' => 'Can manage pages.', - 'podcasts.view' => 'Can view all podcasts.', - 'podcasts.create' => 'Can create new podcasts.', - 'podcasts.import' => 'Can import podcasts.', + 'admin.access' => 'Kann auf den Admin-Bereich von Castopod zugreifen.', + 'admin.settings' => 'Kann auf die Einstellungen von Castopod zugreifen.', + 'users.manage' => 'Kann Castopod-Benutzer verwalten.', + 'persons.manage' => 'Kann Mitwirkende verwalten.', + 'pages.manage' => 'Kann Seiten verwalten.', + 'podcasts.view' => 'Kann alle Podcasts einsehen.', + 'podcasts.create' => 'Kann neue Podcasts erstellen.', + 'podcasts.import' => 'Kann Podcasts importieren.', 'fediverse.manage-blocks' => 'Can block fediverse actors/domains from interacting with Castopod.', ], 'podcast_groups' => [ 'owner' => [ - 'title' => 'Podcast Owner', - 'description' => 'The podcast owner.', + 'title' => 'Podcast-Besitzer', + 'description' => 'Der Podcast-Besitzer.', ], 'admin' => [ - 'title' => 'Admin', - 'description' => 'Has complete control of podcast #{id}.', + 'title' => 'Administrator', + 'description' => 'Hat die vollständige Kontrolle über Podcast #{id}.', ], 'editor' => [ 'title' => 'Editor', - 'description' => 'Manages content and publications of podcast #{id}.', + 'description' => 'Verwaltet Inhalte und Veröffentlichungen von Podcast #{id}.', ], 'author' => [ - 'title' => 'Author', - 'description' => 'Manages content of podcast #{id} but cannot publish them.', + 'title' => 'Autor', + 'description' => 'Verwaltet Inhalte von Podcast #{id}, kann diese aber nicht veröffentlichen.', ], 'guest' => [ - 'title' => 'Guest', + 'title' => 'Gast', 'description' => 'General contributor of the podcast #{id}.', ], ], @@ -69,12 +69,13 @@ return [ 'manage-subscriptions' => 'Can manage subscriptions of podcast #{id}.', 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', - 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-publications' => 'Kann Podcast #{id} veröffentlichen.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', - 'episodes.create' => 'Can create episodes for podcast #{id}.', - 'episodes.edit' => 'Can edit episodes of podcast #{id}.', - 'episodes.delete' => 'Can delete episodes of podcast #{id}.', + 'episodes.create' => 'Kann Folgen für Podcast #{id} erstellen.', + 'episodes.edit' => 'Kann Folgen von Podcast #{id} bearbeiten.', + 'episodes.delete' => 'Kann Folgen von Podcast #{id} löschen.', 'episodes.manage-persons' => 'Can manage episode persons of podcast #{id}.', 'episodes.manage-clips' => 'Can manage video clips or soundbites of podcast #{id}.', 'episodes.manage-publications' => 'Can publish/unpublish episodes and posts of podcast #{id}.', @@ -82,12 +83,12 @@ return [ ], // missing keys - 'code' => 'Your 6-digit code', + 'code' => 'Ihr 6-stelliger Code', - 'notEnoughPrivilege' => 'You do not have sufficient permissions to access that page.', - 'set_password' => 'Set your password', + 'notEnoughPrivilege' => 'Sie haben keine ausreichenden Berechtigungen, um auf diese Seite zuzugreifen.', + 'set_password' => 'Legen Sie Ihr Passwort fest', // Welcome email - 'welcomeSubject' => 'You\'ve been invited to {siteName}', + 'welcomeSubject' => 'Sie wurden zu {siteName} eingeladen', 'emailWelcomeMailBody' => 'An account was created for you on {domain}, click on the login link below to set your password. The link is valid for {numberOfHours} hours after this email was sent.', ]; diff --git a/modules/Auth/Language/de/Contributor.php b/modules/Auth/Language/de/Contributor.php index c21e05b8..cba03829 100644 --- a/modules/Auth/Language/de/Contributor.php +++ b/modules/Auth/Language/de/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Administrator zufügen', 'submit_edit' => 'Rolle aktualisieren', ], - 'roles' => [ - 'podcast_admin' => 'Podcast Administrator', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Der Podcast Inhaber kann nicht entfernt werden!", 'removeSuccess' => '{username} wurde von {podcastTitle} entfernt', diff --git a/modules/Auth/Language/de/User.php b/modules/Auth/Language/de/User.php index f6337ed4..e0d54718 100644 --- a/modules/Auth/Language/de/User.php +++ b/modules/Auth/Language/de/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Bearbeite {username}'s Rollen", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Bannen', 'unban' => 'Entbannen', 'delete' => 'Löschen', @@ -18,7 +18,7 @@ return [ 'all_users' => 'Alle Benutzer', 'list' => [ 'user' => 'Benutzer', - 'roles' => 'Rollen', + 'role' => 'Role', 'banned' => 'Gebannt?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Benutzername', 'password' => 'Passwort', 'new_password' => 'Neues Passwort', + 'role' => 'Role', 'roles' => 'Rollen', 'permissions' => 'Berechtigungen', 'submit_create' => 'Benutzer erstellen', 'submit_edit' => 'Speichern', 'submit_password_change' => 'Verändern!', ], - 'roles' => [ - 'superadmin' => 'Super-Admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} ist ein Superadmin, man bannt nicht einfach einen Superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} ist ein Superadmin, man löscht nicht einfach einen Superadmin…', 'deleteSuccess' => '{username} wurde gelöscht.', diff --git a/modules/Auth/Language/el/Auth.php b/modules/Auth/Language/el/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/el/Auth.php +++ b/modules/Auth/Language/el/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/el/Contributor.php b/modules/Auth/Language/el/Contributor.php index 132d9abb..1acec63a 100644 --- a/modules/Auth/Language/el/Contributor.php +++ b/modules/Auth/Language/el/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Προσθήκη συντελεστή', 'submit_edit' => 'Ενημέρωση ρόλου', ], - 'roles' => [ - 'podcast_admin' => 'Διαχειριστής Podcast', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Δεν μπορείτε να καταργήσετε τον ιδιοκτήτη podcast!", 'removeSuccess' => 'Έχετε αφαιρέσει με επιτυχία τον χρήστη {username} από το {podcastTitle}', diff --git a/modules/Auth/Language/el/User.php b/modules/Auth/Language/el/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/el/User.php +++ b/modules/Auth/Language/el/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/es/Auth.php b/modules/Auth/Language/es/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/es/Auth.php +++ b/modules/Auth/Language/es/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/es/Contributor.php b/modules/Auth/Language/es/Contributor.php index 7cd774b2..b4eee665 100644 --- a/modules/Auth/Language/es/Contributor.php +++ b/modules/Auth/Language/es/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Añadir colaborador', 'submit_edit' => 'Actualizar Cargo', ], - 'roles' => [ - 'podcast_admin' => 'Administrador del Podcast', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "¡No puedes eliminar al dueño del podcast!", 'removeSuccess' => 'Has eliminado con éxito a {username} de {podcastTitle}', diff --git a/modules/Auth/Language/es/User.php b/modules/Auth/Language/es/User.php index cf00d948..22562c9f 100644 --- a/modules/Auth/Language/es/User.php +++ b/modules/Auth/Language/es/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Editar rol de {username}", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Banear', 'unban' => 'Desbanear', 'delete' => 'Borrar', @@ -18,7 +18,7 @@ return [ 'all_users' => 'Todos los usuarios', 'list' => [ 'user' => 'Usuario', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => '¿Baneado?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Nombre de usuario', 'password' => 'Contraseña', 'new_password' => 'Nueva Contraseña', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permisos', 'submit_create' => 'Crear usuario', 'submit_edit' => 'Guardar', 'submit_password_change' => '¡Cambiar!', ], - 'roles' => [ - 'superadmin' => 'Super administrador', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} es un superadmin, no puedes banear a un superadministrador…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} es un superadmin, no puedes borrar a un superadministrador…', 'deleteSuccess' => '{username} ha sido eliminado.', diff --git a/modules/Auth/Language/fa/Auth.php b/modules/Auth/Language/fa/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/fa/Auth.php +++ b/modules/Auth/Language/fa/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/fa/Contributor.php b/modules/Auth/Language/fa/Contributor.php index d0f3b93d..c70badc0 100644 --- a/modules/Auth/Language/fa/Contributor.php +++ b/modules/Auth/Language/fa/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Add contributor', 'submit_edit' => 'Update role', ], - 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "You can't remove the podcast owner!", 'removeSuccess' => 'You have successfully removed {username} from {podcastTitle}', diff --git a/modules/Auth/Language/fa/User.php b/modules/Auth/Language/fa/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/fa/User.php +++ b/modules/Auth/Language/fa/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/fr/Auth.php b/modules/Auth/Language/fr/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/fr/Auth.php +++ b/modules/Auth/Language/fr/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/fr/Contributor.php b/modules/Auth/Language/fr/Contributor.php index 700f760b..2a1f9dd2 100644 --- a/modules/Auth/Language/fr/Contributor.php +++ b/modules/Auth/Language/fr/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Ajouter le contributeur', 'submit_edit' => 'Mettre à jour le rôle', ], - 'roles' => [ - 'podcast_admin' => 'Administrateur de Podcasts', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Vous ne pouvez pas retirer le propriétaire du podcast !", 'removeSuccess' => 'Vous avez retiré {username} de {podcastTitle}', diff --git a/modules/Auth/Language/fr/User.php b/modules/Auth/Language/fr/User.php index 27283ed9..69d864d1 100644 --- a/modules/Auth/Language/fr/User.php +++ b/modules/Auth/Language/fr/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Modifier les rôles de {username}", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Bloquer', 'unban' => 'Débloquer', 'delete' => 'Supprimer', @@ -18,7 +18,7 @@ return [ 'all_users' => 'Tous les utilisateurs', 'list' => [ 'user' => 'Utilisateurs', - 'roles' => 'Rôles', + 'role' => 'Role', 'banned' => 'Bloqué ?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Identifiant', 'password' => 'Mot de passe', 'new_password' => 'Nouveau mot de passe', + 'role' => 'Role', 'roles' => 'Rôles', 'permissions' => 'Permissions', 'submit_create' => 'Créer un utilisateur', 'submit_edit' => 'Enregistrer', 'submit_password_change' => 'Valider !', ], - 'roles' => [ - 'superadmin' => 'Super-utilisateur', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} est un super-utilisateur, on ne bloque pas un super-utilisateur comme ça…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} est un super-utilisateur, on ne supprime pas un super-utilisateur comme ça…', 'deleteSuccess' => '{username} a été supprimé.', diff --git a/modules/Auth/Language/gd/Auth.php b/modules/Auth/Language/gd/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/gd/Auth.php +++ b/modules/Auth/Language/gd/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/gd/Contributor.php b/modules/Auth/Language/gd/Contributor.php index d0f3b93d..c70badc0 100644 --- a/modules/Auth/Language/gd/Contributor.php +++ b/modules/Auth/Language/gd/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Add contributor', 'submit_edit' => 'Update role', ], - 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "You can't remove the podcast owner!", 'removeSuccess' => 'You have successfully removed {username} from {podcastTitle}', diff --git a/modules/Auth/Language/gd/User.php b/modules/Auth/Language/gd/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/gd/User.php +++ b/modules/Auth/Language/gd/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/gl/Auth.php b/modules/Auth/Language/gl/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/gl/Auth.php +++ b/modules/Auth/Language/gl/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/gl/Contributor.php b/modules/Auth/Language/gl/Contributor.php index a09021cd..664fb1be 100644 --- a/modules/Auth/Language/gl/Contributor.php +++ b/modules/Auth/Language/gl/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Engadir colaboración', 'submit_edit' => 'Actualizar rol', ], - 'roles' => [ - 'podcast_admin' => 'Admin podcast', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Non podes eliminar a propietaria do podcast!", 'removeSuccess' => 'Quitaches correctamente a {username} de {podcastTitle}', diff --git a/modules/Auth/Language/gl/User.php b/modules/Auth/Language/gl/User.php index dd84c53d..74aa688f 100644 --- a/modules/Auth/Language/gl/User.php +++ b/modules/Auth/Language/gl/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Editar os roles de {username}", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Vetar', 'unban' => 'Retirar veto', 'delete' => 'Eliminar', @@ -18,7 +18,7 @@ return [ 'all_users' => 'Tódalas usuarias', 'list' => [ 'user' => 'Usuaria', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Vetada?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Identificador', 'password' => 'Contrasinal', 'new_password' => 'Novo contrasinal', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permisos', 'submit_create' => 'Crear usuaria', 'submit_edit' => 'Gardar', 'submit_password_change' => 'Cambiar!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ 'A instancia pertence a {username}, ti non podes editar os roles.', 'banSuperAdminError' => '{username} é superadmin, non se pode vetar a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} é superadmin, non se pode eliminar a superadmin…', 'deleteSuccess' => 'Eliminouse a {username}.', diff --git a/modules/Auth/Language/id/Auth.php b/modules/Auth/Language/id/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/id/Auth.php +++ b/modules/Auth/Language/id/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/id/Contributor.php b/modules/Auth/Language/id/Contributor.php index d0f3b93d..c70badc0 100644 --- a/modules/Auth/Language/id/Contributor.php +++ b/modules/Auth/Language/id/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Add contributor', 'submit_edit' => 'Update role', ], - 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "You can't remove the podcast owner!", 'removeSuccess' => 'You have successfully removed {username} from {podcastTitle}', diff --git a/modules/Auth/Language/id/User.php b/modules/Auth/Language/id/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/id/User.php +++ b/modules/Auth/Language/id/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/it/Auth.php b/modules/Auth/Language/it/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/it/Auth.php +++ b/modules/Auth/Language/it/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/it/Contributor.php b/modules/Auth/Language/it/Contributor.php index ab685c04..b82b51bb 100644 --- a/modules/Auth/Language/it/Contributor.php +++ b/modules/Auth/Language/it/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Aggiungi collaboratore', 'submit_edit' => 'Aggiorna Ruolo', ], - 'roles' => [ - 'podcast_admin' => 'Amministratore del podcast', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Non puoi rimuovere il proprietario del podcast!", 'removeSuccess' => 'Hai rimosso con successo {username} da {podcastTitle}', diff --git a/modules/Auth/Language/it/User.php b/modules/Auth/Language/it/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/it/User.php +++ b/modules/Auth/Language/it/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/ko/Auth.php b/modules/Auth/Language/ko/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/ko/Auth.php +++ b/modules/Auth/Language/ko/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/ko/Contributor.php b/modules/Auth/Language/ko/Contributor.php new file mode 100644 index 00000000..c70badc0 --- /dev/null +++ b/modules/Auth/Language/ko/Contributor.php @@ -0,0 +1,47 @@ + 'Podcast contributors', + 'view' => "{username}'s contribution to {podcastTitle}", + 'add' => 'Add contributor', + 'add_contributor' => 'Add a contributor for {0}', + 'edit_role' => 'Update role for {0}', + 'edit' => 'Edit', + 'remove' => 'Remove', + 'list' => [ + 'username' => 'Username', + 'role' => 'Role', + ], + 'form' => [ + 'user' => 'User', + 'user_placeholder' => 'Select a user…', + 'role' => 'Role', + 'role_placeholder' => 'Select its role…', + 'submit_add' => 'Add contributor', + 'submit_edit' => 'Update role', + ], + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', + ], + 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", + 'removeOwnerError' => "You can't remove the podcast owner!", + 'removeSuccess' => + 'You have successfully removed {username} from {podcastTitle}', + 'alreadyAddedError' => + "The contributor you're trying to add has already been added!", + ], +]; diff --git a/modules/Auth/Language/ko/MyAccount.php b/modules/Auth/Language/ko/MyAccount.php new file mode 100644 index 00000000..6ebbb30e --- /dev/null +++ b/modules/Auth/Language/ko/MyAccount.php @@ -0,0 +1,18 @@ + 'My account info', + 'changePassword' => 'Change my password', + 'messages' => [ + 'wrongPasswordError' => "You've entered the wrong password, try again.", + 'passwordChangeSuccess' => 'Password has been successfully changed!', + ], +]; diff --git a/modules/Auth/Language/ko/User.php b/modules/Auth/Language/ko/User.php new file mode 100644 index 00000000..32ec560c --- /dev/null +++ b/modules/Auth/Language/ko/User.php @@ -0,0 +1,60 @@ + "Edit {username}'s role", + 'ban' => 'Ban', + 'unban' => 'Unban', + 'delete' => 'Delete', + 'create' => 'New user', + 'view' => "{username}'s info", + 'all_users' => 'All users', + 'list' => [ + 'user' => 'User', + 'role' => 'Role', + 'banned' => 'Banned?', + ], + 'form' => [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'new_password' => 'New Password', + 'role' => 'Role', + 'roles' => 'Roles', + 'permissions' => 'Permissions', + 'submit_create' => 'Create user', + 'submit_edit' => 'Save', + 'submit_password_change' => 'Change!', + ], + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', + ], + 'messages' => [ + 'createSuccess' => + 'User created successfully! A welcome email was sent to {username} with a login link, they will be prompted with a password reset upon first authentication.', + 'roleEditSuccess' => + "{username}'s roles have been successfully updated.", + 'banSuccess' => '{username} has been banned.', + 'unbanSuccess' => '{username} has been unbanned.', + 'editOwnerError' => + '{username} is the instance owner, one does not simply touch the owner…', + 'banSuperAdminError' => + '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', + 'deleteSuperAdminError' => + '{username} is a superadmin, one does not simply delete a superadmin…', + 'deleteSuccess' => '{username} has been deleted.', + ], +]; diff --git a/modules/Auth/Language/nl/Auth.php b/modules/Auth/Language/nl/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/nl/Auth.php +++ b/modules/Auth/Language/nl/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/nl/Contributor.php b/modules/Auth/Language/nl/Contributor.php index a9d938d6..3754bb92 100644 --- a/modules/Auth/Language/nl/Contributor.php +++ b/modules/Auth/Language/nl/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Voeg bijdrager toe', 'submit_edit' => 'Rol bijwerken', ], - 'roles' => [ - 'podcast_admin' => 'Podcast beheerder', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Je kunt de eigenaar van podcast niet verwijderen!", 'removeSuccess' => 'Je hebt {username} met succes verwijderd van {podcastTitle}', diff --git a/modules/Auth/Language/nl/User.php b/modules/Auth/Language/nl/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/nl/User.php +++ b/modules/Auth/Language/nl/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/nn-NO/Auth.php b/modules/Auth/Language/nn-NO/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/nn-NO/Auth.php +++ b/modules/Auth/Language/nn-NO/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/nn-NO/Contributor.php b/modules/Auth/Language/nn-NO/Contributor.php index 0fe4cc66..1fc338ba 100644 --- a/modules/Auth/Language/nn-NO/Contributor.php +++ b/modules/Auth/Language/nn-NO/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Legg til bidragsytar', 'submit_edit' => 'Oppdater rolla', ], - 'roles' => [ - 'podcast_admin' => 'Podkaststyrar', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Du kan ikkje fjerna podkast-eigaren!", 'removeSuccess' => 'Du har fjerna {username} frå {podcastTitle}', diff --git a/modules/Auth/Language/nn-NO/User.php b/modules/Auth/Language/nn-NO/User.php index a3ec4bfe..2ac777e1 100644 --- a/modules/Auth/Language/nn-NO/User.php +++ b/modules/Auth/Language/nn-NO/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Endre rollene til {username}", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Steng ute', 'unban' => 'Slepp inn att', 'delete' => 'Slett', @@ -18,7 +18,7 @@ return [ 'all_users' => 'Alle brukarane', 'list' => [ 'user' => 'Brukar', - 'roles' => 'Roller', + 'role' => 'Role', 'banned' => 'Utestengd?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Brukarnamn', 'password' => 'Passord', 'new_password' => 'Nytt passord', + 'role' => 'Role', 'roles' => 'Roller', 'permissions' => 'Løyve', 'submit_create' => 'Lag brukar', 'submit_edit' => 'Lagre', 'submit_password_change' => 'Endre!', ], - 'roles' => [ - 'superadmin' => 'Superstyrar', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} er superstyrar, og du stengjer ikkje ute ein superstyrar…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} er superstyrar, og du slettar ikkje ein superstyrar…', 'deleteSuccess' => '{username} er sletta.', diff --git a/modules/Auth/Language/oc/Auth.php b/modules/Auth/Language/oc/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/oc/Auth.php +++ b/modules/Auth/Language/oc/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/oc/Contributor.php b/modules/Auth/Language/oc/Contributor.php index d0f3b93d..c70badc0 100644 --- a/modules/Auth/Language/oc/Contributor.php +++ b/modules/Auth/Language/oc/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Add contributor', 'submit_edit' => 'Update role', ], - 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "You can't remove the podcast owner!", 'removeSuccess' => 'You have successfully removed {username} from {podcastTitle}', diff --git a/modules/Auth/Language/oc/User.php b/modules/Auth/Language/oc/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/oc/User.php +++ b/modules/Auth/Language/oc/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/pl/Auth.php b/modules/Auth/Language/pl/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/pl/Auth.php +++ b/modules/Auth/Language/pl/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/pl/Contributor.php b/modules/Auth/Language/pl/Contributor.php index a00fc8b4..162a6dd8 100644 --- a/modules/Auth/Language/pl/Contributor.php +++ b/modules/Auth/Language/pl/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Dodaj kontrybutora', 'submit_edit' => 'Zaktualizuj rolę', ], - 'roles' => [ - 'podcast_admin' => 'Administrator podcastu', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Nie możesz usunąć właściciela podcastu!", 'removeSuccess' => 'Pomyślnie usunąłeś/aś {username} z {podcastTitle}', diff --git a/modules/Auth/Language/pl/User.php b/modules/Auth/Language/pl/User.php index 7c2d0789..b0c8d87f 100644 --- a/modules/Auth/Language/pl/User.php +++ b/modules/Auth/Language/pl/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edytuj role użytkownika {username}", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Zablokuj', 'unban' => 'Odblokuj', 'delete' => 'Usuń', @@ -18,7 +18,7 @@ return [ 'all_users' => 'Wszyscy użytkownicy', 'list' => [ 'user' => 'Użytkownik', - 'roles' => 'Role', + 'role' => 'Role', 'banned' => 'Zablokowany?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Nazwa użytkownika', 'password' => 'Hasło', 'new_password' => 'Nowe hasło', + 'role' => 'Role', 'roles' => 'Role', 'permissions' => 'Uprawnienia', 'submit_create' => 'Stwórz użytkownika', 'submit_edit' => 'Zapisz', 'submit_password_change' => 'Zmień!', ], - 'roles' => [ - 'superadmin' => 'Superadministrator', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} jest superadministratorem, nie można po prostu zablokować superadministratora…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} jest superadministratorem, nie można po prostu usunąć superadministratora…', 'deleteSuccess' => '{username} został usunięty.', diff --git a/modules/Auth/Language/pt-BR/Auth.php b/modules/Auth/Language/pt-BR/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/pt-BR/Auth.php +++ b/modules/Auth/Language/pt-BR/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/pt-BR/Contributor.php b/modules/Auth/Language/pt-BR/Contributor.php index 60329ef2..a2188fe8 100644 --- a/modules/Auth/Language/pt-BR/Contributor.php +++ b/modules/Auth/Language/pt-BR/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Adicionar contribuidor', 'submit_edit' => 'Atualizar cargo', ], - 'roles' => [ - 'podcast_admin' => 'Administrador do podcast', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Você não pode remover o dono do podcast!", 'removeSuccess' => 'Você removeu {username} com sucesso de {podcastTitle}', diff --git a/modules/Auth/Language/pt-BR/User.php b/modules/Auth/Language/pt-BR/User.php index aff24883..945f8609 100644 --- a/modules/Auth/Language/pt-BR/User.php +++ b/modules/Auth/Language/pt-BR/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Editar cargos de {username}", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Banir', 'unban' => 'Desbanir', 'delete' => 'Excluir', @@ -18,7 +18,7 @@ return [ 'all_users' => 'Todos os usuários', 'list' => [ 'user' => 'Usuário', - 'roles' => 'Cargos', + 'role' => 'Role', 'banned' => 'Banido?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Nome de usuário', 'password' => 'Senha', 'new_password' => 'Nova Senha', + 'role' => 'Role', 'roles' => 'Cargos', 'permissions' => 'Permissões', 'submit_create' => 'Criar usuário', 'submit_edit' => 'Salvar', 'submit_password_change' => 'Alterar!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} é um super admin, não bloqueamos um super admin assim…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} é um super admin, você não exclui um super admin assim…', 'deleteSuccess' => '{username} foi excluído.', diff --git a/modules/Auth/Language/pt/Auth.php b/modules/Auth/Language/pt/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/pt/Auth.php +++ b/modules/Auth/Language/pt/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/pt/Contributor.php b/modules/Auth/Language/pt/Contributor.php index d0f3b93d..c70badc0 100644 --- a/modules/Auth/Language/pt/Contributor.php +++ b/modules/Auth/Language/pt/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Add contributor', 'submit_edit' => 'Update role', ], - 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "You can't remove the podcast owner!", 'removeSuccess' => 'You have successfully removed {username} from {podcastTitle}', diff --git a/modules/Auth/Language/pt/User.php b/modules/Auth/Language/pt/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/pt/User.php +++ b/modules/Auth/Language/pt/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/ru/Auth.php b/modules/Auth/Language/ru/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/ru/Auth.php +++ b/modules/Auth/Language/ru/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/ru/Contributor.php b/modules/Auth/Language/ru/Contributor.php index d0f3b93d..c70badc0 100644 --- a/modules/Auth/Language/ru/Contributor.php +++ b/modules/Auth/Language/ru/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Add contributor', 'submit_edit' => 'Update role', ], - 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "You can't remove the podcast owner!", 'removeSuccess' => 'You have successfully removed {username} from {podcastTitle}', diff --git a/modules/Auth/Language/ru/User.php b/modules/Auth/Language/ru/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/ru/User.php +++ b/modules/Auth/Language/ru/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/sk/Auth.php b/modules/Auth/Language/sk/Auth.php index 09e3cd6b..a47932e3 100644 --- a/modules/Auth/Language/sk/Auth.php +++ b/modules/Auth/Language/sk/Auth.php @@ -70,6 +70,7 @@ return [ 'manage-contributors' => 'Can manage contributors of podcast #{id}.', 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', 'manage-publications' => 'Can publish podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', 'episodes.create' => 'Can create episodes for podcast #{id}.', diff --git a/modules/Auth/Language/sk/Contributor.php b/modules/Auth/Language/sk/Contributor.php index 3f0991fa..2f251c38 100644 --- a/modules/Auth/Language/sk/Contributor.php +++ b/modules/Auth/Language/sk/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Pridať prispievateľa', 'submit_edit' => 'Aktualizovať rolu', ], - 'roles' => [ - 'podcast_admin' => 'Správca podcastu', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "Nemôžete odstrániť vlastníka podcastu!", 'removeSuccess' => 'Úspešne ste odstránili používateľa {username} z podcastu {podcastTitle}', diff --git a/modules/Auth/Language/sk/User.php b/modules/Auth/Language/sk/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/sk/User.php +++ b/modules/Auth/Language/sk/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/sv/Auth.php b/modules/Auth/Language/sv/Auth.php index 09e3cd6b..92c04320 100644 --- a/modules/Auth/Language/sv/Auth.php +++ b/modules/Auth/Language/sv/Auth.php @@ -11,83 +11,84 @@ declare(strict_types=1); return [ 'instance_groups' => [ 'owner' => [ - 'title' => 'Instance Owner', - 'description' => 'The Castopod owner.', + 'title' => 'Instans Ägare', + 'description' => 'Castopod ägaren.', ], 'superadmin' => [ - 'title' => 'Super admin', - 'description' => 'Has complete control over Castopod.', + 'title' => 'Super administratör', + 'description' => 'Har fullständig kontroll över Castopod.', ], 'manager' => [ - 'title' => 'Manager', - 'description' => 'Manages Castopod\'s content.', + 'title' => 'Hanterare', + 'description' => 'Hanterar Castopods innehåll.', ], 'podcaster' => [ 'title' => 'Podcaster', - 'description' => 'General users of Castopod.', + 'description' => 'Generella användare av Castopod.', ], ], 'instance_permissions' => [ - 'admin.access' => 'Can access the Castopod admin area.', - 'admin.settings' => 'Can access the Castopod settings.', - 'users.manage' => 'Can manage Castopod users.', - 'persons.manage' => 'Can manage persons.', - 'pages.manage' => 'Can manage pages.', - 'podcasts.view' => 'Can view all podcasts.', - 'podcasts.create' => 'Can create new podcasts.', - 'podcasts.import' => 'Can import podcasts.', - 'fediverse.manage-blocks' => 'Can block fediverse actors/domains from interacting with Castopod.', + 'admin.access' => 'Kan komma åt Castopod admin-området.', + 'admin.settings' => 'Kan komma åt Castopod-inställningarna.', + 'users.manage' => 'Kan hantera Castopod-användare.', + 'persons.manage' => 'Kan hantera personer.', + 'pages.manage' => 'Kan hantera sidor.', + 'podcasts.view' => 'Kan se alla podcasts.', + 'podcasts.create' => 'Kan skapa nya podcasts.', + 'podcasts.import' => 'Kan importera podcasts.', + 'fediverse.manage-blocks' => 'Kan blockera fediverse skådespelare/domäner från att interagera med Castopod.', ], 'podcast_groups' => [ 'owner' => [ - 'title' => 'Podcast Owner', - 'description' => 'The podcast owner.', + 'title' => 'Podcast ägare', + 'description' => 'Podcast ägaren.', ], 'admin' => [ 'title' => 'Admin', - 'description' => 'Has complete control of podcast #{id}.', + 'description' => 'Har fullständig kontroll över podcast #{id}.', ], 'editor' => [ - 'title' => 'Editor', - 'description' => 'Manages content and publications of podcast #{id}.', + 'title' => 'Redigerare', + 'description' => 'Hanterar innehåll och publikationer i podcast #{id}.', ], 'author' => [ - 'title' => 'Author', - 'description' => 'Manages content of podcast #{id} but cannot publish them.', + 'title' => 'Författare', + 'description' => 'Hanterar innehåll i podcast #{id} men kan inte publicera dem.', ], 'guest' => [ - 'title' => 'Guest', - 'description' => 'General contributor of the podcast #{id}.', + 'title' => 'Gäst', + 'description' => 'Generell bidragsgivare till podcasten #{id}.', ], ], 'podcast_permissions' => [ - 'view' => 'Can view dashboard and analytics of podcast #{id}.', - 'edit' => 'Can edit podcast #{id}.', - 'delete' => 'Can delete podcast #{id}.', - 'manage-import' => 'Can synchronize imported podcast #{id}.', - 'manage-persons' => 'Can manage subscriptions of podcast #{id}.', - 'manage-subscriptions' => 'Can manage subscriptions of podcast #{id}.', - 'manage-contributors' => 'Can manage contributors of podcast #{id}.', - 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', - 'manage-publications' => 'Can publish podcast #{id}.', - 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', - 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', - 'episodes.create' => 'Can create episodes for podcast #{id}.', - 'episodes.edit' => 'Can edit episodes of podcast #{id}.', - 'episodes.delete' => 'Can delete episodes of podcast #{id}.', - 'episodes.manage-persons' => 'Can manage episode persons of podcast #{id}.', - 'episodes.manage-clips' => 'Can manage video clips or soundbites of podcast #{id}.', - 'episodes.manage-publications' => 'Can publish/unpublish episodes and posts of podcast #{id}.', - 'episodes.manage-comments' => 'Can create/remove episode comments of podcast #{id}.', + 'view' => 'Kan visa instrumentpanelen och analysen av podcast #{id}.', + 'edit' => 'Kan redigera podcast #{id}.', + 'delete' => 'Kan ta bort podcast #{id}.', + 'manage-import' => 'Kan synkronisera importerad podcast #{id}.', + 'manage-persons' => 'Kan hantera prenumerationer på podcast #{id}.', + 'manage-subscriptions' => 'Kan hantera prenumerationer på podcast #{id}.', + 'manage-contributors' => 'Kan hantera bidragsgivare för podcast #{id}.', + 'manage-platforms' => 'Kan sätta/ta bort plattformslänkar för podcast #{id}.', + 'manage-publications' => 'Kan publicera podcast #{id}.', + 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.', + 'interact-as' => 'Kan interagera som podcasten #{id} för att favorita, dela eller svara på inlägg.', + 'episodes.view' => 'Kan visa instrumentpaneler och analyser av podcast #{id}s avsnitt.', + 'episodes.create' => 'Kan skapa avsnitt för podcast #{id}.', + 'episodes.edit' => 'Kan redigera avsnitt av podcast #{id}.', + 'episodes.delete' => 'Kan ta bort avsnitt av podcast #{id}.', + 'episodes.manage-persons' => 'Kan hantera avsnittpersoner i podcast #{id}.', + 'episodes.manage-clips' => 'Kan hantera videoklipp eller ljudklipp från podcasten #{id}.', + 'episodes.manage-publications' => 'Kan publicera/avpublicera avsnitt och inlägg i podcast #{id}.', + 'episodes.manage-comments' => 'Kan skapa/ta bort avsnitt kommentarer från podcasten #{id}.', ], // missing keys - 'code' => 'Your 6-digit code', + 'code' => 'Din 6-siffriga kod', - 'notEnoughPrivilege' => 'You do not have sufficient permissions to access that page.', - 'set_password' => 'Set your password', + 'notEnoughPrivilege' => 'Du har inte tillräcklig behörighet att komma åt sidan.', + 'set_password' => 'Välj ett lösenord', // Welcome email - 'welcomeSubject' => 'You\'ve been invited to {siteName}', - 'emailWelcomeMailBody' => 'An account was created for you on {domain}, click on the login link below to set your password. The link is valid for {numberOfHours} hours after this email was sent.', + 'welcomeSubject' => 'Du har blivit inbjuden till {siteName}', + 'emailWelcomeMailBody' => 'Ett konto skapades för dig på {domain}, klicka på inloggningslänken nedan för att ange ditt lösenord. Länken är giltig i {numberOfHours} timmar efter att detta e-postmeddelande skickats.', ]; diff --git a/modules/Auth/Language/sv/Contributor.php b/modules/Auth/Language/sv/Contributor.php index d0f3b93d..c70badc0 100644 --- a/modules/Auth/Language/sv/Contributor.php +++ b/modules/Auth/Language/sv/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => 'Add contributor', 'submit_edit' => 'Update role', ], - 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'delete_form' => [ + 'title' => 'Remove {contributor}', + 'disclaimer' => + 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.', + 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"', + 'submit' => 'Remove', ], 'messages' => [ + 'editSuccess' => 'Role successfully changed!', + 'editOwnerError' => "You can't edit the podcast owner!", 'removeOwnerError' => "You can't remove the podcast owner!", 'removeSuccess' => 'You have successfully removed {username} from {podcastTitle}', diff --git a/modules/Auth/Language/sv/User.php b/modules/Auth/Language/sv/User.php index fe3a9e1a..e7908f5b 100644 --- a/modules/Auth/Language/sv/User.php +++ b/modules/Auth/Language/sv/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_role' => "Edit {username}'s role", 'ban' => 'Ban', 'unban' => 'Unban', 'delete' => 'Delete', @@ -18,7 +18,7 @@ return [ 'all_users' => 'All users', 'list' => [ 'user' => 'User', - 'roles' => 'Roles', + 'role' => 'Role', 'banned' => 'Banned?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => 'Username', 'password' => 'Password', 'new_password' => 'New Password', + 'role' => 'Role', 'roles' => 'Roles', 'permissions' => 'Permissions', 'submit_create' => 'Create user', 'submit_edit' => 'Save', 'submit_password_change' => 'Change!', ], - 'roles' => [ - 'superadmin' => 'Super admin', + 'delete_form' => [ + 'title' => 'Delete {user}', + 'disclaimer' => + "You are about to delete {user} permanently. They will not be able to access the admin area anymore.", + 'understand' => 'I understand, I want to delete {user} permanently', + 'submit' => 'Delete', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} is the instance owner, you cannot edit its roles.', 'banSuperAdminError' => '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteOwnerError' => + '{username} is the instance owner, one does not simply delete the owner…', 'deleteSuperAdminError' => '{username} is a superadmin, one does not simply delete a superadmin…', 'deleteSuccess' => '{username} has been deleted.', diff --git a/modules/Auth/Language/zh-Hans/Auth.php b/modules/Auth/Language/zh-Hans/Auth.php index 09e3cd6b..9d5502a2 100644 --- a/modules/Auth/Language/zh-Hans/Auth.php +++ b/modules/Auth/Language/zh-Hans/Auth.php @@ -11,83 +11,84 @@ declare(strict_types=1); return [ 'instance_groups' => [ 'owner' => [ - 'title' => 'Instance Owner', - 'description' => 'The Castopod owner.', + 'title' => '实例所有者', + 'description' => 'Castopod 所有者', ], 'superadmin' => [ - 'title' => 'Super admin', - 'description' => 'Has complete control over Castopod.', + 'title' => '超级管理员', + 'description' => '拥有对 Castopod 的完全控制。', ], 'manager' => [ - 'title' => 'Manager', - 'description' => 'Manages Castopod\'s content.', + 'title' => '管理', + 'description' => '管理 Castopod 的内容。', ], 'podcaster' => [ - 'title' => 'Podcaster', - 'description' => 'General users of Castopod.', + 'title' => '播客', + 'description' => 'Castopod 的普通用户。', ], ], 'instance_permissions' => [ - 'admin.access' => 'Can access the Castopod admin area.', - 'admin.settings' => 'Can access the Castopod settings.', - 'users.manage' => 'Can manage Castopod users.', - 'persons.manage' => 'Can manage persons.', - 'pages.manage' => 'Can manage pages.', - 'podcasts.view' => 'Can view all podcasts.', - 'podcasts.create' => 'Can create new podcasts.', - 'podcasts.import' => 'Can import podcasts.', - 'fediverse.manage-blocks' => 'Can block fediverse actors/domains from interacting with Castopod.', + 'admin.access' => '可以访问 Castopod 管理区域。', + 'admin.settings' => '可以访问 Castopod 设置。', + 'users.manage' => '可以管理 Castopod 用户。', + 'persons.manage' => '可以管理人员。', + 'pages.manage' => '可以管理页面。', + 'podcasts.view' => '可以查看所有播客。', + 'podcasts.create' => '可以创建新播客。', + 'podcasts.import' => '可以导入播客。', + 'fediverse.manage-blocks' => '可以阻止联邦宇宙参与者/域与 Castopod 交互。', ], 'podcast_groups' => [ 'owner' => [ - 'title' => 'Podcast Owner', - 'description' => 'The podcast owner.', + 'title' => '播客封面', + 'description' => '播客所有者。', ], 'admin' => [ - 'title' => 'Admin', - 'description' => 'Has complete control of podcast #{id}.', + 'title' => '管理员', + 'description' => '完全控制播客 #{id}。', ], 'editor' => [ - 'title' => 'Editor', - 'description' => 'Manages content and publications of podcast #{id}.', + 'title' => '编辑', + 'description' => '管理播客 #{id} 的内容和出版物。', ], 'author' => [ - 'title' => 'Author', - 'description' => 'Manages content of podcast #{id} but cannot publish them.', + 'title' => '作者', + 'description' => '管理播客 #{id} 的内容,但不能发布。', ], 'guest' => [ - 'title' => 'Guest', - 'description' => 'General contributor of the podcast #{id}.', + 'title' => '访客', + 'description' => '播客 #{id} 的普通贡献者。', ], ], 'podcast_permissions' => [ - 'view' => 'Can view dashboard and analytics of podcast #{id}.', - 'edit' => 'Can edit podcast #{id}.', - 'delete' => 'Can delete podcast #{id}.', - 'manage-import' => 'Can synchronize imported podcast #{id}.', - 'manage-persons' => 'Can manage subscriptions of podcast #{id}.', - 'manage-subscriptions' => 'Can manage subscriptions of podcast #{id}.', - 'manage-contributors' => 'Can manage contributors of podcast #{id}.', - 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.', - 'manage-publications' => 'Can publish podcast #{id}.', - 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.', - 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.', - 'episodes.create' => 'Can create episodes for podcast #{id}.', - 'episodes.edit' => 'Can edit episodes of podcast #{id}.', - 'episodes.delete' => 'Can delete episodes of podcast #{id}.', - 'episodes.manage-persons' => 'Can manage episode persons of podcast #{id}.', - 'episodes.manage-clips' => 'Can manage video clips or soundbites of podcast #{id}.', - 'episodes.manage-publications' => 'Can publish/unpublish episodes and posts of podcast #{id}.', - 'episodes.manage-comments' => 'Can create/remove episode comments of podcast #{id}.', + 'view' => '可以查看播客 #{id} 的仪表板和分析。', + 'edit' => '可以编辑播客 #{id}。', + 'delete' => '可以删除播客 #{id}。', + 'manage-import' => '可以同步导入的播客 #{id}。', + 'manage-persons' => '可以管理播客 #{id} 的订阅。', + 'manage-subscriptions' => '可以管理播客 #{id} 的订阅。', + 'manage-contributors' => '可以管理播客 #{id} 的贡献者。', + 'manage-platforms' => '可以设置/删除播客 #{id} 的平台链接。', + 'manage-publications' => '可以发布播客 #{id}。', + 'manage-notifications' => '可以查看播客 #{id} 的通知并将其标记为已读。', + 'interact-as' => '可以在播客 #{id} 进行互动,以收藏、分享或回复帖子。', + 'episodes.view' => '可以查看播客 #{id} 的仪表板和分析。', + 'episodes.create' => '可以为播客 #{id} 创建剧集。', + 'episodes.edit' => '可以编辑播客 #{id} 的剧集。', + 'episodes.delete' => '可以删除播客 #{id} 的剧集。', + 'episodes.manage-persons' => '可以管理播客 #{id} 的剧集人。', + 'episodes.manage-clips' => '可以管理播客 #{id} 的视频剪辑或声音片段。', + 'episodes.manage-publications' => '可以发布/取消发布播客 #{id} 的剧集和帖子。', + 'episodes.manage-comments' => '可以创建/删除播客 #{id} 的剧集评论。', ], // missing keys - 'code' => 'Your 6-digit code', + 'code' => '你的6位验证码', - 'notEnoughPrivilege' => 'You do not have sufficient permissions to access that page.', - 'set_password' => 'Set your password', + 'notEnoughPrivilege' => '你没有足够的权限访问该页面。', + 'set_password' => '设置你的密码', // Welcome email - 'welcomeSubject' => 'You\'ve been invited to {siteName}', - 'emailWelcomeMailBody' => 'An account was created for you on {domain}, click on the login link below to set your password. The link is valid for {numberOfHours} hours after this email was sent.', + 'welcomeSubject' => '你已受邀加入 {siteName}', + 'emailWelcomeMailBody' => '在 {domain} 上为你创建了一个帐户,单击下面的登录链接设置您的密码。 该链接在发送此电子邮件后的 {numberOfHours} 小时内有效。', ]; diff --git a/modules/Auth/Language/zh-Hans/Contributor.php b/modules/Auth/Language/zh-Hans/Contributor.php index d90ef87d..0d28c5ad 100644 --- a/modules/Auth/Language/zh-Hans/Contributor.php +++ b/modules/Auth/Language/zh-Hans/Contributor.php @@ -28,10 +28,16 @@ return [ 'submit_add' => '添加贡献者', 'submit_edit' => '更新角色', ], - 'roles' => [ - 'podcast_admin' => '播客管理员', + 'delete_form' => [ + 'title' => '移除 {contributor}', + 'disclaimer' => + '你将要从贡献者中删除 {contributor},他们将无法再访问“{podcastTitle}”。', + 'understand' => '我明白,我想从“{podcastTitle}”中删除 {contributor}', + 'submit' => '移除', ], 'messages' => [ + 'editSuccess' => '已成功更改角色!', + 'editOwnerError' => "你无法编辑播客所有者!", 'removeOwnerError' => "你无法删除播客所有者!", 'removeSuccess' => '你从 {username} 移除 {podcastTitle}', diff --git a/modules/Auth/Language/zh-Hans/User.php b/modules/Auth/Language/zh-Hans/User.php index f76f603d..5440c60a 100644 --- a/modules/Auth/Language/zh-Hans/User.php +++ b/modules/Auth/Language/zh-Hans/User.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "编辑 {username} 的角色", + 'edit_role' => "编辑 {username} 的角色", 'ban' => '封禁', 'unban' => '取消封禁', 'delete' => '删除', @@ -18,7 +18,7 @@ return [ 'all_users' => '所有用户', 'list' => [ 'user' => '用户', - 'roles' => '角色', + 'role' => '角色', 'banned' => '已封禁?', ], 'form' => [ @@ -26,14 +26,19 @@ return [ 'username' => '用户名', 'password' => '密码', 'new_password' => '新密码', + 'role' => '角色', 'roles' => '角色', 'permissions' => '权限', 'submit_create' => '创建用户', 'submit_edit' => '保存', 'submit_password_change' => '修改!', ], - 'roles' => [ - 'superadmin' => '超级管理员', + 'delete_form' => [ + 'title' => '删除 {user} ?', + 'disclaimer' => + "你将永久删除 {user},他们将无法再访问管理区域。", + 'understand' => '我明白,我想永久删除 {user}', + 'submit' => '删除', ], 'messages' => [ 'createSuccess' => @@ -46,6 +51,8 @@ return [ '{username} 是实例的所有者,你不能编辑他的角色。', 'banSuperAdminError' => '{username} 是超级管理员,不能禁止超级管理员…', + 'deleteOwnerError' => + '{username} 是实例的所有者,不能简单地删除所有者…', 'deleteSuperAdminError' => '{username} 是超级管理员,不能封禁超级管理员…', 'deleteSuccess' => '{username} 已被删除。', diff --git a/modules/Install/Language/sv/Install.php b/modules/Install/Language/sv/Install.php index 1f66ef11..f2bc70b5 100644 --- a/modules/Install/Language/sv/Install.php +++ b/modules/Install/Language/sv/Install.php @@ -9,54 +9,54 @@ declare(strict_types=1); */ return [ - 'title' => 'Castopod installer', - 'manual_config' => 'Manual configuration', + 'title' => 'Installationsprogrammet för Castopod', + 'manual_config' => 'Manuell konfiguration', 'manual_config_subtitle' => - 'Create a `.env` file with your settings and refresh the page to continue installation.', + 'Skapa en \'.env\' fil med dina inställningar och uppdatera sidan för att fortsätta installationen.', 'form' => [ - 'instance_config' => 'Instance configuration', - 'hostname' => 'Hostname', - 'media_base_url' => 'Media base URL', + 'instance_config' => 'Konfiguration av instans', + 'hostname' => 'Servernamn', + 'media_base_url' => 'Bas-URL för media', 'media_base_url_hint' => - 'If you use a CDN and/or an external analytics service, you may set them here.', + 'Om du använder en CDN och/eller en extern analystjänst kan du ställa in dem här.', 'admin_gateway' => 'Admin gateway', 'admin_gateway_hint' => - 'The route to access the admin area (eg. https://example.com/cp-admin). It is set by default as cp-admin, we recommend you change it for security reasons.', + 'Rutten för att komma åt adminområdet (t.ex. https://example.com/cp-admin). Det är som standard inställt som cp-admin, vi rekommenderar att du ändrar det av säkerhetsskäl.', 'auth_gateway' => 'Auth gateway', 'auth_gateway_hint' => - 'The route to access the authentication pages (eg. https://example.com/cp-auth). It is set by default as cp-auth, we recommend you change it for security reasons.', - 'database_config' => 'Database configuration', + 'Rutten för att komma åt autentiseringssidorna (t.ex. https://example.com/cp-auth). Den är som standard inställd som cp-auth, vi rekommenderar att du ändrar den av säkerhetsskäl.', + 'database_config' => 'Databas konfiguration', 'database_config_hint' => - 'Castopod needs to connect to your MySQL (or MariaDB) database. If you do not have these required info, please contact your server administrator.', - 'db_hostname' => 'Database hostname', - 'db_name' => 'Database name', - 'db_username' => 'Database username', - 'db_password' => 'Database password', - 'db_prefix' => 'Database prefix', + 'Castopod måste ansluta till din MySQL (eller MariaDB) databas. Om du inte har dessa nödvändiga uppgifter, kontakta din serveradministratör.', + 'db_hostname' => 'Databasens värdnamn', + 'db_name' => 'Databasnamn', + 'db_username' => 'Användarnamn till databasen', + 'db_password' => 'Databasens lösenord', + 'db_prefix' => 'Databas prefix', 'db_prefix_hint' => - "The prefix of the Castopod table names, leave as is if you don't know what it means.", - 'cache_config' => 'Cache configuration', + "Prefixet för Castopod tabellnamn, lämna som om du inte vet vad det betyder.", + 'cache_config' => 'Cache-konfiguration', 'cache_config_hint' => - 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.', + 'Välj önskad cachehanterare. Lämna det som standardvärde om du inte har någon aning om vad det innebär.', 'cache_handler' => 'Cache handler', 'cacheHandlerOptions' => [ - 'file' => 'File', + 'file' => 'Fil', 'redis' => 'Redis', 'predis' => 'Predis', ], - 'next' => 'Next', - 'submit' => 'Finish install', + 'next' => 'Nästa', + 'submit' => 'Slutför installationen', 'create_superadmin' => 'Create your superadmin account', - 'email' => 'Email', - 'username' => 'Username', - 'password' => 'Password', + 'email' => 'Epost', + 'username' => 'Användarnamn', + 'password' => 'Lösenord', ], 'messages' => [ 'createSuperAdminSuccess' => - 'Your superadmin account has been created successfully. Login to start podcasting!', + 'Ditt superadministratörskonto har skapats. Logga in för att starta podcasting!', 'databaseConnectError' => - 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'Castopod kunde inte ansluta till din databas. Redigera din databaskonfiguration och försök igen.', 'writeError' => - "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + "Kunde inte skapa/skriva `.env`-filen. Du måste skapa den manuellt genom att följa filmallen `.env.exempel` i Castopod-paketet.", ], ]; diff --git a/modules/PremiumPodcasts/Language/de/Subscription.php b/modules/PremiumPodcasts/Language/de/Subscription.php index f8af256f..cd0feacf 100644 --- a/modules/PremiumPodcasts/Language/de/Subscription.php +++ b/modules/PremiumPodcasts/Language/de/Subscription.php @@ -9,49 +9,49 @@ declare(strict_types=1); */ return [ - 'podcast_subscriptions' => 'Podcast subscriptions', - 'add' => 'New subscription', - 'view' => 'View subscription', - 'edit' => 'Edit subscription', - 'regenerate_token' => 'Regenerate token', - 'suspend' => 'Suspend subscription', - 'resume' => 'Resume subscription', - 'delete' => 'Delete subscription', + 'podcast_subscriptions' => 'Podcast-Abonnements', + 'add' => 'Neues Abonnement', + 'view' => 'Abonnement anzeigen', + 'edit' => 'Abonnement bearbeiten', + 'regenerate_token' => 'Token neu generieren', + 'suspend' => 'Abonnement unterbrechen', + 'resume' => 'Abonnement fortsetzen', + 'delete' => 'Abonnement löschen', 'status' => [ - 'active' => 'Active', - 'suspended' => 'Suspended', - 'expired' => 'Expired', + 'active' => 'Aktiv', + 'suspended' => 'Unterbrochen', + 'expired' => 'Abgelaufen', ], 'list' => [ - 'number' => 'Number', - 'email' => 'Email', + 'number' => 'Nummer', + 'email' => 'E-Mail', 'expiration_date' => 'Expiration date', - 'unlimited' => 'Unlimited', + 'unlimited' => 'Unbegrenzt', 'downloads' => 'Downloads', 'status' => 'Status', ], 'form' => [ - 'email' => 'Email', - 'expiration_date' => 'Expiration date', - 'expiration_date_hint' => 'The date and time at which the subscription expires. Leave empty for an unlimited subscription.', - 'submit_add' => 'Add subscription', - 'submit_edit' => 'Edit subscription', + 'email' => 'E-Mail', + 'expiration_date' => 'Ablaufdatum', + 'expiration_date_hint' => 'Das Datum und die Uhrzeit, zu der das Abonnement abläuft. Leer lassen für ein unbegrenztes Abonnement.', + 'submit_add' => 'Abonnement hinzufügen', + 'submit_edit' => 'Abonnement bearbeiten', ], 'form_link_add' => [ 'link' => 'Subscription page link', 'link_hint' => 'This will add a call to action in the website inviting listeners to subscribe to the podcast.', - 'submit' => 'Save link', + 'submit' => 'Link speichern', ], 'suspend_form' => [ 'disclaimer' => 'Suspending the subscription will restrict the subscriber from having access to the premium content. You will still be able to lift the suspension afterwards.', - 'reason' => 'Reason', - 'reason_placeholder' => 'Why are you suspending the subscription?', - "submit" => 'Suspend subscription', + 'reason' => 'Grund', + 'reason_placeholder' => 'Warum unterbrechen Sie Ihr Abonnement?', + "submit" => 'Abonnement unterbrechen', ], 'delete_form' => [ 'disclaimer' => 'Deleting {subscriber}\'s subscription will remove all analytics data associated with it.', 'understand' => 'I understand, remove the subscription permanently', - 'submit' => 'Remove subscription', + 'submit' => 'Abonnement entfernen', ], 'messages' => [ 'addSuccess' => 'New subscription added! A welcome email was sent to {subscriber}.', @@ -71,9 +71,9 @@ return [ ], 'emails' => [ 'greeting' => 'Hey,', - 'token' => 'Your token: {0}', - 'unique_feed_link' => 'Your unique feed link: {0}', - 'how_to_use' => 'How to use?', + 'token' => 'Ihr Token: {0}', + 'unique_feed_link' => 'Ihr eindeutiger Feed-Link: {0}', + 'how_to_use' => 'Wie nutzt man es?', 'two_ways' => 'You have two ways of unlocking the premium episodes:', 'import_into_app' => 'Copy your unique feed url inside your favourite podcast app (import it as a private feed to prevent exposing your credentials).', 'go_to_website' => 'Go to {podcastWebsite}\'s website and unlock the podcast with your token.', diff --git a/modules/PremiumPodcasts/Language/sv/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/sv/PremiumPodcasts.php index 18c0dd4e..21dcd34b 100644 --- a/modules/PremiumPodcasts/Language/sv/PremiumPodcasts.php +++ b/modules/PremiumPodcasts/Language/sv/PremiumPodcasts.php @@ -9,26 +9,26 @@ declare(strict_types=1); */ return [ - 'podcast_is_premium' => 'Podcast contains premium episodes', - 'episode_is_premium' => 'Episode is premium, only available to premium subscribers', - 'unlock_episode' => 'This episode is for premium subscribers only. Click to unlock it!', - 'banner_unlock' => 'This podcast contains premium episodes, only available to premium subscribers.', - 'banner_lock' => 'Podcast is unlocked, enjoy the premium episodes!', - 'subscribe' => 'Subscribe', - 'lock' => 'Lock', - 'unlock' => 'Unlock', + 'podcast_is_premium' => 'Podcast innehåller premium avsnitt', + 'episode_is_premium' => 'Avsnitt är premium, endast tillgängligt för premium-prenumeranter', + 'unlock_episode' => 'Denna episod är endast för premiumprenumeranter. Klicka för att låsa upp den!', + 'banner_unlock' => 'Denna podcast innehåller premiumavsnitt som endast är tillgängliga för premiumprenumeranter.', + 'banner_lock' => 'Podcast är olåst, njut av premiumavsnitt!', + 'subscribe' => 'Prenumerera', + 'lock' => 'Lås', + 'unlock' => 'Lås upp', 'unlock_form' => [ - 'title' => 'Premium content', - 'subtitle' => 'This podcast contains locked premium episodes! Do you have the key to unlock them?', - 'token' => 'Enter your key', - 'token_hint' => 'If you are subscribed to {podcastTitle}, you may copy the key that was sent to you via email and paste it here.', - 'submit' => 'Unlock all episodes!', - 'call_to_action' => 'Unlock all episodes of {podcastTitle}:', - 'subscribe_cta' => 'Subscribe now!', + 'title' => 'Premium-innehåll', + 'subtitle' => 'Denna podcast innehåller låsta premium-avsnitt! Har du nyckeln för att låsa upp dem?', + 'token' => 'Ange din nyckel', + 'token_hint' => 'Om du prenumererar på {podcastTitle} kan du kopiera nyckeln som skickades till dig via e-post och klistra in den här.', + 'submit' => 'Lås upp alla avsnitt!', + 'call_to_action' => 'Lås upp alla avsnitt av {podcastTitle}:', + 'subscribe_cta' => 'Prenumerera nu!', ], 'messages' => [ - 'unlockSuccess' => 'Podcast was successfully unlocked! Enjoy the premium episodes!', - 'unlockBadAttempt' => 'Your key does not seem to be working…', - 'lockSuccess' => 'Podcast was successfully locked!', + 'unlockSuccess' => 'Podcast har låsts upp! Njut av premiumavsnitt!', + 'unlockBadAttempt' => 'Din nyckel verkar inte fungera…', + 'lockSuccess' => 'Podcast har låsts!', ], ]; diff --git a/modules/PremiumPodcasts/Language/sv/Subscription.php b/modules/PremiumPodcasts/Language/sv/Subscription.php index f8af256f..c2dee29e 100644 --- a/modules/PremiumPodcasts/Language/sv/Subscription.php +++ b/modules/PremiumPodcasts/Language/sv/Subscription.php @@ -9,92 +9,92 @@ declare(strict_types=1); */ return [ - 'podcast_subscriptions' => 'Podcast subscriptions', - 'add' => 'New subscription', - 'view' => 'View subscription', - 'edit' => 'Edit subscription', - 'regenerate_token' => 'Regenerate token', - 'suspend' => 'Suspend subscription', - 'resume' => 'Resume subscription', - 'delete' => 'Delete subscription', + 'podcast_subscriptions' => 'Podcast prenumerationer', + 'add' => 'Ny prenumeration', + 'view' => 'Visa prenumeration', + 'edit' => 'Ändra prenumeration', + 'regenerate_token' => 'Generera om token', + 'suspend' => 'Avaktivera prenumeration', + 'resume' => 'Återuppta prenumeration', + 'delete' => 'Radera prenumeration', 'status' => [ - 'active' => 'Active', - 'suspended' => 'Suspended', - 'expired' => 'Expired', + 'active' => 'Aktiv', + 'suspended' => 'Suspenderad', + 'expired' => 'Utgått', ], 'list' => [ - 'number' => 'Number', - 'email' => 'Email', - 'expiration_date' => 'Expiration date', - 'unlimited' => 'Unlimited', - 'downloads' => 'Downloads', + 'number' => 'Nummer', + 'email' => 'Epost', + 'expiration_date' => 'Utgångsdatum', + 'unlimited' => 'Obegränsat', + 'downloads' => 'Nerladdningar', 'status' => 'Status', ], 'form' => [ - 'email' => 'Email', - 'expiration_date' => 'Expiration date', - 'expiration_date_hint' => 'The date and time at which the subscription expires. Leave empty for an unlimited subscription.', - 'submit_add' => 'Add subscription', - 'submit_edit' => 'Edit subscription', + 'email' => 'Epost', + 'expiration_date' => 'Utgångsdatum', + 'expiration_date_hint' => 'Datum och tid då prenumerationen går ut. Lämna tomt för ett obegränsat abonnemang.', + 'submit_add' => 'Lägg till en prenumeration', + 'submit_edit' => 'Ändra prenumeration', ], 'form_link_add' => [ - 'link' => 'Subscription page link', - 'link_hint' => 'This will add a call to action in the website inviting listeners to subscribe to the podcast.', - 'submit' => 'Save link', + 'link' => 'Länk för prenumerationssida', + 'link_hint' => 'Detta kommer att lägga till en uppmaning till åtgärder på webbplatsen som bjuder in lyssnare att prenumerera på podcasten.', + 'submit' => 'Spara länk', ], 'suspend_form' => [ - 'disclaimer' => 'Suspending the subscription will restrict the subscriber from having access to the premium content. You will still be able to lift the suspension afterwards.', - 'reason' => 'Reason', - 'reason_placeholder' => 'Why are you suspending the subscription?', - "submit" => 'Suspend subscription', + 'disclaimer' => 'Avstängning av abonnemanget kommer att begränsa abonnenten från att ha tillgång till premiuminnehållet. Du kommer fortfarande att kunna lyfta suspensionen efteråt.', + 'reason' => 'Orsak', + 'reason_placeholder' => 'Varför stänger du av prenumerationen?', + "submit" => 'Avaktivera prenumeration', ], 'delete_form' => [ - 'disclaimer' => 'Deleting {subscriber}\'s subscription will remove all analytics data associated with it.', - 'understand' => 'I understand, remove the subscription permanently', - 'submit' => 'Remove subscription', + 'disclaimer' => 'Borttagning av {subscriber}s prenumeration kommer att ta bort all analysdata som är kopplad till den.', + 'understand' => 'Jag förstår, ta bort prenumerationen permanent', + 'submit' => 'Ta bort prenumeration', ], 'messages' => [ - 'addSuccess' => 'New subscription added! A welcome email was sent to {subscriber}.', - 'addError' => 'Subscription could not be added.', - 'editSuccess' => 'Subscription expiry date was updated! An email was sent to {subscriber}.', - 'editError' => 'Subscription could not be edited.', - 'regenerateTokenSuccess' => 'Token regenerated! An email was sent to {subscriber} with the new token.', - 'regenerateTokenError' => 'Token could not be regenerated.', - 'deleteSuccess' => 'Subscription was removed! An email was sent to {subscriber}.', - 'deleteError' => 'Subscription could not be removed.', - 'suspendSuccess' => 'Subscription was suspended! An email was sent to {subscriber}.', - 'suspendError' => 'Subscription could not be suspended.', - 'resumeSuccess' => 'Subscription was resumed! An email was sent to {subscriber}.', - 'resumeError' => 'Subscription could not be resumed.', - 'linkSaveSuccess' => 'Subscription link was saved successfully! It will appear in the website as a Call To Action!', - 'linkRemoveSuccess' => 'Subscription link was removed successfully!', + 'addSuccess' => 'Ny prenumeration tillagd! Ett välkomstmeddelande skickades till {subscriber}.', + 'addError' => 'Prenumerationen kunde inte läggas till.', + 'editSuccess' => 'Prenumeration utgångsdatum uppdaterades! Ett e-postmeddelande skickades till {subscriber}.', + 'editError' => 'Prenumerationen kunde inte redigeras.', + 'regenerateTokenSuccess' => 'Token regenererad! Ett e-postmeddelande skickades till {subscriber} med den nya token.', + 'regenerateTokenError' => 'Token kunde inte regenereras.', + 'deleteSuccess' => 'Prenumerationen har tagits bort! Ett e-postmeddelande har skickats till {subscriber}.', + 'deleteError' => 'Prenumerationen kunde inte tas bort.', + 'suspendSuccess' => 'Prenumerationen suspenderades! Ett e-postmeddelande skickades till {subscriber}.', + 'suspendError' => 'Prenumerationen kunde inte stängas av.', + 'resumeSuccess' => 'Prenumerationen återupptades! Ett e-postmeddelande skickades till {subscriber}.', + 'resumeError' => 'Prenumerationen kunde inte återupptas.', + 'linkSaveSuccess' => 'Prenumerationslänken har sparats! Den kommer att visas på webbplatsen som en Call To Action!', + 'linkRemoveSuccess' => 'Prenumerationslänken har tagits bort!', ], 'emails' => [ - 'greeting' => 'Hey,', - 'token' => 'Your token: {0}', - 'unique_feed_link' => 'Your unique feed link: {0}', - 'how_to_use' => 'How to use?', - 'two_ways' => 'You have two ways of unlocking the premium episodes:', - 'import_into_app' => 'Copy your unique feed url inside your favourite podcast app (import it as a private feed to prevent exposing your credentials).', - 'go_to_website' => 'Go to {podcastWebsite}\'s website and unlock the podcast with your token.', - 'welcome_subject' => 'Welcome to {podcastTitle}', - 'welcome' => 'You have subscribed to {podcastTitle}, thank you and welcome aboard!', - 'welcome_token_title' => 'Here are your credentials to unlock the podcast\'s premium episodes:', - 'welcome_expires' => 'Your subscription was set to expire on {0}.', - 'welcome_never_expires' => 'Your subscription was set to never expire.', - 'reset_subject' => 'Your token was reset!', - 'reset_token' => 'Your access to {podcastTitle} has been reset!', - 'reset_token_title' => 'New credentials have been generated for you to unlock the podcast\'s premium episodes:', - 'edited_subject' => 'Your subscription has been updated!', - 'edited_expires' => 'Your subscription for {podcastTitle} was set to expire on {expiresAt}.', - 'edited_never_expires' => 'Your subscription for {podcastTitle} was set to never expire!', - 'suspended_subject' => 'Your subscription has been suspended!', - 'suspended' => 'Your subscription for {podcastTitle} has been suspended! You can no longer access the podcast\'s premium episodes.', - 'suspended_reason' => 'That is for the following reason: {0}', - 'resumed_subject' => 'Your subscription has been resumed!', - 'resumed' => 'Your subscription for {podcastTitle} has been resumed! You may access the podcast\'s premium episodes again.', - 'deleted_subject' => 'Your subscription has been removed!', - 'deleted' => 'Your subscription for {podcastTitle} has been removed! You no longer have access to the podcast\'s premium episodes.', - 'footer' => '{castopod} hosted on {host}', + 'greeting' => 'Hej,', + 'token' => 'Din token: {0}', + 'unique_feed_link' => 'Din unika flödeslänk: {0}', + 'how_to_use' => 'Hur gör man?', + 'two_ways' => 'Du har två sätt att låsa upp premiumavsnitt:', + 'import_into_app' => 'Kopiera din unika feed url inuti din favorit podcast-app (importera den som ett privat flöde för att förhindra att du exponerar dina referenser).', + 'go_to_website' => 'Gå till {podcastWebsite}s webbplats och lås upp podcasten med din token.', + 'welcome_subject' => 'Välkommen till {podcastTitle}', + 'welcome' => 'Du har prenumererat på {podcastTitle}, tack och välkommen ombord!', + 'welcome_token_title' => 'Här är dina referenser för att låsa upp podcastens premiumavsnitt:', + 'welcome_expires' => 'Ditt abonnemang var inställt på att löpa ut {0}.', + 'welcome_never_expires' => 'Din prenumeration var inställd på att aldrig upphöra.', + 'reset_subject' => 'Din token återställdes!', + 'reset_token' => 'Din åtkomst till {podcastTitle} har återställts!', + 'reset_token_title' => 'Nya autentiseringsuppgifter har skapats för att du ska kunna låsa upp podcastens premiumavsnitt:', + 'edited_subject' => 'Din prenumeration har uppdaterats!', + 'edited_expires' => 'Ditt abonnemang för {podcastTitle} sattes att löpa ut den {expiresAt}.', + 'edited_never_expires' => 'Din prenumeration på {podcastTitle} har ställts in på att aldrig upphör!', + 'suspended_subject' => 'Din prenumeration har stängts av!', + 'suspended' => 'Din prenumeration på {podcastTitle} har stängts av! Du kan inte längre komma åt podcastens premiumavsnitt.', + 'suspended_reason' => 'Det är av följande skäl: {0}', + 'resumed_subject' => 'Din prenumeration har återupptagits!', + 'resumed' => 'Din prenumeration på {podcastTitle} har återupptagits! Du kan komma åt podcastens premiumavsnitt igen.', + 'deleted_subject' => 'Din prenumeration har tagits bort!', + 'deleted' => 'Din prenumeration på {podcastTitle} har tagits bort! Du har inte längre tillgång till podcastens premiumavsnitt.', + 'footer' => '{castopod} hostas på {host}', ], ];