diff --git a/app/Language/ar/Comment.php b/app/Language/ar/Comment.php index b18780b7..c90984a1 100644 --- a/app/Language/ar/Comment.php +++ b/app/Language/ar/Comment.php @@ -9,11 +9,11 @@ declare(strict_types=1); */ return [ - 'title' => "{actorDisplayName}'s comment for {episodeTitle}", + 'title' => "تعليق {actorDisplayName} على {episodeTitle}", 'back_to_comments' => 'العودة إلى التعليقات', 'form' => [ 'episode_message_placeholder' => 'أكتب تعليقاً…', - 'reply_to_placeholder' => 'Reply to @{actorUsername}', + 'reply_to_placeholder' => 'رد على @{actorUsername}', 'submit' => 'ارسل', 'submit_reply' => 'رد', ], diff --git a/app/Language/ar/Fediverse.php b/app/Language/ar/Fediverse.php index 5373873a..1ad65f7b 100644 --- a/app/Language/ar/Fediverse.php +++ b/app/Language/ar/Fediverse.php @@ -13,7 +13,7 @@ return [ 'your_handle_hint' => 'Enter the @username@domain you want to act from.', 'follow' => [ 'label' => 'تابِع', - 'title' => 'Follow {actorDisplayName}', + 'title' => 'تابع {actorDisplayName}', 'subtitle' => 'إنك بصدد متابعة:', 'accountNotFound' => 'لا يمكن العثور على الحساب.', 'remoteFollowNotAllowed' => 'Seems like the account server does not allow remote follows…', diff --git a/app/Language/ar/Home.php b/app/Language/ar/Home.php index e0276c0f..88540806 100644 --- a/app/Language/ar/Home.php +++ b/app/Language/ar/Home.php @@ -13,8 +13,8 @@ return [ 'sort_by' => 'ترتيب حسب', 'sort_options' => [ 'activity' => 'آخر نشاط', - 'created_desc' => 'Newest first', - 'created_asc' => 'Oldest first', + 'created_desc' => 'الأحدث أولًا', + 'created_asc' => 'الأقدم أولاً', ], - 'no_podcast' => 'No podcast found', + 'no_podcast' => 'لا يوجد أي بودكاست', ]; diff --git a/app/Language/ar/Podcast.php b/app/Language/ar/Podcast.php index 09b71dfe..081d1167 100644 --- a/app/Language/ar/Podcast.php +++ b/app/Language/ar/Podcast.php @@ -10,13 +10,13 @@ declare(strict_types=1); return [ 'feed' => 'RSS Podcast feed', - 'season' => 'Season {seasonNumber}', + 'season' => 'الموسم {seasonNumber}', 'list_of_episodes_year' => 'حلَقات {year} ({episodeCount})', 'list_of_episodes_season' => - 'Season {seasonNumber} episodes ({episodeCount})', - 'no_episode' => 'No episode found!', + 'الموسم {seasonNumber} الحلقات ({episodeCount})', + 'no_episode' => 'لم يتم العثور على أية حلقة!', 'follow' => 'متابعة', - 'followTitle' => 'Follow {actorDisplayName} on the fediverse!', + 'followTitle' => 'تابع {actorDisplayName} على الفديفرس!', 'followers' => '{numberOfFollowers, plural, one {# follower} other {# followers} @@ -41,7 +41,7 @@ return [ }', 'first_published_at' => 'First episode published on {0, date, medium}', ], - 'sponsor' => 'Sponsor', + 'sponsor' => 'الراعي', 'funding_links' => 'Funding links for {podcastTitle}', 'find_on' => 'Find {podcastTitle} on', 'listen_on' => 'Listen on', diff --git a/app/Language/ar/Post.php b/app/Language/ar/Post.php index 436c3a1f..f92688ab 100644 --- a/app/Language/ar/Post.php +++ b/app/Language/ar/Post.php @@ -34,7 +34,7 @@ return [ other {# replies} }', 'expand' => 'Expand post', - 'block_actor' => 'Block user @{actorUsername}', - 'block_domain' => 'Block domain @{actorDomain}', + 'block_actor' => 'احجب المستخدم @{actorUsername}', + 'block_domain' => 'احجب النطاق @{actorDomain}', 'delete' => 'احذف المنشور', ]; diff --git a/app/Language/br/Comment.php b/app/Language/br/Comment.php index 06754484..65d9b9b1 100644 --- a/app/Language/br/Comment.php +++ b/app/Language/br/Comment.php @@ -18,18 +18,25 @@ return [ 'submit_reply' => 'Respont', ], 'likes' => '{numberOfLikes, plural, - one {# like} - other {# likes} + one {# muiañ-karet} + 2 {# vuiañ-karet} + 22 {# vuiañ-karet} + 32 {# vuiañ-karet} + 42 {# vuiañ-karet} + 52 {# vuiañ-karet} + 62 {# vuiañ-karet} + 82 {# vuiañ-karet} + other {# muiañ-karet} }', 'replies' => '{numberOfReplies, plural, 0 {respont ebet} one {# respont} other {# respont} }', - 'like' => 'Like', + 'like' => 'Muiañ-karet', 'reply' => 'Respont', 'view_replies' => 'Gwelout an evezhiadennoù ({numberOfReplies})', - 'block_actor' => 'Berzañ pep tra eus an implijer·ez @{actorUsername}', - 'block_domain' => 'Berzañ pep tra eus @{actorDomain}', + 'block_actor' => 'Stankañ an implijer·ez @{actorUsername}', + 'block_domain' => 'Stankañ @{actorDomain}', 'delete' => 'Dilemel an evezhiadenn', ]; diff --git a/app/Language/br/Common.php b/app/Language/br/Common.php index 7192f77a..d50e0372 100644 --- a/app/Language/br/Common.php +++ b/app/Language/br/Common.php @@ -15,7 +15,7 @@ return [ 'optional' => 'Diret', 'close' => 'Serriñ', 'home' => 'Degemer', - 'explicit' => 'Explicit', + 'explicit' => "Endalc'had evit an oadourien", 'powered_by' => 'Lusket gant {castopod}', 'go_back' => 'Mont war-gil', 'play_episode_button' => [ diff --git a/app/Language/br/Post.php b/app/Language/br/Post.php index d81e3e0a..97261641 100644 --- a/app/Language/br/Post.php +++ b/app/Language/br/Post.php @@ -22,8 +22,15 @@ return [ 'submit_reply' => 'Respont', ], 'favourites' => '{numberOfFavourites, plural, - one {# favourite} - other {# favourites} + one {# muiañ-karet} + 2 {# vuiañ-karet} + 22 {# vuiañ-karet} + 32 {# vuiañ-karet} + 42 {# vuiañ-karet} + 52 {# vuiañ-karet} + 62 {# vuiañ-karet} + 82 {# vuiañ-karet} + other {# muiañ-karet} }', 'reblogs' => '{numberOfReblogs, plural, 0 {rannadur ebet} @@ -36,7 +43,7 @@ return [ other {# respont} }', 'expand' => 'Astenn ar gemennadenn', - 'block_actor' => 'Berzañ pep tra eus an implijer·ez @{actorUsername}', - 'block_domain' => 'Berzañ pep tra eus @{actorDomain}', + 'block_actor' => 'Stankañ an implijer·ez @{actorUsername}', + 'block_domain' => 'Stankañ @{actorDomain}', 'delete' => 'Dilemel ar gemennadenn', ]; diff --git a/app/Language/nn-NO/Comment.php b/app/Language/nn-NO/Comment.php new file mode 100644 index 00000000..57b8a09e --- /dev/null +++ b/app/Language/nn-NO/Comment.php @@ -0,0 +1,34 @@ + "{actorDisplayName} sin kommentar til {episodeTitle}", + 'back_to_comments' => 'Tilbake til kommentarane', + 'form' => [ + 'episode_message_placeholder' => 'Skriv ein kommentar…', + 'reply_to_placeholder' => 'Svar til @{actorUsername}', + 'submit' => 'Send', + 'submit_reply' => 'Svar', + ], + 'likes' => '{numberOfLikes, plural, + one {# likar} + other {# likar} + }', + 'replies' => '{numberOfReplies, plural, + one {# svar} + other {# svar} + }', + 'like' => 'Lik', + 'reply' => 'Svar', + 'view_replies' => 'Vis svar ({numberOfReplies})', + 'block_actor' => 'Blokker brukaren @{actorUsername}', + 'block_domain' => 'Blokker domenet @{actorDomain}', + 'delete' => 'Slett kommentaren', +]; diff --git a/app/Language/nn-NO/Common.php b/app/Language/nn-NO/Common.php new file mode 100644 index 00000000..1a6b9f0d --- /dev/null +++ b/app/Language/nn-NO/Common.php @@ -0,0 +1,29 @@ + 'Ja', + 'no' => 'Nei', + 'cancel' => 'Avbryt', + 'optional' => 'Valfritt', + 'close' => 'Lukk', + 'home' => 'Heim', + 'explicit' => 'Grov prat', + 'powered_by' => 'Køyrer på {castopod}', + 'go_back' => 'Tilbake', + 'play_episode_button' => [ + 'play' => 'Spel', + 'playing' => 'Spelar', + ], + 'read_more' => 'Les meir', + 'read_less' => 'Les mindre', + 'see_more' => 'Sjå meir', + 'see_less' => 'Sjå mindre', +]; diff --git a/app/Language/nn-NO/Episode.php b/app/Language/nn-NO/Episode.php new file mode 100644 index 00000000..e66b3bc2 --- /dev/null +++ b/app/Language/nn-NO/Episode.php @@ -0,0 +1,33 @@ + 'Sesong {seasonNumber}', + 'season_abbr' => 'S{seasonNumber}', + 'number' => 'Episode {episodeNumber}', + 'number_abbr' => 'Ep. {episodeNumber}', + 'season_episode' => 'Sesong {seasonNumber} episode {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}', + 'persons' => '{personsCount, plural, + one {# person} + other {# personar} + }', + 'persons_list' => 'Personar', + 'back_to_episodes' => 'Tilbake til episodane av {podcast}', + 'comments' => 'Kommentarar', + 'activity' => 'Aktivitet', + 'description' => 'Skildring av episoden', + 'number_of_comments' => '{numberOfComments, plural, + one {# kommentar} + other {# kommentarar} + }', + 'all_podcast_episodes' => 'Alle podkast-episodane', + 'back_to_podcast' => 'Gå tilbake til podkasten', +]; diff --git a/app/Language/nn-NO/Fediverse.php b/app/Language/nn-NO/Fediverse.php new file mode 100644 index 00000000..22c203d8 --- /dev/null +++ b/app/Language/nn-NO/Fediverse.php @@ -0,0 +1,37 @@ + 'Handtaket ditt', + 'your_handle_hint' => 'Skriv inn @brukarnamn@domene som du vil handla frå.', + 'follow' => [ + 'label' => 'Fylg', + 'title' => 'Fylg {actorDisplayName}', + 'subtitle' => 'Du kjem til å fylgja:', + 'accountNotFound' => 'Fann ikkje kontoen.', + 'remoteFollowNotAllowed' => 'Det ser ut til at denne tenaren ikkje tillèt eksterne fylgjarar…', + 'submit' => 'Hald fram for å fylgja', + ], + 'favourite' => [ + 'title' => "Innlegg frå favoritten {actorDisplayName}", + 'subtitle' => 'Du kjem til å merka som favoritt:', + 'submit' => 'Hald fram for å merka som favoritt', + ], + 'reblog' => [ + 'title' => "Del innlegget frå {actorDisplayName}", + 'subtitle' => 'Du skal til å dela:', + 'submit' => 'Hald fram for å dela', + ], + 'reply' => [ + 'title' => "Svar til innlegget frå {actorDisplayName}", + 'subtitle' => 'Du skal til å svara på:', + 'submit' => 'Hald fram for å svara', + ], +]; diff --git a/app/Language/nn-NO/Home.php b/app/Language/nn-NO/Home.php new file mode 100644 index 00000000..313343d6 --- /dev/null +++ b/app/Language/nn-NO/Home.php @@ -0,0 +1,20 @@ + 'Alle podkastar', + 'sort_by' => 'Sorter etter', + 'sort_options' => [ + 'activity' => 'Ny aktivitet', + 'created_desc' => 'Nyaste fyrst', + 'created_asc' => 'Eldste fyrst', + ], + 'no_podcast' => 'Fann ingen podkast', +]; diff --git a/app/Language/nn-NO/Page.php b/app/Language/nn-NO/Page.php new file mode 100644 index 00000000..b28c7f8c --- /dev/null +++ b/app/Language/nn-NO/Page.php @@ -0,0 +1,17 @@ + 'Heimatt', + 'map' => [ + 'title' => 'Kart', + 'description' => 'Oppdag podkastepisodar frå {siteName} som er plasserte på eit kart! Gå gjennom kartet og høyr på episodar som pratar om bestemte stader.', + ], +]; diff --git a/app/Language/nn-NO/Podcast.php b/app/Language/nn-NO/Podcast.php new file mode 100644 index 00000000..a3f834ec --- /dev/null +++ b/app/Language/nn-NO/Podcast.php @@ -0,0 +1,53 @@ + 'RSS-straum for podkasten', + 'season' => 'Sesong {seasonNumber}', + 'list_of_episodes_year' => '{year}-episodar ({episodeCount})', + 'list_of_episodes_season' => + 'Sesong {seasonNumber}-episodar ({episodeCount})', + 'no_episode' => 'Fann ingen episode!', + 'follow' => 'Fylg', + 'followTitle' => 'Fylg {actorDisplayName} på fødiverset!', + 'followers' => '{numberOfFollowers, plural, + one {# fylgjar} + other {# fylgjarar} + }', + 'posts' => '{numberOfPosts, plural, + one {# innlegg} + other {# innlegg} + }', + 'activity' => 'Aktivitet', + 'episodes' => 'Episodar', + 'episodes_title' => 'Episodar av {podcastTitle}', + 'about' => 'Om', + 'stats' => [ + 'title' => 'Statistikk', + 'number_of_seasons' => '{0, plural, + one {# sesong} + other {# sesongar} + }', + 'number_of_episodes' => '{0, plural, + one {# episode} + other {# episodar} + }', + 'first_published_at' => 'Den fyrste episoden vart lagt ut {0, date, medium}', + ], + 'sponsor' => 'Sponsor', + 'funding_links' => 'Finansieringslenker for {podcastTitle}', + 'find_on' => 'Finn {podcastTitle} på', + 'listen_on' => 'Høyr på', + 'persons' => '{personsCount, plural, + one {# person} + other {# personar} + }', + 'persons_list' => 'Personar', +]; diff --git a/app/Language/nn-NO/Post.php b/app/Language/nn-NO/Post.php new file mode 100644 index 00000000..85cb7389 --- /dev/null +++ b/app/Language/nn-NO/Post.php @@ -0,0 +1,40 @@ + "Innlegget frå {actorDisplayName}", + 'back_to_actor_posts' => 'Tilbake til innlegga frå {actor}', + 'actor_shared' => '{actor} delte', + 'reply_to' => 'Svar til @{actorUsername}', + 'form' => [ + 'message_placeholder' => 'Skriv ei melding…', + 'episode_message_placeholder' => 'Skriv ei melding for episoden…', + 'episode_url_placeholder' => 'Episode-URL', + 'reply_to_placeholder' => 'Svar til @{actorUsername}', + 'submit' => 'Send', + 'submit_reply' => 'Svar', + ], + 'favourites' => '{numberOfFavourites, plural, + one {# favoritt} + other {# favorittar} + }', + 'reblogs' => '{numberOfReblogs, plural, + one {# deling} + other {# delingar} + }', + 'replies' => '{numberOfReplies, plural, + one {# svar} + other {# svar} + }', + 'expand' => 'Utvid innlegget', + 'block_actor' => 'Blokker brukaren @{actorUsername}', + 'block_domain' => 'Blokker domenet @{actorDomain}', + 'delete' => 'Slett innlegget', +]; diff --git a/app/Language/oc/Comment.php b/app/Language/oc/Comment.php new file mode 100644 index 00000000..1dd8f5ea --- /dev/null +++ b/app/Language/oc/Comment.php @@ -0,0 +1,34 @@ + "{actorDisplayName}'s comment for {episodeTitle}", + 'back_to_comments' => 'Back to comments', + 'form' => [ + 'episode_message_placeholder' => 'Write a comment…', + 'reply_to_placeholder' => 'Reply to @{actorUsername}', + 'submit' => 'Send', + 'submit_reply' => 'Reply', + ], + 'likes' => '{numberOfLikes, plural, + one {# like} + other {# likes} + }', + 'replies' => '{numberOfReplies, plural, + one {# reply} + other {# replies} + }', + 'like' => 'Like', + 'reply' => 'Reply', + 'view_replies' => 'View replies ({numberOfReplies})', + 'block_actor' => 'Block user @{actorUsername}', + 'block_domain' => 'Block domain @{actorDomain}', + 'delete' => 'Delete comment', +]; diff --git a/app/Language/oc/Common.php b/app/Language/oc/Common.php new file mode 100644 index 00000000..aff8136b --- /dev/null +++ b/app/Language/oc/Common.php @@ -0,0 +1,29 @@ + 'Yes', + 'no' => 'No', + 'cancel' => 'Cancel', + 'optional' => 'Optional', + 'close' => 'Close', + 'home' => 'Home', + 'explicit' => 'Explicit', + 'powered_by' => 'Powered by {castopod}', + 'go_back' => 'Go back', + 'play_episode_button' => [ + 'play' => 'Play', + 'playing' => 'Playing', + ], + 'read_more' => 'Read more', + 'read_less' => 'Read less', + 'see_more' => 'See more', + 'see_less' => 'See less', +]; diff --git a/app/Language/oc/Episode.php b/app/Language/oc/Episode.php new file mode 100644 index 00000000..ebe39336 --- /dev/null +++ b/app/Language/oc/Episode.php @@ -0,0 +1,33 @@ + 'Season {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}', + 'persons' => '{personsCount, plural, + one {# person} + other {# persons} + }', + 'persons_list' => 'Persons', + 'back_to_episodes' => 'Back to episodes of {podcast}', + 'comments' => 'Comments', + 'activity' => 'Activity', + 'description' => 'Episode description', + 'number_of_comments' => '{numberOfComments, plural, + one {# comment} + other {# comments} + }', + 'all_podcast_episodes' => 'All podcast episodes', + 'back_to_podcast' => 'Go back to podcast', +]; diff --git a/app/Language/oc/Fediverse.php b/app/Language/oc/Fediverse.php new file mode 100644 index 00000000..32f54c07 --- /dev/null +++ b/app/Language/oc/Fediverse.php @@ -0,0 +1,37 @@ + 'Your handle', + 'your_handle_hint' => 'Enter the @username@domain you want to act from.', + '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', + ], + 'favourite' => [ + 'title' => "Favourite {actorDisplayName}'s post", + 'subtitle' => 'You are going to favourite:', + 'submit' => 'Proceed to favourite', + ], + 'reblog' => [ + 'title' => "Share {actorDisplayName}'s post", + 'subtitle' => 'You are going to share:', + 'submit' => 'Proceed to share', + ], + 'reply' => [ + 'title' => "Reply to {actorDisplayName}'s post", + 'subtitle' => 'You are going to reply to:', + 'submit' => 'Proceed to reply', + ], +]; diff --git a/app/Language/oc/Home.php b/app/Language/oc/Home.php new file mode 100644 index 00000000..1518239b --- /dev/null +++ b/app/Language/oc/Home.php @@ -0,0 +1,20 @@ + 'All podcasts', + 'sort_by' => 'Sort by', + 'sort_options' => [ + 'activity' => 'Recent activity', + 'created_desc' => 'Newest first', + 'created_asc' => 'Oldest first', + ], + 'no_podcast' => 'No podcast found', +]; diff --git a/app/Language/oc/Page.php b/app/Language/oc/Page.php new file mode 100644 index 00000000..7cd60669 --- /dev/null +++ b/app/Language/oc/Page.php @@ -0,0 +1,17 @@ + 'Back to home', + '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.', + ], +]; diff --git a/app/Language/oc/Podcast.php b/app/Language/oc/Podcast.php new file mode 100644 index 00000000..d69cd86d --- /dev/null +++ b/app/Language/oc/Podcast.php @@ -0,0 +1,53 @@ + 'RSS Podcast feed', + 'season' => 'Season {seasonNumber}', + 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'list_of_episodes_season' => + 'Season {seasonNumber} episodes ({episodeCount})', + 'no_episode' => 'No episode found!', + 'follow' => 'Follow', + 'followTitle' => 'Follow {actorDisplayName} on the fediverse!', + 'followers' => '{numberOfFollowers, plural, + one {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'episodes_title' => 'Episodes of {podcastTitle}', + 'about' => 'About', + 'stats' => [ + 'title' => 'Stats', + 'number_of_seasons' => '{0, plural, + one {# season} + other {# seasons} + }', + 'number_of_episodes' => '{0, plural, + one {# episode} + other {# episodes} + }', + 'first_published_at' => 'First episode published on {0, date, medium}', + ], + 'sponsor' => 'Sponsor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Listen on', + 'persons' => '{personsCount, plural, + one {# person} + other {# persons} + }', + 'persons_list' => 'Persons', +]; diff --git a/app/Language/oc/Post.php b/app/Language/oc/Post.php new file mode 100644 index 00000000..58d1cf80 --- /dev/null +++ b/app/Language/oc/Post.php @@ -0,0 +1,40 @@ + "{actorDisplayName}'s post", + 'back_to_actor_posts' => 'Back to {actor} posts', + 'actor_shared' => '{actor} shared', + 'reply_to' => 'Reply to @{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', + ], + 'favourites' => '{numberOfFavourites, plural, + one {# favourite} + other {# favourites} + }', + 'reblogs' => '{numberOfReblogs, plural, + one {# share} + other {# shares} + }', + 'replies' => '{numberOfReplies, plural, + one {# reply} + other {# replies} + }', + 'expand' => 'Expand post', + 'block_actor' => 'Block user @{actorUsername}', + 'block_domain' => 'Block domain @{actorDomain}', + 'delete' => 'Delete post', +]; diff --git a/app/Language/pt-BR/Comment.php b/app/Language/pt-BR/Comment.php index 1dd8f5ea..1073c6c9 100644 --- a/app/Language/pt-BR/Comment.php +++ b/app/Language/pt-BR/Comment.php @@ -9,26 +9,26 @@ declare(strict_types=1); */ return [ - 'title' => "{actorDisplayName}'s comment for {episodeTitle}", - 'back_to_comments' => 'Back to comments', + 'title' => "Comentário de {actorDisplayName} para {episodeTitle}", + 'back_to_comments' => 'Voltar aos comentários', 'form' => [ - 'episode_message_placeholder' => 'Write a comment…', - 'reply_to_placeholder' => 'Reply to @{actorUsername}', - 'submit' => 'Send', - 'submit_reply' => 'Reply', + 'episode_message_placeholder' => 'Escreva um comentário…', + 'reply_to_placeholder' => 'Responder a @{actorUsername}', + 'submit' => 'Enviar', + 'submit_reply' => 'Responder', ], 'likes' => '{numberOfLikes, plural, - one {# like} - other {# likes} + one {# curtida} + other {# curtidas} }', 'replies' => '{numberOfReplies, plural, - one {# reply} - other {# replies} + one {# resposta} + other {# respostas} }', - 'like' => 'Like', - 'reply' => 'Reply', - 'view_replies' => 'View replies ({numberOfReplies})', - 'block_actor' => 'Block user @{actorUsername}', - 'block_domain' => 'Block domain @{actorDomain}', - 'delete' => 'Delete comment', + 'like' => 'Curtir', + 'reply' => 'Responder', + 'view_replies' => 'Ver respostas ({numberOfReplies})', + 'block_actor' => 'Bloquear usuário @{actorUsername}', + 'block_domain' => 'Bloquear domínio @{actorDomain}', + 'delete' => 'Excluir comentário', ]; diff --git a/app/Language/pt-BR/Episode.php b/app/Language/pt-BR/Episode.php index ebe39336..3dc334f2 100644 --- a/app/Language/pt-BR/Episode.php +++ b/app/Language/pt-BR/Episode.php @@ -9,25 +9,25 @@ declare(strict_types=1); */ return [ - 'season' => 'Season {seasonNumber}', - 'season_abbr' => 'S{seasonNumber}', - 'number' => 'Episode {episodeNumber}', + 'season' => 'Temporada {seasonNumber}', + 'season_abbr' => 'T{seasonNumber}', + 'number' => 'Episódio {episodeNumber}', 'number_abbr' => 'Ep. {episodeNumber}', - 'season_episode' => 'Season {seasonNumber} episode {episodeNumber}', - 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}', + 'season_episode' => 'Temporada {seasonNumber} episódio {episodeNumber}', + 'season_episode_abbr' => 'T{seasonNumber}:E{episodeNumber}', 'persons' => '{personsCount, plural, - one {# person} - other {# persons} + one {# pessoa} + other {# pessoas} }', - 'persons_list' => 'Persons', - 'back_to_episodes' => 'Back to episodes of {podcast}', - 'comments' => 'Comments', - 'activity' => 'Activity', - 'description' => 'Episode description', + 'persons_list' => 'Pessoas', + 'back_to_episodes' => 'Voltar para episódios de {podcast}', + 'comments' => 'Comentários', + 'activity' => 'Atividade', + 'description' => 'Descrição do episódio', 'number_of_comments' => '{numberOfComments, plural, - one {# comment} - other {# comments} + one {# comentário} + other {# comentários} }', - 'all_podcast_episodes' => 'All podcast episodes', - 'back_to_podcast' => 'Go back to podcast', + 'all_podcast_episodes' => 'Todos os episódios de podcast', + 'back_to_podcast' => 'Voltar para o podcast', ]; diff --git a/app/Language/pt/Comment.php b/app/Language/pt/Comment.php new file mode 100644 index 00000000..1dd8f5ea --- /dev/null +++ b/app/Language/pt/Comment.php @@ -0,0 +1,34 @@ + "{actorDisplayName}'s comment for {episodeTitle}", + 'back_to_comments' => 'Back to comments', + 'form' => [ + 'episode_message_placeholder' => 'Write a comment…', + 'reply_to_placeholder' => 'Reply to @{actorUsername}', + 'submit' => 'Send', + 'submit_reply' => 'Reply', + ], + 'likes' => '{numberOfLikes, plural, + one {# like} + other {# likes} + }', + 'replies' => '{numberOfReplies, plural, + one {# reply} + other {# replies} + }', + 'like' => 'Like', + 'reply' => 'Reply', + 'view_replies' => 'View replies ({numberOfReplies})', + 'block_actor' => 'Block user @{actorUsername}', + 'block_domain' => 'Block domain @{actorDomain}', + 'delete' => 'Delete comment', +]; diff --git a/app/Language/pt/Common.php b/app/Language/pt/Common.php new file mode 100644 index 00000000..aff8136b --- /dev/null +++ b/app/Language/pt/Common.php @@ -0,0 +1,29 @@ + 'Yes', + 'no' => 'No', + 'cancel' => 'Cancel', + 'optional' => 'Optional', + 'close' => 'Close', + 'home' => 'Home', + 'explicit' => 'Explicit', + 'powered_by' => 'Powered by {castopod}', + 'go_back' => 'Go back', + 'play_episode_button' => [ + 'play' => 'Play', + 'playing' => 'Playing', + ], + 'read_more' => 'Read more', + 'read_less' => 'Read less', + 'see_more' => 'See more', + 'see_less' => 'See less', +]; diff --git a/app/Language/pt/Episode.php b/app/Language/pt/Episode.php new file mode 100644 index 00000000..ebe39336 --- /dev/null +++ b/app/Language/pt/Episode.php @@ -0,0 +1,33 @@ + 'Season {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}', + 'persons' => '{personsCount, plural, + one {# person} + other {# persons} + }', + 'persons_list' => 'Persons', + 'back_to_episodes' => 'Back to episodes of {podcast}', + 'comments' => 'Comments', + 'activity' => 'Activity', + 'description' => 'Episode description', + 'number_of_comments' => '{numberOfComments, plural, + one {# comment} + other {# comments} + }', + 'all_podcast_episodes' => 'All podcast episodes', + 'back_to_podcast' => 'Go back to podcast', +]; diff --git a/app/Language/pt/Fediverse.php b/app/Language/pt/Fediverse.php new file mode 100644 index 00000000..dae44722 --- /dev/null +++ b/app/Language/pt/Fediverse.php @@ -0,0 +1,37 @@ + 'Your handle', + 'your_handle_hint' => 'Enter the @username@domain you want to act from.', + 'follow' => [ + 'label' => 'Seguir', + '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', + ], + 'favourite' => [ + 'title' => "Favourite {actorDisplayName}'s post", + 'subtitle' => 'You are going to favourite:', + 'submit' => 'Proceed to favourite', + ], + 'reblog' => [ + 'title' => "Share {actorDisplayName}'s post", + 'subtitle' => 'You are going to share:', + 'submit' => 'Proceed to share', + ], + 'reply' => [ + 'title' => "Reply to {actorDisplayName}'s post", + 'subtitle' => 'You are going to reply to:', + 'submit' => 'Proceed to reply', + ], +]; diff --git a/app/Language/pt/Home.php b/app/Language/pt/Home.php new file mode 100644 index 00000000..1518239b --- /dev/null +++ b/app/Language/pt/Home.php @@ -0,0 +1,20 @@ + 'All podcasts', + 'sort_by' => 'Sort by', + 'sort_options' => [ + 'activity' => 'Recent activity', + 'created_desc' => 'Newest first', + 'created_asc' => 'Oldest first', + ], + 'no_podcast' => 'No podcast found', +]; diff --git a/app/Language/pt/Page.php b/app/Language/pt/Page.php new file mode 100644 index 00000000..7cd60669 --- /dev/null +++ b/app/Language/pt/Page.php @@ -0,0 +1,17 @@ + 'Back to home', + '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.', + ], +]; diff --git a/app/Language/pt/Podcast.php b/app/Language/pt/Podcast.php new file mode 100644 index 00000000..d69cd86d --- /dev/null +++ b/app/Language/pt/Podcast.php @@ -0,0 +1,53 @@ + 'RSS Podcast feed', + 'season' => 'Season {seasonNumber}', + 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'list_of_episodes_season' => + 'Season {seasonNumber} episodes ({episodeCount})', + 'no_episode' => 'No episode found!', + 'follow' => 'Follow', + 'followTitle' => 'Follow {actorDisplayName} on the fediverse!', + 'followers' => '{numberOfFollowers, plural, + one {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'episodes_title' => 'Episodes of {podcastTitle}', + 'about' => 'About', + 'stats' => [ + 'title' => 'Stats', + 'number_of_seasons' => '{0, plural, + one {# season} + other {# seasons} + }', + 'number_of_episodes' => '{0, plural, + one {# episode} + other {# episodes} + }', + 'first_published_at' => 'First episode published on {0, date, medium}', + ], + 'sponsor' => 'Sponsor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Listen on', + 'persons' => '{personsCount, plural, + one {# person} + other {# persons} + }', + 'persons_list' => 'Persons', +]; diff --git a/app/Language/pt/Post.php b/app/Language/pt/Post.php new file mode 100644 index 00000000..58d1cf80 --- /dev/null +++ b/app/Language/pt/Post.php @@ -0,0 +1,40 @@ + "{actorDisplayName}'s post", + 'back_to_actor_posts' => 'Back to {actor} posts', + 'actor_shared' => '{actor} shared', + 'reply_to' => 'Reply to @{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', + ], + 'favourites' => '{numberOfFavourites, plural, + one {# favourite} + other {# favourites} + }', + 'reblogs' => '{numberOfReblogs, plural, + one {# share} + other {# shares} + }', + 'replies' => '{numberOfReplies, plural, + one {# reply} + other {# replies} + }', + 'expand' => 'Expand post', + 'block_actor' => 'Block user @{actorUsername}', + 'block_domain' => 'Block domain @{actorDomain}', + 'delete' => 'Delete post', +]; diff --git a/docs/src/ar/getting-started/install.md b/docs/src/ar/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/ar/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/ar/getting-started/security.md b/docs/src/ar/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/ar/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/ar/getting-started/update.md b/docs/src/ar/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/ar/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/ar/index.md b/docs/src/ar/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/ar/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/br/getting-started/install.md b/docs/src/br/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/br/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/br/getting-started/security.md b/docs/src/br/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/br/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/br/getting-started/update.md b/docs/src/br/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/br/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/br/index.md b/docs/src/br/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/br/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/de/getting-started/install.md b/docs/src/de/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/de/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/de/getting-started/security.md b/docs/src/de/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/de/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/de/getting-started/update.md b/docs/src/de/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/de/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/de/index.md b/docs/src/de/index.md new file mode 100644 index 00000000..37a52fcc --- /dev/null +++ b/docs/src/de/index.md @@ -0,0 +1,219 @@ +--- +sidebarDepth: 2 +--- + +# Willkommen 👋 + +[![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![stars-badge]][stars] + +Castopod ist eine freie & Open-Source-Hosting-Plattform für Podcastende, die ihr +Publikum einbinden und mit ihnen interagieren möchten. + +Castopod ist einfach zu installieren und wurde auf +[CodeIgniter4](https://codeigniter.com/) aufgebaut, ein mächtiges PHP Framework, +mit einem sehr kleinen Fußabdruck. + +::: Info-Status + +Castopod ist derzeit in **Beta** aber bereits ziemlich stabil und wird von +Podcastenden auf  der  ganzen Welt verwendet! + +::: + +
+ Installieren +
+ +## Merkmale + +- 🌱 Kostenlos & Open-Source (AGPL v3 Lizenz) +- 🔐  Fokussiert auf die Datensouveränität: Ihre Inhalte, Ihr Publikum und + Analysen gehören zu Ihnen, und nur Ihnen  +- 🪄  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## Motivation + +Das Podcasting-Ökosystem ist von Natur aus dezentralisiert: Du kannst deinen +Podcast als RSS-Datei erstellen, im Web publizieren und von dort aus überall +online teilen. + +Es ist in der Tat eines der einzigen Medien, die lange Zeit so geblieben sind. + +Da sich die Nutzungsmöglichkeiten weiterentwickeln, interessieren sich immer +mehr Menschen für Podcasts: seien es Schöpfer, die neue Wege finden, ihre Ideen +zu teilen, oder Zuhörer auf der Suche nach besseren Inhalten. + +Mit zunehmender Verbreitung des Podcasts versuchen einige Unternehmen, ihn auf +ein stärker kontrollierbares und zentralisiertes Medium zu verlagern. + +Castopod wurde in dem Bestreben erstellt, eine offene und nachhaltige +Alternative für das Hosting Ihrer Podcasts zu bieten. Die Förderung der +Dezentralisierung soll sicherstellen, dass sich Podcaster in ihrer Kreativität +frei entfalten können. + +Dieses Projekt wird von der Open-Source-Community und speziell von den +[Fediverse](https://fediverse.party/en/fediverse/) und +[Podcasting 2.0](https://podcastindex.org/) Bewegungen getragen. + +## Vergleiche mit anderen Lösungen + +Wir glauben, dass es nicht die eine Lösung für jeden gibt, es ist sehr abhängig +von deinen Bedürfnissen. Also, hier sind Vergleiche mit anderen Tools, die Dir +helfen sollen herauszufinden, ob Castopod das richtige für Dich ist. + +### Castopod vs Wordpress + +Castopod wird oft als "das Wordpress für Podcasts" bezeichnet, da die +-Ähnlichkeiten zwischen den beiden übereinstimmen. In gewisser Hinsicht ist das +richtig. Und tatsächlich war Castopod stark vom Wordpress-Ökosystem inspiriert, +da es die einfache Übernahme durch die Community und die Anzahl der Websites, +auf denen es ausgeführt wird, sah. + +Genau wie Wordpress ist Castopod kostenlos; Open Source, erstellt mit PHP mit +einer MySQL-Datenbank und ist so verpackt, dass Du es auf den Servern der +meisten Websites problemlos installieren kannst. + +Wordpress ist ein großartiger Weg, um Deine Website zu erstellen und mit Plugins +zu erweitern, um das zu bekommen, was Du willst. Es ist ein vollwertiges CMS +welches dir hilft, jede Art von Webseite online zu bekommen. + +Auf der anderen Seite soll Castopod die Bedürfnisse von Podcastern erfüllen. +Konzentriere Dich ausschließlich aufs Podcasten und sonst nichts. Du benötigst +kein Plugin, um dein Podcasting zu beginnen. + +Dadurch lassen sich die Podcast-spezifischen Prozesse optimieren: von der +Erstellung Ihrer Podcasts und die Veröffentlichung neuer Folgen bis hin zu +Rundfunk, Marketing und Analytik. + +Schließlich können Wordpress und Castopod je nach Bedarf sogar nebeneinander +existieren, da sie die gleichen Anforderungen haben! + +### Castopod vs Funkwale + +Funkwhale ist ein selbstgehosteter, moderner kostenloser und +Open-Source-Musikserver. Just as Castopod, Funkwhale is on the fediverse, a +decentralized social network allowing interoperability between the two. + +Funkwhale was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/el/getting-started/install.md b/docs/src/el/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/el/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/el/getting-started/security.md b/docs/src/el/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/el/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/el/getting-started/update.md b/docs/src/el/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/el/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/el/index.md b/docs/src/el/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/el/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/es/getting-started/install.md b/docs/src/es/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/es/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/es/getting-started/security.md b/docs/src/es/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/es/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/es/getting-started/update.md b/docs/src/es/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/es/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/es/index.md b/docs/src/es/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/es/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/fr/getting-started/install.md b/docs/src/fr/getting-started/install.md new file mode 100644 index 00000000..708808ba --- /dev/null +++ b/docs/src/fr/getting-started/install.md @@ -0,0 +1,169 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# Comment installer Castopod ? + +Castopod a été pensé pour être facile à installer. Que vous utilisiez un +hébergement dédié ou mutualisé, vous pouvez l'installer sur la plupart des +serveurs web compatibles avec PHP-MySQL. + +## Prérequis + +- PHP v8.0 ou supérieure +- MySQL version 5.7 ou supérieure ou MariaDB version 10.2 ou supérieure +- Prise en charge HTTPS + +### PHP v8.0 ou supérieure + +La version 8.0 ou supérieure de PHP est requise, avec les extensions suivantes +installées : + +- [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) avec **JPEG**, + **PNG** et bibliothèques **WEBP**. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +De plus, assurez-vous que les extensions suivantes sont activées dans votre PHP +: + +- json (activé par défaut - ne le désactivez pas) +- xml (activé par défaut - ne pas le désactiver) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### Base de données compatible MySQL + +> Nous vous recommandons d'utiliser [MariaDB](https://mariadb.org). + +::: avertissement + +Castopod ne fonctionne qu'avec les bases de données compatibles MySQL 5.7 ou +supérieures. Les versions 5.6 (dont le support a cessé le 5 février 2021) ou +précédentes de MySQL ne fonctionneront pas. + +::: + +Vous aurez besoin du nom d'hôte du serveur, du nom de la base de données, du nom +d'utilisateur et du mot de passe pour terminer le processus d'installation. Si +vous ne disposez pas de ces informations, veuillez contacter votre +administrateur. + +#### Droits d'accès + +L'utilisateur doit avoir au moins ces droits d'accès sur la base de données pour +que Castopod fonctionne : `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, +`INSERT`, `SELECT`, `UPDATE`. + +### (Facultatif) FFmpeg v4.1.8 ou supérieur pour les clips vidéo + +[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 ou supérieure est requis si vous +souhaitez générer des Clips Vidéo. Les extensions suivantes doivent être +installées : + +- bibliothèque **FreeType 2** pour + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Facultatif) Autres recommandations + +- Redis pour de meilleures performances de cache. +- CDN pour la mise en cache de fichiers statiques et de meilleures performances. +- passerelle e-mail pour les mots de passe perdus. + +## Instructions d'installation + +### Pré-requis + +0. Obtenez un serveur Web avec [les pré-requis](#requirements) installés +1. Créer une base de données MySQL pour Castopod avec un utilisateur ayant les + droits d'accès et les droits de modification (pour plus d'informations, cf. + [base de données compatible MySQL](#mysql-compatible-database)). +2. Activez HTTPS sur votre domaine avec un _certificat SSL_. +3. Téléchargez et dézippez le dernier [paquet Castopod](https://castopod.org/) + sur le serveur web si vous ne l'avez pas déjà fait. + - ⚠️ Faites pointer la racine du document du serveur web vers le sous-dossier + `public/` du dossier `castopod`. +4. Ajoutez les **tâches cron** sur votre serveur web pour les différents + processus d'arrière-plan (définissez les chemins selon votre configuration) : + + - Pour que les fonctionnalités sociales fonctionnent correctement, cette + tâche est utilisée pour diffuser des activités sociales à vos abonnés sur + le Fédivers : + + ```bash + * * * * * /path/to/php /path/to/castopod/public/index.php scheduled-activities + ``` + + - Pour que vos épisodes soient diffusés sur les hubs ouverts à la publication + en utilisant [WebSub](https://en.wikipedia.org/wiki/WebSub): + + ```bash + * * * * * /usr/local/bin/php /castopod/public/index.php scheduled-websub-publish + ``` + + - Pour créer des clips vidéo (cf. + [pré-requis FFmpeg](#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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/fr/getting-started/security.md b/docs/src/fr/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/fr/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/fr/getting-started/update.md b/docs/src/fr/getting-started/update.md new file mode 100644 index 00000000..6632c5f7 --- /dev/null +++ b/docs/src/fr/getting-started/update.md @@ -0,0 +1,96 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Assurez-vous d'exécuter les scripts sur votre interface phpmyadmin ou + utilisez la ligne de commande pour mettre à jour la base de données avec + les fichiers du paquet ! + - cf. + [Je n'ai pas mis à jour mon instance depuis longtemps… Que devrais-je faire ?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do) + +5. Si vous utilisez redis, effacez votre cache. +6. ✨ Votre nouvelle instance est prête ! + +## Foire Aux Questions (FAQ) + +### Où puis-je trouver ma version de Castopod ? + +Allez dans votre panneau d'administration de Castopod, la version s'affiche en +bas à gauche. + +Vous pouvez également trouver la version dans le fichier +`app > Config > Constants.php`. + +### Je n'ai pas mis à jour mon instance depuis longtemps… Que devrais-je faire ? + +Aucun souci ! Il suffit d'obtenir la dernière version comme décrit ci-dessus. +Lorsque vous exécutez les instructions de mise à jour (4), lancez-les +séquentiellement, de la plus ancienne à la plus récente. + +> Vous devriez sauvegarder votre instance selon la date de votre dernière mise à +> jour de Castopod. + +Par exemple, si vous êtes en `v1.0.0-alpha.42` et souhaitez mettre à jour vers +la `v1.0.0-beta.1` : + +0. (fortement recommandé) Faites une sauvegarde de vos fichiers et de votre base + de données. + +1. Téléchargez la dernière version, écrasez vos fichiers tout en conservant + `.env` et `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Votre nouvelle instance est prête ! + +### Dois-je faire une sauvegarde avant de mettre à jour ? + +Nous vous conseillons de le faire, afin de ne pas tout perdre si quelque chose +se passait mal ! + +Plus généralement, nous vous conseillons de faire des sauvegardes régulières de +vos fichiers Castopod et de votre base de données afin d'éviter de tout perdre… diff --git a/docs/src/fr/index.md b/docs/src/fr/index.md new file mode 100644 index 00000000..430867b2 --- /dev/null +++ b/docs/src/fr/index.md @@ -0,0 +1,219 @@ +--- +sidebarDepth: 2 +--- + +# Bienvenue 👋 + +[![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![stars-badge]][stars] + +Castopod est une plateforme d’hébergement gratuite & open-source conçue pour les +podcasteurs qui veulent échanger et interagir avec leur public. + +Castopod est facile à installer et a été conçu avec +[CodeIgniter4](https://codeigniter.com/), un framework PHP puissant de très +petite taille. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Installation +
+ +## Fonctionnalités + +- 🌱  Libre, gratuit & open-source (Licence AGPL v3) +- 🔐  focalisé sur la souveraineté des données : votre contenu, votre + audience et vos statiistiques vous appartiennent, et à vous seulement +- 🪄 Fonctionnalités de Podcasting 2.0 : GUID, verrouillage, transcriptions, + financement, chapitres, géo-localisation, intervenants, extraits sonores, … +- 💬  Réseau social intégré : + - 🚀  Castopod fait partie du Fédivers, un réseau social décentralisé + - ❤️  Créer des publications, partager, mettre en favori et commenter des + épisodes +- 📈  Statistiques intégrées : + - ⚖️  Conforme GDPR / CCPA / LGPD + - 🪙 Mesure d'audience IABv2 + - 🏡  Statistiques intégrées, aucune tierce partie intermédiaire +- 📢  Outils de marketing intégrés : + - ✅  Prêt pour le SEO (méta-tags open-graph, JSON-LD…) + - 📱  PWA: installez comme application autonome + - 🎨  Couleurs de thèmes personnalisables + - 🎬  Générez des clips vidéo prêts à partager à partir d'épisodes + - 🔉  Générez des extraits sonores + - ▶️  Intégrer vos épisodes dans n'importe quel site web +- 💸  Monétisation: + - 🔗  Liens de financement + - 📲  publicité “listen-to-click” + - 🤝  value4value / WebMonetization +- 📡 Publiez vos épisodes partout avec RSS : + - 📱  Sur tous les index et toutes les applications : Podcast Index, + Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend… + - ⚡ Diffusez instantanément vos épisodes avec WebSub +- 📥  Importation de Podcast : déménagez votre podcast existant vers + Castopod +- 📤  Déplacez votre podcast chez un autre hébergeur +- 🔀  Multi-locataire : hébergez autant de podcasts que vous le souhaitez +- 👥  Multi-utilisateur : ajoutez des contributeurs et définissez leurs + rôles +- 🌎  support i18n: traduit en Anglais, Français, Polonais, Allemand & + Brésilien… et bientôt d'autres à venir ! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contribuer + +Vous appréciez Castopod et aimeriez donner un coup de main ? Jetez un œil à la +documentation suivante pour démarrer. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/id/getting-started/install.md b/docs/src/id/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/id/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/id/getting-started/security.md b/docs/src/id/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/id/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/id/getting-started/update.md b/docs/src/id/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/id/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/id/index.md b/docs/src/id/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/id/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/it/getting-started/install.md b/docs/src/it/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/it/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/it/getting-started/security.md b/docs/src/it/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/it/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/it/getting-started/update.md b/docs/src/it/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/it/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/it/index.md b/docs/src/it/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/it/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/nl/getting-started/install.md b/docs/src/nl/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/nl/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/nl/getting-started/security.md b/docs/src/nl/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/nl/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/nl/getting-started/update.md b/docs/src/nl/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/nl/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/nl/index.md b/docs/src/nl/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/nl/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/nn-NO/getting-started/install.md b/docs/src/nn-NO/getting-started/install.md new file mode 100644 index 00000000..fa6e5fa4 --- /dev/null +++ b/docs/src/nn-NO/getting-started/install.md @@ -0,0 +1,164 @@ +--- +title: Installering +sidebarDepth: 3 +--- + +# Korleis installerer eg Castopod? + +Det er meininga at Castopod skal vera lett å installera. Uansett om du bruker +eige eller delt vevhotell, kan du installera på dei fleste maskiner som har PHP +og MySQL. + +## Krav + +- PHP v8.0 eller nyare +- MySQL versjon 5.7 eller nyare, eller MariaDB versjon 10.2 eller nyare +- Støtte for HTTPS + +### PHP v8.0 eller nyare + +PHP versjon 8.0 er eit krav, med desse utvidingane: + +- [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) med **JPEG**-, + **PNG**- og **WEBP**-biblioteka. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +I tillegg må du passa på at desse utvidingane er skrudde på i PHP-installasjonen +din: + +- json (vanlegvis aktivt - ikkje skru det av) +- xml (vanlegvis aktivt - ikkje skru det av) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL-kompatibel database + +> Me tilrår [MariaDB](https://mariadb.org). + +::: Åtvaring + +Castopod verkar berre med databasar som støttar MySQL 5.7 eller nyare. MySQL 5.6 +eller eldre vil ikkje fungera, ettersom den versjonen vart forelda i +februar 2021. + +::: + +Du treng vertsnamnet til tenaren, databasenamnet, brukarnamnet og passordet til +databasen for å fullføra installeringa. Viss du ikkje har desse, må du kontakta +administratoren for tenarmaskina di. + +#### Tilgangsrettar + +Brukaren må minst ha desse tilgangsrettane på databasen for at Castopod skal +fungera: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, +`UPDATE`. + +### (Eventuelt) FFmpeg v4.1.8 eller nyare for filmklypp + +Du treng [FFmpeg](https://www.ffmpeg.org/) versjon 4.1.8 viss du vil laga +filmklypp. Desse utvidingane må vera installerte: + +- **FreeType 2**-biblioteket for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Eventuelt) Andre tilrådingar + +- Redis for betre bufring. +- Innhaldsnettverk (CDN) for å bufra statiske filer og betra ytinga. +- Epostløysing for å nullstilla passord. + +## Korleis du installerer + +### Føresetnader + +0. Få tak i ein vevtenar som fyller [krava](#requirements) +1. Lag ein MySQL-database for Castopod der brukaren har tilgangs- og + endringsløyve (les meir om [MySQL-database](#mysql-compatible-database)). +2. Ta i bruk HTTPS på domenet ditt ved hjelp av eit _SSL-sertifikat_. +3. Last ned og pakk ut den nyaste [Castopod-pakka](https://castopod.org/) på + vevtenaren din, om du ikkje allereie har gjort det. + - ⚠️ Set dokumentrota til vevtenaren til undermappa `public/` i + `castopod`-mappa. +4. Lag **cron-oppgåver** på vevtenaren din for ulike bakgrunnsprosessar (byt ut + stiane så dei passar til oppsettet ditt): + + - For at sosiale funksjonar skal fungera, trengst denne oppgåva for å + kringkasta sosiale aktivitetar til fylgjarane dine på fødiverset: + + ```bash + * * * * * /sti/til/php /sti/til/castopod/public/index.php scheduled-activities + ``` + + - For å kringkasta episodane på opne nettnav som bruker + [WebSub](https://en.wikipedia.org/wiki/WebSub): + + ```bash + * * * * * /usr/local/bin/php /castopod/public/index.php scheduled-websub-publish + ``` + + - For å laga filmklypp (sjå + [FFmpeg-krava](#ffmpeg-v418-or-higher-for-video-clips)): + + ```bash + * * * * * /sti/til/php /sti/til/castopod/public/index.php scheduled-video-clips + ``` + + > Desse oppgåvene blir utførte **kvart minutt**. Du kan setja opp kor ofte du + > treng å utføra oppgåvene: kvart 5., 10. minutt eller meir. + +### (Tilrådd) Autoinstallering + +1. Køyr Castopod-installasjonen ved å gå til autoinstalleringssida + (`https://domenet_ditt.no/cp-install`) i nettlesaren din. +2. Fylg framgangsmåten på skjermen. +3. Start å podkasta! + +::: info + +Installasjonsskriptet lagar ei`.env`-fil i rotmappa til pakka. Viss du ikkje kan +bruka autoinstalleringa, kan du +[oppretta og oppdatera `.env`-fila manuelt](#alternative-manual-configuration). + +::: + +## Pakker frå brukarsamfunnet + +Viss du ikkje vil bry deg med å installera Castopod manuelt, kan du bruka ei av +pakkene som brukarsamfunnet har laga. Det er tilhengjarar og brukarar av open +kjeldekode som lagar og vedlikeheld desse pakkene. + +### Installer med Yunohost + +[Yunohost](https://yunohost.org/) er ein Linux-distribusjon som er bygd på +Debian GNU/Linux og som inneheld frie og opne program. Yunohost tek seg av det +meste som har med oppsett av eigen vevtenar å gjera. + +
+ + + Installer Castopod med Yunohost + + +Github-arkiv + +
+ +### Installer med Docker + +Viss du vil bruka Docker til å installera Castopod, er det mogleg takk vere +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Installer +med +Docker + +::: info + +Etter som mange spør etter Docker-installasjon, planlegg me å laga ei offisiell +Docker-pakke for Castopod her i vårt eige arkiv. + +::: diff --git a/docs/src/nn-NO/getting-started/security.md b/docs/src/nn-NO/getting-started/security.md new file mode 100644 index 00000000..c584a183 --- /dev/null +++ b/docs/src/nn-NO/getting-started/security.md @@ -0,0 +1,25 @@ +--- +title: Tryggleik +--- + +# Tryggleiksspørsmål + +Castopod er bygd på [CodeIgniter4](https://codeigniter.com/), som er eit +PHP-rammeverk som oppmodar til +[god tryggleikspraksis](https://codeigniter.com/user_guide/concepts/security.html). + +For å syta for best mogleg tryggleik på nettstaden din og hindra vondsinna åtak, +tilrår me at du oppdaterer alle fil-tilgangsrettane til Castopod-filene etter du +har installert (for å unngå tidlegare feil i tilgangsløyve): + +- `writable/`-mappa må vera **lesbar** og **skrivbar**. +- `public/media/`-mappa må vera **lesbar** og **skrivbar**. +- alle andre filer skal vera berre **lesbare**. + +Viss du til dømes bruker Apache eller NGINX med Ubuntu, kan du gjera dette: + +```bash +sudo chown -R root:root /sti/til/castopod +sudo chown -R www-data:www-data /sti/til/castopod/writable +sudo chown -R www-data:www-data /sti/til/castopod/public/media +``` diff --git a/docs/src/nn-NO/getting-started/update.md b/docs/src/nn-NO/getting-started/update.md new file mode 100644 index 00000000..9fd2b55d --- /dev/null +++ b/docs/src/nn-NO/getting-started/update.md @@ -0,0 +1,89 @@ +--- +title: Oppdatering +sidebarDepth: 3 +--- + +# Korleis oppdaterer eg Castopod? + +Når du har installert Castopod, kan det vera lurt å oppdatera nettstaden din til +siste versjonen for å få nye funksjonar, ✨, feilrettingar 🐛 og betre yting ⚡. + +## Framgangsmåte for å oppdatera automatisk + +> Kjem snart... 👀 + +## Framgangsmåte for å oppdatera manuelt + +1. Gå til + [sida med utgjevingar](https://code.castopod.org/adaures/castopod/-/releases) + og sjå om nettstaden din bruker siste utgåva av Castopod + + - jfr. + [Kvar finn eg Castopod-versjonsnummeret?](#where-can-i-find-my-castopod-version) + +2. Last ned den nyaste pakka som heiter `Castopod Package`, du kan velja mellom + `zip`- eller `tar.gz`-arkiva + + - ⚠️ Pass på at du lastar ned programpakka, og **IKKJE** kjeldekoden + +3. På vevtenaren din: + + - Fjern alle filene utanom `.env` og `public/media` + - Kopier dei nye filene frå den nedlasta pakka til vevtenaren din + + ::: info + + Det kan henda du må nullstilla filtilgangsrettar slik du gjer når du + installerer. Sjå [Tryggleiksspørsmål](./security.md). + + ::: + +4. Nokre utgjevingar kan ha fleire oppdateringsinstruksar (sjå + [sida med utgjevingar](https://code.castopod.org/adaures/castopod/-/releases)). + Det gjeld vanlegvis migreringsskript i `.sql`-format for å oppdatera + databaseskjemaet ditt. + + - 👉 Pass på at du køyrer skripta i phpmyadmin-panelet ditt eller + kommandolina for å oppdatera databasen i tillegg til pakkefilene! + - jfr. + [Eg har ikkje oppdatert på lenge… Kva skal eg gjera?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do) + +5. Viss du bruker redis, må du tøma bufferen. +6. ✨ Ferdig! + +## Vanlege spørsmål (FAQ) + +### Kvar finn eg Castopod-versjonsnummeret? + +Gå til styringspanelet for Castopod. Versjonsnummeret står i nedste venstre +hjørnet. + +Du kan òg finna versjonsnummeret i `app > Config > Constants.php`-fila. + +### Eg har ikkje oppdatert på lenge… Kva skal eg gjera? + +Ingen problem! Berre last ned den siste utgåva som skildra over. Hugs berre at +når du går gjennom utgjevingsinstruksane (4), går du gjennom dei frå eldst til +nyast. + +> Du bør truleg tryggingskopiera nettstaden din, avhengig av kor lenge sidan det +> er du oppdaterte Castopod. + +Til dømes viss du er på `v1.0.0-alpha.42` og vil oppgradera til `v1.0.0-beta.1`: + +0. (stekt tilrådd) Ta ein tryggingskopi av filene og databasen din. + +1. Last ned siste utgåva, erstatt alle filene utanom `.env` og `public/media`. + +2. Gå gjennom alle oppdateringsinstruksane frå eldst til nyast. Start med + `v1.0.0-alpha.43`, `v1.0.0-alpha.44`, `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Ferdig! + +### Bør eg tryggingskopiera før eg oppdaterer? + +Det bør du. Viss ikkje, kan du mista heile Castopod-nettstaden dersom noko går +gale! + +I det heile bør du ta jamnlege tryggingskopiar av Castopod-filene og databasen +for å unngå å mista noko… diff --git a/docs/src/nn-NO/index.md b/docs/src/nn-NO/index.md new file mode 100644 index 00000000..4a039311 --- /dev/null +++ b/docs/src/nn-NO/index.md @@ -0,0 +1,219 @@ +--- +sidebarDepth: 2 +--- + +# Velkomen 👋 + +[![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![stars-badge]][stars] + +Castopod er ei open og gratis løysing for dei som vil køyra si eiga +podkasting-plattform, og for podkastarar som vil engasjera og samhandla med +publikum. + +Castopod er lett å installera og er bygd på +[CodeIgniter4](https://codeigniter.com/), eit kraftig PHP-rammeverk med små +systemkrav. + +::: info Status + +Castopod er i **beta**-utgåve, men er allereie stabilt nok til at podkastarar +over heile verda bruker det! + +::: + +
+ Installer +
+ +## Funksjonar + +- 🌱  Fri og open (AGPL v3-lisens) +- 🔐  Legg vekt på at du eig dine eigne data: innhaldet, publikum og + analysedata høyrer deg til, og berre deg +- 🪄  Podkasting 2.0-funksjonar: GUID, låsing, transkribering, finansiering, + kapittel, stader, personar, lydbetar… +- 💬  Innebygd sosialt nettverk: + - 🚀  Castopod er ein del av fødiverset, som er eit desentralisert + sosialt nettverk + - ❤️  Skriv innlegg, del dei, favorittmerk dei, og kommenter episodane +- 📈  Innebygde analyseverkty: + - ⚖️  Fylgjer GDPR / CCPA / LGPD + - 🪙  Standard IABv2-publikumsmåling + - 🏡  Eigen analyse, heilt utan utanforståande tredjepartar +- 📢  Innebygd marknadsføring: + - ✅  Søkjemotorvenleg (open-graph meta-knaggar, JSON-LD, …) + - 📱  PWA: installer som frittståande app + - 🎨  Bruk eigne fargar + - 🎬  Lag og del filmklypp frå episodane + - 🔉  Lag lydbetar + - ▶️  Innbyggbar spelar, så du kan spela episodane dine på ein kvar + nettstad +- 💸  Kommersialisering: + - 🔗  Donasjonslenker + - 📲  lytt-for-å-klikka-annonsar + - 🤝  value4value / WebMonetization +- 📡  Kringkast episodane dine kvar som helst med RSS: + - 📱  På alle indeksar og appar: Podcast Index, Apple Podcasts, Spotify, + Google Podcasts, Deezer, Podcast Addict, Podfriend, … + - ⚡  Kringkast episodane dine straks med WebSub +- 📥  Podkastimport: Flytt podkasten din til 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/oc/getting-started/install.md b/docs/src/oc/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/oc/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/oc/getting-started/security.md b/docs/src/oc/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/oc/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/oc/getting-started/update.md b/docs/src/oc/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/oc/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/oc/index.md b/docs/src/oc/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/oc/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/pl/getting-started/install.md b/docs/src/pl/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/pl/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/pl/getting-started/security.md b/docs/src/pl/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/pl/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/pl/getting-started/update.md b/docs/src/pl/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/pl/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/pl/index.md b/docs/src/pl/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/pl/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/pt-BR/getting-started/install.md b/docs/src/pt-BR/getting-started/install.md new file mode 100644 index 00000000..0edbbb39 --- /dev/null +++ b/docs/src/pt-BR/getting-started/install.md @@ -0,0 +1,166 @@ +--- +title: Instalação +sidebarDepth: 3 +--- + +# Como instalar o Castopod? + +Castopod foi pensado para ser fácil de instalar. Seja usando hospedagem dedicada +ou compartilhada, você pode instalá-lo na maioria dos servidores web compatíveis +com PHP-MySQL. + +## Requisitos + +- PHP v8.0 ou superior +- MySQL versão 5.7 ou superior ou MariaDB versão 10.2 ou superior +- Suporte a HTTPS + +### PHP v8.0 ou superior + +É necessário PHP versão 8.0 ou superior com as seguintes extensões instaladas: + +- [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) com **JPEG**, + **PNG** e bibliotecas **WEBP**. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Além disso, certifique-se de que as seguintes extensões estejam habilitadas em +seu PHP: + +- json (habilitado por padrão - não desativar) +- xml (habilitado por padrão - não desativar) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### Banco de dados compatível com MySQL + +> Recomendamos usar o [MariaDB](https://mariadb.org). + +::: aviso + +Castopod só funciona com bancos de dados compatíveis com MySQL 5.7 ou superior. +Vai quebrar com a versão anteiror do MySQL, v5.6, por exemplo, pois teve seu +ciclo encerrado em 5 de fevereiro de 2021. + +::: + +Você vai precisar do hostname do servidor, nome do banco de dados, nome do +usuário e senha para concluir o processo de instalação. Se você não os tem, +entre em contato com o administrador do servidor. + +#### Privilégios + +O usuário deve ter pelo menos estes privilégios no banco de dados para que o +Castopod funcione: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, +`SELECT`, `UPDATE`. + +### (Opcional) FFmpeg v4.1.8 ou superior para Clipes de Vídeo + +[FFmpeg](https://www.ffmpeg.org/) versão 4.1.8 ou superior é necessário se você +deseja gerar Clipes de Vídeo. As seguintes extensões devem ser instaladas: + +- Biblioteca **FreeType 2** para + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Opcional) Outras recomendações + +- Redis para melhores desempenhos de cache. +- CDN para cache de arquivos estáticos e melhores desempenhos. +- gateway de e-mail para senhas perdidas. + +## Instruções de instalação + +### Pré-requisitos + +0. Obter um servidor web com os [requisitos](#requirements) instalados +1. Criar um banco de dados MySQL para Castopod com um usuário com privilégios de + acesso e de modificação (para mais informações, ver o + [banco de dados compatível com MySQL](#mysql-compatible-database)). +2. Ativar HTTPS em seu domínio com um _certificado SSL_. +3. Baixar e descompactar o último [Pacote Castopod](https://castopod.org/) no + servidor web, se você ainda não o fez. + - ⚠️ Definir a raiz do documento do servidor web para a subpasta `public/` + dentro da pasta `castopod`. +4. Adicionar **tarefas cron** no seu servidor web para vários processos em + segundo plano (substitua os caminhos adequadamente): + + - Para que os recursos sociais funcionem corretamente, esta tarefa é usada + para transmitir atividades sociais para seus seguidores no fediverso: + + ```bash + * * * * * /path/to/php /path/to/castopod/public/index.php scheduled-activities + ``` + + - Para que seus episódios sejam transmitidos em hubs abertos após a + publicação usando [WebSub](https://en.wikipedia.org/wiki/WebSub): + + ```bash + * * * * * /usr/local/bin/php /castopod/public/index.php scheduled-websub-publish + ``` + + - Para que os clipes de vídeo sejam criados (veja + [requisitos de FFmpeg](#ffmpeg-v418-or-higher-for-video-clips)): + + ```bash + * * * * * /path/to/php /path/to/castopod/public/index.php scheduled-video-clips + ``` + + > Essas tarefas são executadas **a cada minuto**. Você pode definir a + > freqüência dependendo de suas necessidades: a cada 5, 10 minutos ou mais. + +### (recomendado) Assistente de Instalação + +1. Execute o script de instalação do Castopod acessando a página do assistente + de instalação (`https://your_domain_name.com/cp-install`) no seu navegador + favorito. +2. Siga as instruções na sua tela. +3. Comece o podcast! + +::: info Nota + +O script de instalação grava um arquivo `.env` na raiz do pacote. Se você não +puder passar pelo assistente de instalação, você pode +[criar e atualizar o arquivo `.env` manualmente](#alternative-manual-configuration). + +::: + +## Pacotes comunitários + +Se você não quiser se preocupar em instalar o Castopod manualmente, você pode +usar um dos pacotes criados e mantidos pela comunidade de código aberto. + +### Instalar com YunoHost + +[YunoHost](https://yunohost.org/) é uma distribuição baseada no Debian GNU/Linux +composta por pacotes de software livre e de código aberto. Ele gerencia as +dificuldades de auto-hospedagem para você. + +
+ + + Instalar Castopod com YunoHost + + +Github +Repo + +
+ +### Instalar com o Docker + +Se você deseja usar o Docker para instalar o Castopod, é possível graças a +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Instalar +com o +Docker + +::: info Nota + +Dado o alto nível de demanda por docker, planejamos manter uma imagem oficial do +Castopod Docker diretamente no repositório do Castopod. + +::: diff --git a/docs/src/pt-BR/getting-started/security.md b/docs/src/pt-BR/getting-started/security.md new file mode 100644 index 00000000..c4104d9a --- /dev/null +++ b/docs/src/pt-BR/getting-started/security.md @@ -0,0 +1,28 @@ +--- +title: Segurança +--- + +# Questões de segurança + +Castopod é construído sobre [CodeIgniter4](https://codeigniter.com/), um +framework PHP que encoraja +[boas práticas de segurança](https://codeigniter.com/user_guide/concepts/security.html). + +Para maximizar a segurança da sua instância e prevenir qualquer ataque +malicioso, nós recomendamos que você atualize todas as suas permissões de +arquivos do Castopod após a instalação ou atualizações (para evitar qualquer +erro de permissão anterior): + +- A pasta `writable/` deve ser **legível (readable)** e **gravável (writable)**. +- A pasta `public/media/` deve ser **legível (readable)** e **gravável + (writable)**. +- qualquer outro arquivo deve ser definido como **somente leitura (readonly)**. + +Por exemplo, se você estiver usando Apache ou NGINX com Ubuntu, você pode fazer +o seguinte: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/pt-BR/getting-started/update.md b/docs/src/pt-BR/getting-started/update.md new file mode 100644 index 00000000..18449201 --- /dev/null +++ b/docs/src/pt-BR/getting-started/update.md @@ -0,0 +1,95 @@ +--- +title: Atualização +sidebarDepth: 3 +--- + +# Como atualizar o Castopod? + +Depois de instalar o Castopod, você pode querer atualizar sua instância para a +última versão para desfrutar das últimas funcionalidades ✨, correção de bugs 🐛 +e melhorias de desempenho ⚡. + +## Instruções de atualização automática + +> Em breve... 👀 + +## Instruções para atualização manual + +1. Vá para a + [página de versões](https://code.castopod.org/adaures/castopod/-/releases) e + veja se sua instância está atualizada com a última versão do Castopod + + - cf. + [Onde posso encontrar minha versão do Castopod?](#where-can-i-find-my-castopod-version) + +2. Baixe o último pacote de versão chamado `Castopod Package`, você pode + escolher entre os arquivos `zip` ou `tar.gz` + + - ⚠️ Certifique-se de baixar o pacote Castopod e **NÃO** o Código Fonte + +3. No seu servidor: + + - Remova todos os arquivos, exceto `.env` e `public/media` + - Copie os novos arquivos do pacote baixado para o seu servidor + + ::: info Nota + + Talvez seja necessário redefinir as permissões de arquivos como durante o + processo de instalação. Verifique as + [Questões de segurança](./security.md). + + ::: + +4. Versões podem vir com instruções de atualização adicionais (veja a + [página de versões](https://code.castopod.org/adaures/castopod/-/releases)). + Geralmente são scripts de migração de banco de dados no formato `.sql` para + atualizar seu esquema de banco de dados. + + - 👉 Certifique-se de executar os scripts em seu painel phpmyadmin ou use a + linha de comando para atualizar o banco de dados junto com os arquivos do + pacote! + - cf. + [Faz muito tempo que não atualizo minha instância… O que devo fazer?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do) + +5. Se você estiver usando redis, limpe seu cache. +6. ✨ Aproveite sua instância atualizada, está tudo pronto! + +## Perguntas frequentes (FAQ) + +### Onde posso encontrar minha versão do Castopod? + +Vá para o painel de administração do Castopod, a versão é exibida no canto +inferior esquerdo. + +Ou então, você pode encontrar a versão no arquivo +`app > Config > Constants.php`. + +### Faz muito tempo que não atualizo minha instância… O que devo fazer? + +Sem problemas! Basta obter a versão mais recente, conforme descrito acima. Só +que, ao passar pelas instruções da versão (4), execute-as sequencialmente, da +mais antiga para a mais recente. + +> Você pode querer fazer backup de sua instância dependendo de quanto tempo você +> não atualizou o Castopod. + +Por exemplo, se você estiver na `v1.0.0-alpha.42` e gostaria de atualizar para a +`v1.0.0-beta.1`: + +0. (altamente recomendado) Faça um backup de seus arquivos e banco de dados. + +1. Baixe a versão mais recente, substitua seus arquivos enquanto mantém o `.env` + e `public/media`. + +2. Passe por cada instrução de atualização da versão sequencialmente (a partir + da mais antiga até a mais recente) começando com `v1.0.0-alpha.43`, + `v1.0.0-alpha.44`, `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Aproveite sua instância atualizada, está tudo pronto! + +### Devo fazer um backup antes de atualizar? + +Aconselhamos você a fazer, assim você não perde tudo se algo der errado! + +De forma mais geral, recomendamos que você faça backups regulares dos seus +arquivos de Castopod e banco de dados para evitar que você perca tudo… diff --git a/docs/src/pt-BR/index.md b/docs/src/pt-BR/index.md new file mode 100644 index 00000000..a3591bd8 --- /dev/null +++ b/docs/src/pt-BR/index.md @@ -0,0 +1,219 @@ +--- +sidebarDepth: 2 +--- + +# Bem-vindo 👋 + +[![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![stars-badge]][stars] + +Castopod é uma plataforma de hospedagem de código livre & aberto feita para +podcasters que querem se envolver e interagir com seu público. + +Castopod é fácil de instalar e foi construído em cima do +[CodeIgniter4](https://codeigniter.com/), um poderoso framework PHP com uma +pegada muito pequena. + +::: info Status + +O Castopod está atualmente em **beta**, mas já bastante estável e usado por +podcasters em todo o mundo! + +::: + +
+ Instalar +
+ +## Funcionalidades + +- 🌱  Livre & de código aberto (Licença AGPL v3) +- 🔐  Focado na soberania de dados: seu conteúdo, público e análises + pertence a você, e somente você +- 🪄  Recursos de Podcasting 2.0: GUID, bloqueado, transcrições, + financiamento, capítulos, localização, pessoas, clipes de áudio, … +- 💬  Rede social integrada: + - 🚀  Castopod é parte do Fediverso, uma rede social descentralizada + - ❤️  Crie publicações, compartilhe, favorite e comente em episódios +- 📈  Estatísticas integradas: + - ⚖️  Compatível com GDPR / CCPA / LGPD + - 🪙  Medição de audiência no padrão do IABv2 + - 🏡  Estatísticas feitas localmente, sem terceiros envolvidos +- 📢  Ferramentas de marketing integradas: + - ✅  Pronto para SEO (meta-tags de open-graph, JSON-LD, …) + - 📱  PWA: instalar como um aplicativo autônomo + - 🎨  Cores de tema personalizáveis + - 🎬  Gere clipes de vídeo prontos para compartilhar a partir dos + episódios + - 🔉  Gere clipes de áudio + - ▶️  Player incorporável, incorpore seus episódios em qualquer site +- 💸  Monetização: + - 🔗  Links de financiamento + - 📲  anúncios clique-para-ouvir + - 🤝  value4value / WebMonetization +- 📡  Publique seus episódios em qualquer lugar com RSS: + - 📱  Em todos os agregadores e aplicativos: Podcast Index, Apple + Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, … + - ⚡  Transmita seus episódios instantaneamente com WebSub +- 📥  Importação de Podcast: mova seu podcast existente para o Castopod +- 📤  Mova seu podcast para fora do Castopod +- 🔀  Multi-inquilino: hospede quantos podcasts você quiser +- 👥  Multi-usuário: adicione contribuidores e defina cargos +- 🌎  Suporte i18n: traduzido em inglês, francês, polonês, português + brasileiro, alemão e norueguês... e com mais a caminho! + +## Motivação + +O ecossistema de podcasting é descentralizado por natureza: você pode criar seu +podcast como um arquivo RSS, publicar na web e compartilhar em qualquer lugar +online. + +Na verdade, é um dos únicos meios de comunicação que permaneceram assim por +muito tempo. + +À medida que os usos estão evoluindo, mais e mais pessoas estão entrando em +podcasts: sejam criadores encontrando novas maneiras de compartilhar suas ideias +ou então ouvintes em busca de melhor conteúdo. + +Com a mídia podcast se tornando mais amplamente utilizada, algumas empresas +estão tentando mudá-la para um meio mais controlado e centralizado. + +O Castopod foi criado em um esforço para fornecer uma alternativa aberta e +sustentável para hospedar seus podcasts, promovendo a descentralização para +garantir que a criatividade dos podcasters possa se expressar. + +Este projeto é impulsionado pela comunidade de código aberto e, especificamente, +pelo [Fediverso](https://fediverse.party/en/fediverse/) e movimentos +[Podcasting 2.0](https://podcastindex.org/). + +## Comparação com outras soluções + +Acreditamos que uma solução não é necessariamente certa para todos, depende +muito de suas necessidades. Então, aqui estão comparações com outras ferramentas +para ajudá-lo a avaliar se o Castopod é o ideal para você. + +### Castopod vs Wordpress + +Castopod é frequentemente referido como "o Wordpress para podcasts" por causa +das semelhanças entre os dois. De certa forma, isso é verdade. E, na verdade, o +Castopod foi muito inspirado no ecossistema do Wordpress, vendo a facilidade de +adoção da comunidade e o número de sites rodando ele. + +Assim como o Wordpress, o Castopod é livre e de código aberto, compilado +utilizando PHP com um banco de dados MySQL e é empacotado de uma forma que você +pode facilmente instalar na maioria dos servidores. + +Wordpress é uma ótima maneira de criar seu site e expandi-lo com plugins para +obter o que você quer. É um CMS completo que ajuda você a ter qualquer tipo de +site online. + +Por outro lado, o Castopod destina-se a atender especificamente às necessidades +dos podcasters, concentrando-se em podcasting e nada mais. Você não precisa de +nenhum plug-in para começar sua jornada podcastal. + +Isso permite otimizar os processos específicos do podcasting: desde a criação de +seus podcasts e a publicação de novos episódios até a transmissão, marketing e +estatísticas. + +Finalmente, dependendo de suas necessidades, Wordpress e Castopod podem até +conviver lado a lado, pois compartilham os mesmos requisitos! + +### Castopod vs Funkwhale + +Funkwhale é um servidor de música auto-hospedado, moderno, livre e de código +aberto. Assim como o Castopod, o Funkwhale está no fediverso, uma rede social +descentralizada que permite a interoperabilidade entre os dois. + +Funkwhale foi inicialmente construído em torno da música. E mais tarde, à medida +que o projeto evoluiu, a capacidade de hospedar podcasts foi introduzida. + +Ao contrário do Funkwhale, o Castopod foi projetado e construído exclusivamente +para podcasting. Isso permite uma implementação mais fácil para recursos +relacionados ao ecossistema de podcasting, como os recursos de podcasting 2.0 +(transcrições, capítulos, locais, pessoas, …). + +Portanto, você provavelmente deve usar o Funkwhale se quiser hospedar sua música +e usar o Castopod se quiser hospedar seus podcasts. + +### Castopod vs outras hospedagens de podcast + +Existem muitas soluções para você hospedar seus podcasts, alguns dos quais são +realmente ótimas e [muitas delas](https://podcastindex.org/apps) estão entrando +na onda do Podcasting 2.0 assim como o Castopod! + +Cada uma dessas soluções difere uma da outra, você pode comparar com a +[lista de recursos](#features). + +Dito isto, existem duas diferenças principais com outras soluções de podcasting: + +- Castopod pode ser auto-hospedado e é a única solução que permite manter o + controle total sobre o que você produz. Além disso, como é de código aberto, + você pode até personalizá-lo como desejar. + +- O Castopod é a única solução que atualmente integra uma rede social + descentralizada com o ActivityPub, bem como muitos dos recursos de podcasting + 2.0, na esperança de preencher a lacuna entre as duas. + +## Contribuir + +Gostou do Castopod e gostaria de ajudar? Dê uma olhada na seguinte documentação +para você começar. + +### Código de conduta + +Castopod adotou um Código de Conduta que esperamos que os participantes do +projeto sigam. Por favor, leia o +[manual CODE_OF_CONDUCT](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md) +para que você possa entender quais ações serão e não serão toleradas. + +### Guia de contribuição + +Leia nosso [guia de contribuição](./contributing/guidelines.md) para saber mais +sobre nosso processo de desenvolvimento, como propor correções de bugs e +melhorias e como compilar e testar suas alterações no Castopod. + +## Contato + +Você pode nos contatar para obter ajuda ou fazer qualquer pergunta que tenha em: + +- [Discord](https://castopod.org/discord) (para interação direta com + desenvolvedores e a comunidade) +- [Rastreador de problemas](https://code.castopod.org/adaures/castopod/-/issues) + (para solicitações de recursos e relatos de bugs) + +Como alternativa, você pode nos seguir nas redes sociais para obter notícias +sobre o Castopod: + +- [podlibre.social](https://podlibre.social/@Castopod) (instância do Mastodon) +- [Twitter](https://twitter.com/castopod) +- [LinkedIn](https://linkedin.com/company/castopod) +- [Facebook](https://www.facebook.com/castopod) + +## Patrocinadores + +O desenvolvimento contínuo do Castopod é possível com o apoio de seus +patrocinadores. Se você quiser ajudar, por favor considere +[patrocinar o desenvolvimento do Castopod](https://opencollective.com/castopod/contribute). + +
+ Logo de Ad Aures + Logo da NLnet +
+ +## Licença + +[Licença Pública Geral GNU Affero v3.0](https://choosealicense.com/licenses/agpl-3.0/) + +Copyright © 2020-presente, [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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/pt/getting-started/install.md b/docs/src/pt/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/pt/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/pt/getting-started/security.md b/docs/src/pt/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/pt/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/pt/getting-started/update.md b/docs/src/pt/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/pt/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/pt/index.md b/docs/src/pt/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/pt/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/ru/getting-started/install.md b/docs/src/ru/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/ru/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/ru/getting-started/security.md b/docs/src/ru/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/ru/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/ru/getting-started/update.md b/docs/src/ru/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/ru/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/ru/index.md b/docs/src/ru/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/ru/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/docs/src/sv/getting-started/install.md b/docs/src/sv/getting-started/install.md new file mode 100644 index 00000000..7d35b296 --- /dev/null +++ b/docs/src/sv/getting-started/install.md @@ -0,0 +1,162 @@ +--- +title: Installation +sidebarDepth: 3 +--- + +# How to install 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. + +## Requirements + +- PHP v8.0 or higher +- MySQL version 5.7 or higher or MariaDB version 10.2 or higher +- HTTPS support + +### PHP v8.0 or higher + +PHP version 8.0 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. +- [exif](https://www.php.net/manual/en/exif.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- xml (enabled by default - don't turn it off) +- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) + +### MySQL compatible database + +> We recommend using [MariaDB](https://mariadb.org). + +::: warning + +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. + +::: + +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. + +#### Privileges + +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. + +### (Optional) FFmpeg v4.1.8 or higher for Video Clips + +[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: + +- **FreeType 2** library for + [gd](https://www.php.net/manual/en/image.installation.php). + +### (Optional) Other recommendations + +- Redis for better cache performances. +- CDN for static files caching and better performances. +- e-mail gateway for lost passwords. + +## Install instructions + +### Pre-requisites + +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): + + - For social features to work properly, this task is used to broadcast social + activities to your followers on the 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 + [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)): + + ```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. + +### (recommended) Install Wizard + +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! + +::: info Note + +The install script writes a `.env` file in the package root. If you cannot go +through the install wizard, you can +[create and update the `.env` file manually](#alternative-manual-configuration). + +::: + +## Community packages + +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. + +### Install with 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. + +
+ + + Install Castopod with YunoHost + + +Github +Repo + +
+ +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +Install +with +Docker + +::: info Note + +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. + +::: diff --git a/docs/src/sv/getting-started/security.md b/docs/src/sv/getting-started/security.md new file mode 100644 index 00000000..e205698d --- /dev/null +++ b/docs/src/sv/getting-started/security.md @@ -0,0 +1,26 @@ +--- +title: Security +--- + +# Security concerns + +Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP +framework that encourages +[good security practices](https://codeigniter.com/user_guide/concepts/security.html). + +To maximize your instance's safety and prevent any malicious attack, we +recommend you update all your Castopod files permissions after installation or +updates (to avoid any prior permission error): + +- `writable/` folder must be **readable** and **writable**. +- `public/media/` folder must be **readable** and **writable**. +- any other file must be set to **readonly**. + +For instance, if you are using Apache or NGINX with Ubuntu you may do the +following: + +```bash +sudo chown -R root:root /path/to/castopod +sudo chown -R www-data:www-data /path/to/castopod/writable +sudo chown -R www-data:www-data /path/to/castopod/public/media +``` diff --git a/docs/src/sv/getting-started/update.md b/docs/src/sv/getting-started/update.md new file mode 100644 index 00000000..1f48e274 --- /dev/null +++ b/docs/src/sv/getting-started/update.md @@ -0,0 +1,93 @@ +--- +title: Update +sidebarDepth: 3 +--- + +# How to update Castopod? + +After installing Castopod, you may want to update your instance to the latest +version in order to enjoy the latest features ✨, bug fixes 🐛 and performance +improvements ⚡. + +## Automatic update instructions + +> Coming soon... 👀 + +## Manual update instructions + +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 + + - cf. + [Where can I find my Castopod version?](#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 + + - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + +3. On your server: + + - Remove all files except `.env` and `public/media` + - Copy the new files from the downloaded package into your server + + ::: info Note + + You may need to reset files permissions as during the install process. + Check [Security Concerns](./security.md). + + ::: + +4. Releases may come with additional update instructions (see + [releases page](https://code.castopod.org/adaures/castopod/-/releases)). They + are usually database migration scripts in `.sql` format to update your + database schema. + + - 👉 Make sure you run the scripts on your phpmyadmin panel or using command + line to update the database along with the package files! + - 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) + +5. If you are using redis, clear your cache. +6. ✨ Enjoy your fresh instance, you're all done! + +## Frequently asked questions (FAQ) + +### Where can I find my Castopod version? + +Go to your Castopod admin panel, the version is displayed on the bottom left +corner. + +Alternatively, you can find the version in the `app > Config > Constants.php` +file. + +### I haven't updated my instance in a long time… What should I do? + +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. + +> You may want to backup your instance depending on how long you haven't updated +> Castopod. + +For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +`v1.0.0-beta.1`: + +0. (highly recommended) Make a backup of your files and database. + +1. Download the latest release, overwrite your files whilst keeping `.env` and + `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`, + `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. + +3. ✨ Enjoy your fresh instance, you're all done! + +### Should I make a backup before updating? + +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… diff --git a/docs/src/sv/index.md b/docs/src/sv/index.md new file mode 100644 index 00000000..161b9940 --- /dev/null +++ b/docs/src/sv/index.md @@ -0,0 +1,216 @@ +--- +sidebarDepth: 2 +--- + +# Welcome 👋 + +[![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 is easy to install and was built on top of +[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very +small footprint. + +::: info Status + +Castopod is currently in **beta** but already quite stable and used by +podcasters around the world! + +::: + +
+ Install +
+ +## Features + +- 🌱  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: + - ✅  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 +- 💸  Monetization: + - 🔗  Funding links + - 📲  listen-to-click ads + - 🤝  value4value / WebMonetization +- 📡  Publish your episodes everywhere with RSS: + - 📱  On all indexes and apps: 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 with more to + come! + +## 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. + +It is in fact one of the only media to have stayed this way for a long time. + +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. + +With podcasting becoming more widely used, some companies are trying to shift it +towards a more controlled and centralized 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. + +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. + +## Comparison with other solutions + +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. + +### 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. + +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. + +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. + +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. + +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. + +Finally, depending on your needs, Wordpress and Castopod can even live side by +side as they share the same requirements! + +### 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 was initially built around music. And later on, as the project +evolved, the ability to host podcasts was introduced. + +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, …). + +So, you should probably use Funkwhale if you want to host your music, and use +Castopod if you want to host your podcasts. + +### Castopod vs other podcast hosts + +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! + +Each of these solutions differ from one another, you may compare with the +[list of features](#features). + +That being said, there are two main differences with other podcasting solutions: + +- 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 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. + +## Contributing + +Love Castopod and would like to help? Take a look at the following documentation +to get you started. + +### Code of conduct + +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. + +### Contributing 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. + +## Contact + +You may reach us for help or ask any question you have on: + +- [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) + +Alternatively, you can follow us on social media platforms to get news about +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 + +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). + +
+ Ad Aures Logo + NLnet Logo +
+ +## License + +[GNU Affero General Public License v3.0](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 + +[release]: https://code.castopod.org/adaures/castopod/-/releases +[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[contributions]: https://code.castopod.org/adaures/castopod/-/issues +[semantic-release]: https://github.com/semantic-release/semantic-release +[discord]: https://castopod.org/discord +[stars]: https://github.com/ad-aures/castopod/stargazers +[crowdin]: https://translate.castopod.org/project/castopod diff --git a/modules/Admin/Language/ar/Breadcrumb.php b/modules/Admin/Language/ar/Breadcrumb.php index 0a262298..396ae474 100644 --- a/modules/Admin/Language/ar/Breadcrumb.php +++ b/modules/Admin/Language/ar/Breadcrumb.php @@ -33,12 +33,12 @@ return [ 'change-password' => 'تغيير الكلمة السرية', 'import' => 'feed import', 'platforms' => 'منصات', - 'social' => 'social networks', + 'social' => 'شبكات التواصل الاجتماعي', 'funding' => 'funding', 'analytics' => 'analytics', 'locations' => 'locations', - 'webpages' => 'web pages', - 'unique-listeners' => 'unique listeners', + 'webpages' => 'صفحات ويب', + 'unique-listeners' => 'مستمعون فريدون', 'players' => 'players', 'listening-time' => 'listening time', 'time-periods' => 'time periods', diff --git a/modules/Admin/Language/ar/Common.php b/modules/Admin/Language/ar/Common.php index 1bdd4f01..9021d57e 100644 --- a/modules/Admin/Language/ar/Common.php +++ b/modules/Admin/Language/ar/Common.php @@ -32,13 +32,13 @@ return [ 'help' => 'Powered by markdown', ], 'multiSelect' => [ - 'selectText' => 'Press to select', - 'loadingText' => 'Loading…', - 'noResultsText' => 'No results found', + 'selectText' => 'اضغط للاختيار', + 'loadingText' => 'جارٍ التحميل…', + 'noResultsText' => 'لم يتم العثور على نتائج', 'noChoicesText' => 'No choices to choose from', 'maxItemText' => 'Cannot add more items', ], - 'upload_file' => 'Upload a file', + 'upload_file' => 'إرسال ملف', 'remote_url' => 'Remote URL', ], 'play_episode_button' => [ diff --git a/modules/Admin/Language/ar/Countries.php b/modules/Admin/Language/ar/Countries.php index 1a9b33e0..a55d3d60 100644 --- a/modules/Admin/Language/ar/Countries.php +++ b/modules/Admin/Language/ar/Countries.php @@ -157,9 +157,9 @@ return [ 'MK' => 'Macedonia, the Former Yugoslav Republic of', 'ML' => 'مالي', 'MM' => 'ميانمار', - 'MN' => 'Mongolia', - 'MO' => 'Macao', - 'MP' => 'Northern Mariana Islands', + 'MN' => 'منغوليا', + 'MO' => 'ماكاو', + 'MP' => 'جزر ماريانا الشمالية', 'MQ' => 'Martinique', 'MR' => 'موريتانيا', 'MS' => 'مونتسيرات', @@ -190,23 +190,23 @@ return [ 'PG' => 'بابوا غينيا الجديدة', 'PH' => 'الفيليبين', 'PK' => 'باكستان', - 'PL' => 'Poland', + 'PL' => 'بولندا', 'PM' => 'Saint Pierre and Miquelon', 'PN' => 'Pitcairn', 'PR' => 'Puerto Rico', - 'PS' => 'Palestine, State of', - 'PT' => 'Portugal', - 'PW' => 'Palau', - 'PY' => 'Paraguay', - 'QA' => 'Qatar', + 'PS' => 'دولة فلسطين', + 'PT' => 'البرتغال', + 'PW' => 'بالاو', + 'PY' => 'البراغواي', + 'QA' => 'قطر', 'RE' => 'Réunion', - 'RO' => 'Romania', - 'RS' => 'Serbia', - 'RU' => 'Russian Federation', - 'RW' => 'Rwanda', - 'SA' => 'Saudi Arabia', - 'SB' => 'Solomon Islands', - 'SC' => 'Seychelles', + 'RO' => 'رومانيا', + 'RS' => 'صربيا', + 'RU' => 'روسيا الاتحادية', + 'RW' => 'رواندا', + 'SA' => 'العربية السعودية', + 'SB' => 'جزر سليمان', + 'SC' => 'سيشيل', 'SD' => 'السودان', 'SE' => 'السويد', 'SG' => 'سنغافورة', diff --git a/modules/Admin/Language/ar/Episode.php b/modules/Admin/Language/ar/Episode.php index 0e41bb07..ff5a70a1 100644 --- a/modules/Admin/Language/ar/Episode.php +++ b/modules/Admin/Language/ar/Episode.php @@ -14,7 +14,7 @@ return [ 'number' => 'الحلقة {episodeNumber}', 'number_abbr' => 'الحلقة {episodeNumber}', 'season_episode' => 'الموسم {seasonNumber} الحلقة {episodeNumber}', - 'season_episode_abbr' => 'S{seasonNumber}E{episodeNumber}', + 'season_episode_abbr' => 'م{seasonNumber}ح{episodeNumber}', 'number_of_comments' => '{numberOfComments, plural, one {# comment} other {# comments} @@ -23,45 +23,45 @@ return [ 'back_to_podcast' => 'العودة إلى البودكاست', 'edit' => 'تعديل', 'publish' => 'نشر', - 'publish_edit' => 'Edit publication', - 'unpublish' => 'Unpublish', + 'publish_edit' => 'تعديل المنشور', + 'unpublish' => 'إلغاء النشر', 'publish_error' => 'Episode is already published.', 'publish_edit_error' => 'Episode is already published.', 'publish_cancel_error' => 'Episode is already published.', - 'unpublish_error' => 'Episode is not published.', + 'unpublish_error' => 'الحلقة غير منشورة.', 'delete' => 'احذف', 'go_to_page' => 'الانتقال إلى الصفحة', 'create' => 'إضافة حلقة', 'publication_status' => [ - 'published' => 'Published', - 'scheduled' => 'Scheduled', - 'not_published' => 'Not published', + 'published' => 'نُشِرَت', + 'scheduled' => 'مُبَرمَجة', + 'not_published' => 'غير منشورة', ], 'list' => [ 'episode' => 'الحلقة', - 'visibility' => 'Visibility', + 'visibility' => 'الظهور', 'comments' => 'التعليقات', 'actions' => 'الإجراءات', ], 'messages' => [ - 'createSuccess' => 'Episode has been successfully created!', - 'editSuccess' => 'Episode has been successfully updated!', - 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'createSuccess' => 'تم إنشاء الحلقة بنجاح!', + 'editSuccess' => 'تم تحديث الحلقة بنجاح!', + 'publishCancelSuccess' => 'تم إلغاء نشر الحلقة بنجاح!', ], '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_hint' => 'Choose an .mp3 or .m4a audio file.', - 'info_section_title' => 'Episode info', - 'cover' => 'Episode cover', + 'info_section_title' => 'معلومات الحلقة', + 'cover' => 'غلاف الحلقة', 'cover_hint' => 'If you do not set a cover, the podcast cover will be used instead.', 'cover_size_hint' => 'Cover must be squared with at least 1400px wide and tall.', 'title' => 'العنوان', 'title_hint' => 'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.', - 'permalink' => 'Permalink', + 'permalink' => 'الرابط الدائم', 'season_number' => 'الموسم', 'episode_number' => 'الحلقة', 'type' => [ @@ -87,7 +87,7 @@ return [ 'description_footer' => 'Description footer', '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', + 'additional_files_section_title' => 'ملفات إضافية', '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', @@ -122,8 +122,8 @@ return [ 'post' => 'Your announcement post', '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', + 'message_placeholder' => 'اكتب رسالتك…', + 'publication_date' => 'تاريخ النشر', 'publication_method' => [ 'now' => 'الآن', 'schedule' => 'برمجة', @@ -133,8 +133,8 @@ return [ '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', + 'submit_edit' => 'تعديل المنشور', + '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', @@ -143,7 +143,7 @@ return [ 'disclaimer' => "Unpublishing the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'I understand, I want to unpublish the episode', - 'submit' => 'Unpublish', + 'submit' => 'إلغاء النشر', ], 'delete_form' => [ 'disclaimer' => @@ -157,8 +157,8 @@ return [ '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', + 'dark' => 'داكن', + 'dark-transparent' => 'داكن شفاف', 'light' => 'Light', 'light-transparent' => 'Light transparent', ], diff --git a/modules/Admin/Language/ar/EpisodeNavigation.php b/modules/Admin/Language/ar/EpisodeNavigation.php index 2f788b16..33409c67 100644 --- a/modules/Admin/Language/ar/EpisodeNavigation.php +++ b/modules/Admin/Language/ar/EpisodeNavigation.php @@ -16,7 +16,7 @@ return [ 'episode-persons-manage' => 'Manage persons', 'embed-add' => 'Embeddable player', 'clips' => 'Clips', - 'video-clips-list' => 'Video clips', + 'video-clips-list' => 'مقاطع فيديو', 'video-clips-create' => 'New video clip', 'soundbites-list' => 'Soundbites', 'soundbites-create' => 'New soundbite', diff --git a/modules/Admin/Language/ar/Install.php b/modules/Admin/Language/ar/Install.php index e8bedfca..ffca0943 100644 --- a/modules/Admin/Language/ar/Install.php +++ b/modules/Admin/Language/ar/Install.php @@ -43,7 +43,7 @@ return [ 'redis' => 'Redis', 'predis' => 'Predis', ], - 'next' => 'Next', + 'next' => 'التالي', 'submit' => 'إنهاء التثبيت', 'create_superadmin' => 'Create your superadmin account', 'email' => 'البريد الإلكتروني', diff --git a/modules/Admin/Language/ar/Navigation.php b/modules/Admin/Language/ar/Navigation.php index 49a4c939..f264138a 100644 --- a/modules/Admin/Language/ar/Navigation.php +++ b/modules/Admin/Language/ar/Navigation.php @@ -24,8 +24,8 @@ return [ 'fediverse' => 'الفديفرس', 'fediverse-blocked-actors' => 'الحسابات المحظورة', 'fediverse-blocked-domains' => 'النطاقات المحظورة', - 'users' => 'Users', - 'user-list' => 'All users', + 'users' => 'مستخدمون', + 'user-list' => 'كافة المستخدمين', 'user-create' => 'مستخدم جديد', 'pages' => 'الصفحات', 'page-list' => 'كافة الصفحات', diff --git a/modules/Admin/Language/ar/Page.php b/modules/Admin/Language/ar/Page.php index 2da89b63..d4145ddc 100644 --- a/modules/Admin/Language/ar/Page.php +++ b/modules/Admin/Language/ar/Page.php @@ -25,6 +25,6 @@ return [ ], 'messages' => [ 'createSuccess' => 'The page “{pageTitle}” was created successfully!', - 'editSuccess' => 'The page was successfully updated!', + 'editSuccess' => 'تم تحديث الصفحة بنجاح!', ], ]; diff --git a/modules/Admin/Language/ar/Person.php b/modules/Admin/Language/ar/Person.php index 72feda82..ac2d43c7 100644 --- a/modules/Admin/Language/ar/Person.php +++ b/modules/Admin/Language/ar/Person.php @@ -22,7 +22,7 @@ return [ 'deleteSuccess' => 'Person has been removed!', ], 'form' => [ - 'avatar' => 'Avatar', + 'avatar' => 'الصورة الرمزية', 'avatar_size_hint' => 'Avatar must be squared with at least 400px wide and tall.', 'full_name' => 'الإسم الكامل', diff --git a/modules/Admin/Language/ar/Podcast.php b/modules/Admin/Language/ar/Podcast.php index 09216c9a..f0aadbb5 100644 --- a/modules/Admin/Language/ar/Podcast.php +++ b/modules/Admin/Language/ar/Podcast.php @@ -9,10 +9,10 @@ declare(strict_types=1); */ return [ - 'all_podcasts' => 'All podcasts', + 'all_podcasts' => 'كافة البودكاستات', 'no_podcast' => 'No podcast found!', - 'create' => 'Create podcast', - 'import' => 'Import podcast', + 'create' => 'إنشاء بودكاست', + 'import' => 'استيراد بودكاست', 'new_episode' => 'حلقة جديدة', 'view' => 'View podcast', 'edit' => 'Edit podcast', diff --git a/modules/Admin/Language/br/Breadcrumb.php b/modules/Admin/Language/br/Breadcrumb.php index 86ce9bb5..9259d070 100644 --- a/modules/Admin/Language/br/Breadcrumb.php +++ b/modules/Admin/Language/br/Breadcrumb.php @@ -27,7 +27,7 @@ return [ 'unpublish' => 'diembannañ', 'delete' => 'dilemel', 'fediverse' => 'kevrebed', - 'block-lists' => 'roll ar re harzet', + 'block-lists' => 'roll ar re stanket', 'users' => 'implijerien·ezed', 'my-account' => "ma c'hont", 'change-password' => 'kemmañ ar ger-tremen', diff --git a/modules/Admin/Language/br/Charts.php b/modules/Admin/Language/br/Charts.php index dd668656..f737d0c0 100644 --- a/modules/Admin/Language/br/Charts.php +++ b/modules/Admin/Language/br/Charts.php @@ -9,30 +9,30 @@ declare(strict_types=1); */ return [ - 'by_service_weekly' => 'Pellgargadurioù eus ar rannoù dre servij (e-pad ar sizhunvezh tremenet)', - 'by_player_weekly' => 'Pellgargadurioù eus ar rannoù dre lenner (e-pad ar sizhunvezh tremenet)', - 'by_player_yearly' => 'Pellgargadurioù eus ar rannoù dre servij (e-pad ar bloavezh tremenet)', - 'by_device_weekly' => 'Pellgargadurioù eus ar rannoù dre venveg (e-pad ar sizhunvezh tremenet)', - 'by_os_weekly' => 'Pellgargadurioù eus ar rannoù dre OS (e-pad ar sizhunvezh tremenet)', - 'podcast_by_region' => 'Pellgargadurioù eus ar rannoù dre vro (e-pad ar sizhunvezh tremenet)', - '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' => 'Pellgargadurioù ar rannoù dre servij (e-pad ar sizhunvezh tremenet)', + 'by_player_weekly' => 'Pellgargadurioù ar rannoù dre lenner (e-pad ar sizhunvezh tremenet)', + 'by_player_yearly' => 'Pellgargadurioù ar rannoù dre servij (e-pad ar bloavezh tremenet)', + 'by_device_weekly' => 'Pellgargadurioù ar rannoù dre venveg (e-pad ar sizhunvezh tremenet)', + 'by_os_weekly' => 'Pellgargadurioù ar rannoù dre OS (e-pad ar sizhunvezh tremenet)', + 'podcast_by_region' => 'Pellgargadurioù ar rannoù dre vro (e-pad ar sizhunvezh tremenet)', + 'unique_daily_listeners' => 'Selaouerien·ezed unel pemdeziek', + 'unique_monthly_listeners' => 'Selaouerien·ezed unel miziek', + 'by_browser' => 'Darempred gant ar pajennoù web dre verdeer (e-pad ar sizhun tremenet)', + 'podcast_by_day' => 'Pellgargadurioù pemdeziek ar rannoù', + 'podcast_by_month' => 'Pellgargadurioù miziek ar rannoù', + 'episode_by_day' => 'Pellgargadurioù pemdeziek ar rannoù (an 60 deizioù kentañ)', + 'episode_by_month' => 'Pellgargadurioù miziek ar rannoù', '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)', - '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)', + 'Pellgargadurioù ar 5 rannoù diwezhañ (an 60 deizioù kentañ)', + 'by_country_weekly' => 'Pellgargadurioù ar rannoù dre vro (e-pad ar sizhunvezh tremenet)', + 'by_country_yearly' => 'Pellgargadurioù ar rannoù dre vro (e-pad ar bloavezh tremenet)', + 'by_domain_weekly' => 'Darempred gant ar pajennoù web dre orin (e-pad ar sizhun tremenet)', + 'by_domain_yearly' => 'Darempred gant ar pajennoù web dre orin (e-pad ar bloavezh tremenet)', + 'by_entry_page' => 'Darempred gant ar pajennoù web dre bajenn vont-tre (e-pad ar sizhun tremenet)', + 'podcast_bots' => 'Robotoù (crawlers)', + 'daily_listening_time' => 'Sammad pemdeziek ar badelezh selaou', + 'monthly_listening_time' => 'Sammad miziek ar badelezh selaou', + 'by_weekday' => 'Dre zeiz ar sizhun (e-pad an 60 devezh diwezhañ)', + 'by_hour' => 'Dre eur an devezh (e-pad an 60 devezh diwezhañ)', + 'podcast_by_bandwidth' => "Lec'hed bann implijet bemdez (e MB)", ]; diff --git a/modules/Admin/Language/br/Common.php b/modules/Admin/Language/br/Common.php index d97bcf99..cbcb76c9 100644 --- a/modules/Admin/Language/br/Common.php +++ b/modules/Admin/Language/br/Common.php @@ -9,41 +9,41 @@ 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' => 'Ya', + 'no' => 'Ket', + 'cancel' => 'Nullañ', + 'optional' => 'Diret', + 'more' => "Muioc'h", + 'no_data' => 'Roadenn ebet kavet!', + 'close' => 'Serriñ', + 'edit' => 'Kemmañ', + 'copy' => 'Eilañ', + 'copied' => 'Eilet!', + 'home' => 'Degemer', + 'explicit' => "Endalc'had evit an oadourien", + 'powered_by' => 'Lusket gant {castopod}', + 'actions' => 'Obererezhioù', + 'pageInfo' => 'Pajenn {currentPage} diwar {pageCount}', + 'go_back' => 'Mont war-gil', 'forms' => [ 'editor' => [ - 'write' => 'Write', - 'preview' => 'Preview', - 'help' => 'Powered by markdown', + 'write' => 'Skrivañ', + 'preview' => 'Alberz', + 'help' => 'Lusket gant markdown', ], 'multiSelect' => [ - 'selectText' => 'Press to select', - 'loadingText' => 'Loading…', - 'noResultsText' => 'No results found', - 'noChoicesText' => 'No choices to choose from', - 'maxItemText' => 'Cannot add more items', + 'selectText' => 'Pouezañ da ziuzañ', + 'loadingText' => 'O kargañ…', + 'noResultsText' => "Disoc'h ebet kavet", + 'noChoicesText' => "N'eus dibab ebet da ziuzañ", + 'maxItemText' => "N'haller ket ouzhpennañ elfennoù all", ], - 'upload_file' => 'Upload a file', - 'remote_url' => 'Remote URL', + 'upload_file' => 'Uskargit ur restr', + 'remote_url' => 'URL a-bell', ], 'play_episode_button' => [ - 'play' => 'Play', - 'playing' => 'Playing', + 'play' => 'Lenn', + 'playing' => 'O lenn', ], - 'size_limit' => 'Size limit: {0}.', + 'size_limit' => 'Bevenn ar vent: {0}.', ]; diff --git a/modules/Admin/Language/br/Contributor.php b/modules/Admin/Language/br/Contributor.php index 6d33ab63..637fe9f1 100644 --- a/modules/Admin/Language/br/Contributor.php +++ b/modules/Admin/Language/br/Contributor.php @@ -9,33 +9,33 @@ declare(strict_types=1); */ return [ - 'podcast_contributors' => 'Podcast contributors', + 'podcast_contributors' => 'Perzhidi ha perzhiadezed ar podkast', 'view' => "Perzh {username} e {podcastTitle}", - 'add' => 'Add contributor', - 'add_contributor' => 'Add a contributor for {0}', - 'edit_role' => 'Update role for {0}', - 'edit' => 'Edit', - 'remove' => 'Remove', + 'add' => 'Ouzhpennañ ur perzhiad pe ur berzhiadez', + 'add_contributor' => 'Ouzhpennañ ur perzhiad pe ur berzhiadez da {0}', + 'edit_role' => 'Hizivaat roll {0}', + 'edit' => 'Kemmañ', + 'remove' => 'Lemel', 'list' => [ 'username' => 'Anv implijer·ez', - 'role' => 'Role', + 'role' => 'Roll', ], 'form' => [ 'user' => 'Implijer·ez', 'user_placeholder' => 'Dibabit un implijer·ez…', - 'role' => 'Role', - 'role_placeholder' => 'Select its role…', - 'submit_add' => 'Add contributor', - 'submit_edit' => 'Update role', + 'role' => 'Roll', + 'role_placeholder' => 'Dibabit e·he roll…', + 'submit_add' => 'Ouzhpennañ ur perzhiad pe ur berzhiadez', + 'submit_edit' => 'Hizivaat ar roll', ], 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'podcast_admin' => 'Merour podkastoù', ], 'messages' => [ - 'removeOwnerError' => "You can't remove the podcast owner!", + 'removeOwnerError' => "Ne c'hellit ket lemel perc'henn ar podkast!", 'removeSuccess' => 'Lamet ho peus {username} diouzh {podcastTitle} gant berzh', 'alreadyAddedError' => - "The contributor you're trying to add has already been added!", + "Ar perzhiad pe ar berzhiadez emaoc'h o klask ouzhpennañ zo bet ouzhpennet dija!", ], ]; diff --git a/modules/Admin/Language/br/Countries.php b/modules/Admin/Language/br/Countries.php index 4cd5d9c8..c7c3bbca 100644 --- a/modules/Admin/Language/br/Countries.php +++ b/modules/Admin/Language/br/Countries.php @@ -12,253 +12,253 @@ declare(strict_types=1); return [ 'AD' => 'Andorra', - 'AE' => 'United Arab Emirates', - 'AF' => 'Afghanistan', - 'AG' => 'Antigua and Barbuda', + 'AE' => 'Emirelezhioù-Arab-Unanet', + 'AF' => 'Afganistan', + 'AG' => 'Antigua ha Barbuda', 'AI' => 'Anguilla', - 'AL' => 'Albania', + 'AL' => 'Albani', 'AM' => 'Armenia', 'AO' => 'Angola', - 'AQ' => 'Antarctica', - 'AR' => 'Argentina', - 'AS' => 'American Samoa', - 'AT' => 'Austria', - 'AU' => 'Australia', + 'AQ' => 'Antarktik', + 'AR' => "Arc'hantin", + 'AS' => 'Samoa Amerikan', + 'AT' => 'Aostria', + 'AU' => 'Aostralia', 'AW' => 'Aruba', - 'AX' => 'Åland Islands', - 'AZ' => 'Azerbaijan', - 'BA' => 'Bosnia and Herzegovina', + 'AX' => 'Åland, Inizi', + 'AZ' => 'Azerbaidjan', + 'BA' => 'Bosnia ha Herzegovina', 'BB' => 'Barbados', 'BD' => 'Bangladesh', - 'BE' => 'Belgium', + 'BE' => 'Belgia', 'BF' => 'Burkina Faso', - 'BG' => 'Bulgaria', - 'BH' => 'Bahrain', + 'BG' => 'Bulgari', + 'BH' => 'Bahrein', 'BI' => 'Burundi', 'BJ' => 'Benin', - 'BL' => 'Saint Barthélemy', + 'BL' => 'Sant-Barteleme', 'BM' => 'Bermuda', 'BN' => 'Brunei Darussalam', - 'BO' => 'Bolivia, Plurinational State of', - 'BQ' => 'Bonaire, Sint Eustatius and Saba', + 'BO' => 'Bolivia, Stad Liesvroadel', + 'BQ' => 'Bonaire, Sint Eustatius ha Saba', 'BR' => 'Brazil', 'BS' => 'Bahamas', - 'BT' => 'Bhutan', - 'BV' => 'Bouvet Island', + 'BT' => 'Bhoutan', + 'BV' => 'Bouvet, Inez', 'BW' => 'Botswana', 'BY' => 'Belarus', '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' => 'Cocos (Keeleng), Inizi', + 'CD' => 'Republik Demokratel Kongo', + 'CF' => 'Kreizafrikan, Republik', + 'CG' => 'Kongo', + 'CH' => 'Suis', + 'CI' => "Aod an Olifant", + 'CK' => 'Inizi Cook', 'CL' => 'Chile', - 'CM' => 'Cameroon', - 'CN' => 'China', - 'CO' => 'Colombia', + 'CM' => 'Kameroun', + 'CN' => 'Sina', + 'CO' => 'Kolombia', 'CR' => 'Costa Rica', - 'CU' => 'Cuba', - 'CV' => 'Cape Verde', - 'CW' => 'Curaçao', - 'CX' => 'Christmas Island', - 'CY' => 'Cyprus', - 'CZ' => 'Czech Republic', - 'DE' => 'Germany', + 'CU' => 'Kuba', + 'CV' => 'Kab Glas', + 'CW' => 'Kòrsou', + 'CX' => 'Christmas, Enez', + 'CY' => 'Kiprenez', + 'CZ' => 'Tchekia', + 'DE' => 'Alamagn', 'DJ' => 'Djibouti', - 'DK' => 'Denmark', - 'DM' => 'Dominica', - 'DO' => 'Dominican Republic', - 'DZ' => 'Algeria', + 'DK' => 'Danmark', + 'DM' => 'Dominika', + 'DO' => 'Dominikan, Republik', + 'DZ' => 'Aljeria', 'EC' => 'Ecuador', 'EE' => 'Estonia', - 'EG' => 'Egypt', - 'EH' => 'Western Sahara', + 'EG' => 'Egipt', + 'EH' => "Sahara ar C'hornôg", 'ER' => 'Eritrea', - 'ES' => 'Spain', - 'ET' => 'Ethiopia', + 'ES' => 'Spagn', + 'ET' => 'Etiopia', 'FI' => 'Finland', - 'FJ' => 'Fiji', - 'FK' => 'Falkland Islands (Malvinas)', - 'FM' => 'Micronesia, Federated States of', - 'FO' => 'Faroe Islands', - 'FR' => 'France', + 'FJ' => 'Fidji', + 'FK' => 'Maloù, Inizi (Malvinas)', + 'FM' => 'Mikronezia, Stadoù Kevreet', + 'FO' => 'Faroe, Inizi', + 'FR' => "Bro-C'hall", 'GA' => 'Gabon', - 'GB' => 'United Kingdom', + 'GB' => 'Rouantelezh Unanet', 'GD' => 'Grenada', - 'GE' => 'Georgia', - 'GF' => 'French Guiana', - 'GG' => 'Guernsey', + 'GE' => 'Jorjia', + 'GF' => 'Gwian', + 'GG' => 'Gwernenez', 'GH' => 'Ghana', - 'GI' => 'Gibraltar', - 'GL' => 'Greenland', + 'GI' => 'Jibraltar', + 'GL' => 'Greunland', 'GM' => 'Gambia', - 'GN' => 'Guinea', - 'GP' => 'Guadeloupe', - 'GQ' => 'Equatorial Guinea', - 'GR' => 'Greece', - 'GS' => 'South Georgia and the South Sandwich Islands', + 'GN' => 'Ginea', + 'GP' => 'Gwadeloup', + 'GQ' => 'Republik Ginea', + 'GR' => 'Gres', + 'GS' => 'Georgia ar Su hag Inizi Sandwich ar Su', 'GT' => 'Guatemala', 'GU' => 'Guam', - 'GW' => 'Guinea-Bissau', + 'GW' => 'Ginea-Bissau', 'GY' => 'Guyana', 'HK' => 'Hong Kong', - 'HM' => 'Heard Island and McDonald Islands', + 'HM' => 'Heard ha McDonald, Inizi', 'HN' => 'Honduras', - 'HR' => 'Croatia', + 'HR' => 'Koatia', 'HT' => 'Haiti', - 'HU' => 'Hungary', - 'ID' => 'Indonesia', - 'IE' => 'Ireland', + 'HU' => 'Hungaria', + 'ID' => 'Indonezia', + 'IE' => 'Iwerzhon', 'IL' => 'Israel', - 'IM' => 'Isle of Man', - 'IN' => 'India', + 'IM' => 'Enez-Vanav', + 'IN' => 'Indez', 'IO' => 'British Indian Ocean Territory', - 'IQ' => 'Iraq', - 'IR' => 'Iran, Islamic Republic of', - 'IS' => 'Iceland', - 'IT' => 'Italy', - 'JE' => 'Jersey', - 'JM' => 'Jamaica', - 'JO' => 'Jordan', - 'JP' => 'Japan', + 'IQ' => 'Irak', + 'IR' => 'Iran', + 'IS' => 'Island', + 'IT' => 'Italia', + 'JE' => 'Jerzenez', + 'JM' => 'Jamaika', + 'JO' => 'Jordani', + 'JP' => 'Japon', 'KE' => 'Kenya', - 'KG' => 'Kyrgyzstan', - 'KH' => 'Cambodia', + 'KG' => 'Kirgizstan', + 'KH' => 'Kambodj', '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', + 'KM' => 'Komor', + 'KN' => 'Sant Kitts ha Nevis', + 'KP' => "Korea, Republik Demokratel ha Poblel", + 'KR' => 'Korea, Republik', + 'KW' => 'Kowait', + 'KY' => 'Cayman, Inizi', + 'KZ' => 'Kazakstan', 'LA' => "Lao People's Democratic Republic", - 'LB' => 'Lebanon', - 'LC' => 'Saint Lucia', + 'LB' => 'Liban', + 'LC' => 'Santez-Lusia', 'LI' => 'Liechtenstein', 'LK' => 'Sri Lanka', 'LR' => 'Liberia', 'LS' => 'Lesotho', - 'LT' => 'Lithuania', - 'LU' => 'Luxembourg', + 'LT' => 'Lituania', + 'LU' => 'Luksembourg', 'LV' => 'Latvia', - 'LY' => 'Libya', - 'MA' => 'Morocco', - 'MC' => 'Monaco', - 'MD' => 'Moldova, Republic of', + 'LY' => 'Libia', + 'MA' => 'Maroko', + 'MC' => 'Monako', + 'MD' => 'Moldova, Republik', '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, Inizi', + 'MK' => 'Makedonia, Republik', 'ML' => 'Mali', 'MM' => 'Myanmar', 'MN' => 'Mongolia', - 'MO' => 'Macao', - 'MP' => 'Northern Mariana Islands', - 'MQ' => 'Martinique', - 'MR' => 'Mauritania', + 'MO' => 'Makao', + 'MP' => 'Mariana an Norzh, Inizi', + 'MQ' => 'Martinik', + 'MR' => 'Mauretania', 'MS' => 'Montserrat', 'MT' => 'Malta', - 'MU' => 'Mauritius', - 'MV' => 'Maldives', + 'MU' => 'Moris', + 'MV' => 'Maldivez', 'MW' => 'Malawi', - 'MX' => 'Mexico', + 'MX' => "Mec'hiko", 'MY' => 'Malaysia', - 'MZ' => 'Mozambique', - 'N/A' => 'Not Applicable (local IP…)', + 'MZ' => 'Mozambik', + 'N/A' => "E-maez danvez (IP lec'hel…)", 'NA' => 'Namibia', - 'NC' => 'New Caledonia', + 'NC' => 'Kaledonia-Nevez', 'NE' => 'Niger', - 'NF' => 'Norfolk Island', - 'NG' => 'Nigeria', + 'NF' => 'Norfolk, Enez', + 'NG' => 'Nijeria', 'NI' => 'Nicaragua', - 'NL' => 'Netherlands', - 'NO' => 'Norway', + 'NL' => 'Izelvroioù', + 'NO' => 'Norvej', 'NP' => 'Nepal', 'NR' => 'Nauru', 'NU' => 'Niue', - 'NZ' => 'New Zealand', + 'NZ' => 'Zeland Nevez', 'OM' => 'Oman', 'PA' => 'Panama', - 'PE' => 'Peru', - 'PF' => 'French Polynesia', - 'PG' => 'Papua New Guinea', - 'PH' => 'Philippines', + 'PE' => 'Perou', + 'PF' => "Polinezia C'hall", + 'PG' => 'Papoua Ginea-Nevez', + 'PH' => 'Filipinez', 'PK' => 'Pakistan', - 'PL' => 'Poland', - 'PM' => 'Saint Pierre and Miquelon', - 'PN' => 'Pitcairn', + 'PL' => 'Pologn', + 'PM' => 'Sant-Pêr-ha-Mikelon', + 'PN' => 'Pitcairn, Inizi', 'PR' => 'Puerto Rico', - 'PS' => 'Palestine, State of', + 'PS' => 'Palestin', 'PT' => 'Portugal', 'PW' => 'Palau', 'PY' => 'Paraguay', - 'QA' => 'Qatar', - 'RE' => 'Réunion', - 'RO' => 'Romania', - 'RS' => 'Serbia', - 'RU' => 'Russian Federation', + 'QA' => 'Katar', + 'RE' => 'Ar Reünion', + 'RO' => 'Roumani', + 'RS' => 'Serbi', + 'RU' => 'Rusia, Kevread', 'RW' => 'Rwanda', - 'SA' => 'Saudi Arabia', - 'SB' => 'Solomon Islands', - 'SC' => 'Seychelles', - 'SD' => 'Sudan', - 'SE' => 'Sweden', - 'SG' => 'Singapore', + 'SA' => 'Arabia Saoudat', + 'SB' => 'Inizi Solomon', + 'SC' => 'Sechelez', + 'SD' => 'Soudan', + 'SE' => 'Sveden', + 'SG' => 'Singapoura', 'SH' => 'Saint Helena, Ascension and Tristan da Cunha', - 'SI' => 'Slovenia', - 'SJ' => 'Svalbard and Jan Mayen', - 'SK' => 'Slovakia', + 'SI' => 'Sloveni', + 'SJ' => 'Svalbard ha Jan Mayen', + 'SK' => 'Slovaki', 'SL' => 'Sierra Leone', 'SM' => 'San Marino', 'SN' => 'Senegal', 'SO' => 'Somalia', - 'SR' => 'Suriname', - 'SS' => 'South Sudan', - 'ST' => 'Sao Tome and Principe', + 'SR' => 'Surinam', + 'SS' => 'Soudan ar Su', + 'ST' => 'São Tomé ha Príncipe', 'SV' => 'El Salvador', - 'SX' => 'Sint Maarten (Dutch part)', - 'SY' => 'Syrian Arab Republic', - 'SZ' => 'Swaziland', - 'TC' => 'Turks and Caicos Islands', - 'TD' => 'Chad', - 'TF' => 'French Southern Territories', + 'SX' => 'Sint Maarten', + 'SY' => 'Siria', + 'SZ' => 'Eswatini', + 'TC' => 'Turks ha Caicos, Inizi', + 'TD' => 'Tchad', + 'TF' => 'Douaroù Aostral hag Antarktikel Frañs', 'TG' => 'Togo', 'TH' => 'Thailand', - 'TJ' => 'Tajikistan', + 'TJ' => 'Tadjikistan', 'TK' => 'Tokelau', - 'TL' => 'Timor-Leste', + 'TL' => 'Timor ar Reter', 'TM' => 'Turkmenistan', - 'TN' => 'Tunisia', + 'TN' => 'Tunizia', 'TO' => 'Tonga', - 'TR' => 'Turkey', - 'TT' => 'Trinidad and Tobago', + 'TR' => 'Turkia', + 'TT' => 'Trinidad ha Tobago', 'TV' => 'Tuvalu', - 'TW' => 'Taiwan, Province of China', - 'TZ' => 'Tanzania, United Republic of', - 'UA' => 'Ukraine', - 'UG' => 'Uganda', + 'TW' => 'Taiwan', + 'TZ' => 'Tanzania, Republik Unanet', + 'UA' => 'Ukraina', + 'UG' => 'Ouganda', 'UM' => 'United States Minor Outlying Islands', - 'US' => 'United States', + 'US' => 'Stadoù-Unanet', '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' => 'Vatikan', + 'VC' => 'Sant Visant hag an Inizi Granadinas', + 'VE' => 'Venezuela, Republik Volivarian', + 'VG' => "Inizi Gwerc'h Breizhveurat", + 'VI' => "Inizi Gwerc'h, S.U.", + 'VN' => 'Vietnam', 'VU' => 'Vanuatu', - 'WF' => 'Wallis and Futuna', + 'WF' => 'Wallis ha Futuna', 'WS' => 'Samoa', 'YE' => 'Yemen', 'YT' => 'Mayotte', - 'ZA' => 'South Africa', + 'ZA' => 'Afrika ar Su', 'ZM' => 'Zambia', 'ZW' => 'Zimbabwe', ]; diff --git a/modules/Admin/Language/br/Episode.php b/modules/Admin/Language/br/Episode.php index 5aa00984..e6b8bf40 100644 --- a/modules/Admin/Language/br/Episode.php +++ b/modules/Admin/Language/br/Episode.php @@ -9,157 +9,158 @@ declare(strict_types=1); */ return [ - 'season' => 'Season {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}', + 'season' => 'Koulzad {seasonNumber}', + 'season_abbr' => 'K{seasonNumber}', + 'number' => 'Rann {episodeNumber}', + 'number_abbr' => 'R. {episodeNumber}', + 'season_episode' => 'Koulzad {seasonNumber} rann {episodeNumber}', + 'season_episode_abbr' => 'K{seasonNumber}R{episodeNumber}', 'number_of_comments' => '{numberOfComments, plural, - one {# comment} - other {# comments} + 0 {evezhiadenn ebet} + one {# evezhiadenn} + other {# evezhiadenn} }', - 'all_podcast_episodes' => 'All podcast episodes', - 'back_to_podcast' => 'Go back to podcast', - 'edit' => 'Edit', - 'publish' => 'Publish', - 'publish_edit' => 'Edit publication', - 'unpublish' => 'Unpublish', - 'publish_error' => 'Episode is already published.', - 'publish_edit_error' => 'Episode is already published.', - 'publish_cancel_error' => 'Episode is already published.', - 'unpublish_error' => 'Episode is not published.', - 'delete' => 'Delete', - 'go_to_page' => 'Go to page', - 'create' => 'Add an episode', + 'all_podcast_episodes' => 'Holl rannoù ar podkast', + 'back_to_podcast' => "Mont d'ar podkast en-dro", + 'edit' => 'Kemmañ', + 'publish' => 'Embann', + 'publish_edit' => 'Kemmañ an embannadur', + 'unpublish' => 'Diembannañ', + 'publish_error' => 'Embannet eo bet ar rann dija.', + 'publish_edit_error' => 'Embannet eo bet ar rann dija.', + 'publish_cancel_error' => 'Embannet eo bet ar rann dija.', + 'unpublish_error' => "N'eo ket bet embannet ar rann.", + 'delete' => 'Dilemel', + 'go_to_page' => 'Gwelout ar bajenn', + 'create' => 'Ouzhpennañ ur rann', 'publication_status' => [ - 'published' => 'Published', - 'scheduled' => 'Scheduled', - 'not_published' => 'Not published', + 'published' => 'Embannet', + 'scheduled' => 'Steuñvet', + 'not_published' => 'Diembann', ], 'list' => [ - 'episode' => 'Episode', - 'visibility' => 'Visibility', - 'comments' => 'Comments', - 'actions' => 'Actions', + 'episode' => 'Rann', + 'visibility' => 'Gwelusted', + 'comments' => 'Evezhiadennoù', + 'actions' => 'Obererezhioù', ], 'messages' => [ - 'createSuccess' => 'Episode has been successfully created!', - 'editSuccess' => 'Episode has been successfully updated!', - 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'createSuccess' => 'Krouet eo bet ar rann gant berzh!', + 'editSuccess' => 'Hizivaet eo bet ar rann gant berzh!', + 'publishCancelSuccess' => 'Nullet eo bet embannadur ar rann gant berzh!', ], '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', + "Re vras eo ho restr! {0} eo ar brasder uhelañ. Dav eo deoc'h kreskaat an talvoudoù `memory_limit`, `upload_max_filesize` ha `post_max_size` en ho restr kefluniañ, a-raok adloc'hañ ho servijer web hag uskargañ ho restr.", + 'audio_file' => 'Restr aodio', + 'audio_file_hint' => 'Dibabit ur restr .mp3 pe .m4a.', + 'info_section_title' => 'Titouroù ar rann', + 'cover' => 'Golo ar rann', 'cover_hint' => - 'If you do not set a cover, the podcast cover will be used instead.', - 'cover_size_hint' => 'Cover must be squared with at least 1400px wide and tall.', - 'title' => 'Title', + "Ma n'ho peus ket kaset ur golo e vo implijet hini ar podkast en e blas.", + 'cover_size_hint' => "Ar golo a rankfe bezañ ur c'harrez 1400px e vent da nebeutañ.", + 'title' => 'Titl', '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', + "Dleout a rafe anv ar rann, sklaer ha berr. Arabat lakaat niverenn ar rann pe ar c'houlzad amañ.", + 'permalink' => 'Peurliamm', + 'season_number' => 'Koulzad', + 'episode_number' => 'Rann', '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', - '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', + 'label' => 'Doare', + 'full' => 'Klok', + 'full_hint' => 'Rann a-bezh', + 'trailer' => 'Tañvadenn', + 'trailer_hint' => 'Tennad berr evit brudañ ar podkast', + 'bonus' => 'Bonuz', + 'bonus_hint' => 'Danvez ouzhpenn ar podkast (da skouer, titouroù diwar-benn kostezioù pe atersadennoù gant an aktourien·ezed), pe bruderezh kroaziet evit ur podkast all', ], 'parental_advisory' => [ - 'label' => 'Parental advisory', - 'hint' => 'Does the episode contain explicit content?', - 'undefined' => 'undefined', - 'clean' => 'Clean', - 'explicit' => 'Explicit', + 'label' => 'Kemenn evit ar gerent', + 'hint' => "Hag ar rann-mañ a zo endalc'had ha ne zlefe ket gwelet gant bugale?", + 'undefined' => 'andermenet', + 'clean' => 'Dereat', + 'explicit' => "Endalc'had evit an oadourien", ], - 'show_notes_section_title' => 'Show notes', + 'show_notes_section_title' => 'Notennoù ar rann', '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', + "Betek 4000 arouez, sklaer ha berr. Notennoù a rann a c'hell sikour selaouerien·ezed zo kavout anezhi.", + 'description' => 'Deskrivadur', + 'description_footer' => 'Traoñ an deskrivadur', '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', + "Emañ ouzhpennet an destenn-mañ e dibenn an holl rannoù. Ul lec'h mat eo evit lakaat liammoù ho rouedadoù sokial da skouer.", + 'additional_files_section_title' => 'Restroù ouzhpenn', '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', + "Ar restroù-mañ a c'hell bezañ implijet gant savennoù all evit aesaat an traoù d'ho selaouerien·ezed.
Sellit ouzh {podcastNamespaceLink} evit muioc'h a ditouroù.", + 'location_section_title' => "Lec'h", + 'location_section_subtitle' => "Eus peseurt lec'h ez eus kaoz er rann-mañ?", + 'location_name' => "Anv pe chomlec'h al lec'h", + 'location_name_hint' => "Al lec'h-mañ a c'hell bezañ unan gwir pe unan faltaziet", + 'transcript' => 'Treuzskrivadur (istitloù)', + 'transcript_hint' => 'Aotreet e vez nemet .srt.', + 'transcript_download' => 'Pellgargañ an treuzskrivadur', + 'transcript_file' => 'Restr an treuzskrivadur (.srt)', + 'transcript_remote_url' => 'URL a-bell evit restr an treuzskrivadur', + 'transcript_file_delete' => 'Dilemel restr an treuzskrivadur', + 'chapters' => 'Chabistroù', + 'chapters_hint' => 'Dleout a ra ar restr bezañ er furmad JSON Chapters.', + 'chapters_download' => 'Pellgargañ ar chabistroù', + 'chapters_file' => 'Restr ar chabistroù', + 'chapters_remote_url' => 'URL a-bell evit restr ar chabistroù', + 'chapters_file_delete' => 'Dilemel restr ar chabistroù', + 'advanced_section_title' => "Arventennoù kempleshoc'h", '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.', + "M'ho peus ezhomm eus balizennoù RSS ha n'eus ket anezho e Castopod e c'hellit o lakaat amañ.", + 'custom_rss' => 'Balizennoù RSS personelaet evit ar rann', + 'custom_rss_hint' => 'An dra-se a vo ouzhpennet e-barzh ar valizenn ❬item❭.', 'block' => 'Ar rann-se a rankfe bezañ kuzhet diouzh an holl savennoù', 'block_hint' => - 'The episode show or hide post. If you want this episode removed from the Apple directory, toggle this on.', - 'submit_create' => 'Create episode', - 'submit_edit' => 'Save episode', + "Gwelusted ar rann. Ma fell deoc'h e vefe skarzhet ar rann eus roll Apple, gweredekait ar vaezienn-mañ.", + 'submit_create' => 'Krouiñ ar rann', + 'submit_edit' => 'Enrollañ ar rann', ], 'publish_form' => [ - 'back_to_episode_dashboard' => 'Back to episode dashboard', - 'post' => 'Your announcement post', + 'back_to_episode_dashboard' => 'Distreiñ da daolenn-stur ar rann', + 'post' => 'Ho kemennadenn vrudañ', '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', + "Skrivit ur gemennadenn evit brudañ embannadur ho rann. Skignet e vo ar gemennadenn-se d'an holl re a heuilh ac'hanoc'h war ar c'hevrebed (fediverse) ha lakaet e vo war well war pajenn ho podkast.", + 'message_placeholder' => 'Skrivit ho kemennadenn…', + 'publication_date' => 'Deiziad embannadur', 'publication_method' => [ - 'now' => 'Now', - 'schedule' => 'Schedule', + 'now' => 'Bremañ', + 'schedule' => 'Steuñviñ', ], - 'scheduled_publication_date' => 'Scheduled publication date', - 'scheduled_publication_date_clear' => 'Clear publication date', + 'scheduled_publication_date' => 'Deiziad embannadur steuñvet', + 'scheduled_publication_date_clear' => 'Skarzhañ deiziad embannadur', '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', + 'Gallout a rit steuñviñ embannadur ar rann en ur steuñviñ embannadur ar rann en dazont. Dleout a ra ar vaezienn bezañ er furmad YYYY-MM-DD HH:mm', + 'submit' => 'Embann', + 'submit_edit' => 'Kemmañ an embannadur', + 'cancel_publication' => 'Nullañ an embannadur', + 'message_warning' => "N'ho peus ket skrivet ur gemennadenn evit brudañ ho rann!", + 'message_warning_hint' => "Ouzhpennañ ur gemennadenn a lakay muioc'h a dud er jeu, ha diwar se e vo gwelet muioc'h ho rann.", + 'message_warning_submit' => 'Embann memestra', ], 'unpublish_form' => [ 'disclaimer' => - "Unpublishing the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", - 'understand' => 'I understand, I want to unpublish the episode', - 'submit' => 'Unpublish', + "Diembann ar rann a zilamo an holl gemennadennoù liammet outi ha skarzhet e vo eus lanv RSS ar podkast.", + 'understand' => 'Komprennet eo, diembann ar rann a fell din', + 'submit' => 'Diembann', ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", - 'understand' => 'I understand, I want to delete the episode', - 'submit' => 'Delete', + "Dilemel ar rann a zilamo an holl gemennadennoù liammet outi ha skarzhet e vo eus lanv RSS ar podkast.", + 'understand' => 'Komprennet eo, dilemel ar rann a fell din', + 'submit' => 'Dilemel', ], 'embed' => [ - 'title' => 'Embeddable player', + 'title' => 'Lenner enkorfet', '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', + "Dibabit ul liv evit an tem, eilit ar c'hod er golver ha pegit anezhañ war ho lec'hienn.", + 'clipboard_iframe' => 'Eilañ al lenner enkorfet er golver', + 'clipboard_url' => "Eilañ ar chomlec'h er golver", + 'dark' => 'Teñval', + 'dark-transparent' => 'Teñval treuzwelus', + 'light' => 'Sklaer', + 'light-transparent' => 'Sklaer treuzwelus', ], ]; diff --git a/modules/Admin/Language/br/EpisodeNavigation.php b/modules/Admin/Language/br/EpisodeNavigation.php index 1406e301..214e2aca 100644 --- a/modules/Admin/Language/br/EpisodeNavigation.php +++ b/modules/Admin/Language/br/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' => 'Gwelet pajenn ar rann', + 'dashboard' => 'Taolenn-stur ar rann', + 'episode-view' => 'Degemer', + 'episode-edit' => 'Kemm ar rann', + 'episode-persons-manage' => 'Merañ an emellerien·ezed', + 'embed-add' => 'Lenner enkorfet', + 'clips' => 'Tennadoù', + 'video-clips-list' => 'Tennadoù video', + 'video-clips-create' => 'Tennad video nevez', + 'soundbites-list' => 'Tennadoù son', + 'soundbites-create' => 'Tennad son nevez', ]; diff --git a/modules/Admin/Language/br/Fediverse.php b/modules/Admin/Language/br/Fediverse.php index 0e4ca66d..f93aef57 100644 --- a/modules/Admin/Language/br/Fediverse.php +++ b/modules/Admin/Language/br/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' => "N'eo ket bet kavet ar gont-se!", + 'blockActorSuccess' => 'Stanket eo bet {actor}!', + 'unblockActorSuccess' => 'Distanket eo bet an implijer·ez!', + 'blockDomainSuccess' => 'Stanket eo bet {domain}!', + 'unblockDomainSuccess' => 'Distanket eo bet {domain}!', ], - 'blocked_actors' => 'Blocked accounts', - 'blocked_domains' => 'Blocked domains', + 'blocked_actors' => 'Implijerien·ezed stanket', + 'blocked_domains' => 'Domanioù stanket', 'block_lists_form' => [ - 'handle' => 'Account handle', - 'handle_hint' => 'Input @username@domain account.', - 'domain' => 'Domain name', - 'submit' => 'Block!', + 'handle' => 'Dornell (lesanv)', + 'handle_hint' => 'Skrivit @anv@domani an implijer·ez.', + 'domain' => 'Anv domani', + 'submit' => 'Stankañ!', ], 'list' => [ - 'actor' => 'Account', - 'domain' => 'Domain name', - 'unblock' => 'Unblock', + 'actor' => 'Implijer·ez', + 'domain' => 'Anv domani', + 'unblock' => 'Distankañ', ], ]; diff --git a/modules/Admin/Language/br/Podcast.php b/modules/Admin/Language/br/Podcast.php index d9d0d11b..efccc7d7 100644 --- a/modules/Admin/Language/br/Podcast.php +++ b/modules/Admin/Language/br/Podcast.php @@ -9,55 +9,55 @@ declare(strict_types=1); */ return [ - 'all_podcasts' => 'All podcasts', - 'no_podcast' => 'No podcast found!', - 'create' => 'Create podcast', - 'import' => 'Import podcast', - 'new_episode' => 'New Episode', + 'all_podcasts' => 'An holl bodkastoù', + 'no_podcast' => "N'eo bet kavet podkast ebet!", + 'create' => 'Krouiñ ur podkast', + 'import' => 'Enporzhiañ ur podkast', + 'new_episode' => 'Rann nevez', 'view' => 'View podcast', - 'edit' => 'Edit podcast', - 'delete' => 'Delete podcast', + 'edit' => 'Kemmañ ar podkast', + 'delete' => 'Dilemel ar podkast', 'see_episodes' => 'See episodes', 'see_contributors' => 'See contributors', - 'go_to_page' => 'Go to page', - 'latest_episodes' => 'Latest episodes', - 'see_all_episodes' => 'See all episodes', + 'go_to_page' => 'Gwelout ar bajenn', + 'latest_episodes' => 'Rannoù diwezhañ', + 'see_all_episodes' => 'Gwelout an holl rannoù', 'messages' => [ - 'createSuccess' => 'Podcast has been successfully created!', - 'editSuccess' => 'Podcast has been successfully updated!', - 'importSuccess' => 'Podcast has been successfully imported!', + 'createSuccess' => 'Krouet eo bet ar podkast gant berzh!', + 'editSuccess' => 'Hizivaet eo bet ar podkast gant berzh!', + 'importSuccess' => 'Enporzhet eo bet ar podkast gant berzh!', ], 'form' => [ 'identity_section_title' => 'Podcast identity', 'identity_section_subtitle' => 'These fields allow you to get noticed.', - 'cover' => 'Podcast cover', + 'cover' => 'Golo ar podkast', 'cover_size_hint' => 'Cover must be squared with at least 1400px wide and tall.', 'banner' => 'Podcast banner', 'banner_size_hint' => 'Banner must have a 3:1 ratio with at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', - 'title' => 'Title', + 'title' => 'Titl', 'handle' => 'Handle', 'handle_hint' => 'Used to identify the podcast. Uppercase, lowercase, numbers and underscores are accepted.', 'type' => [ - 'label' => 'Type', + 'label' => 'Doare', '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.', ], - 'description' => 'Description', - 'classification_section_title' => 'Classification', + 'description' => 'Deskrivadur', + 'classification_section_title' => 'Rummatadur', 'classification_section_subtitle' => 'These fields will impact your audience and competition.', - 'language' => 'Language', + 'language' => 'Yezh', 'category' => 'Category', 'category_placeholder' => 'Select a category…', 'other_categories' => 'Other categories', 'parental_advisory' => [ - 'label' => 'Parental advisory', + 'label' => 'Kemenn evit ar gerent', 'hint' => 'Does it contain explicit content?', - 'undefined' => 'undefined', + 'undefined' => 'andermenet', 'clean' => 'Clean', 'explicit' => 'Explicit', ], diff --git a/modules/Admin/Language/el/Charts.php b/modules/Admin/Language/el/Charts.php index d9a75a1d..6e3568bf 100644 --- a/modules/Admin/Language/el/Charts.php +++ b/modules/Admin/Language/el/Charts.php @@ -9,30 +9,30 @@ 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' => 'Λήψεις επεισοδίων ανά υπηρεσία (για την προηγούμενη εβδομάδα)', + 'by_player_weekly' => 'Οι λήψεις επεισοδίων (για την προηγούμενη εβδομάδα)', + 'by_player_yearly' => 'Οι λήψεις επεισοδίων (για τo προηγούμενο έτος)', + 'by_device_weekly' => 'Λήψεις επεισοδίων ανά συσκευή (για την προηγούμενη εβδομάδα)', + 'by_os_weekly' => 'Οι λήψεις επεισοδίων ανά λειτουργικό σύστημα (για την προηγούμενη εβδομάδα)', + 'podcast_by_region' => 'Λήψεις επεισοδίων ανά περιοχή (για την προηγούμενη εβδομάδα)', + 'unique_daily_listeners' => 'Καθημερινά μοναδικοί ακροατές', + 'unique_monthly_listeners' => 'Μηνιαίοι μοναδικοί ακροατές', + 'by_browser' => 'Χρήση ιστοσελίδων από το πρόγραμμα περιήγησης (για την προηγούμενη εβδομάδα)', + 'podcast_by_day' => 'Ημερήσιες λήψεις του επισοδίου', + 'podcast_by_month' => 'Μηνιαίες λήψεις επεισοδίων', + 'episode_by_day' => 'Ημερήσιες λήψεις επισοδείου (πρώτες 60 ημέρες)', + 'episode_by_month' => 'Μηνιαίες λήψεις επεισοδίων', '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)', - '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)', + '5 τελευταίες λήψεις επεισοδίων (κατά τις πρώτες 60 ημέρες τους)', + 'by_country_weekly' => 'Λήψεις επεισοδίων ανά χώρα (για την προηγούμενη εβδομάδα)', + 'by_country_yearly' => 'Λήψεις επεισοδίων ανά χώρα (για το προηγούμενο έτος)', + 'by_domain_weekly' => 'Επισκέψεις ιστοσελίδας ανά πηγή (για την προηγούμενη εβδομάδα)', + 'by_domain_yearly' => 'Επισκέψεις ιστοσελίδας ανά πηγή (για το προηγούμενο έτος)', + 'by_entry_page' => 'Επισκέψεις ιστοσελίδων ανά σελίδα προορισμού (για την προηγούμενη εβδομάδα)', + 'podcast_bots' => 'Bots (Crawlers)', + 'daily_listening_time' => 'Ημερήσιος αθροιστικός χρόνος ακρόασης', + 'monthly_listening_time' => 'Μηνιαίος αθροιστικός χρόνος ακρόασης', + 'by_weekday' => 'Την ημέρα της εβδομάδας (για τις τελευταίες 60 ημέρες)', + 'by_hour' => 'Κατά την ώρα της ημέρας (για τις τελευταίες 60 ημέρες)', + 'podcast_by_bandwidth' => 'Ημερήσιο χρησιμοποιούμενο bandwidth (σε MB)', ]; diff --git a/modules/Admin/Language/el/Common.php b/modules/Admin/Language/el/Common.php index d97bcf99..e19b3e73 100644 --- a/modules/Admin/Language/el/Common.php +++ b/modules/Admin/Language/el/Common.php @@ -9,41 +9,41 @@ 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' => 'Ναι', + 'no' => 'Όχι', + 'cancel' => 'Ακύρωση', + 'optional' => 'Προαιρετικό', + 'more' => 'Περισσότερα', + 'no_data' => 'Δεν βρέθηκαν δεδομένα!', + 'close' => 'Κλείσιμο', + 'edit' => 'Επεξεργασία', + 'copy' => 'Αντιγραφή', + 'copied' => 'Αντιγράφηκε!', + 'home' => 'Αρχική σελίδα', + 'explicit' => 'Άσεμνο περιεχόμενο', + 'powered_by' => 'Με την υποστήριξη του {castopod}', + 'actions' => 'Ενέργειες', + 'pageInfo' => 'Σελίδα {currentPage} από {pageCount}', + 'go_back' => 'Επιστροφή', 'forms' => [ 'editor' => [ - 'write' => 'Write', - 'preview' => 'Preview', - 'help' => 'Powered by markdown', + 'write' => 'Εγγραφή', + 'preview' => 'Προεπισκόπηση', + 'help' => 'Με την υποστήριξη του markdown επεξεραστή', ], 'multiSelect' => [ - 'selectText' => 'Press to select', - 'loadingText' => 'Loading…', - 'noResultsText' => 'No results found', - 'noChoicesText' => 'No choices to choose from', - 'maxItemText' => 'Cannot add more items', + 'selectText' => 'Πατήστε για να επιλέξετε', + 'loadingText' => 'Φόρτωση σε εξέλιξη…', + 'noResultsText' => 'Δε βρέθηκαν αποτελέσματα', + 'noChoicesText' => 'Δεν υπάρχουν επιλογές επιλογής από', + 'maxItemText' => 'Αδυναμία προσθήκης περισσότερων αντικειμένων', ], - 'upload_file' => 'Upload a file', - 'remote_url' => 'Remote URL', + 'upload_file' => 'Μεταφορτώστε ένα αρχείο', + 'remote_url' => 'Απομακρυσμένη διεύθυνση URL', ], 'play_episode_button' => [ - 'play' => 'Play', - 'playing' => 'Playing', + 'play' => 'Αναπαραγωγή', + 'playing' => 'Αναπαράγεται', ], - 'size_limit' => 'Size limit: {0}.', + 'size_limit' => 'Όριο μεγέθους: {0}.', ]; diff --git a/modules/Admin/Language/el/Contributor.php b/modules/Admin/Language/el/Contributor.php index d0f3b93d..132d9abb 100644 --- a/modules/Admin/Language/el/Contributor.php +++ b/modules/Admin/Language/el/Contributor.php @@ -9,33 +9,33 @@ declare(strict_types=1); */ return [ - 'podcast_contributors' => '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', + 'podcast_contributors' => 'Συντελεστές Podcast', + 'view' => "Ο χρήστης {username} συνείσφερε στο {podcastTitle}", + 'add' => 'Προσθήκη συντελεστή', + 'add_contributor' => 'Προσθέστε έναν συνεισφέροντα για {0}', + 'edit_role' => 'Ενημέρωση ρόλου για {0}', + 'edit' => 'Επεξεργασία', + 'remove' => 'Διαγραφή', 'list' => [ - 'username' => 'Username', - 'role' => 'Role', + 'username' => 'Όνομα Χρήστη', + 'role' => 'Ρόλος', ], 'form' => [ - 'user' => 'User', - 'user_placeholder' => 'Select a user…', - 'role' => 'Role', - 'role_placeholder' => 'Select its role…', - 'submit_add' => 'Add contributor', - 'submit_edit' => 'Update role', + 'user' => 'Χρήστης', + 'user_placeholder' => 'Επιλέξτε χρήστη…', + 'role' => 'Ρόλος', + 'role_placeholder' => 'Επιλέξτε το ρόλο του χρήστη…', + 'submit_add' => 'Προσθήκη συντελεστή', + 'submit_edit' => 'Ενημέρωση ρόλου', ], 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'podcast_admin' => 'Διαχειριστής Podcast', ], 'messages' => [ - 'removeOwnerError' => "You can't remove the podcast owner!", + 'removeOwnerError' => "Δεν μπορείτε να καταργήσετε τον ιδιοκτήτη podcast!", 'removeSuccess' => - 'You have successfully removed {username} from {podcastTitle}', + 'Έχετε αφαιρέσει με επιτυχία τον χρήστη {username} από το {podcastTitle}', 'alreadyAddedError' => - "The contributor you're trying to add has already been added!", + "Ο συνεισφέροντας που προσπαθείτε να προσθέσετε έχει ήδη προστεθεί!", ], ]; diff --git a/modules/Admin/Language/el/Countries.php b/modules/Admin/Language/el/Countries.php index 4cd5d9c8..76a33e3e 100644 --- a/modules/Admin/Language/el/Countries.php +++ b/modules/Admin/Language/el/Countries.php @@ -11,254 +11,254 @@ declare(strict_types=1); */ return [ - 'AD' => 'Andorra', - 'AE' => 'United Arab Emirates', - 'AF' => 'Afghanistan', - 'AG' => 'Antigua and Barbuda', - 'AI' => 'Anguilla', - 'AL' => 'Albania', - 'AM' => 'Armenia', - 'AO' => 'Angola', - 'AQ' => 'Antarctica', - 'AR' => 'Argentina', - 'AS' => 'American Samoa', - 'AT' => 'Austria', - 'AU' => 'Australia', - 'AW' => 'Aruba', - 'AX' => 'Åland Islands', - 'AZ' => 'Azerbaijan', - 'BA' => 'Bosnia and Herzegovina', - 'BB' => 'Barbados', - 'BD' => 'Bangladesh', - 'BE' => 'Belgium', - 'BF' => 'Burkina Faso', - 'BG' => 'Bulgaria', - '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', - 'BS' => 'Bahamas', - 'BT' => 'Bhutan', - 'BV' => 'Bouvet Island', - 'BW' => 'Botswana', - 'BY' => 'Belarus', - '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', - 'CN' => 'China', - 'CO' => 'Colombia', - 'CR' => 'Costa Rica', - 'CU' => 'Cuba', - 'CV' => 'Cape Verde', - 'CW' => 'Curaçao', - 'CX' => 'Christmas Island', - 'CY' => 'Cyprus', - 'CZ' => 'Czech Republic', - 'DE' => 'Germany', - 'DJ' => 'Djibouti', - 'DK' => 'Denmark', - 'DM' => 'Dominica', - 'DO' => 'Dominican Republic', - 'DZ' => 'Algeria', - 'EC' => 'Ecuador', - 'EE' => 'Estonia', - 'EG' => 'Egypt', - 'EH' => 'Western Sahara', - 'ER' => 'Eritrea', - 'ES' => 'Spain', - 'ET' => 'Ethiopia', - 'FI' => 'Finland', - 'FJ' => 'Fiji', - 'FK' => 'Falkland Islands (Malvinas)', - 'FM' => 'Micronesia, Federated States of', - 'FO' => 'Faroe Islands', - 'FR' => 'France', - 'GA' => 'Gabon', - 'GB' => 'United Kingdom', - 'GD' => 'Grenada', - 'GE' => 'Georgia', - 'GF' => 'French Guiana', - 'GG' => 'Guernsey', - 'GH' => 'Ghana', - 'GI' => 'Gibraltar', - 'GL' => 'Greenland', - 'GM' => 'Gambia', - 'GN' => 'Guinea', - 'GP' => 'Guadeloupe', - 'GQ' => 'Equatorial Guinea', - 'GR' => 'Greece', - 'GS' => 'South Georgia and the South Sandwich Islands', - 'GT' => 'Guatemala', - 'GU' => 'Guam', - 'GW' => 'Guinea-Bissau', - 'GY' => 'Guyana', - 'HK' => 'Hong Kong', - 'HM' => 'Heard Island and McDonald Islands', - 'HN' => 'Honduras', - 'HR' => 'Croatia', - 'HT' => 'Haiti', - 'HU' => 'Hungary', - 'ID' => 'Indonesia', - 'IE' => 'Ireland', - 'IL' => 'Israel', - 'IM' => 'Isle of Man', - 'IN' => 'India', - 'IO' => 'British Indian Ocean Territory', - 'IQ' => 'Iraq', - 'IR' => 'Iran, Islamic Republic of', - 'IS' => 'Iceland', - 'IT' => 'Italy', - 'JE' => 'Jersey', - 'JM' => 'Jamaica', - 'JO' => 'Jordan', - 'JP' => 'Japan', - 'KE' => 'Kenya', - 'KG' => 'Kyrgyzstan', - 'KH' => 'Cambodia', - '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", - 'LB' => 'Lebanon', - 'LC' => 'Saint Lucia', - 'LI' => 'Liechtenstein', - 'LK' => 'Sri Lanka', - 'LR' => 'Liberia', - 'LS' => 'Lesotho', - 'LT' => 'Lithuania', - 'LU' => 'Luxembourg', - 'LV' => 'Latvia', - 'LY' => 'Libya', - 'MA' => 'Morocco', - 'MC' => 'Monaco', - 'MD' => 'Moldova, Republic of', - 'ME' => 'Montenegro', - 'MF' => 'Saint Martin (French part)', - 'MG' => 'Madagascar', - 'MH' => 'Marshall Islands', - 'MK' => 'Macedonia, the Former Yugoslav Republic of', - 'ML' => 'Mali', - 'MM' => 'Myanmar', - 'MN' => 'Mongolia', - 'MO' => 'Macao', - 'MP' => 'Northern Mariana Islands', - 'MQ' => 'Martinique', - 'MR' => 'Mauritania', - 'MS' => 'Montserrat', - 'MT' => 'Malta', - 'MU' => 'Mauritius', - 'MV' => 'Maldives', - 'MW' => 'Malawi', - 'MX' => 'Mexico', - 'MY' => 'Malaysia', - 'MZ' => 'Mozambique', - 'N/A' => 'Not Applicable (local IP…)', - 'NA' => 'Namibia', - 'NC' => 'New Caledonia', - 'NE' => 'Niger', - 'NF' => 'Norfolk Island', - 'NG' => 'Nigeria', - 'NI' => 'Nicaragua', - 'NL' => 'Netherlands', - 'NO' => 'Norway', - 'NP' => 'Nepal', - 'NR' => 'Nauru', - 'NU' => 'Niue', - 'NZ' => 'New Zealand', - 'OM' => 'Oman', - 'PA' => 'Panama', - 'PE' => 'Peru', - 'PF' => 'French Polynesia', - 'PG' => 'Papua New Guinea', - 'PH' => 'Philippines', - 'PK' => 'Pakistan', - 'PL' => 'Poland', - 'PM' => 'Saint Pierre and Miquelon', - 'PN' => 'Pitcairn', - 'PR' => 'Puerto Rico', - 'PS' => 'Palestine, State of', - 'PT' => 'Portugal', - 'PW' => 'Palau', - 'PY' => 'Paraguay', - 'QA' => 'Qatar', - 'RE' => 'Réunion', - 'RO' => 'Romania', - 'RS' => 'Serbia', - 'RU' => 'Russian Federation', - 'RW' => 'Rwanda', - 'SA' => 'Saudi Arabia', - 'SB' => 'Solomon Islands', - 'SC' => 'Seychelles', - 'SD' => 'Sudan', - 'SE' => 'Sweden', - 'SG' => 'Singapore', - 'SH' => 'Saint Helena, Ascension and Tristan da Cunha', - 'SI' => 'Slovenia', - 'SJ' => 'Svalbard and Jan Mayen', - 'SK' => 'Slovakia', - 'SL' => 'Sierra Leone', - 'SM' => 'San Marino', - 'SN' => 'Senegal', - 'SO' => 'Somalia', - 'SR' => 'Suriname', - 'SS' => 'South Sudan', - 'ST' => 'Sao Tome and Principe', - 'SV' => 'El Salvador', - 'SX' => 'Sint Maarten (Dutch part)', - 'SY' => 'Syrian Arab Republic', - 'SZ' => 'Swaziland', - 'TC' => 'Turks and Caicos Islands', - 'TD' => 'Chad', - 'TF' => 'French Southern Territories', - 'TG' => 'Togo', - 'TH' => 'Thailand', - 'TJ' => 'Tajikistan', - 'TK' => 'Tokelau', - 'TL' => 'Timor-Leste', - 'TM' => 'Turkmenistan', - 'TN' => 'Tunisia', - 'TO' => 'Tonga', - 'TR' => 'Turkey', - 'TT' => 'Trinidad and Tobago', - 'TV' => 'Tuvalu', - 'TW' => 'Taiwan, Province of China', - 'TZ' => 'Tanzania, United Republic of', - 'UA' => 'Ukraine', - 'UG' => 'Uganda', - 'UM' => 'United States Minor Outlying Islands', - 'US' => 'United States', - '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', - 'VU' => 'Vanuatu', - 'WF' => 'Wallis and Futuna', - 'WS' => 'Samoa', - 'YE' => 'Yemen', - 'YT' => 'Mayotte', - 'ZA' => 'South Africa', - 'ZM' => 'Zambia', - 'ZW' => 'Zimbabwe', + 'AD' => 'Ανδόρα', + 'AE' => 'Ηνωμένα Αραβικά Εμιράτα', + 'AF' => 'Αφγανιστάν', + 'AG' => 'Αντίγκουα και Μπαρπούντα', + 'AI' => 'Ανγκουΐλα', + 'AL' => 'Αλβανία', + 'AM' => 'Αρμενία', + 'AO' => 'Αγκόλα', + 'AQ' => 'Ανταρκτική', + 'AR' => 'Αργεντινή', + 'AS' => 'Αμερικανικές Σαμόα', + 'AT' => 'Αυστρία', + 'AU' => 'Αυστραλία', + 'AW' => 'Αρούμπα', + 'AX' => 'Νήσοι Άαλαντ', + 'AZ' => 'Αζερμπαϊτζάν', + 'BA' => 'Βοσνία Ερζεγοβίνη', + 'BB' => 'Μπαρμπάντος', + 'BD' => 'Μπανγκλαντές', + 'BE' => 'Βέλγιο', + 'BF' => 'Μπουρκίνα Φάσο', + 'BG' => 'Βουλγαρία', + 'BH' => 'Μπαχρέιν', + 'BI' => 'Μπουρουντί', + 'BJ' => 'Μπενίν', + 'BL' => 'Άγιος Βαρθολομαίος', + 'BM' => 'Βερμούδες', + 'BN' => 'Μπρουνέι', + 'BO' => 'Πολυεθνικό Κράτος της Βολιβίας', + 'BQ' => 'Μπονέρ, Άγιος Ευστάθιος και Σάμπα', + 'BR' => 'Βραζιλία', + 'BS' => 'Μπαχάμες', + 'BT' => 'Μπουτάν', + 'BV' => 'Νήσος Μπουβέ', + 'BW' => 'Μποτσουάνα', + 'BY' => 'Λευκορωσία', + 'BZ' => 'Μπελίζ', + 'CA' => 'Καναδάς', + 'CC' => 'Νησιά Κόκος (Κήλινγκ)', + 'CD' => 'Λαϊκή Δημοκρατία του Κονγκό', + 'CF' => 'Δημοκρατία Κεντρικής Αφρικής', + 'CG' => 'Κονγκό', + 'CH' => 'Ελβετία', + 'CI' => "Ακτή του Ελεφαντοστού", + 'CK' => 'Νήσοι Κουκ', + 'CL' => 'Χιλή', + 'CM' => 'Καμερούν', + 'CN' => 'Κίνα', + 'CO' => 'Κολομβία', + 'CR' => 'Κόστα Ρίκα', + 'CU' => 'Κούβα', + 'CV' => 'Πράσινο Ακρωτήριο', + 'CW' => 'Κουρασάο', + 'CX' => 'Νήσος Χριστουγέννων', + 'CY' => 'Κύπρος', + 'CZ' => 'Δημοκρατία της Τσεχίας', + 'DE' => 'Γερμανία', + 'DJ' => 'Τζιμπουτί', + 'DK' => 'Δανία', + 'DM' => 'Ντομίνικα', + 'DO' => 'Δομινικανή Δημοκρατία', + 'DZ' => 'Αλγερία', + 'EC' => 'Εκουαδόρ', + 'EE' => 'Εσθονία', + 'EG' => 'Αίγυπτος', + 'EH' => 'Δυτική Σαχάρα', + 'ER' => 'Ερυθραία', + 'ES' => 'Ισπανία', + 'ET' => 'Αιθιοπία', + 'FI' => 'Φινλανδία', + 'FJ' => 'Φίτζι', + 'FK' => 'Νήσοι Φώκλαντ (Μαλβίνας)', + 'FM' => 'Ομοσπονδιακές Πολιτείες της Μικρονησίας', + 'FO' => 'Νήσοι Φερόες', + 'FR' => 'Γαλλία', + 'GA' => 'Γκαμπόν', + 'GB' => 'Ηνωμένο Βασίλειο', + 'GD' => 'Γρενάδα', + 'GE' => 'Γεωργία', + 'GF' => 'Γαλλική Γουϊάνα', + 'GG' => 'Γκέρνσεϊ', + 'GH' => 'Γκάνα', + 'GI' => 'Γιβραλτάρ', + 'GL' => 'Γροιλανδία', + 'GM' => 'Γκάμπια', + 'GN' => 'Γουϊνέα', + 'GP' => 'Γουαδελούπη', + 'GQ' => 'Ισημερινή Γουινέα', + 'GR' => 'Ελλάδα', + 'GS' => 'Νήσοι Νότια Γεωργία και Νότιες Σάντουιτς', + 'GT' => 'Γουατεμάλα', + 'GU' => 'Γκουάμ', + 'GW' => 'Γουινέα-Μπισάου', + 'GY' => 'Γουϊάνα', + 'HK' => 'Χονγκ Κονγκ', + 'HM' => 'Νήσοι Χερντ και Μακντόναλντ', + 'HN' => 'Ονδούρα', + 'HR' => 'Κροατία', + 'HT' => 'Αϊτή', + 'HU' => 'Ουγγαρία', + 'ID' => 'Ινδονησία', + 'IE' => 'Ιρλανδία', + 'IL' => 'Ισραήλ', + 'IM' => 'Νήσος του Μαν', + 'IN' => 'Ινδία', + 'IO' => 'Βρετανικό Έδαφος του Ινδικού Ωκεανού', + 'IQ' => 'Ιράκ', + 'IR' => 'Ιράν', + 'IS' => 'Ισλανδία', + 'IT' => 'Ιταλία', + 'JE' => 'Τζέρσεϊ', + 'JM' => 'Τζαμάικα', + 'JO' => 'Ιορδανία', + 'JP' => 'Ιαπωνία', + 'KE' => 'Κένυα', + 'KG' => 'Κιργιστάν', + 'KH' => 'Καμπότζη', + 'KI' => 'Κιριμπάτι', + 'KM' => 'Κομόρες', + 'KN' => 'Σεν Κιτς και Νέβις', + 'KP' => "Λαϊκή Δημοκρατία της Κορέας", + 'KR' => 'Δημοκρατία της Κορέας', + 'KW' => 'Κουβέιτ', + 'KY' => 'Νησιά Καϋμάν', + 'KZ' => 'Καζακστάν', + 'LA' => "Λαϊκή Δημοκρατία του Λάος", + 'LB' => 'Λίβανος', + 'LC' => 'Αγία Λουκία', + 'LI' => 'Λίχτενσταϊν', + 'LK' => 'Σρι Λάνκα', + 'LR' => 'Λιβερία', + 'LS' => 'Λεσόθο', + 'LT' => 'Λιθουανία', + 'LU' => 'Λουξεμβούργο', + 'LV' => 'Λετονία', + 'LY' => 'Λιβύη', + 'MA' => 'Μαρόκο', + 'MC' => 'Μονακό', + 'MD' => 'Δημοκρατία της Μολδαβίας', + 'ME' => 'Μαυροβούνιο', + 'MF' => 'Άγιος Μαρτίνος (Γαλλικό τμήμα)', + 'MG' => 'Μαδαγασκάρη', + 'MH' => 'Νήσοι Μάρσαλ', + 'MK' => 'Βόρεια Μακεδονία, Πρώην Γιουγκοσλαβική Δημοκρατία της Μακεδονίας', + 'ML' => 'Μάλι', + 'MM' => 'Μιανμάρ', + 'MN' => 'Μογγολία', + 'MO' => 'Μακάο', + 'MP' => 'Βόρειες Μαριάνες Νήσοι', + 'MQ' => 'Μαρτινίκα', + 'MR' => 'Μαυριτανία', + 'MS' => 'Μοντσερράτ', + 'MT' => 'Μάλτα', + 'MU' => 'Μαυρίκιος', + 'MV' => 'Μαλδίβες', + 'MW' => 'Μαλάουι', + 'MX' => 'Μεξικό', + 'MY' => 'Μαλαισία', + 'MZ' => 'Μοζαμβίκη', + 'N/A' => 'Δεν ισχύει (τοπική IP…)', + 'NA' => 'Ναμίμπια', + 'NC' => 'Νέα Καληδονία', + 'NE' => 'Νιγηρία', + 'NF' => 'Νήσος Νόρφολκ', + 'NG' => 'Νιγηρία', + 'NI' => 'Νικαράγουα', + 'NL' => 'Ολλανδία', + 'NO' => 'Νορβηγία', + 'NP' => 'Νεπάλ', + 'NR' => 'Ναουρού', + 'NU' => 'Νιούε', + 'NZ' => 'Νέα Ζηλανδία', + 'OM' => 'Ομάν', + 'PA' => 'Παναμάς', + 'PE' => 'Περού', + 'PF' => 'Γαλλική Πολυνησία', + 'PG' => 'Παπούα Νέα Γουινέα', + 'PH' => 'Φιλιππίνες', + 'PK' => 'Πακιστάν', + 'PL' => 'Πολωνία', + 'PM' => 'Άγιος Πέτρος (Σεν Πιέρ) και Μικελόν', + 'PN' => 'Νήσοι Πίτκαιρν', + 'PR' => 'Πουέρτο Ρίκο', + 'PS' => 'Κράτος της Παλαιστίνης', + 'PT' => 'Πορτογαλία', + 'PW' => 'Παλάου', + 'PY' => 'Παραγουάη', + 'QA' => 'Κατάρ', + 'RE' => 'Ρεϋνιόν', + 'RO' => 'Ρουμανία', + 'RS' => 'Σερβία', + 'RU' => 'Ρωσική Ομοσπονδία', + 'RW' => 'Ρουάντα', + 'SA' => 'Σαουδική Αραβία', + 'SB' => 'Νήσοι Σολομώντος', + 'SC' => 'Σεϋχέλλες', + 'SD' => 'Σουδάν', + 'SE' => 'Σουηδία', + 'SG' => 'Σιγκαπούρη', + 'SH' => 'Αγία Ελένη, της Αναλήψεως και Τριστάν ντα Κούνια', + 'SI' => 'Σλοβενία', + 'SJ' => 'Σβάλμπαρντ και Γιαν Μαγιέν', + 'SK' => 'Σλοβακία', + 'SL' => 'Σιέρα Λεόνε', + 'SM' => 'Σαν Μαρίνο', + 'SN' => 'Σενεγάλη', + 'SO' => 'Σομαλία', + 'SR' => 'Σουρινάμ', + 'SS' => 'Νότιο Σουδάν', + 'ST' => 'Άγιος Θωμάς και Πρίγκιπας (Σάο Τομέ και Πρίντσιπε)', + 'SV' => 'Ελ Σαλβαδόρ', + 'SX' => 'Άγιος Μαρτίνος (Γερμανικό τμήμα)', + 'SY' => 'Αραβική Δημοκρατία της Συρίας', + 'SZ' => 'Σουαζιλάνδη', + 'TC' => 'Νήσοι Τερκς και Κάικος', + 'TD' => 'Τσαντ', + 'TF' => 'Γαλλικές περιοχές του νοτίου ημισφαιρίου', + 'TG' => 'Τόγκο', + 'TH' => 'Ταϊλάνδη', + 'TJ' => 'Τατζικιστάν', + 'TK' => 'Τοκελάου', + 'TL' => 'Τιμόρ-Λέστε', + 'TM' => 'Τουρκμενιστάν', + 'TN' => 'Τυνησία', + 'TO' => 'Τόνγκα', + 'TR' => 'Τουρκία', + 'TT' => 'Τρινιντάντ και Τομπάγκο', + 'TV' => 'Τουβαλού', + 'TW' => 'Ταϊβάν, Επαρχία της Κίνας', + 'TZ' => 'Ενωμένη Δημοκρατία της Τανζανίας', + 'UA' => 'Ουκρανία', + 'UG' => 'Ουγκάντα', + 'UM' => 'Απομακρυσμένες Νησίδες των Ηνωμένων Πολιτειών', + 'US' => 'Ηνωμένες Πολιτείες', + 'UY' => 'Ουρουγουάη', + 'UZ' => 'Ουζμπεκιστάν', + 'VA' => 'Αγία Έδρα (κράτος της πόλης του Βατικανού)', + 'VC' => 'Άγιος Βικέντιος και Γρεναδίνες', + 'VE' => 'Μπολιβαριανής Δημοκρατίας της Βενεζουέλας', + 'VG' => 'Βρετανικές Παρθένοι Νήσοι', + 'VI' => 'Παρθένοι Νήσοι, Η.Π.Α.', + 'VN' => 'Βιετνάμ', + 'VU' => 'Βανουάτου', + 'WF' => 'Ουώλλις και Φουτούνα', + 'WS' => 'Σαμόα', + 'YE' => 'Υεμένη', + 'YT' => 'Μαγιότ', + 'ZA' => 'Νότια Αφρική', + 'ZM' => 'Ζάμπια', + 'ZW' => 'Ζιμπάμπουε', ]; diff --git a/modules/Admin/Language/el/Episode.php b/modules/Admin/Language/el/Episode.php index 054a23c3..e90d5bb0 100644 --- a/modules/Admin/Language/el/Episode.php +++ b/modules/Admin/Language/el/Episode.php @@ -9,72 +9,72 @@ declare(strict_types=1); */ return [ - 'season' => 'Season {seasonNumber}', + 'season' => 'Σεζόν {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' => 'Επεισόδιο {episodeNumber}', + 'number_abbr' => 'Επ. {episodeNumber}', + 'season_episode' => 'Σεζόν {seasonNumber} επεισόδιο {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}', 'number_of_comments' => '{numberOfComments, plural, - one {# comment} - other {# comments} + one {# σχόλιο} + other {# σχόλεια} }', - 'all_podcast_episodes' => 'All podcast episodes', - 'back_to_podcast' => 'Go back to podcast', - 'edit' => 'Edit', - 'publish' => 'Publish', - 'publish_edit' => 'Edit publication', - 'unpublish' => 'Unpublish', - 'publish_error' => 'Episode is already published.', - 'publish_edit_error' => 'Episode is already published.', - 'publish_cancel_error' => 'Episode is already published.', - 'unpublish_error' => 'Episode is not published.', - 'delete' => 'Delete', - 'go_to_page' => 'Go to page', - 'create' => 'Add an episode', + 'all_podcast_episodes' => 'Όλα τα επεισόδια του podcast', + 'back_to_podcast' => 'Μετάβαση πίσω στο podcast', + 'edit' => 'Επεξεργασία', + 'publish' => 'Δημοσίευση', + 'publish_edit' => 'Επεξεργασία δημοσίευσης', + 'unpublish' => 'Αναίρεση δημοσίευσης', + 'publish_error' => 'Το επεισόδιο έχει ήδη δημοσιευθεί.', + 'publish_edit_error' => 'Το επεισόδιο έχει ήδη δημοσιευθεί.', + 'publish_cancel_error' => 'Το επεισόδιο έχει ήδη δημοσιευθεί.', + 'unpublish_error' => 'Το επεισόδιο δεν έχει δημοσιευθεί.', + 'delete' => 'Διαγραφή', + 'go_to_page' => 'Μετάβαση στη σελίδα', + 'create' => 'Προσθήκη επεισοδίου', 'publication_status' => [ - 'published' => 'Published', - 'scheduled' => 'Scheduled', - 'not_published' => 'Not published', + 'published' => 'Δημοσιευμένο', + 'scheduled' => 'Προγραμματισμένο', + 'not_published' => 'Δεν έχει δημοσιευτεί', ], 'list' => [ - 'episode' => 'Episode', - 'visibility' => 'Visibility', - 'comments' => 'Comments', - 'actions' => 'Actions', + 'episode' => 'Επεισόδιο', + 'visibility' => 'Ορατότητα', + 'comments' => 'Σχόλια', + 'actions' => 'Ενέργειες', ], 'messages' => [ - 'createSuccess' => 'Episode has been successfully created!', - 'editSuccess' => 'Episode has been successfully updated!', - 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'createSuccess' => 'Το επεισόδιο δημιουργήθηκε με επιτυχία!', + 'editSuccess' => 'Το επεισόδιο ενημερώθηκε με επιτυχία!', + 'publishCancelSuccess' => 'Η δημοσίευση του επεισοδίου ακυρώθηκε επιτυχώς!', ], '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', + 'Το μέγεθος του αρχείου σας είναι πολύ μεγάλο! Το μέγιστο μέγεθος είναι {0}. Αυξήστε τις τιμές `memory_limit`, `upload_max_filesize` και `post_max_size` στο αρχείο ρυθμίσεων php και έπειτα επανεκκινήστε τον διακομιστή web για να ανεβάσετε το αρχείο σας.', + 'audio_file' => 'Αρχείο ήχου', + 'audio_file_hint' => 'Επιλέξτε ένα αρχείο ήχου .mp3 ή .m4a.', + 'info_section_title' => 'Πληροφορίες επεισοδίου', + 'cover' => 'Εξώφυλλο επισοδίου', 'cover_hint' => - 'If you do not set a cover, the podcast cover will be used instead.', - 'cover_size_hint' => 'Cover must be squared with at least 1400px wide and tall.', - 'title' => 'Title', + "Εάν δεν ορίσετε ένα εξώφυλλο, το εξώφυλλο του podcast θα χρησιμοποιηθεί αντ 'αυτού.", + 'cover_size_hint' => 'Το εξώφυλλο πρέπει να είναι τουλάχιστον 1400px πλάτος και ύψος.', + 'title' => 'Τίτλος', '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', + 'Θα πρέπει να υπάρχει ένα σαφές και συνοπτικό όνομα επεισοδίου. Μην καθορίσετε εδώ το επεισόδιο ή τους αριθμούς της σεζόν.', + 'permalink' => 'Μόνιμος σύνδεσμος', + 'season_number' => 'Σεζόν', + 'episode_number' => 'Επεισόδιο', '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', - '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', + 'label' => 'Είδος', + 'full' => 'Πλήρης', + 'full_hint' => 'Πλήρες περιεχόμενο (το επεισόδιο)', + 'trailer' => 'Τρέιλερ', + 'trailer_hint' => 'Σύντομο, προωθητικό περιεχόμενο που αντιπροσωπεύει μια προεπισκόπηση της τρέχουσας εμφάνισης', + 'bonus' => 'Μπόνους', + 'bonus_hint' => 'Επιπλέον περιεχόμενο για την παράσταση (για παράδειγμα, πίσω από τις σκηνές πληροφορίες ή συνεντεύξεις με τη cast) ή δια-διαφημιστικό περιεχόμενο για μια άλλη παράσταση', ], 'parental_advisory' => [ - 'label' => 'Parental advisory', + 'label' => 'Γονικός σύμβουλος', 'hint' => 'Does the episode contain explicit content?', 'undefined' => 'undefined', 'clean' => 'Clean', @@ -137,11 +137,11 @@ 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 episode.', - 'message_warning_submit' => 'Publish anyways', + 'message_warning_submit' => 'Δημοσίευση ούτως ή άλλως', ], 'unpublish_form' => [ 'disclaimer' => - "Unpublishing the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Η κατάργηση της δημοσίευσης του επεισοδίου θα διαγράψει όλες τις δημοσιεύσεις που σχετίζονται με αυτό και θα τις αφαιρέσει από τη ροή RSS του podcast.", 'understand' => 'I understand, I want to unpublish the episode', 'submit' => 'Unpublish', ], diff --git a/modules/Admin/Language/es/Episode.php b/modules/Admin/Language/es/Episode.php index b810f271..8d161b45 100644 --- a/modules/Admin/Language/es/Episode.php +++ b/modules/Admin/Language/es/Episode.php @@ -50,15 +50,15 @@ 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.', + '¡El tamaño de tu archivo es demasiado grande! El tamaño máximo es {0}. Aumenta los valores de `memory_limit`, `upload_max_filesize` y `post_max_size` en tu archivo de configuración php y reinicia tu servidor web para subir tu archivo.', 'audio_file' => 'Archivo de audio', 'audio_file_hint' => 'Choose an .mp3 or .m4a audio file.', - 'info_section_title' => 'Episode info', + 'info_section_title' => 'Información de episodio', 'cover' => 'Episode cover', 'cover_hint' => 'If you do not set a cover, the podcast cover will be used instead.', 'cover_size_hint' => 'Cover must be squared with at least 1400px wide and tall.', - 'title' => 'Title', + 'title' => 'Título', 'title_hint' => 'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.', 'permalink' => 'Enlace permanente', @@ -123,9 +123,9 @@ return [ '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', + 'publication_date' => 'Fecha de publicación', 'publication_method' => [ - 'now' => 'Now', + 'now' => 'Ahora', 'schedule' => 'Schedule', ], 'scheduled_publication_date' => 'Scheduled publication date', @@ -137,29 +137,29 @@ return [ 'cancel_publication' => 'Cancelar publicación', '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', + 'message_warning_submit' => 'Publicar de todos modos', ], 'unpublish_form' => [ 'disclaimer' => "Unpublishing the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", - 'understand' => 'I understand, I want to unpublish the episode', - 'submit' => 'Unpublish', + 'understand' => 'Lo entiendo, quiero anular la publicación del episodio', + 'submit' => 'Anular publicación', ], 'delete_form' => [ 'disclaimer' => "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'I understand, I want to delete the episode', - 'submit' => 'Delete', + 'submit' => 'Borrar', ], 'embed' => [ 'title' => 'Embeddable player', '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', + 'clipboard_url' => 'Copiar dirección al portapapeles', + 'dark' => 'Oscuro', 'dark-transparent' => 'Dark transparent', - 'light' => 'Light', + 'light' => 'Claro', 'light-transparent' => 'Light transparent', ], ]; diff --git a/modules/Admin/Language/fr/Fediverse.php b/modules/Admin/Language/fr/Fediverse.php index c999a162..95d3a964 100644 --- a/modules/Admin/Language/fr/Fediverse.php +++ b/modules/Admin/Language/fr/Fediverse.php @@ -22,7 +22,7 @@ return [ 'handle' => 'Identifiant', 'handle_hint' => 'Saisissez l’utilisateur @nom@domaine.', 'domain' => 'Nom de domaine', - 'submit' => 'Sauvegarder les listes', + 'submit' => 'Bloquer !', ], 'list' => [ 'actor' => 'Utilisateur', diff --git a/modules/Admin/Language/nn-NO/Admin.php b/modules/Admin/Language/nn-NO/Admin.php new file mode 100644 index 00000000..2b69c697 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Admin.php @@ -0,0 +1,15 @@ + 'Styringspanel', + 'welcome_message' => 'Velkomen til styrarområdet!', + 'choose_interact' => 'Vel korleis du vil samhandla', +]; diff --git a/modules/Admin/Language/nn-NO/Breadcrumb.php b/modules/Admin/Language/nn-NO/Breadcrumb.php new file mode 100644 index 00000000..c7852453 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Breadcrumb.php @@ -0,0 +1,48 @@ + 'navigeringslenke', + config('Admin') + ->gateway => 'Heim', + 'podcasts' => 'podkastar', + 'episodes' => 'episodar', + 'contributors' => 'bidragsytarar', + 'pages' => 'sider', + 'settings' => 'innstillingar', + 'theme' => 'bunad', + 'add' => 'legg til', + 'new' => 'ny', + 'edit' => 'rediger', + 'persons' => 'personar', + 'publish' => 'legg ut', + 'publish-edit' => 'rediger publiseringa', + 'unpublish' => 'avpubliser', + 'delete' => 'slett', + 'fediverse' => 'fødiverset', + 'block-lists' => 'blokkeringslister', + 'users' => 'brukarar', + 'my-account' => 'kontoen min', + 'change-password' => 'endre passord', + 'import' => 'importer straumar', + 'platforms' => 'plattformer', + 'social' => 'sosiale nettverk', + 'funding' => 'finansiering', + 'analytics' => 'analysar', + 'locations' => 'stader', + 'webpages' => 'nettsider', + 'unique-listeners' => 'unike lyttarar', + 'players' => 'spelarar', + 'listening-time' => 'lyttetid', + 'time-periods' => 'tidsperiodar', + 'soundbites' => 'lydbetar', + 'video-clips' => 'videoklypp', + 'embed' => 'innbyggbar spelar', +]; diff --git a/modules/Admin/Language/nn-NO/Charts.php b/modules/Admin/Language/nn-NO/Charts.php new file mode 100644 index 00000000..02035e04 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Charts.php @@ -0,0 +1,38 @@ + 'Episodenedlastingar etter tenest (siste veka)', + 'by_player_weekly' => 'Episodenedlastingar etter spelar (siste veka)', + 'by_player_yearly' => 'Episodenedlastingar etter spelar (siste året)', + 'by_device_weekly' => 'Episodenedlastingar etter eining (siste veka)', + 'by_os_weekly' => 'Episodenedlastingar etter operativsystem (siste veka)', + 'podcast_by_region' => 'Episodenedlastingar etter område (siste veka)', + 'unique_daily_listeners' => 'Unike lyttarar pr. dag', + 'unique_monthly_listeners' => 'Unike lyttarar pr. månad', + 'by_browser' => 'Nettsidebruk etter nettlesar (siste veka)', + 'podcast_by_day' => 'Daglege episodenedlastingar', + 'podcast_by_month' => 'Episodenedlastingar pr. månad', + 'episode_by_day' => 'Daglege episodenedlastingar (dei fyrste 60 dagane)', + 'episode_by_month' => 'Episodenedlastingar pr. månad', + 'episodes_by_day' => + 'Nedlastingar av dei siste 5 episodane (i løpet av dei fyrste 60 dagane)', + 'by_country_weekly' => 'Episodenedlastingar etter land (siste veka)', + 'by_country_yearly' => 'Episodenedlastingar etter land (siste året)', + 'by_domain_weekly' => 'Nettsidevisingar etter kjelde (siste veka)', + 'by_domain_yearly' => 'Nettsidevisingar etter kjelde (siste året)', + 'by_entry_page' => 'Nettsidevisingar etter landingsside (siste veka)', + 'podcast_bots' => 'Botar (søkjeprogram)', + 'daily_listening_time' => 'Dagleg kumulativ lyttetid', + 'monthly_listening_time' => 'Månadleg kumulativ lyttetid', + 'by_weekday' => 'Etter vekedag (dei siste 60 dagane)', + 'by_hour' => 'Etter tid på dagen (dei siste 60 dagane)', + 'podcast_by_bandwidth' => 'Dagleg bandbreidde (i MB)', +]; diff --git a/modules/Admin/Language/nn-NO/Common.php b/modules/Admin/Language/nn-NO/Common.php new file mode 100644 index 00000000..813bb910 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Common.php @@ -0,0 +1,49 @@ + 'Ja', + 'no' => 'Nei', + 'cancel' => 'Avbryt', + 'optional' => 'Valfritt', + 'more' => 'Meir', + 'no_data' => 'Fann ingen data!', + 'close' => 'Lukk', + 'edit' => 'Rediger', + 'copy' => 'Kopier', + 'copied' => 'Kopiert!', + 'home' => 'Heim', + 'explicit' => 'Grov prat', + 'powered_by' => 'Køyrer på {castopod}', + 'actions' => 'Handlingar', + 'pageInfo' => 'Side {currentPage} av {pageCount}', + 'go_back' => 'Tilbake', + 'forms' => [ + 'editor' => [ + 'write' => 'Skriv', + 'preview' => 'Førehandsvising', + 'help' => 'Køyrer markdown', + ], + 'multiSelect' => [ + 'selectText' => 'Trykk for å velja', + 'loadingText' => 'Lastar…', + 'noResultsText' => 'Fann ingen resultat', + 'noChoicesText' => 'Ingen val å velja mellom', + 'maxItemText' => 'Kan ikkje leggja til fleire element', + ], + 'upload_file' => 'Last opp ei fil', + 'remote_url' => 'Ekstern URL-adresse', + ], + 'play_episode_button' => [ + 'play' => 'Spel', + 'playing' => 'Spelar', + ], + 'size_limit' => 'Maks storleik: {0}.', +]; diff --git a/modules/Admin/Language/nn-NO/Contributor.php b/modules/Admin/Language/nn-NO/Contributor.php new file mode 100644 index 00000000..0fe4cc66 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Contributor.php @@ -0,0 +1,41 @@ + 'Podkast-bidragsytarar', + 'view' => "{username} sitt bidrag til {podcastTitle}", + 'add' => 'Legg til bidragsytar', + 'add_contributor' => 'Legg til bidragsytar til {0}', + 'edit_role' => 'Oppdater rolla for {0}', + 'edit' => 'Rediger', + 'remove' => 'Fjern', + 'list' => [ + 'username' => 'Brukarnamn', + 'role' => 'Rolle', + ], + 'form' => [ + 'user' => 'Brukar', + 'user_placeholder' => 'Vel ein brukar…', + 'role' => 'Rolle', + 'role_placeholder' => 'Vel rolle…', + 'submit_add' => 'Legg til bidragsytar', + 'submit_edit' => 'Oppdater rolla', + ], + 'roles' => [ + 'podcast_admin' => 'Podkaststyrar', + ], + 'messages' => [ + 'removeOwnerError' => "Du kan ikkje fjerna podkast-eigaren!", + 'removeSuccess' => + 'Du har fjerna {username} frå {podcastTitle}', + 'alreadyAddedError' => + "Denne bidragsytaren er allereie lagt til!", + ], +]; diff --git a/modules/Admin/Language/nn-NO/Countries.php b/modules/Admin/Language/nn-NO/Countries.php new file mode 100644 index 00000000..451541ff --- /dev/null +++ b/modules/Admin/Language/nn-NO/Countries.php @@ -0,0 +1,264 @@ + 'Andorra', + 'AE' => 'Dei sameinte arabiske emirata', + 'AF' => 'Afghanistan', + 'AG' => 'Antigua og Barbuda', + 'AI' => 'Anguilla', + 'AL' => 'Albania', + 'AM' => 'Armenia', + 'AO' => 'Angola', + 'AQ' => 'Antarktis', + 'AR' => 'Argentina', + 'AS' => 'Amerikansk Samoa', + 'AT' => 'Austerrike', + 'AU' => 'Australia', + 'AW' => 'Aruba', + 'AX' => 'Åland', + 'AZ' => 'Aserbajdsjan', + 'BA' => 'Bosnia og Herzegovina', + 'BB' => 'Barbados', + 'BD' => 'Bangladesh', + 'BE' => 'Belgia', + 'BF' => 'Burkina Faso', + 'BG' => 'Bulgaria', + 'BH' => 'Bahrain', + 'BI' => 'Burundi', + 'BJ' => 'Benin', + 'BL' => 'Sankt Barthélemy', + 'BM' => 'Bermuda', + 'BN' => 'Brunei Darussalam', + 'BO' => 'Den fleirnasjonale staten Bolivia', + 'BQ' => 'Bonaire, Sint Eustatius og Saba', + 'BR' => 'Brasil', + 'BS' => 'Bahamas', + 'BT' => 'Bhutan', + 'BV' => 'Bouvet-øya', + 'BW' => 'Botswana', + 'BY' => 'Kviterussland', + 'BZ' => 'Belize', + 'CA' => 'Canada', + 'CC' => 'Kokosøyane (Keelingøyane)', + 'CD' => 'Den demokratiske republikken Kongo', + 'CF' => 'Den sentralafrikanske republikken', + 'CG' => 'Kongo', + 'CH' => 'Sveits', + 'CI' => "Elfenbeinskysten", + 'CK' => 'Cook-øyane', + 'CL' => 'Chile', + 'CM' => 'Kamerun', + 'CN' => 'Kina', + 'CO' => 'Colombia', + 'CR' => 'Costa Rica', + 'CU' => 'Cuba', + 'CV' => 'Kapp Verde', + 'CW' => 'Curaçao', + 'CX' => 'Christmasøya', + 'CY' => 'Kypros', + 'CZ' => 'Tsjekkia', + 'DE' => 'Tyskland', + 'DJ' => 'Djibouti', + 'DK' => 'Danmark', + 'DM' => 'Dominica', + 'DO' => 'Den dominikanske republikken', + 'DZ' => 'Algerie', + 'EC' => 'Ecuador', + 'EE' => 'Estland', + 'EG' => 'Egypt', + 'EH' => 'Vest-Sahara', + 'ER' => 'Eritrea', + 'ES' => 'Spania', + 'ET' => 'Etiopia', + 'FI' => 'Finland', + 'FJ' => 'Fiji', + 'FK' => 'Falklandsøyane (Malvinas)', + 'FM' => 'Mikronesiaføderasjonen', + 'FO' => 'Færøyane', + 'FR' => 'Frankrike', + 'GA' => 'Gabon', + 'GB' => 'Storbritannia', + 'GD' => 'Grenada', + 'GE' => 'Georgia', + 'GF' => 'Fransk Guyana', + 'GG' => 'Guernsey', + 'GH' => 'Ghana', + 'GI' => 'Gibraltar', + 'GL' => 'Grønland', + 'GM' => 'Gambia', + 'GN' => 'Guinea', + 'GP' => 'Guadeloupe', + 'GQ' => 'Ekvatorialguinea', + 'GR' => 'Hellas', + 'GS' => 'Sør-Georgia og Sør-Sandwichøyane', + 'GT' => 'Guatemala', + 'GU' => 'Guam', + 'GW' => 'Guinea-Bissau', + 'GY' => 'Guyana', + 'HK' => 'Hong Kong', + 'HM' => 'Heard- og McDonaldøyane', + 'HN' => 'Honduras', + 'HR' => 'Kroatia', + 'HT' => 'Haiti', + 'HU' => 'Ungarn', + 'ID' => 'Indonesia', + 'IE' => 'Irland', + 'IL' => 'Israel', + 'IM' => 'Man', + 'IN' => 'India', + 'IO' => 'Det britiske territoriet i Indiahavet', + 'IQ' => 'Irak', + 'IR' => 'Iran', + 'IS' => 'Island', + 'IT' => 'Italia', + 'JE' => 'Jersey', + 'JM' => 'Jamaica', + 'JO' => 'Jordan', + 'JP' => 'Japan', + 'KE' => 'Kenya', + 'KG' => 'Kirgisistan', + 'KH' => 'Kambodsja', + 'KI' => 'Kiribati', + 'KM' => 'Komorane', + 'KN' => 'Saint Kitts og Nevis', + 'KP' => "Nord-Korea", + 'KR' => 'Sør-Korea', + 'KW' => 'Kuwait', + 'KY' => 'Cayman-øyane', + 'KZ' => 'Kasakhstan', + 'LA' => "Laos", + 'LB' => 'Libanon', + 'LC' => 'Saint Lucia', + 'LI' => 'Liechtenstein', + 'LK' => 'Sri Lanka', + 'LR' => 'Liberia', + 'LS' => 'Lesotho', + 'LT' => 'Litauen', + 'LU' => 'Luxembourg', + 'LV' => 'Latvia', + 'LY' => 'Libya', + 'MA' => 'Marokko', + 'MC' => 'Monaco', + 'MD' => 'Moldova', + 'ME' => 'Montenegro', + 'MF' => 'Saint Martin (fransk del)', + 'MG' => 'Madagaskar', + 'MH' => 'Marshall-øyane', + 'MK' => 'Den tidlegare jugoslaviske republikken Makedonia', + 'ML' => 'Mali', + 'MM' => 'Myanmar', + 'MN' => 'Mongolia', + 'MO' => 'Macao', + 'MP' => 'Nord-Marianane', + 'MQ' => 'Martinique', + 'MR' => 'Mauritania', + 'MS' => 'Montserrat', + 'MT' => 'Malta', + 'MU' => 'Mauritius', + 'MV' => 'Maldivane', + 'MW' => 'Malawi', + 'MX' => 'Mexico', + 'MY' => 'Malaysia', + 'MZ' => 'Mosambik', + 'N/A' => 'Ikkje relevant (lokal IP…)', + 'NA' => 'Namibia', + 'NC' => 'Ny-Kaledonia', + 'NE' => 'Niger', + 'NF' => 'Norfolkøya', + 'NG' => 'Nigeria', + 'NI' => 'Nicaragua', + 'NL' => 'Nederland', + 'NO' => 'Noreg', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NU' => 'Niue', + 'NZ' => 'New Zealand', + 'OM' => 'Oman', + 'PA' => 'Panama', + 'PE' => 'Peru', + 'PF' => 'Fransk Polynesia', + 'PG' => 'Papua Ny-Guinea', + 'PH' => 'Filippinane', + 'PK' => 'Pakistan', + 'PL' => 'Polen', + 'PM' => 'Saint Pierre og Miquelon', + 'PN' => 'Pitcairn', + 'PR' => 'Puerto Rico', + 'PS' => 'Palestina', + 'PT' => 'Portugal', + 'PW' => 'Palau', + 'PY' => 'Paraguay', + 'QA' => 'Qatar', + 'RE' => 'Réunion', + 'RO' => 'Romania', + 'RS' => 'Serbia', + 'RU' => 'Den russiske føderasjonen', + 'RW' => 'Rwanda', + 'SA' => 'Saudi-Arabia', + 'SB' => 'Solomonøyane', + 'SC' => 'Seychellane', + 'SD' => 'Sudan', + 'SE' => 'Sverige', + 'SG' => 'Singapore', + 'SH' => 'St. Helena, Ascension og Tristan da Cunha', + 'SI' => 'Slovenia', + 'SJ' => 'Svalbard og Jan Mayen', + 'SK' => 'Slovakia', + 'SL' => 'Sierra Leone', + 'SM' => 'San Marino', + 'SN' => 'Senegal', + 'SO' => 'Somalia', + 'SR' => 'Surinam', + 'SS' => 'Sør-Sudan', + 'ST' => 'São Tomé og Príncipe', + 'SV' => 'El Salvador', + 'SX' => 'Sint Maarten (nederlandsk del)', + 'SY' => 'Syria', + 'SZ' => 'Swaziland', + 'TC' => 'Turks- og Caicosøyane', + 'TD' => 'Tsjad', + 'TF' => 'Dei sørlege franske territoria', + 'TG' => 'Togo', + 'TH' => 'Thailand', + 'TJ' => 'Tadsjikistan', + 'TK' => 'Tokelau', + 'TL' => 'Aust-Timor', + 'TM' => 'Turkmenistan', + 'TN' => 'Tunisia', + 'TO' => 'Tonga', + 'TR' => 'Tyrkia', + 'TT' => 'Trinidad og Tobago', + 'TV' => 'Tuvalu', + 'TW' => 'Taiwan', + 'TZ' => 'Tanzania', + 'UA' => 'Ukraina', + 'UG' => 'Uganda', + 'UM' => 'Dei mindre ytre øyane i USA', + 'US' => 'USA', + 'UY' => 'Uruguay', + 'UZ' => 'Usbekistan', + 'VA' => 'Vatikanstaten', + 'VC' => 'Sankt Vincent og Grenadinane', + 'VE' => 'Venezuela', + 'VG' => 'Dei britiske jomfruøyane', + 'VI' => 'Dei amerikanske jomfruøyane', + 'VN' => 'Vietnam', + 'VU' => 'Vanuatu', + 'WF' => 'Wallis og Futuna', + 'WS' => 'Samoa', + 'YE' => 'Jemen', + 'YT' => 'Mayotte', + 'ZA' => 'Sør-Afrika', + 'ZM' => 'Zambia', + 'ZW' => 'Zimbabwe', +]; diff --git a/modules/Admin/Language/nn-NO/Episode.php b/modules/Admin/Language/nn-NO/Episode.php new file mode 100644 index 00000000..b585c3dc --- /dev/null +++ b/modules/Admin/Language/nn-NO/Episode.php @@ -0,0 +1,165 @@ + 'Sesong {seasonNumber}', + 'season_abbr' => 'S{seasonNumber}', + 'number' => 'Episode {episodeNumber}', + 'number_abbr' => 'Ep. {episodeNumber}', + 'season_episode' => 'Sesong {seasonNumber} episode {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}E{episodeNumber}', + 'number_of_comments' => '{numberOfComments, plural, + one {# kommentar} + other {# kommentarar} + }', + 'all_podcast_episodes' => 'Alle podkast-episodane', + 'back_to_podcast' => 'Gå tilbake til podkasten', + 'edit' => 'Rediger', + 'publish' => 'Legg ut', + 'publish_edit' => 'Rediger publiseringa', + 'unpublish' => 'Avpubliser', + 'publish_error' => 'Episoden er allereie publisert.', + 'publish_edit_error' => 'Episoden er allereie publisert.', + 'publish_cancel_error' => 'Episoden er allereie publisert.', + 'unpublish_error' => 'Episoden er ikkje publisert.', + 'delete' => 'Slett', + 'go_to_page' => 'Gå til side', + 'create' => 'Legg til ein episode', + 'publication_status' => [ + 'published' => 'Lagt ut', + 'scheduled' => 'Planlagt', + 'not_published' => 'Ikkje lagt ut', + ], + 'list' => [ + 'episode' => 'Episode', + 'visibility' => 'Synlegheit', + 'comments' => 'Kommentarar', + 'actions' => 'Handlingar', + ], + 'messages' => [ + 'createSuccess' => 'Episoden er oppretta!', + 'editSuccess' => 'Episoden er oppdatert!', + 'publishCancelSuccess' => 'Du har avbrote å leggja ut episoden.', + ], + 'form' => [ + 'file_size_error' => + 'Fila di er for stor! Maks filstorleik er {0}. Auk `memory_limit`, `upload_max_filesize` og `post_max_size`-verdiane i php-oppsettsfila di og start omatt vevtenaren din for å lasta opp fila di.', + 'audio_file' => 'Lydfil', + 'audio_file_hint' => 'Vel ei .mp3- eller .m4a-lydfil.', + 'info_section_title' => 'Episodeinfo', + 'cover' => 'Episodeomslag', + 'cover_hint' => + 'Viss du ikkje bruker eige omslag, blir omslaget til podkasten brukt i staden.', + 'cover_size_hint' => 'Omslaget må vera kvadratisk, og minst 1400 breitt og høgt.', + 'title' => 'Tittel', + 'title_hint' => + 'Bør innehalda eit klårt og konsist episodenamn. Ikkje skriv inn nummer på episode eller sesong her.', + 'permalink' => 'Fastlenke', + 'season_number' => 'Sesong', + 'episode_number' => 'Episode', + 'type' => [ + 'label' => 'Type', + 'full' => 'Full', + 'full_hint' => 'Fullstendig innhald (episoden)', + 'trailer' => 'Trailer', + 'trailer_hint' => 'Kort stykke med blestingsinnhald som representerer denne episoden', + 'bonus' => 'Bonus', + 'bonus_hint' => 'Ekstra innhald (til dømes bakominfo eller intervju med skodespelarane) eller innhald for å framheva ein annan serie', + ], + 'parental_advisory' => [ + 'label' => 'Råd til foreldre', + 'hint' => 'Inneheld episoden grov prat?', + 'undefined' => 'udefinert', + 'clean' => 'Familievenleg', + 'explicit' => 'Grovt', + ], + 'show_notes_section_title' => 'Vis notat', + 'show_notes_section_subtitle' => + 'Opp til 4000 teikn. Ver tydeleg og konsis. Skriv notat som hjelper lyttarane å finna episoden.', + 'description' => 'Skildring', + 'description_footer' => 'Botntekst for skildringa', + 'description_footer_hint' => + 'Denne teksten ligg på slutten av kvar episodeskildring, og er ein god stad å ha lenker til td. sosiale nettverk.', + 'additional_files_section_title' => 'Fleire filer', + 'additional_files_section_subtitle' => + 'Desse filene kan brukast av andre plattformer for å gje publikum ei betre oppleving.
Sjå {podcastNamespaceLink} for meir informasjon.', + 'location_section_title' => 'Stad', + 'location_section_subtitle' => 'Kva stad handlar denne episoden om?', + 'location_name' => 'Stadnamn eller adresse', + 'location_name_hint' => 'Dette kan vera ein verkeleg eller oppdikta stad', + 'transcript' => 'Transkribering (undertitlar eller teksting)', + 'transcript_hint' => 'Berre .srt.', + 'transcript_download' => 'Last ned transkriberinga', + 'transcript_file' => 'Transkriberingsfil (.srt)', + 'transcript_remote_url' => 'Ekstern URL for teksting', + 'transcript_file_delete' => 'Slett transkriberingsfila', + 'chapters' => 'Kapittel', + 'chapters_hint' => 'Fila må vera i JSON-kapittelformat.', + 'chapters_download' => 'Last ned kapittel', + 'chapters_file' => 'Kapittelfil', + 'chapters_remote_url' => 'Ekstern URL til kapittelfil', + 'chapters_file_delete' => 'Slett kapittelfila', + 'advanced_section_title' => 'Avanserte innstillingar', + 'advanced_section_subtitle' => + 'Viss du treng RSS-merkelappar som Castopod ikkje handterer, kan du skriva dei inn her.', + 'custom_rss' => 'Eigne RSS-merkelappar for episoden', + 'custom_rss_hint' => 'Dette blir sett inn i ❬item❭-elementet.', + 'block' => 'Episoden skal gøymast frå alle plattformer', + 'block_hint' => + 'Gøym eller vis episoden. Viss du vil gøyma denne episoden frå Apple-katalogen, skrur du på denne.', + 'submit_create' => 'Lag episode', + 'submit_edit' => 'Lagre episode', + ], + 'publish_form' => [ + 'back_to_episode_dashboard' => 'Tilbake til episodeoversikta', + 'post' => 'Kunngjeringsinnlegget ditt', + 'post_hint' => + "Skriv ei melding for å kunngjera at du har lagt ut episoden din. Meldinga blir kringkasta til alle fylgjarane dine på fødiverset, og vil stå på heimesida til podkasten din.", + 'message_placeholder' => 'Skriv meldinga…', + 'publication_date' => 'Publiseringsdato', + 'publication_method' => [ + 'now' => 'No', + 'schedule' => 'Planlegg', + ], + 'scheduled_publication_date' => 'Planlagt publiseringsdato', + 'scheduled_publication_date_clear' => 'Tøm publiseringsdatoen', + 'scheduled_publication_date_hint' => + 'Du kan planleggja å offengleggjera episoden seinare ved å skriva inn eit publiseringstidspunkt. Feltet må vera i formatet ÅÅÅÅ-MM-DD HH:mm', + 'submit' => 'Legg ut', + 'submit_edit' => 'Rediger publiseringa', + 'cancel_publication' => 'Avbryt publisering', + 'message_warning' => 'Du skreiv inga melding til kunngjeringsinnlegget ditt!', + 'message_warning_hint' => 'Viss du skriv ei melding, kan det gje meir sosialt engasjement og syta for at episoden din blir meir synleg.', + 'message_warning_submit' => 'Legg ut likevel', + ], + 'unpublish_form' => [ + 'disclaimer' => + "Viss du avpubliserer episoden, vil alle innlegga som knytte til han bli sletta, og episoden vil bli fjerna frå RSS-straumen til podkasten.", + 'understand' => 'Eg forstår, eg vil avpublisera episoden', + 'submit' => 'Avpubliser', + ], + 'delete_form' => [ + 'disclaimer' => + "Viss du slettar episoden, blir alle innlegga som er knytte til han sletta, og han blir sletta frå RSS-straumen til podkasten.", + 'understand' => 'Eg forstår, eg vil sletta episoden', + 'submit' => 'Slett', + ], + 'embed' => [ + 'title' => 'Innbyggbar spelar', + 'label' => + 'Vel eit fargetema, kopier den innbyggbare spelaren til utklyppstavla og lim han inn på nettstaden din.', + 'clipboard_iframe' => 'Kopier den innbyggbare spelaren til utklyppstavla', + 'clipboard_url' => 'Kopier adressa til utklyppstavla', + 'dark' => 'Mørk', + 'dark-transparent' => 'Mørk gjennomsiktig', + 'light' => 'Lys', + 'light-transparent' => 'Lys gjennomsiktig', + ], +]; diff --git a/modules/Admin/Language/nn-NO/EpisodeNavigation.php b/modules/Admin/Language/nn-NO/EpisodeNavigation.php new file mode 100644 index 00000000..e0bf8199 --- /dev/null +++ b/modules/Admin/Language/nn-NO/EpisodeNavigation.php @@ -0,0 +1,23 @@ + 'Vis episode-sida', + 'dashboard' => 'Episodestyringspanelet', + 'episode-view' => 'Heim', + 'episode-edit' => 'Rediger episoden', + 'episode-persons-manage' => 'Handter personar', + 'embed-add' => 'Innbyggbar spelar', + 'clips' => 'Klypp', + 'video-clips-list' => 'Videoklypp', + 'video-clips-create' => 'Nytt videoklypp', + 'soundbites-list' => 'Lydbetar', + 'soundbites-create' => 'Ny lydbete', +]; diff --git a/modules/Admin/Language/nn-NO/Fediverse.php b/modules/Admin/Language/nn-NO/Fediverse.php new file mode 100644 index 00000000..1b136b74 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Fediverse.php @@ -0,0 +1,32 @@ + [ + 'actorNotFound' => 'Fann ikkje kontoen!', + 'blockActorSuccess' => '{actor} er blokkert!', + 'unblockActorSuccess' => 'Aktøren er avblokkert!', + 'blockDomainSuccess' => '{domain} er blokkert!', + 'unblockDomainSuccess' => '{domain} er avblokkert!', + ], + 'blocked_actors' => 'Blokkerte kontoar', + 'blocked_domains' => 'Blokkerte domene', + 'block_lists_form' => [ + 'handle' => 'Kontohandtak', + 'handle_hint' => 'Skriv inn ein @brukarnamn@domene-konto.', + 'domain' => 'Domenenamn', + 'submit' => 'Blokker!', + ], + 'list' => [ + 'actor' => 'Konto', + 'domain' => 'Domenenamn', + 'unblock' => 'Avblokker', + ], +]; diff --git a/modules/Admin/Language/nn-NO/Home.php b/modules/Admin/Language/nn-NO/Home.php new file mode 100644 index 00000000..3ef47501 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Home.php @@ -0,0 +1,14 @@ + 'Alle podkastar', + 'no_podcast' => 'Fann ingen podkast', +]; diff --git a/modules/Admin/Language/nn-NO/Install.php b/modules/Admin/Language/nn-NO/Install.php new file mode 100644 index 00000000..fefcb365 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Install.php @@ -0,0 +1,61 @@ + 'Manuelt oppsett', + 'manual_config_subtitle' => + 'Lag ei `.env`-fil med innstillingane dine og oppdater sida for å halda fram installasjonen.', + 'form' => [ + 'instance_config' => 'Oppsett for nettstaden', + 'hostname' => 'Vertsnamn', + 'media_base_url' => 'Mediabase-URL', + 'media_base_url_hint' => + 'Viss du bruker eit leveringsnettverk (CDN) og/eller ei ekstern analysetenest, kan du skriva dei inn her.', + 'admin_gateway' => 'Innfallsport for styrar', + 'admin_gateway_hint' => + 'Ruta for å koma til styringsområdet (td. https://eksempel.no/cp-admin). Standardvalet er cp-admin, me tilrår at du endrar det av omsyn til tryggleiken.', + 'auth_gateway' => 'Innfallsport for autentisering', + 'auth_gateway_hint' => + 'Ruta for å koma til autentiseringssidene (td. https://eksempel.no/cp-auth). Standardvalet er cp-auth, me tilrår at du endrar det av omsyn til tryggleiken.', + 'database_config' => 'Databaseoppsett', + 'database_config_hint' => + 'Castopod treng å kopla seg til MySQL (eller MariaDB)-databasen din. Viss du ikkje har opplysingane som trengst, må du kontakta systemansvarleg.', + 'db_hostname' => 'Databasevertsnamn', + 'db_name' => 'Databasenamn', + 'db_username' => 'Databasebrukarnamn', + 'db_password' => 'Databasepassord', + 'db_prefix' => 'Databaseprefiks', + 'db_prefix_hint' => + "Prefikset til Castopod-tabellane. La det stå om du ikkje veit kva det tyder.", + 'cache_config' => 'Mellomlagringsoppsett', + 'cache_config_hint' => + 'Vel korleis du vil handtera mellomlageret. La stå som det er om du ikkje veit kva det tyder.', + 'cache_handler' => 'Mellomlagerhandtering', + 'cacheHandlerOptions' => [ + 'file' => 'Fil', + 'redis' => 'Redis', + 'predis' => 'Predis', + ], + 'next' => 'Neste', + 'submit' => 'Fullfør installeringa', + 'create_superadmin' => 'Lag superstyrar-konto', + 'email' => 'Epost', + 'username' => 'Brukarnamn', + 'password' => 'Passord', + ], + 'messages' => [ + 'createSuperAdminSuccess' => + 'Superstyrar-kontoen din er oppretta. Logg inn for å byrja med podkasting!', + 'databaseConnectError' => + 'Castopod greidde ikkje å kopla til databasen din. Sjå gjennom databaseoppsettet og prøv ein gong til.', + 'writeError' => + "Greidde ikkje laga eller skriva til `.env`-fila. Du må laga ho manuelt ved å fylgja `.env.example`-filmalen i Castopod-pakka.", + ], +]; diff --git a/modules/Admin/Language/nn-NO/MyAccount.php b/modules/Admin/Language/nn-NO/MyAccount.php new file mode 100644 index 00000000..a853dc8a --- /dev/null +++ b/modules/Admin/Language/nn-NO/MyAccount.php @@ -0,0 +1,18 @@ + 'Kontoinformasjonen min', + 'changePassword' => 'Endra passordet mitt', + 'messages' => [ + 'wrongPasswordError' => "Du skreiv inn feil passord. Prøv ein gong til.", + 'passwordChangeSuccess' => 'Passordet er endra!', + ], +]; diff --git a/modules/Admin/Language/nn-NO/Navigation.php b/modules/Admin/Language/nn-NO/Navigation.php new file mode 100644 index 00000000..ce1b2185 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Navigation.php @@ -0,0 +1,41 @@ + 'Vis/gøym sidepanelet', + 'go_to_website' => 'Gå til nettsida', + 'go_to_admin' => 'Gå til styringspanelet', + 'dashboard' => 'Styringspanel', + 'admin' => 'Heim', + 'podcasts' => 'Podkastar', + 'podcast-list' => 'Alle podkastar', + 'podcast-create' => 'Ny podkast', + 'podcast-import' => 'Importer ein podkast', + 'persons' => 'Personar', + 'person-list' => 'Alle personar', + 'person-create' => 'Ny person', + 'fediverse' => 'Fødiverset', + 'fediverse-blocked-actors' => 'Blokkerte kontoar', + 'fediverse-blocked-domains' => 'Blokkerte domene', + 'users' => 'Brukarar', + 'user-list' => 'Alle brukarane', + 'user-create' => 'Ny brukar', + 'pages' => 'Sider', + 'page-list' => 'Alle sidene', + 'page-create' => 'Ny side', + 'settings' => 'Innstillingar', + 'settings-general' => 'Generelt', + 'settings-theme' => 'Bunad', + 'account' => [ + 'my-account' => 'Kontoen min', + 'change-password' => 'Endre passord', + 'logout' => 'Logg ut', + ], +]; diff --git a/modules/Admin/Language/nn-NO/Page.php b/modules/Admin/Language/nn-NO/Page.php new file mode 100644 index 00000000..3533de52 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Page.php @@ -0,0 +1,30 @@ + 'Heimatt', + 'page' => 'Side', + 'all_pages' => 'Alle sidene', + 'create' => 'Ny side', + 'go_to_page' => 'Gå til side', + 'edit' => 'Rediger sida', + 'delete' => 'Slett sida', + 'form' => [ + 'title' => 'Tittel', + 'permalink' => 'Fastlenke', + 'content' => 'Innhald', + 'submit_create' => 'Lag side', + 'submit_edit' => 'Lagre', + ], + 'messages' => [ + 'createSuccess' => 'Sida “{pageTitle}” er oppretta!', + 'editSuccess' => 'Sida er oppdatert!', + ], +]; diff --git a/modules/Admin/Language/nn-NO/Pager.php b/modules/Admin/Language/nn-NO/Pager.php new file mode 100644 index 00000000..5b135b32 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Pager.php @@ -0,0 +1,21 @@ + 'Sidenavigering', + 'first' => 'Fyrste', + 'previous' => 'Førre', + 'next' => 'Neste', + 'last' => 'Siste', + 'older' => 'Eldre', + 'newer' => 'Nyare', + 'invalidTemplate' => '{0} er ikkje ein gyldig sidenavigeringsmal.', + 'invalidPaginationGroup' => '{0} er ikkje ei gyldig pagineringsgruppe.', +]; diff --git a/modules/Admin/Language/nn-NO/Person.php b/modules/Admin/Language/nn-NO/Person.php new file mode 100644 index 00000000..c20bfedb --- /dev/null +++ b/modules/Admin/Language/nn-NO/Person.php @@ -0,0 +1,65 @@ + 'Personar', + 'all_persons' => 'Alle personar', + 'no_person' => 'Fann ingen!', + 'create' => 'Lag ein person', + 'view' => 'Sjå personen', + 'edit' => 'Rediger personen', + 'delete' => 'Slett personen', + 'messages' => [ + 'createSuccess' => 'Personen er oppretta!', + 'editSuccess' => 'Personen er oppdatert!', + 'deleteSuccess' => 'Personen er fjerna!', + ], + 'form' => [ + 'avatar' => 'Profilbilete', + 'avatar_size_hint' => + 'Profilbiletet må vera minst 400pkt breitt og høgt.', + 'full_name' => 'Fullt namn', + 'full_name_hint' => 'Dette er det fulle namnet eller aliaset til personen.', + 'unique_name' => 'Unikt namn', + 'unique_name_hint' => 'Brukt til URL-ar', + 'information_url' => 'Informasjons-URL', + 'information_url_hint' => + 'URL til ei relevant side med opplysingar om personen, slik som ei heimeside eller ei profilside hjå ein tredjepart.', + 'submit_create' => 'Lag person', + 'submit_edit' => 'Lagre person', + ], + 'podcast_form' => [ + 'title' => 'Handter personar', + 'add_section_title' => 'Legg personar til denne podkasten', + 'add_section_subtitle' => 'Du kan velja fleire personar og roller.', + 'persons' => 'Personar', + 'persons_hint' => + 'Du kan velja ein eller fleire personar med same roller. Du må laga personane fyrst.', + 'roles' => 'Roller', + 'roles_hint' => + 'Du kan velja ingen, ei eller fleire roller for ein person.', + 'submit_add' => 'Legg til person(ar)', + 'remove' => 'Fjern', + ], + 'episode_form' => [ + 'title' => 'Handter personar', + 'add_section_title' => 'Legg personar til denne episoden', + 'add_section_subtitle' => 'Du kan velja fleire personar og roller.', + 'persons' => 'Personar', + 'persons_hint' => + 'Du kan velja ein eller fleire personar med same roller. Du må laga personane fyrst.', + 'roles' => 'Roller', + 'roles_hint' => + 'Du kan velja ingen, ei eller fleire roller for ein person.', + 'submit_add' => 'Legg til person(ar)', + 'remove' => 'Fjern', + ], + 'credits' => 'Bidragsytarar', +]; diff --git a/modules/Admin/Language/nn-NO/Platforms.php b/modules/Admin/Language/nn-NO/Platforms.php new file mode 100644 index 00000000..3cf5f254 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Platforms.php @@ -0,0 +1,30 @@ + 'Plattformer', + 'home_url' => 'Gå til {platformName}-nettstaden', + 'submit_url' => 'Send podkasten din til {platformName}', + 'visible' => 'Vis på heimesida til podkasten?', + 'on_embed' => 'Vis i den innbyggbare spelaren?', + 'remove' => 'Fjern {platformName}', + 'submit' => 'Lagre', + 'messages' => [ + 'updateSuccess' => 'Plattformlenkene er oppdaterte!', + 'removeLinkSuccess' => 'Plattformlenka er fjerna.', + 'removeLinkError' => + 'Greidde ikkje fjerna plattformlenka. Prøv ein gong til.', + ], + 'description' => [ + 'podcasting' => 'Podkast-IDen på denne plattforma', + 'social' => 'Konto-IDen til podkastane på denne plattforma', + 'funding' => 'Oppmodingsmelding', + ], +]; diff --git a/modules/Admin/Language/nn-NO/Podcast.php b/modules/Admin/Language/nn-NO/Podcast.php new file mode 100644 index 00000000..1e5eb58a --- /dev/null +++ b/modules/Admin/Language/nn-NO/Podcast.php @@ -0,0 +1,243 @@ + 'Alle podkastar', + 'no_podcast' => 'Fann ingen podkast!', + 'create' => 'Lag ein podcast', + 'import' => 'Importer ein podkast', + 'new_episode' => 'Ny episode', + 'view' => 'Sjå podkasten', + 'edit' => 'Rediger podkasten', + 'delete' => 'Slett podkasten', + 'see_episodes' => 'Sjå episodane', + 'see_contributors' => 'Sjå bidragsytarane', + 'go_to_page' => 'Gå til side', + 'latest_episodes' => 'Dei nyaste episodane', + 'see_all_episodes' => 'Sjå alle episodane', + 'messages' => [ + 'createSuccess' => 'Podkasten er oppretta!', + 'editSuccess' => 'Podkasten er oppdatert!', + 'importSuccess' => 'Podkasten er importert!', + ], + 'form' => [ + 'identity_section_title' => 'Podkastidentitet', + 'identity_section_subtitle' => 'Desse felta gjer at du blir lagt merke til.', + 'cover' => 'Podkastomslag', + 'cover_size_hint' => 'Omslaget må vera kvadratisk, og minst 1400pkt breitt og høgt.', + 'banner' => 'Podkastbanner', + 'banner_size_hint' => 'Banneret må ha 3:1-forhold og vera minst 1500pkt breitt.', + 'banner_delete' => 'Slett podkastbanneret', + 'title' => 'Tittel', + 'handle' => 'Handtak', + 'handle_hint' => + 'Blir brukt til å identifisera podkasten. Du kan bruka store og små bokstavar, tal og understrek.', + 'type' => [ + 'label' => 'Type', + 'episodic' => 'Med episodar', + 'episodic_hint' => 'Viss det er meininga at episodane skal kunna lyttast til uansett rekkjefylgje. Dei nyaste episodane blir presenterte fyrst.', + 'serial' => 'I serie', + 'serial_hint' => 'Viss det er meininga at episodane skal koma i ei bestemt rekkjefylgje. Dei eldste episodane blir presenterte fyrst.', + ], + 'description' => 'Skildring', + 'classification_section_title' => 'Klassifisering', + 'classification_section_subtitle' => + 'Desse felta vil påverka publikummet og konkurransen din.', + 'language' => 'Språk', + 'category' => 'Kategori', + 'category_placeholder' => 'Vel ein kategori…', + 'other_categories' => 'Andre kategoriar', + 'parental_advisory' => [ + 'label' => 'Råd til foreldre', + 'hint' => 'Er det grov prat her?', + 'undefined' => 'udefinert', + 'clean' => 'Familievenleg', + 'explicit' => 'Grovt', + ], + 'author_section_title' => 'Forfattar', + 'author_section_subtitle' => 'Kven styrer podkasten?', + 'owner_name' => 'Namn på eigaren', + 'owner_name_hint' => + 'Berre til administrativ bruk. Synleg i den offentlege RSS-straumen.', + 'owner_email' => 'Epost til eigaren', + 'owner_email_hint' => + 'Blir brukt av dei fleste plattformer til å stadfesta eigarskapen til podkasten. Synleg i den offentlege RSS-straumen.', + 'publisher' => 'Utgjevar', + 'publisher_hint' => + 'Gruppa som er ansvarleg for serien. Det er vanlegvis morselskapet eller nettverket til ein podkast. Dette feltet er stundom merka med «forfattar».', + 'copyright' => 'Opphavsrett', + 'location_section_title' => 'Stad', + 'location_section_subtitle' => 'Kva stad handlar denne podkasten om?', + 'location_name' => 'Stadnamn eller adresse', + 'location_name_hint' => 'Dette kan vera ein verkeleg eller oppdikta stad', + 'monetization_section_title' => 'Kommersialisering', + 'monetization_section_subtitle' => + 'Ten pengar med hjelp frå publikummet ditt.', + 'payment_pointer' => 'Betalingspunkt for nettkommersialisering', + 'payment_pointer_hint' => + 'Det er her du vil få inn pengar frå nettkommersialiseringa', + 'advanced_section_title' => 'Avanserte innstillingar', + 'advanced_section_subtitle' => + 'Viss du treng RSS-merkelappar som Castopod ikkje handterer, kan du skriva dei inn her.', + 'custom_rss' => 'Eigne RSS-merkelappar for podkasten', + 'custom_rss_hint' => 'Dette blir sett inn i ❬channel❭-elementet.', + 'new_feed_url' => 'Ny straum-URL', + 'new_feed_url_hint' => 'Bruk dette feltet når du flyttar til eit anna domene eller vertsplattform. Standardvalet for verdien er den noverande RSS-adresse viss podkasten er importert.', + 'partnership' => 'Partnarskap', + 'partner_id' => 'ID', + 'partner_link_url' => 'Lenke-URL', + 'partner_image_url' => 'Bilet-URL', + 'partner_id_hint' => 'Din eigen partnar-ID', + 'partner_link_url_hint' => 'Lenkeadressa til den generelle partnaren', + 'partner_image_url_hint' => 'Biletadressa til den generelle partnaren', + 'status_section_title' => 'Status', + 'block' => 'Podkasten skal gøymast frå alle plattformer', + 'complete' => 'Podkasten vil ikkje få fleire episodar', + 'lock' => 'Hindre at podkasten blir kopiert', + 'lock_hint' => + 'Føremålet er å fortelja andre podkastplattformer om dei kan importera denne straumen. Dersom verdien er ja, blir alle forsøk på å importera denne straumen til ei ny plattform nekta.', + 'submit_create' => 'Lag podkast', + 'submit_edit' => 'Lagre podkasten', + ], + 'category_options' => [ + 'uncategorized' => 'ukategorisert', + 'arts' => 'Kunst', + 'business' => 'Forretningar', + 'comedy' => 'Komedie', + 'education' => 'Utdanning', + 'fiction' => 'Fiksjon', + 'government' => 'Styresmakter', + 'health_and_fitness' => 'Helse og trening', + 'history' => 'Historie', + 'kids_and_family' => 'Born & familie', + 'leisure' => 'Fritid', + 'music' => 'Musikk', + 'news' => 'Nytt', + 'religion_and_spirituality' => 'Religion & spiritualitet', + 'science' => 'Vitskap', + 'society_and_culture' => 'Samfunn & kultur', + 'sports' => 'Idrett', + 'technology' => 'Teknologi', + 'true_crime' => 'Sann krim', + 'tv_and_film' => 'TV & film', + 'books' => 'Bøker', + 'design' => 'Design', + 'fashion_and_beauty' => 'Mote & venleik', + 'food' => 'Mat', + 'performing_arts' => 'Utøvande kunst', + 'visual_arts' => 'Visuell kunst', + 'careers' => 'Karriere', + 'entrepreneurship' => 'Entreprenørskap', + 'investing' => 'Investering', + 'management' => 'Leiing', + 'marketing' => 'Marknadsføring', + 'non_profit' => 'Friviljug arbeid', + 'comedy_interviews' => 'Humor-intervju', + 'improv' => 'Improvisasjon', + 'stand_up' => 'Ståkomikk', + 'courses' => 'Kurs', + 'how_to' => 'Slik gjer du', + 'language_learning' => 'Språklæring', + 'self_improvement' => 'Sjølvforbetring', + 'comedy_fiction' => 'Oppdikta humor', + 'drama' => 'Drama', + 'science_fiction' => 'Science Fiction', + 'alternative_health' => 'Alternativ helse', + 'fitness' => 'Kom i form', + 'medicine' => 'Medisin', + 'mental_health' => 'Mental helse', + 'nutrition' => 'Næring', + 'sexuality' => 'Seksualitet', + 'education_for_kids' => 'Utdanning for born', + 'parenting' => 'Oppseding', + 'pets_and_animals' => 'Kjæledyr & dyr', + 'stories_for_kids' => 'Historier for born', + 'animation_and_manga' => 'Animasjon & manga', + 'automotive' => 'Bil og motor', + 'aviation' => 'Luftfart', + 'crafts' => 'Handverk', + 'games' => 'Spel', + 'hobbies' => 'Hobbyar', + 'home_and_garden' => 'Heim og hage', + 'video_games' => 'Videospel', + 'music_commentary' => 'Musikkommentarar', + 'music_history' => 'Musikkhistorie', + 'music_interviews' => 'Musikkintervju', + 'business_news' => 'Handelsnytt', + 'daily_news' => 'Dagleg nytt', + 'entertainment_news' => 'Underhaldningsnytt', + 'news_commentary' => 'Kommentarar til nyhende', + 'politics' => 'Politikk', + 'sports_news' => 'Sportsnytt', + 'tech_news' => 'Teknologinytt', + 'buddhism' => 'Buddhisme', + 'christianity' => 'Kristendom', + 'hinduism' => 'Hinduisme', + 'islam' => 'Islam', + 'judaism' => 'Jødedom', + 'religion' => 'Religion', + 'spirituality' => 'Spiritualitet', + 'astronomy' => 'Astronomi', + 'chemistry' => 'Kjemi', + 'earth_sciences' => 'Geofag', + 'life_sciences' => 'Humaniora', + 'mathematics' => 'Matematikk', + 'natural_sciences' => 'Naturvitskap', + 'nature' => 'Natur', + 'physics' => 'Fysisk', + 'social_sciences' => 'Sosialfag', + 'documentary' => 'Dokumentar', + 'personal_journals' => 'Personlege journalar', + 'philosophy' => 'Filosofi', + 'places_and_travel' => 'Stader & reise', + 'relationships' => 'Forhold', + 'baseball' => 'Baseball', + 'basketball' => 'Basketball', + 'cricket' => 'Cricket', + 'fantasy_sports' => 'Fantasiidrettar', + 'football' => 'Fotball', + 'golf' => 'Golf', + 'hockey' => 'Hockey', + 'rugby' => 'Rugby', + 'running' => 'Springing', + 'soccer' => 'Fotball', + 'swimming' => 'Symjing', + 'tennis' => 'Tennis', + 'volleyball' => 'Volleyball', + 'wilderness' => 'Villmark', + 'wrestling' => 'Bryting', + 'after_shows' => 'Etterprogram', + 'film_history' => 'Filmhistorie', + 'film_interviews' => 'Filmintervju', + 'film_reviews' => 'Filmmeldingar', + 'tv_reviews' => 'TV-meldingar', + ], + 'by' => 'Av {publisher}', + 'season' => 'Sesong {seasonNumber}', + 'list_of_episodes_year' => '{year}-episodar ({episodeCount})', + 'list_of_episodes_season' => + 'Sesong {seasonNumber}-episodar ({episodeCount})', + 'no_episode' => 'Fann ingen episode!', + 'follow' => 'Fylg', + 'followers' => '{numberOfFollowers, plural, + one {# fylgjar} + other {# fylgjarar} + }', + 'posts' => '{numberOfPosts, plural, + one {# innlegg} + other {# innlegg} + }', + 'activity' => 'Aktivitet', + 'episodes' => 'Episodar', + 'sponsor' => 'Sponsor', + 'funding_links' => 'Finansieringslenker for {podcastTitle}', + 'find_on' => 'Finn {podcastTitle} på', + 'listen_on' => 'Høyr på', +]; diff --git a/modules/Admin/Language/nn-NO/PodcastImport.php b/modules/Admin/Language/nn-NO/PodcastImport.php new file mode 100644 index 00000000..9fb36b11 --- /dev/null +++ b/modules/Admin/Language/nn-NO/PodcastImport.php @@ -0,0 +1,37 @@ + + 'Dette kan ta lang tid.
Denne versjonen syner ikkje framgangen medan importen går, så du vil ikkje sjå noko før han er ferdig.
Viss du får feil med tidsavbrot, aukar du `max_execution_time`-verdien.', + 'old_podcast_section_title' => 'Podkast å importera', + 'old_podcast_section_subtitle' => + 'Syt for at du har rettane til podkasten før du importerer han. Å kopiera og kringkasta ein podkast utan løyve er ulovleg og straffbart.', + 'imported_feed_url' => 'URL til straumen', + 'imported_feed_url_hint' => 'Straumen må vera i xml- eller rss-format.', + 'new_podcast_section_title' => 'Den nye podkasten', + 'advanced_params_section_title' => 'Avanserte innstilingar', + 'advanced_params_section_subtitle' => + 'Bruk standardverdiane viss du ikkje veit kva desse felta er til.', + 'slug_field' => 'Felt som skal brukast til å laga kortadressa til episoden', + 'description_field' => + 'Kjeldefelt som skal brukast for å skildra episoden og syna notat', + 'force_renumber' => 'Tving renummerering av episodane', + 'force_renumber_hint' => + 'Bruk dette viss podkasten din ikkje har episodenummer, men du vil laga nummer når du importerer.', + 'season_number' => 'Sesongnummer', + 'season_number_hint' => + 'Bruk dette viss podkasten din ikkje har eit sesongnummer, men du vil laga eit når du importerer. La stå tomt i andre tilfelle.', + 'max_episodes' => 'Makstal på episodar å importera', + 'max_episodes_hint' => 'La stå tomt for å importera alle episodane', + 'lock_import' => + 'Denne straumen er verna. Du kan ikkje importera han. Viss du er eigaren, må du ta bort vernet på den originale plattforma.', + 'submit' => 'Importer ein podkast', +]; diff --git a/modules/Admin/Language/nn-NO/PodcastNavigation.php b/modules/Admin/Language/nn-NO/PodcastNavigation.php new file mode 100644 index 00000000..cf628d0e --- /dev/null +++ b/modules/Admin/Language/nn-NO/PodcastNavigation.php @@ -0,0 +1,35 @@ + 'Gå til podkastsida', + 'dashboard' => 'Podkast-styringspanel', + 'podcast-view' => 'Heim', + 'podcast-edit' => 'Rediger podkasten', + 'podcast-persons-manage' => 'Handter personar', + 'episodes' => 'Episodar', + 'episode-list' => 'Alle episodane', + 'episode-create' => 'Ny episode', + 'analytics' => 'Analysar', + 'podcast-analytics' => 'Oversikt over publikum', + 'podcast-analytics-webpages' => 'Nettsidevisingar', + 'podcast-analytics-locations' => 'Stader', + 'podcast-analytics-unique-listeners' => 'Unike lyttarar', + 'podcast-analytics-players' => 'Spelarar', + 'podcast-analytics-listening-time' => 'Lyttetid', + 'podcast-analytics-time-periods' => 'Tidsperiodar', + 'contributors' => 'Bidragsytarar', + 'contributor-list' => 'Alle bidragsytarane', + 'contributor-add' => 'Legg til bidragsytar', + 'platforms' => 'Eksterne plattformer', + 'platforms-podcasting' => 'Podkasting', + 'platforms-social' => 'Sosiale nettverk', + 'platforms-funding' => 'Finansiering', +]; diff --git a/modules/Admin/Language/nn-NO/Settings.php b/modules/Admin/Language/nn-NO/Settings.php new file mode 100644 index 00000000..2d100161 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Settings.php @@ -0,0 +1,56 @@ + 'Generelle innstillingar', + 'instance' => [ + 'title' => 'Nettstad', + 'site_icon' => 'Sideikon', + 'site_icon_delete' => 'Slett sideikonet', + 'site_icon_hint' => 'Nettstadikon er det du ser i fanene på nettlesaren, bokmerkelina og når du legg til ein nettstad som snarveg på mobile einingar.', + 'site_icon_helper' => 'Ikonet må vera kvadratisk og minst 512pkt breitt og høgt.', + 'site_name' => 'Nettstadnamn', + 'site_description' => 'Skildring av nettstaden', + 'submit' => 'Lagre', + 'editSuccess' => 'Nettstaden er oppdatert!', + 'deleteIconSuccess' => 'Nettstadikonet er fjerna!', + ], + 'images' => [ + 'title' => 'Bilete', + 'subtitle' => 'Her kan du regenerera alle bileta, basert på dei opplasta originalane. Dette gjer du dersom du ser at det manglar bilete. Dette kan ta ei stund.', + 'regenerate' => 'Regenerer bilete', + 'regenerationSuccess' => 'Alle bileta er regenererte!', + ], + 'housekeeping' => [ + 'title' => 'Reinhald', + 'subtitle' => 'Gjer ulike reinhaldsoppgåver. Bruk dette viss du kjem borti feil med mediafiler eller dataintegritet. Dette kan ta ei stund.', + 'reset_counts' => 'Nullstill teljarar', + 'reset_counts_helper' => 'Dette nullstiller alle datateljarar (tal på fylgjarar, innlegg, kommentarar…).', + 'rewrite_media' => 'Overskriv metadata for medium', + 'rewrite_media_helper' => 'Dette vil sletta alle overflødige mediafiler og laga dei på nytt (bilete, lydfiler, transkriberingar, kapittel, …)', + 'clear_cache' => 'Slett bufferinnhald', + 'clear_cache_helper' => 'Dette tømmer redis-mellomlageret eller skrivbare/mellomlagra filer.', + 'run' => 'Gjer reinhald', + 'runSuccess' => 'Reinhaldet er utført!', + ], + 'theme' => [ + 'title' => 'Bunad', + 'accent_section_title' => 'Framheva farge', + 'accent_section_subtitle' => 'Vel kva farge som blir framheva på alle dei offentlege sidene.', + 'pine' => 'Furu', + 'crimson' => 'Karmosinraud', + 'amber' => 'Rav', + 'lake' => 'Innsjø', + 'jacaranda' => 'Syrinblå', + 'onyx' => 'Onyks', + 'submit' => 'Lagre', + 'setInstanceThemeSuccess' => 'Bunaden er oppdatert!', + ], +]; diff --git a/modules/Admin/Language/nn-NO/Soundbite.php b/modules/Admin/Language/nn-NO/Soundbite.php new file mode 100644 index 00000000..65e06cab --- /dev/null +++ b/modules/Admin/Language/nn-NO/Soundbite.php @@ -0,0 +1,31 @@ + [ + 'title' => 'Lydbetar', + 'soundbite' => 'Lydbete', + ], + 'messages' => [ + 'createSuccess' => 'Lydbeten er oppretta!', + 'deleteSuccess' => 'Lydbeten er fjerna!', + ], + 'form' => [ + 'title' => 'Ny lydbete', + 'soundbite_title' => 'Tittel på lydbeten', + 'start_time' => 'Start på', + 'duration' => 'Lengd', + 'submit' => 'Lag lydbete', + ], + 'play' => 'Spel lydbeten', + 'stop' => 'Stopp lydbeten', + 'create' => 'Ny lydbete', + 'delete' => 'Slett lydbeten', +]; diff --git a/modules/Admin/Language/nn-NO/User.php b/modules/Admin/Language/nn-NO/User.php new file mode 100644 index 00000000..c11ee78e --- /dev/null +++ b/modules/Admin/Language/nn-NO/User.php @@ -0,0 +1,54 @@ + "Endre rollene til {username}", + 'forcePassReset' => 'Tving passordnullstilling', + 'ban' => 'Steng ute', + 'unban' => 'Slepp inn att', + 'delete' => 'Slett', + 'create' => 'Ny brukar', + 'view' => "{username} sin informasjon", + 'all_users' => 'Alle brukarane', + 'list' => [ + 'user' => 'Brukar', + 'roles' => 'Roller', + 'banned' => 'Utestengd?', + ], + 'form' => [ + 'email' => 'Epost', + 'username' => 'Brukarnamn', + 'password' => 'Passord', + 'new_password' => 'Nytt passord', + 'roles' => 'Roller', + 'permissions' => 'Løyve', + 'submit_create' => 'Lag brukar', + 'submit_edit' => 'Lagre', + 'submit_password_change' => 'Endre!', + ], + 'roles' => [ + 'superadmin' => 'Superstyrar', + ], + 'messages' => [ + 'createSuccess' => + 'Brukaren er oppretta! {username} vil få spørsmål om å endra passord fyrste gong hen loggar inn.', + 'rolesEditSuccess' => + "Rollene til {username} er oppdaterte.", + 'forcePassResetSuccess' => + '{username} vil bli beden om å endra passord neste gong hen loggar inn.', + 'banSuccess' => '{username} er utestengd.', + 'unbanSuccess' => '{username} fekk sleppa inn att.', + 'banSuperAdminError' => + '{username} er superstyrar, og du stengjer ikkje ute ein superstyrar…', + 'deleteSuperAdminError' => + '{username} er superstyrar, og du slettar ikkje ein superstyrar…', + 'deleteSuccess' => '{username} er sletta.', + ], +]; diff --git a/modules/Admin/Language/nn-NO/Validation.php b/modules/Admin/Language/nn-NO/Validation.php new file mode 100644 index 00000000..ed99da37 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Validation.php @@ -0,0 +1,18 @@ + + '{field} er anten ikkje eit bilete, eller er ikkje breitt og høgt nok.', + 'is_image_ratio' => + '{field} er anten ikkje eit bilete, eller har feil forhold mellom høgd og breidd.', + 'validate_url' => + '{field}-feltet må vera ei gyldig nettadresse (td. https://eksempel.no/).', +]; diff --git a/modules/Admin/Language/nn-NO/VideoClip.php b/modules/Admin/Language/nn-NO/VideoClip.php new file mode 100644 index 00000000..64e1698d --- /dev/null +++ b/modules/Admin/Language/nn-NO/VideoClip.php @@ -0,0 +1,72 @@ + [ + 'title' => 'Videoklypp', + 'status' => [ + 'label' => 'Status', + 'queued' => 'i kø', + 'queued_hint' => 'Klyppet ventar på handsaming.', + 'pending' => 'ventar', + 'pending_hint' => 'Klyppet blir generert snart.', + 'running' => 'køyrer', + 'running_hint' => 'Klyppet blir generert.', + 'failed' => 'mislukka', + 'failed_hint' => 'Greidde ikkje laga klyppet: skriptfeil.', + 'passed' => 'utført', + 'passed_hint' => 'Klyppet vart laga!', + ], + 'clip' => 'Klypp', + 'duration' => 'Jobbtid', + ], + 'title' => 'Filmklypp: {videoClipLabel}', + 'download_clip' => 'Last ned klyppet', + 'create' => 'Nytt filmklypp', + 'go_to_page' => 'Gå til filmklyppsida', + 'retry' => 'Prøv å laga klyppet på nytt', + 'delete' => 'Slett klyppet', + 'logs' => 'Arbeidsloggar', + 'messages' => [ + 'alreadyExistingError' => 'Filmen du prøver å laga finst frå før!', + 'addToQueueSuccess' => 'Filmklyppet er lagt i kø og ventar på å bli laga!', + 'deleteSuccess' => 'Filmklyppet er fjerna!', + ], + 'format' => [ + 'landscape' => 'Liggjande', + 'portrait' => 'Ståande', + 'squared' => 'Kvadratisk', + ], + 'form' => [ + 'title' => 'Nytt filmklypp', + 'params_section_title' => 'Innstillingar for filmklypp', + 'clip_title' => 'Namn på filmklyppet', + 'format' => [ + 'label' => 'Vel format', + 'landscape_hint' => 'Filmar i liggjande 16:9-format er fine til Peertube, Youtube og Vimeo.', + 'portrait_hint' => 'Filmar i ståande 9:16-format er fine til Tiktok, korte Youtube-filmar og Instagram-historier.', + 'squared_hint' => 'Filmar i kvadratisk 1:1-format er fine til Mastodon, Facebook, Twitter og Linkedin.', + ], + 'theme' => 'Vel bunad', + 'start_time' => 'Start på', + 'duration' => 'Lengd', + 'trim_start' => 'Skjer til starten', + 'trim_end' => 'Skjer til slutten', + 'submit' => 'Lag videoklypp', + ], + 'requirements' => [ + 'title' => 'Manglande krav', + 'missing' => 'Du har manglande krav. Pass på å leggja til alle dei påkravde elementa for å laga ein film til denne episoden!', + 'ffmpeg' => 'FFmpeg', + 'gd' => 'Graphics Draw (GD)', + 'freetype' => 'Freetype-bibliotek for GD', + 'transcript' => 'Transkriberingsfil (.srt)', + ], +]; diff --git a/modules/Admin/Language/oc/Admin.php b/modules/Admin/Language/oc/Admin.php new file mode 100644 index 00000000..5e394237 --- /dev/null +++ b/modules/Admin/Language/oc/Admin.php @@ -0,0 +1,15 @@ + 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', + 'choose_interact' => 'Choose how to interact', +]; diff --git a/modules/Admin/Language/oc/Breadcrumb.php b/modules/Admin/Language/oc/Breadcrumb.php new file mode 100644 index 00000000..d9400ca7 --- /dev/null +++ b/modules/Admin/Language/oc/Breadcrumb.php @@ -0,0 +1,48 @@ + 'breadcrumb', + config('Admin') + ->gateway => 'Home', + 'podcasts' => 'podcasts', + 'episodes' => 'episodes', + 'contributors' => 'contributors', + 'pages' => 'pages', + 'settings' => 'settings', + 'theme' => 'theme', + 'add' => 'add', + 'new' => 'new', + 'edit' => 'edit', + 'persons' => 'persons', + 'publish' => 'publish', + 'publish-edit' => 'edit publication', + 'unpublish' => 'unpublish', + 'delete' => 'delete', + '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', +]; diff --git a/modules/Admin/Language/oc/Charts.php b/modules/Admin/Language/oc/Charts.php new file mode 100644 index 00000000..d9a75a1d --- /dev/null +++ b/modules/Admin/Language/oc/Charts.php @@ -0,0 +1,38 @@ + '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', + '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)', + '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)', +]; diff --git a/modules/Admin/Language/oc/Common.php b/modules/Admin/Language/oc/Common.php new file mode 100644 index 00000000..d97bcf99 --- /dev/null +++ b/modules/Admin/Language/oc/Common.php @@ -0,0 +1,49 @@ + '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', + 'forms' => [ + 'editor' => [ + 'write' => 'Write', + 'preview' => 'Preview', + 'help' => 'Powered by markdown', + ], + 'multiSelect' => [ + 'selectText' => 'Press to select', + 'loadingText' => 'Loading…', + 'noResultsText' => 'No results found', + 'noChoicesText' => 'No choices to choose from', + 'maxItemText' => 'Cannot add more items', + ], + 'upload_file' => 'Upload a file', + 'remote_url' => 'Remote URL', + ], + 'play_episode_button' => [ + 'play' => 'Play', + 'playing' => 'Playing', + ], + 'size_limit' => 'Size limit: {0}.', +]; diff --git a/modules/Admin/Language/oc/Contributor.php b/modules/Admin/Language/oc/Contributor.php new file mode 100644 index 00000000..d0f3b93d --- /dev/null +++ b/modules/Admin/Language/oc/Contributor.php @@ -0,0 +1,41 @@ + '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', + ], + 'roles' => [ + 'podcast_admin' => 'Podcast admin', + ], + 'messages' => [ + '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/Admin/Language/oc/Countries.php b/modules/Admin/Language/oc/Countries.php new file mode 100644 index 00000000..4cd5d9c8 --- /dev/null +++ b/modules/Admin/Language/oc/Countries.php @@ -0,0 +1,264 @@ + 'Andorra', + 'AE' => 'United Arab Emirates', + 'AF' => 'Afghanistan', + 'AG' => 'Antigua and Barbuda', + 'AI' => 'Anguilla', + 'AL' => 'Albania', + 'AM' => 'Armenia', + 'AO' => 'Angola', + 'AQ' => 'Antarctica', + 'AR' => 'Argentina', + 'AS' => 'American Samoa', + 'AT' => 'Austria', + 'AU' => 'Australia', + 'AW' => 'Aruba', + 'AX' => 'Åland Islands', + 'AZ' => 'Azerbaijan', + 'BA' => 'Bosnia and Herzegovina', + 'BB' => 'Barbados', + 'BD' => 'Bangladesh', + 'BE' => 'Belgium', + 'BF' => 'Burkina Faso', + 'BG' => 'Bulgaria', + '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', + 'BS' => 'Bahamas', + 'BT' => 'Bhutan', + 'BV' => 'Bouvet Island', + 'BW' => 'Botswana', + 'BY' => 'Belarus', + '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', + 'CN' => 'China', + 'CO' => 'Colombia', + 'CR' => 'Costa Rica', + 'CU' => 'Cuba', + 'CV' => 'Cape Verde', + 'CW' => 'Curaçao', + 'CX' => 'Christmas Island', + 'CY' => 'Cyprus', + 'CZ' => 'Czech Republic', + 'DE' => 'Germany', + 'DJ' => 'Djibouti', + 'DK' => 'Denmark', + 'DM' => 'Dominica', + 'DO' => 'Dominican Republic', + 'DZ' => 'Algeria', + 'EC' => 'Ecuador', + 'EE' => 'Estonia', + 'EG' => 'Egypt', + 'EH' => 'Western Sahara', + 'ER' => 'Eritrea', + 'ES' => 'Spain', + 'ET' => 'Ethiopia', + 'FI' => 'Finland', + 'FJ' => 'Fiji', + 'FK' => 'Falkland Islands (Malvinas)', + 'FM' => 'Micronesia, Federated States of', + 'FO' => 'Faroe Islands', + 'FR' => 'France', + 'GA' => 'Gabon', + 'GB' => 'United Kingdom', + 'GD' => 'Grenada', + 'GE' => 'Georgia', + 'GF' => 'French Guiana', + 'GG' => 'Guernsey', + 'GH' => 'Ghana', + 'GI' => 'Gibraltar', + 'GL' => 'Greenland', + 'GM' => 'Gambia', + 'GN' => 'Guinea', + 'GP' => 'Guadeloupe', + 'GQ' => 'Equatorial Guinea', + 'GR' => 'Greece', + 'GS' => 'South Georgia and the South Sandwich Islands', + 'GT' => 'Guatemala', + 'GU' => 'Guam', + 'GW' => 'Guinea-Bissau', + 'GY' => 'Guyana', + 'HK' => 'Hong Kong', + 'HM' => 'Heard Island and McDonald Islands', + 'HN' => 'Honduras', + 'HR' => 'Croatia', + 'HT' => 'Haiti', + 'HU' => 'Hungary', + 'ID' => 'Indonesia', + 'IE' => 'Ireland', + 'IL' => 'Israel', + 'IM' => 'Isle of Man', + 'IN' => 'India', + 'IO' => 'British Indian Ocean Territory', + 'IQ' => 'Iraq', + 'IR' => 'Iran, Islamic Republic of', + 'IS' => 'Iceland', + 'IT' => 'Italy', + 'JE' => 'Jersey', + 'JM' => 'Jamaica', + 'JO' => 'Jordan', + 'JP' => 'Japan', + 'KE' => 'Kenya', + 'KG' => 'Kyrgyzstan', + 'KH' => 'Cambodia', + '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", + 'LB' => 'Lebanon', + 'LC' => 'Saint Lucia', + 'LI' => 'Liechtenstein', + 'LK' => 'Sri Lanka', + 'LR' => 'Liberia', + 'LS' => 'Lesotho', + 'LT' => 'Lithuania', + 'LU' => 'Luxembourg', + 'LV' => 'Latvia', + 'LY' => 'Libya', + 'MA' => 'Morocco', + 'MC' => 'Monaco', + 'MD' => 'Moldova, Republic of', + 'ME' => 'Montenegro', + 'MF' => 'Saint Martin (French part)', + 'MG' => 'Madagascar', + 'MH' => 'Marshall Islands', + 'MK' => 'Macedonia, the Former Yugoslav Republic of', + 'ML' => 'Mali', + 'MM' => 'Myanmar', + 'MN' => 'Mongolia', + 'MO' => 'Macao', + 'MP' => 'Northern Mariana Islands', + 'MQ' => 'Martinique', + 'MR' => 'Mauritania', + 'MS' => 'Montserrat', + 'MT' => 'Malta', + 'MU' => 'Mauritius', + 'MV' => 'Maldives', + 'MW' => 'Malawi', + 'MX' => 'Mexico', + 'MY' => 'Malaysia', + 'MZ' => 'Mozambique', + 'N/A' => 'Not Applicable (local IP…)', + 'NA' => 'Namibia', + 'NC' => 'New Caledonia', + 'NE' => 'Niger', + 'NF' => 'Norfolk Island', + 'NG' => 'Nigeria', + 'NI' => 'Nicaragua', + 'NL' => 'Netherlands', + 'NO' => 'Norway', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NU' => 'Niue', + 'NZ' => 'New Zealand', + 'OM' => 'Oman', + 'PA' => 'Panama', + 'PE' => 'Peru', + 'PF' => 'French Polynesia', + 'PG' => 'Papua New Guinea', + 'PH' => 'Philippines', + 'PK' => 'Pakistan', + 'PL' => 'Poland', + 'PM' => 'Saint Pierre and Miquelon', + 'PN' => 'Pitcairn', + 'PR' => 'Puerto Rico', + 'PS' => 'Palestine, State of', + 'PT' => 'Portugal', + 'PW' => 'Palau', + 'PY' => 'Paraguay', + 'QA' => 'Qatar', + 'RE' => 'Réunion', + 'RO' => 'Romania', + 'RS' => 'Serbia', + 'RU' => 'Russian Federation', + 'RW' => 'Rwanda', + 'SA' => 'Saudi Arabia', + 'SB' => 'Solomon Islands', + 'SC' => 'Seychelles', + 'SD' => 'Sudan', + 'SE' => 'Sweden', + 'SG' => 'Singapore', + 'SH' => 'Saint Helena, Ascension and Tristan da Cunha', + 'SI' => 'Slovenia', + 'SJ' => 'Svalbard and Jan Mayen', + 'SK' => 'Slovakia', + 'SL' => 'Sierra Leone', + 'SM' => 'San Marino', + 'SN' => 'Senegal', + 'SO' => 'Somalia', + 'SR' => 'Suriname', + 'SS' => 'South Sudan', + 'ST' => 'Sao Tome and Principe', + 'SV' => 'El Salvador', + 'SX' => 'Sint Maarten (Dutch part)', + 'SY' => 'Syrian Arab Republic', + 'SZ' => 'Swaziland', + 'TC' => 'Turks and Caicos Islands', + 'TD' => 'Chad', + 'TF' => 'French Southern Territories', + 'TG' => 'Togo', + 'TH' => 'Thailand', + 'TJ' => 'Tajikistan', + 'TK' => 'Tokelau', + 'TL' => 'Timor-Leste', + 'TM' => 'Turkmenistan', + 'TN' => 'Tunisia', + 'TO' => 'Tonga', + 'TR' => 'Turkey', + 'TT' => 'Trinidad and Tobago', + 'TV' => 'Tuvalu', + 'TW' => 'Taiwan, Province of China', + 'TZ' => 'Tanzania, United Republic of', + 'UA' => 'Ukraine', + 'UG' => 'Uganda', + 'UM' => 'United States Minor Outlying Islands', + 'US' => 'United States', + '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', + 'VU' => 'Vanuatu', + 'WF' => 'Wallis and Futuna', + 'WS' => 'Samoa', + 'YE' => 'Yemen', + 'YT' => 'Mayotte', + 'ZA' => 'South Africa', + 'ZM' => 'Zambia', + 'ZW' => 'Zimbabwe', +]; diff --git a/modules/Admin/Language/oc/Episode.php b/modules/Admin/Language/oc/Episode.php new file mode 100644 index 00000000..054a23c3 --- /dev/null +++ b/modules/Admin/Language/oc/Episode.php @@ -0,0 +1,165 @@ + 'Season {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_of_comments' => '{numberOfComments, plural, + one {# comment} + other {# comments} + }', + 'all_podcast_episodes' => 'All podcast episodes', + 'back_to_podcast' => 'Go back to podcast', + 'edit' => 'Edit', + 'publish' => 'Publish', + 'publish_edit' => 'Edit publication', + 'unpublish' => 'Unpublish', + 'publish_error' => 'Episode is already published.', + 'publish_edit_error' => 'Episode is already published.', + 'publish_cancel_error' => 'Episode is already published.', + 'unpublish_error' => 'Episode is not published.', + 'delete' => 'Delete', + 'go_to_page' => 'Go to page', + 'create' => 'Add an episode', + 'publication_status' => [ + 'published' => 'Published', + 'scheduled' => 'Scheduled', + 'not_published' => 'Not published', + ], + 'list' => [ + 'episode' => 'Episode', + 'visibility' => 'Visibility', + 'comments' => 'Comments', + 'actions' => 'Actions', + ], + 'messages' => [ + 'createSuccess' => 'Episode has been successfully created!', + 'editSuccess' => 'Episode has been successfully updated!', + 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + ], + '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', + 'cover_hint' => + 'If you do not set a cover, the podcast cover will be used instead.', + 'cover_size_hint' => 'Cover must be squared with at least 1400px wide and tall.', + 'title' => 'Title', + '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', + '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', + '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', + ], + 'parental_advisory' => [ + 'label' => 'Parental advisory', + 'hint' => 'Does the episode contain explicit content?', + 'undefined' => 'undefined', + 'clean' => 'Clean', + 'explicit' => 'Explicit', + ], + 'show_notes_section_title' => 'Show notes', + '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', + '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', + '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', + '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 all platforms', + 'block_hint' => + 'The episode show or hide post. If you want this episode removed from the Apple directory, toggle this on.', + 'submit_create' => 'Create episode', + 'submit_edit' => 'Save episode', + ], + 'publish_form' => [ + 'back_to_episode_dashboard' => 'Back to episode dashboard', + 'post' => 'Your announcement post', + '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', + 'publication_method' => [ + 'now' => 'Now', + 'schedule' => 'Schedule', + ], + 'scheduled_publication_date' => 'Scheduled publication date', + 'scheduled_publication_date_clear' => 'Clear publication date', + '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', + ], + 'unpublish_form' => [ + 'disclaimer' => + "Unpublishing the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + 'understand' => 'I understand, I want to unpublish the episode', + 'submit' => 'Unpublish', + ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + 'understand' => 'I understand, I want to delete the episode', + 'submit' => 'Delete', + ], + 'embed' => [ + 'title' => 'Embeddable player', + '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', + ], +]; diff --git a/modules/Admin/Language/oc/EpisodeNavigation.php b/modules/Admin/Language/oc/EpisodeNavigation.php new file mode 100644 index 00000000..1406e301 --- /dev/null +++ b/modules/Admin/Language/oc/EpisodeNavigation.php @@ -0,0 +1,23 @@ + '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', +]; diff --git a/modules/Admin/Language/oc/Fediverse.php b/modules/Admin/Language/oc/Fediverse.php new file mode 100644 index 00000000..0e4ca66d --- /dev/null +++ b/modules/Admin/Language/oc/Fediverse.php @@ -0,0 +1,32 @@ + [ + '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!', + ], + 'blocked_actors' => 'Blocked accounts', + 'blocked_domains' => 'Blocked domains', + 'block_lists_form' => [ + 'handle' => 'Account handle', + 'handle_hint' => 'Input @username@domain account.', + 'domain' => 'Domain name', + 'submit' => 'Block!', + ], + 'list' => [ + 'actor' => 'Account', + 'domain' => 'Domain name', + 'unblock' => 'Unblock', + ], +]; diff --git a/modules/Admin/Language/oc/Home.php b/modules/Admin/Language/oc/Home.php new file mode 100644 index 00000000..3ff4c04d --- /dev/null +++ b/modules/Admin/Language/oc/Home.php @@ -0,0 +1,14 @@ + 'All podcasts', + 'no_podcast' => 'No podcast found', +]; diff --git a/modules/Admin/Language/oc/Install.php b/modules/Admin/Language/oc/Install.php new file mode 100644 index 00000000..36e373a2 --- /dev/null +++ b/modules/Admin/Language/oc/Install.php @@ -0,0 +1,61 @@ + 'Manual configuration', + 'manual_config_subtitle' => + 'Create a `.env` file with your settings and refresh the page to continue installation.', + 'form' => [ + 'instance_config' => 'Instance configuration', + 'hostname' => 'Hostname', + 'media_base_url' => 'Media base URL', + 'media_base_url_hint' => + 'If you use a CDN and/or an external analytics service, you may set them here.', + '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.', + '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', + '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', + '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', + 'cache_config_hint' => + 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.', + 'cache_handler' => 'Cache handler', + 'cacheHandlerOptions' => [ + 'file' => 'File', + 'redis' => 'Redis', + 'predis' => 'Predis', + ], + 'next' => 'Next', + 'submit' => 'Finish install', + 'create_superadmin' => 'Create your superadmin account', + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + ], + 'messages' => [ + 'createSuperAdminSuccess' => + 'Your superadmin account has been created successfully. Login to start podcasting!', + 'databaseConnectError' => + 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'writeError' => + "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + ], +]; diff --git a/modules/Admin/Language/oc/MyAccount.php b/modules/Admin/Language/oc/MyAccount.php new file mode 100644 index 00000000..6ebbb30e --- /dev/null +++ b/modules/Admin/Language/oc/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/Admin/Language/oc/Navigation.php b/modules/Admin/Language/oc/Navigation.php new file mode 100644 index 00000000..68d4609d --- /dev/null +++ b/modules/Admin/Language/oc/Navigation.php @@ -0,0 +1,41 @@ + 'Toggle sidebar', + 'go_to_website' => 'Go to website', + 'go_to_admin' => 'Go to admin', + 'dashboard' => 'Dashboard', + 'admin' => 'Home', + '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', + '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', + 'account' => [ + 'my-account' => 'My account', + 'change-password' => 'Change password', + 'logout' => 'Logout', + ], +]; diff --git a/modules/Admin/Language/oc/Page.php b/modules/Admin/Language/oc/Page.php new file mode 100644 index 00000000..b6f49de5 --- /dev/null +++ b/modules/Admin/Language/oc/Page.php @@ -0,0 +1,30 @@ + 'Back to home', + 'page' => 'Page', + 'all_pages' => 'All pages', + 'create' => 'New page', + 'go_to_page' => 'Go to page', + 'edit' => 'Edit page', + 'delete' => 'Delete page', + 'form' => [ + 'title' => 'Title', + 'permalink' => 'Permalink', + 'content' => 'Content', + 'submit_create' => 'Create page', + 'submit_edit' => 'Save', + ], + 'messages' => [ + 'createSuccess' => 'The page “{pageTitle}” was created successfully!', + 'editSuccess' => 'The page was successfully updated!', + ], +]; diff --git a/modules/Admin/Language/oc/Pager.php b/modules/Admin/Language/oc/Pager.php new file mode 100644 index 00000000..e25ee638 --- /dev/null +++ b/modules/Admin/Language/oc/Pager.php @@ -0,0 +1,21 @@ + '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.', +]; diff --git a/modules/Admin/Language/oc/Person.php b/modules/Admin/Language/oc/Person.php new file mode 100644 index 00000000..fa9bba21 --- /dev/null +++ b/modules/Admin/Language/oc/Person.php @@ -0,0 +1,65 @@ + 'Persons', + 'all_persons' => 'All persons', + 'no_person' => 'Nobody found!', + 'create' => 'Create a person', + 'view' => 'View person', + 'edit' => 'Edit person', + 'delete' => 'Delete person', + 'messages' => [ + 'createSuccess' => 'Person has been successfully created!', + 'editSuccess' => 'Person has been successfully updated!', + 'deleteSuccess' => 'Person has been removed!', + ], + 'form' => [ + 'avatar' => 'Avatar', + 'avatar_size_hint' => + 'Avatar must be squared with 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', + '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', + ], + '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', + 'persons_hint' => + 'You may select one or several persons with the same roles. You need to create the persons first.', + 'roles' => 'Roles', + 'roles_hint' => + 'You may select none, one or several roles for a person.', + 'submit_add' => 'Add person(s)', + 'remove' => 'Remove', + ], + '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', + 'persons_hint' => + 'You may select one or several persons with the same roles. You need to create the persons first.', + 'roles' => 'Roles', + 'roles_hint' => + 'You may select none, one or several roles for a person.', + 'submit_add' => 'Add person(s)', + 'remove' => 'Remove', + ], + 'credits' => 'Credits', +]; diff --git a/modules/Admin/Language/oc/Platforms.php b/modules/Admin/Language/oc/Platforms.php new file mode 100644 index 00000000..ab17d599 --- /dev/null +++ b/modules/Admin/Language/oc/Platforms.php @@ -0,0 +1,30 @@ + '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', + 'messages' => [ + 'updateSuccess' => 'Platform links have been successfully updated!', + 'removeLinkSuccess' => 'The platform link has been removed.', + 'removeLinkError' => + 'The platform link could not be removed. Try again.', + ], + 'description' => [ + 'podcasting' => 'The podcast ID on this platform', + 'social' => 'The podcast account ID on this platform', + 'funding' => 'Call to action message', + ], +]; diff --git a/modules/Admin/Language/oc/Podcast.php b/modules/Admin/Language/oc/Podcast.php new file mode 100644 index 00000000..d9d0d11b --- /dev/null +++ b/modules/Admin/Language/oc/Podcast.php @@ -0,0 +1,243 @@ + 'All podcasts', + 'no_podcast' => 'No podcast found!', + 'create' => 'Create podcast', + 'import' => 'Import podcast', + 'new_episode' => 'New Episode', + 'view' => 'View podcast', + 'edit' => 'Edit podcast', + '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', + 'messages' => [ + 'createSuccess' => 'Podcast has been successfully created!', + 'editSuccess' => 'Podcast has been successfully updated!', + 'importSuccess' => 'Podcast has been successfully imported!', + ], + '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 with at least 1400px wide and tall.', + 'banner' => 'Podcast banner', + 'banner_size_hint' => 'Banner must have a 3:1 ratio with at least 1500px wide.', + 'banner_delete' => 'Delete podcast banner', + 'title' => 'Title', + 'handle' => 'Handle', + 'handle_hint' => + 'Used to identify the podcast. Uppercase, lowercase, numbers and underscores are accepted.', + 'type' => [ + 'label' => 'Type', + '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.', + ], + 'description' => 'Description', + 'classification_section_title' => 'Classification', + 'classification_section_subtitle' => + 'These fields will impact your audience and competition.', + 'language' => 'Language', + 'category' => 'Category', + 'category_placeholder' => 'Select a category…', + 'other_categories' => 'Other categories', + 'parental_advisory' => [ + 'label' => 'Parental advisory', + 'hint' => 'Does it contain explicit content?', + 'undefined' => 'undefined', + 'clean' => 'Clean', + 'explicit' => 'Explicit', + ], + 'author_section_title' => 'Author', + 'author_section_subtitle' => 'Who is managing the podcast?', + 'owner_name' => 'Owner name', + 'owner_name_hint' => + 'For administrative use only. Visible in the public RSS feed.', + 'owner_email' => 'Owner email', + 'owner_email_hint' => + 'Will be used by most platforms to verify the podcast ownership. Visible in the public RSS feed.', + 'publisher' => 'Publisher', + '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’.', + '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', + 'monetization_section_subtitle' => + 'Earn money thanks to your audience.', + 'payment_pointer' => 'Payment Pointer for Web Monetization', + 'payment_pointer_hint' => + 'This is your where you will receive money thanks to Web Monetization', + 'advanced_section_title' => 'Advanced Parameters', + '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.', + 'partnership' => 'Partnership', + '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', + 'status_section_title' => 'Status', + 'block' => 'Podcast should be hidden from all platforms', + 'complete' => 'Podcast will not be having new episodes', + 'lock' => 'Prevent podcast from being copied', + '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', + ], + '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', + 'design' => 'Design', + 'fashion_and_beauty' => 'Fashion & Beauty', + 'food' => 'Food', + 'performing_arts' => 'Performing Arts', + 'visual_arts' => 'Visual Arts', + 'careers' => 'Careers', + 'entrepreneurship' => 'Entrepreneurship', + 'investing' => 'Investing', + 'management' => 'Management', + 'marketing' => 'Marketing', + 'non_profit' => 'Non-Profit', + 'comedy_interviews' => 'Comedy Interviews', + 'improv' => 'Improv', + 'stand_up' => 'Stand-Up', + 'courses' => 'Courses', + 'how_to' => 'How To', + 'language_learning' => 'Language Learning', + 'self_improvement' => 'Self-Improvement', + 'comedy_fiction' => 'Comedy Fiction', + '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', + 'hinduism' => 'Hinduism', + 'islam' => 'Islam', + 'judaism' => 'Judaism', + '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', + 'baseball' => 'Baseball', + 'basketball' => 'Basketball', + 'cricket' => 'Cricket', + 'fantasy_sports' => 'Fantasy Sports', + 'football' => 'Football', + 'golf' => 'Golf', + 'hockey' => 'Hockey', + 'rugby' => 'Rugby', + 'running' => 'Running', + 'soccer' => 'Soccer', + 'swimming' => 'Swimming', + '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', + ], + 'by' => 'By {publisher}', + 'season' => 'Season {seasonNumber}', + 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'list_of_episodes_season' => + 'Season {seasonNumber} episodes ({episodeCount})', + 'no_episode' => 'No episode found!', + 'follow' => 'Follow', + 'followers' => '{numberOfFollowers, plural, + one {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'sponsor' => 'Sponsor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Listen on', +]; diff --git a/modules/Admin/Language/oc/PodcastImport.php b/modules/Admin/Language/oc/PodcastImport.php new file mode 100644 index 00000000..e9cfc1c4 --- /dev/null +++ b/modules/Admin/Language/oc/PodcastImport.php @@ -0,0 +1,37 @@ + + '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', + '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', + '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', + 'description_field' => + 'Source field used for episode description / show notes', + 'force_renumber' => 'Force episodes renumbering', + 'force_renumber_hint' => + 'Use this if your podcast does not have episode numbers but wish to set them during import.', + 'season_number' => 'Season number', + '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', + 'lock_import' => + 'This feed is protected. You cannot import it. If you are the owner, unprotect it on the origin platform.', + 'submit' => 'Import podcast', +]; diff --git a/modules/Admin/Language/oc/PodcastNavigation.php b/modules/Admin/Language/oc/PodcastNavigation.php new file mode 100644 index 00000000..b6195731 --- /dev/null +++ b/modules/Admin/Language/oc/PodcastNavigation.php @@ -0,0 +1,35 @@ + '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', + 'contributors' => 'Contributors', + 'contributor-list' => 'All contributors', + 'contributor-add' => 'Add contributor', + 'platforms' => 'External platforms', + 'platforms-podcasting' => 'Podcasting', + 'platforms-social' => 'Social networks', + 'platforms-funding' => 'Funding', +]; diff --git a/modules/Admin/Language/oc/Settings.php b/modules/Admin/Language/oc/Settings.php new file mode 100644 index 00000000..0d6368cc --- /dev/null +++ b/modules/Admin/Language/oc/Settings.php @@ -0,0 +1,56 @@ + 'General settings', + '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 with 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!', + ], + '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!', + ], + '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, …)', + '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!', + ], + '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', + 'jacaranda' => 'Jacaranda', + 'onyx' => 'Onyx', + 'submit' => 'Save', + 'setInstanceThemeSuccess' => 'Theme has been updated successfully!', + ], +]; diff --git a/modules/Admin/Language/oc/Soundbite.php b/modules/Admin/Language/oc/Soundbite.php new file mode 100644 index 00000000..a3f828fe --- /dev/null +++ b/modules/Admin/Language/oc/Soundbite.php @@ -0,0 +1,31 @@ + [ + 'title' => 'Soundbites', + 'soundbite' => 'Soundbite', + ], + 'messages' => [ + 'createSuccess' => 'Soundbite has been successfully created!', + 'deleteSuccess' => 'Soundbite has been successfully removed!', + ], + 'form' => [ + 'title' => 'New soundbite', + 'soundbite_title' => 'Soundbite title', + 'start_time' => 'Start at', + 'duration' => 'Duration', + 'submit' => 'Create soundbite', + ], + 'play' => 'Play soundbite', + 'stop' => 'Stop soundbite', + 'create' => 'New soundbite', + 'delete' => 'Delete soundbite', +]; diff --git a/modules/Admin/Language/oc/User.php b/modules/Admin/Language/oc/User.php new file mode 100644 index 00000000..8b2e478b --- /dev/null +++ b/modules/Admin/Language/oc/User.php @@ -0,0 +1,54 @@ + "Edit {username}'s roles", + 'forcePassReset' => 'Force pass reset', + 'ban' => 'Ban', + 'unban' => 'Unban', + 'delete' => 'Delete', + 'create' => 'New user', + 'view' => "{username}'s info", + 'all_users' => 'All users', + 'list' => [ + 'user' => 'User', + 'roles' => 'Roles', + 'banned' => 'Banned?', + ], + 'form' => [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'new_password' => 'New Password', + 'roles' => 'Roles', + 'permissions' => 'Permissions', + 'submit_create' => 'Create user', + 'submit_edit' => 'Save', + 'submit_password_change' => 'Change!', + ], + 'roles' => [ + 'superadmin' => 'Super admin', + ], + 'messages' => [ + 'createSuccess' => + 'User created successfully! {username} will be prompted with a password reset upon first authentication.', + 'rolesEditSuccess' => + "{username}'s roles have been successfully updated.", + 'forcePassResetSuccess' => + '{username} will be prompted with a password reset upon next visit.', + 'banSuccess' => '{username} has been banned.', + 'unbanSuccess' => '{username} has been unbanned.', + 'banSuperAdminError' => + '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteSuperAdminError' => + '{username} is a superadmin, one does not simply delete a superadmin…', + 'deleteSuccess' => '{username} has been deleted.', + ], +]; diff --git a/modules/Admin/Language/oc/Validation.php b/modules/Admin/Language/oc/Validation.php new file mode 100644 index 00000000..750b1968 --- /dev/null +++ b/modules/Admin/Language/oc/Validation.php @@ -0,0 +1,18 @@ + + '{field} is either not an image, or it is not wide or tall enough.', + 'is_image_ratio' => + '{field} is either not an image or not of the right ratio.', + 'validate_url' => + 'The {field} field must be a valid URL (eg. https://example.com/).', +]; diff --git a/modules/Admin/Language/oc/VideoClip.php b/modules/Admin/Language/oc/VideoClip.php new file mode 100644 index 00000000..638de697 --- /dev/null +++ b/modules/Admin/Language/oc/VideoClip.php @@ -0,0 +1,72 @@ + [ + 'title' => 'Video clips', + '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!', + ], + 'clip' => 'Clip', + 'duration' => 'Job duration', + ], + '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', + '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!', + ], + 'format' => [ + 'landscape' => 'Landscape', + 'portrait' => 'Portrait', + 'squared' => 'Squared', + ], + 'form' => [ + 'title' => 'New video clip', + 'params_section_title' => 'Video clip parameters', + 'clip_title' => 'Clip title', + '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.', + ], + 'theme' => 'Select a theme', + 'start_time' => 'Start at', + 'duration' => 'Duration', + 'trim_start' => 'Trim start', + 'trim_end' => 'Trim end', + 'submit' => 'Create video clip', + ], + '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!', + 'ffmpeg' => 'FFmpeg', + 'gd' => 'Graphics Draw (GD)', + 'freetype' => 'Freetype library for GD', + 'transcript' => 'Transcript file (.srt)', + ], +]; diff --git a/modules/Admin/Language/pt/Admin.php b/modules/Admin/Language/pt/Admin.php new file mode 100644 index 00000000..5e394237 --- /dev/null +++ b/modules/Admin/Language/pt/Admin.php @@ -0,0 +1,15 @@ + 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', + 'choose_interact' => 'Choose how to interact', +]; diff --git a/modules/Admin/Language/pt/Breadcrumb.php b/modules/Admin/Language/pt/Breadcrumb.php new file mode 100644 index 00000000..d9400ca7 --- /dev/null +++ b/modules/Admin/Language/pt/Breadcrumb.php @@ -0,0 +1,48 @@ + 'breadcrumb', + config('Admin') + ->gateway => 'Home', + 'podcasts' => 'podcasts', + 'episodes' => 'episodes', + 'contributors' => 'contributors', + 'pages' => 'pages', + 'settings' => 'settings', + 'theme' => 'theme', + 'add' => 'add', + 'new' => 'new', + 'edit' => 'edit', + 'persons' => 'persons', + 'publish' => 'publish', + 'publish-edit' => 'edit publication', + 'unpublish' => 'unpublish', + 'delete' => 'delete', + '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', +]; diff --git a/modules/Admin/Language/pt/Charts.php b/modules/Admin/Language/pt/Charts.php new file mode 100644 index 00000000..d9a75a1d --- /dev/null +++ b/modules/Admin/Language/pt/Charts.php @@ -0,0 +1,38 @@ + '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', + '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)', + '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)', +]; diff --git a/modules/Admin/Language/pt/Common.php b/modules/Admin/Language/pt/Common.php new file mode 100644 index 00000000..d97bcf99 --- /dev/null +++ b/modules/Admin/Language/pt/Common.php @@ -0,0 +1,49 @@ + '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', + 'forms' => [ + 'editor' => [ + 'write' => 'Write', + 'preview' => 'Preview', + 'help' => 'Powered by markdown', + ], + 'multiSelect' => [ + 'selectText' => 'Press to select', + 'loadingText' => 'Loading…', + 'noResultsText' => 'No results found', + 'noChoicesText' => 'No choices to choose from', + 'maxItemText' => 'Cannot add more items', + ], + 'upload_file' => 'Upload a file', + 'remote_url' => 'Remote URL', + ], + 'play_episode_button' => [ + 'play' => 'Play', + 'playing' => 'Playing', + ], + 'size_limit' => 'Size limit: {0}.', +]; diff --git a/modules/Admin/Language/pt/Contributor.php b/modules/Admin/Language/pt/Contributor.php new file mode 100644 index 00000000..d0f3b93d --- /dev/null +++ b/modules/Admin/Language/pt/Contributor.php @@ -0,0 +1,41 @@ + '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', + ], + 'roles' => [ + 'podcast_admin' => 'Podcast admin', + ], + 'messages' => [ + '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/Admin/Language/pt/Countries.php b/modules/Admin/Language/pt/Countries.php new file mode 100644 index 00000000..4cd5d9c8 --- /dev/null +++ b/modules/Admin/Language/pt/Countries.php @@ -0,0 +1,264 @@ + 'Andorra', + 'AE' => 'United Arab Emirates', + 'AF' => 'Afghanistan', + 'AG' => 'Antigua and Barbuda', + 'AI' => 'Anguilla', + 'AL' => 'Albania', + 'AM' => 'Armenia', + 'AO' => 'Angola', + 'AQ' => 'Antarctica', + 'AR' => 'Argentina', + 'AS' => 'American Samoa', + 'AT' => 'Austria', + 'AU' => 'Australia', + 'AW' => 'Aruba', + 'AX' => 'Åland Islands', + 'AZ' => 'Azerbaijan', + 'BA' => 'Bosnia and Herzegovina', + 'BB' => 'Barbados', + 'BD' => 'Bangladesh', + 'BE' => 'Belgium', + 'BF' => 'Burkina Faso', + 'BG' => 'Bulgaria', + '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', + 'BS' => 'Bahamas', + 'BT' => 'Bhutan', + 'BV' => 'Bouvet Island', + 'BW' => 'Botswana', + 'BY' => 'Belarus', + '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', + 'CN' => 'China', + 'CO' => 'Colombia', + 'CR' => 'Costa Rica', + 'CU' => 'Cuba', + 'CV' => 'Cape Verde', + 'CW' => 'Curaçao', + 'CX' => 'Christmas Island', + 'CY' => 'Cyprus', + 'CZ' => 'Czech Republic', + 'DE' => 'Germany', + 'DJ' => 'Djibouti', + 'DK' => 'Denmark', + 'DM' => 'Dominica', + 'DO' => 'Dominican Republic', + 'DZ' => 'Algeria', + 'EC' => 'Ecuador', + 'EE' => 'Estonia', + 'EG' => 'Egypt', + 'EH' => 'Western Sahara', + 'ER' => 'Eritrea', + 'ES' => 'Spain', + 'ET' => 'Ethiopia', + 'FI' => 'Finland', + 'FJ' => 'Fiji', + 'FK' => 'Falkland Islands (Malvinas)', + 'FM' => 'Micronesia, Federated States of', + 'FO' => 'Faroe Islands', + 'FR' => 'France', + 'GA' => 'Gabon', + 'GB' => 'United Kingdom', + 'GD' => 'Grenada', + 'GE' => 'Georgia', + 'GF' => 'French Guiana', + 'GG' => 'Guernsey', + 'GH' => 'Ghana', + 'GI' => 'Gibraltar', + 'GL' => 'Greenland', + 'GM' => 'Gambia', + 'GN' => 'Guinea', + 'GP' => 'Guadeloupe', + 'GQ' => 'Equatorial Guinea', + 'GR' => 'Greece', + 'GS' => 'South Georgia and the South Sandwich Islands', + 'GT' => 'Guatemala', + 'GU' => 'Guam', + 'GW' => 'Guinea-Bissau', + 'GY' => 'Guyana', + 'HK' => 'Hong Kong', + 'HM' => 'Heard Island and McDonald Islands', + 'HN' => 'Honduras', + 'HR' => 'Croatia', + 'HT' => 'Haiti', + 'HU' => 'Hungary', + 'ID' => 'Indonesia', + 'IE' => 'Ireland', + 'IL' => 'Israel', + 'IM' => 'Isle of Man', + 'IN' => 'India', + 'IO' => 'British Indian Ocean Territory', + 'IQ' => 'Iraq', + 'IR' => 'Iran, Islamic Republic of', + 'IS' => 'Iceland', + 'IT' => 'Italy', + 'JE' => 'Jersey', + 'JM' => 'Jamaica', + 'JO' => 'Jordan', + 'JP' => 'Japan', + 'KE' => 'Kenya', + 'KG' => 'Kyrgyzstan', + 'KH' => 'Cambodia', + '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", + 'LB' => 'Lebanon', + 'LC' => 'Saint Lucia', + 'LI' => 'Liechtenstein', + 'LK' => 'Sri Lanka', + 'LR' => 'Liberia', + 'LS' => 'Lesotho', + 'LT' => 'Lithuania', + 'LU' => 'Luxembourg', + 'LV' => 'Latvia', + 'LY' => 'Libya', + 'MA' => 'Morocco', + 'MC' => 'Monaco', + 'MD' => 'Moldova, Republic of', + 'ME' => 'Montenegro', + 'MF' => 'Saint Martin (French part)', + 'MG' => 'Madagascar', + 'MH' => 'Marshall Islands', + 'MK' => 'Macedonia, the Former Yugoslav Republic of', + 'ML' => 'Mali', + 'MM' => 'Myanmar', + 'MN' => 'Mongolia', + 'MO' => 'Macao', + 'MP' => 'Northern Mariana Islands', + 'MQ' => 'Martinique', + 'MR' => 'Mauritania', + 'MS' => 'Montserrat', + 'MT' => 'Malta', + 'MU' => 'Mauritius', + 'MV' => 'Maldives', + 'MW' => 'Malawi', + 'MX' => 'Mexico', + 'MY' => 'Malaysia', + 'MZ' => 'Mozambique', + 'N/A' => 'Not Applicable (local IP…)', + 'NA' => 'Namibia', + 'NC' => 'New Caledonia', + 'NE' => 'Niger', + 'NF' => 'Norfolk Island', + 'NG' => 'Nigeria', + 'NI' => 'Nicaragua', + 'NL' => 'Netherlands', + 'NO' => 'Norway', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NU' => 'Niue', + 'NZ' => 'New Zealand', + 'OM' => 'Oman', + 'PA' => 'Panama', + 'PE' => 'Peru', + 'PF' => 'French Polynesia', + 'PG' => 'Papua New Guinea', + 'PH' => 'Philippines', + 'PK' => 'Pakistan', + 'PL' => 'Poland', + 'PM' => 'Saint Pierre and Miquelon', + 'PN' => 'Pitcairn', + 'PR' => 'Puerto Rico', + 'PS' => 'Palestine, State of', + 'PT' => 'Portugal', + 'PW' => 'Palau', + 'PY' => 'Paraguay', + 'QA' => 'Qatar', + 'RE' => 'Réunion', + 'RO' => 'Romania', + 'RS' => 'Serbia', + 'RU' => 'Russian Federation', + 'RW' => 'Rwanda', + 'SA' => 'Saudi Arabia', + 'SB' => 'Solomon Islands', + 'SC' => 'Seychelles', + 'SD' => 'Sudan', + 'SE' => 'Sweden', + 'SG' => 'Singapore', + 'SH' => 'Saint Helena, Ascension and Tristan da Cunha', + 'SI' => 'Slovenia', + 'SJ' => 'Svalbard and Jan Mayen', + 'SK' => 'Slovakia', + 'SL' => 'Sierra Leone', + 'SM' => 'San Marino', + 'SN' => 'Senegal', + 'SO' => 'Somalia', + 'SR' => 'Suriname', + 'SS' => 'South Sudan', + 'ST' => 'Sao Tome and Principe', + 'SV' => 'El Salvador', + 'SX' => 'Sint Maarten (Dutch part)', + 'SY' => 'Syrian Arab Republic', + 'SZ' => 'Swaziland', + 'TC' => 'Turks and Caicos Islands', + 'TD' => 'Chad', + 'TF' => 'French Southern Territories', + 'TG' => 'Togo', + 'TH' => 'Thailand', + 'TJ' => 'Tajikistan', + 'TK' => 'Tokelau', + 'TL' => 'Timor-Leste', + 'TM' => 'Turkmenistan', + 'TN' => 'Tunisia', + 'TO' => 'Tonga', + 'TR' => 'Turkey', + 'TT' => 'Trinidad and Tobago', + 'TV' => 'Tuvalu', + 'TW' => 'Taiwan, Province of China', + 'TZ' => 'Tanzania, United Republic of', + 'UA' => 'Ukraine', + 'UG' => 'Uganda', + 'UM' => 'United States Minor Outlying Islands', + 'US' => 'United States', + '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', + 'VU' => 'Vanuatu', + 'WF' => 'Wallis and Futuna', + 'WS' => 'Samoa', + 'YE' => 'Yemen', + 'YT' => 'Mayotte', + 'ZA' => 'South Africa', + 'ZM' => 'Zambia', + 'ZW' => 'Zimbabwe', +]; diff --git a/modules/Admin/Language/pt/Episode.php b/modules/Admin/Language/pt/Episode.php new file mode 100644 index 00000000..054a23c3 --- /dev/null +++ b/modules/Admin/Language/pt/Episode.php @@ -0,0 +1,165 @@ + 'Season {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_of_comments' => '{numberOfComments, plural, + one {# comment} + other {# comments} + }', + 'all_podcast_episodes' => 'All podcast episodes', + 'back_to_podcast' => 'Go back to podcast', + 'edit' => 'Edit', + 'publish' => 'Publish', + 'publish_edit' => 'Edit publication', + 'unpublish' => 'Unpublish', + 'publish_error' => 'Episode is already published.', + 'publish_edit_error' => 'Episode is already published.', + 'publish_cancel_error' => 'Episode is already published.', + 'unpublish_error' => 'Episode is not published.', + 'delete' => 'Delete', + 'go_to_page' => 'Go to page', + 'create' => 'Add an episode', + 'publication_status' => [ + 'published' => 'Published', + 'scheduled' => 'Scheduled', + 'not_published' => 'Not published', + ], + 'list' => [ + 'episode' => 'Episode', + 'visibility' => 'Visibility', + 'comments' => 'Comments', + 'actions' => 'Actions', + ], + 'messages' => [ + 'createSuccess' => 'Episode has been successfully created!', + 'editSuccess' => 'Episode has been successfully updated!', + 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + ], + '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', + 'cover_hint' => + 'If you do not set a cover, the podcast cover will be used instead.', + 'cover_size_hint' => 'Cover must be squared with at least 1400px wide and tall.', + 'title' => 'Title', + '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', + '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', + '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', + ], + 'parental_advisory' => [ + 'label' => 'Parental advisory', + 'hint' => 'Does the episode contain explicit content?', + 'undefined' => 'undefined', + 'clean' => 'Clean', + 'explicit' => 'Explicit', + ], + 'show_notes_section_title' => 'Show notes', + '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', + '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', + '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', + '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 all platforms', + 'block_hint' => + 'The episode show or hide post. If you want this episode removed from the Apple directory, toggle this on.', + 'submit_create' => 'Create episode', + 'submit_edit' => 'Save episode', + ], + 'publish_form' => [ + 'back_to_episode_dashboard' => 'Back to episode dashboard', + 'post' => 'Your announcement post', + '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', + 'publication_method' => [ + 'now' => 'Now', + 'schedule' => 'Schedule', + ], + 'scheduled_publication_date' => 'Scheduled publication date', + 'scheduled_publication_date_clear' => 'Clear publication date', + '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', + ], + 'unpublish_form' => [ + 'disclaimer' => + "Unpublishing the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + 'understand' => 'I understand, I want to unpublish the episode', + 'submit' => 'Unpublish', + ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + 'understand' => 'I understand, I want to delete the episode', + 'submit' => 'Delete', + ], + 'embed' => [ + 'title' => 'Embeddable player', + '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', + ], +]; diff --git a/modules/Admin/Language/pt/EpisodeNavigation.php b/modules/Admin/Language/pt/EpisodeNavigation.php new file mode 100644 index 00000000..1406e301 --- /dev/null +++ b/modules/Admin/Language/pt/EpisodeNavigation.php @@ -0,0 +1,23 @@ + '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', +]; diff --git a/modules/Admin/Language/pt/Fediverse.php b/modules/Admin/Language/pt/Fediverse.php new file mode 100644 index 00000000..0e4ca66d --- /dev/null +++ b/modules/Admin/Language/pt/Fediverse.php @@ -0,0 +1,32 @@ + [ + '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!', + ], + 'blocked_actors' => 'Blocked accounts', + 'blocked_domains' => 'Blocked domains', + 'block_lists_form' => [ + 'handle' => 'Account handle', + 'handle_hint' => 'Input @username@domain account.', + 'domain' => 'Domain name', + 'submit' => 'Block!', + ], + 'list' => [ + 'actor' => 'Account', + 'domain' => 'Domain name', + 'unblock' => 'Unblock', + ], +]; diff --git a/modules/Admin/Language/pt/Home.php b/modules/Admin/Language/pt/Home.php new file mode 100644 index 00000000..3ff4c04d --- /dev/null +++ b/modules/Admin/Language/pt/Home.php @@ -0,0 +1,14 @@ + 'All podcasts', + 'no_podcast' => 'No podcast found', +]; diff --git a/modules/Admin/Language/pt/Install.php b/modules/Admin/Language/pt/Install.php new file mode 100644 index 00000000..36e373a2 --- /dev/null +++ b/modules/Admin/Language/pt/Install.php @@ -0,0 +1,61 @@ + 'Manual configuration', + 'manual_config_subtitle' => + 'Create a `.env` file with your settings and refresh the page to continue installation.', + 'form' => [ + 'instance_config' => 'Instance configuration', + 'hostname' => 'Hostname', + 'media_base_url' => 'Media base URL', + 'media_base_url_hint' => + 'If you use a CDN and/or an external analytics service, you may set them here.', + '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.', + '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', + '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', + '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', + 'cache_config_hint' => + 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.', + 'cache_handler' => 'Cache handler', + 'cacheHandlerOptions' => [ + 'file' => 'File', + 'redis' => 'Redis', + 'predis' => 'Predis', + ], + 'next' => 'Next', + 'submit' => 'Finish install', + 'create_superadmin' => 'Create your superadmin account', + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + ], + 'messages' => [ + 'createSuperAdminSuccess' => + 'Your superadmin account has been created successfully. Login to start podcasting!', + 'databaseConnectError' => + 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'writeError' => + "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + ], +]; diff --git a/modules/Admin/Language/pt/MyAccount.php b/modules/Admin/Language/pt/MyAccount.php new file mode 100644 index 00000000..6ebbb30e --- /dev/null +++ b/modules/Admin/Language/pt/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/Admin/Language/pt/Navigation.php b/modules/Admin/Language/pt/Navigation.php new file mode 100644 index 00000000..68d4609d --- /dev/null +++ b/modules/Admin/Language/pt/Navigation.php @@ -0,0 +1,41 @@ + 'Toggle sidebar', + 'go_to_website' => 'Go to website', + 'go_to_admin' => 'Go to admin', + 'dashboard' => 'Dashboard', + 'admin' => 'Home', + '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', + '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', + 'account' => [ + 'my-account' => 'My account', + 'change-password' => 'Change password', + 'logout' => 'Logout', + ], +]; diff --git a/modules/Admin/Language/pt/Page.php b/modules/Admin/Language/pt/Page.php new file mode 100644 index 00000000..b6f49de5 --- /dev/null +++ b/modules/Admin/Language/pt/Page.php @@ -0,0 +1,30 @@ + 'Back to home', + 'page' => 'Page', + 'all_pages' => 'All pages', + 'create' => 'New page', + 'go_to_page' => 'Go to page', + 'edit' => 'Edit page', + 'delete' => 'Delete page', + 'form' => [ + 'title' => 'Title', + 'permalink' => 'Permalink', + 'content' => 'Content', + 'submit_create' => 'Create page', + 'submit_edit' => 'Save', + ], + 'messages' => [ + 'createSuccess' => 'The page “{pageTitle}” was created successfully!', + 'editSuccess' => 'The page was successfully updated!', + ], +]; diff --git a/modules/Admin/Language/pt/Pager.php b/modules/Admin/Language/pt/Pager.php new file mode 100644 index 00000000..e25ee638 --- /dev/null +++ b/modules/Admin/Language/pt/Pager.php @@ -0,0 +1,21 @@ + '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.', +]; diff --git a/modules/Admin/Language/pt/Person.php b/modules/Admin/Language/pt/Person.php new file mode 100644 index 00000000..fa9bba21 --- /dev/null +++ b/modules/Admin/Language/pt/Person.php @@ -0,0 +1,65 @@ + 'Persons', + 'all_persons' => 'All persons', + 'no_person' => 'Nobody found!', + 'create' => 'Create a person', + 'view' => 'View person', + 'edit' => 'Edit person', + 'delete' => 'Delete person', + 'messages' => [ + 'createSuccess' => 'Person has been successfully created!', + 'editSuccess' => 'Person has been successfully updated!', + 'deleteSuccess' => 'Person has been removed!', + ], + 'form' => [ + 'avatar' => 'Avatar', + 'avatar_size_hint' => + 'Avatar must be squared with 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', + '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', + ], + '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', + 'persons_hint' => + 'You may select one or several persons with the same roles. You need to create the persons first.', + 'roles' => 'Roles', + 'roles_hint' => + 'You may select none, one or several roles for a person.', + 'submit_add' => 'Add person(s)', + 'remove' => 'Remove', + ], + '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', + 'persons_hint' => + 'You may select one or several persons with the same roles. You need to create the persons first.', + 'roles' => 'Roles', + 'roles_hint' => + 'You may select none, one or several roles for a person.', + 'submit_add' => 'Add person(s)', + 'remove' => 'Remove', + ], + 'credits' => 'Credits', +]; diff --git a/modules/Admin/Language/pt/Platforms.php b/modules/Admin/Language/pt/Platforms.php new file mode 100644 index 00000000..ab17d599 --- /dev/null +++ b/modules/Admin/Language/pt/Platforms.php @@ -0,0 +1,30 @@ + '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', + 'messages' => [ + 'updateSuccess' => 'Platform links have been successfully updated!', + 'removeLinkSuccess' => 'The platform link has been removed.', + 'removeLinkError' => + 'The platform link could not be removed. Try again.', + ], + 'description' => [ + 'podcasting' => 'The podcast ID on this platform', + 'social' => 'The podcast account ID on this platform', + 'funding' => 'Call to action message', + ], +]; diff --git a/modules/Admin/Language/pt/Podcast.php b/modules/Admin/Language/pt/Podcast.php new file mode 100644 index 00000000..d9d0d11b --- /dev/null +++ b/modules/Admin/Language/pt/Podcast.php @@ -0,0 +1,243 @@ + 'All podcasts', + 'no_podcast' => 'No podcast found!', + 'create' => 'Create podcast', + 'import' => 'Import podcast', + 'new_episode' => 'New Episode', + 'view' => 'View podcast', + 'edit' => 'Edit podcast', + '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', + 'messages' => [ + 'createSuccess' => 'Podcast has been successfully created!', + 'editSuccess' => 'Podcast has been successfully updated!', + 'importSuccess' => 'Podcast has been successfully imported!', + ], + '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 with at least 1400px wide and tall.', + 'banner' => 'Podcast banner', + 'banner_size_hint' => 'Banner must have a 3:1 ratio with at least 1500px wide.', + 'banner_delete' => 'Delete podcast banner', + 'title' => 'Title', + 'handle' => 'Handle', + 'handle_hint' => + 'Used to identify the podcast. Uppercase, lowercase, numbers and underscores are accepted.', + 'type' => [ + 'label' => 'Type', + '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.', + ], + 'description' => 'Description', + 'classification_section_title' => 'Classification', + 'classification_section_subtitle' => + 'These fields will impact your audience and competition.', + 'language' => 'Language', + 'category' => 'Category', + 'category_placeholder' => 'Select a category…', + 'other_categories' => 'Other categories', + 'parental_advisory' => [ + 'label' => 'Parental advisory', + 'hint' => 'Does it contain explicit content?', + 'undefined' => 'undefined', + 'clean' => 'Clean', + 'explicit' => 'Explicit', + ], + 'author_section_title' => 'Author', + 'author_section_subtitle' => 'Who is managing the podcast?', + 'owner_name' => 'Owner name', + 'owner_name_hint' => + 'For administrative use only. Visible in the public RSS feed.', + 'owner_email' => 'Owner email', + 'owner_email_hint' => + 'Will be used by most platforms to verify the podcast ownership. Visible in the public RSS feed.', + 'publisher' => 'Publisher', + '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’.', + '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', + 'monetization_section_subtitle' => + 'Earn money thanks to your audience.', + 'payment_pointer' => 'Payment Pointer for Web Monetization', + 'payment_pointer_hint' => + 'This is your where you will receive money thanks to Web Monetization', + 'advanced_section_title' => 'Advanced Parameters', + '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.', + 'partnership' => 'Partnership', + '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', + 'status_section_title' => 'Status', + 'block' => 'Podcast should be hidden from all platforms', + 'complete' => 'Podcast will not be having new episodes', + 'lock' => 'Prevent podcast from being copied', + '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', + ], + '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', + 'design' => 'Design', + 'fashion_and_beauty' => 'Fashion & Beauty', + 'food' => 'Food', + 'performing_arts' => 'Performing Arts', + 'visual_arts' => 'Visual Arts', + 'careers' => 'Careers', + 'entrepreneurship' => 'Entrepreneurship', + 'investing' => 'Investing', + 'management' => 'Management', + 'marketing' => 'Marketing', + 'non_profit' => 'Non-Profit', + 'comedy_interviews' => 'Comedy Interviews', + 'improv' => 'Improv', + 'stand_up' => 'Stand-Up', + 'courses' => 'Courses', + 'how_to' => 'How To', + 'language_learning' => 'Language Learning', + 'self_improvement' => 'Self-Improvement', + 'comedy_fiction' => 'Comedy Fiction', + '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', + 'hinduism' => 'Hinduism', + 'islam' => 'Islam', + 'judaism' => 'Judaism', + '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', + 'baseball' => 'Baseball', + 'basketball' => 'Basketball', + 'cricket' => 'Cricket', + 'fantasy_sports' => 'Fantasy Sports', + 'football' => 'Football', + 'golf' => 'Golf', + 'hockey' => 'Hockey', + 'rugby' => 'Rugby', + 'running' => 'Running', + 'soccer' => 'Soccer', + 'swimming' => 'Swimming', + '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', + ], + 'by' => 'By {publisher}', + 'season' => 'Season {seasonNumber}', + 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'list_of_episodes_season' => + 'Season {seasonNumber} episodes ({episodeCount})', + 'no_episode' => 'No episode found!', + 'follow' => 'Follow', + 'followers' => '{numberOfFollowers, plural, + one {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'sponsor' => 'Sponsor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Listen on', +]; diff --git a/modules/Admin/Language/pt/PodcastImport.php b/modules/Admin/Language/pt/PodcastImport.php new file mode 100644 index 00000000..e9cfc1c4 --- /dev/null +++ b/modules/Admin/Language/pt/PodcastImport.php @@ -0,0 +1,37 @@ + + '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', + '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', + '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', + 'description_field' => + 'Source field used for episode description / show notes', + 'force_renumber' => 'Force episodes renumbering', + 'force_renumber_hint' => + 'Use this if your podcast does not have episode numbers but wish to set them during import.', + 'season_number' => 'Season number', + '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', + 'lock_import' => + 'This feed is protected. You cannot import it. If you are the owner, unprotect it on the origin platform.', + 'submit' => 'Import podcast', +]; diff --git a/modules/Admin/Language/pt/PodcastNavigation.php b/modules/Admin/Language/pt/PodcastNavigation.php new file mode 100644 index 00000000..b6195731 --- /dev/null +++ b/modules/Admin/Language/pt/PodcastNavigation.php @@ -0,0 +1,35 @@ + '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', + 'contributors' => 'Contributors', + 'contributor-list' => 'All contributors', + 'contributor-add' => 'Add contributor', + 'platforms' => 'External platforms', + 'platforms-podcasting' => 'Podcasting', + 'platforms-social' => 'Social networks', + 'platforms-funding' => 'Funding', +]; diff --git a/modules/Admin/Language/pt/Settings.php b/modules/Admin/Language/pt/Settings.php new file mode 100644 index 00000000..0d6368cc --- /dev/null +++ b/modules/Admin/Language/pt/Settings.php @@ -0,0 +1,56 @@ + 'General settings', + '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 with 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!', + ], + '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!', + ], + '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, …)', + '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!', + ], + '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', + 'jacaranda' => 'Jacaranda', + 'onyx' => 'Onyx', + 'submit' => 'Save', + 'setInstanceThemeSuccess' => 'Theme has been updated successfully!', + ], +]; diff --git a/modules/Admin/Language/pt/Soundbite.php b/modules/Admin/Language/pt/Soundbite.php new file mode 100644 index 00000000..a3f828fe --- /dev/null +++ b/modules/Admin/Language/pt/Soundbite.php @@ -0,0 +1,31 @@ + [ + 'title' => 'Soundbites', + 'soundbite' => 'Soundbite', + ], + 'messages' => [ + 'createSuccess' => 'Soundbite has been successfully created!', + 'deleteSuccess' => 'Soundbite has been successfully removed!', + ], + 'form' => [ + 'title' => 'New soundbite', + 'soundbite_title' => 'Soundbite title', + 'start_time' => 'Start at', + 'duration' => 'Duration', + 'submit' => 'Create soundbite', + ], + 'play' => 'Play soundbite', + 'stop' => 'Stop soundbite', + 'create' => 'New soundbite', + 'delete' => 'Delete soundbite', +]; diff --git a/modules/Admin/Language/pt/User.php b/modules/Admin/Language/pt/User.php new file mode 100644 index 00000000..8b2e478b --- /dev/null +++ b/modules/Admin/Language/pt/User.php @@ -0,0 +1,54 @@ + "Edit {username}'s roles", + 'forcePassReset' => 'Force pass reset', + 'ban' => 'Ban', + 'unban' => 'Unban', + 'delete' => 'Delete', + 'create' => 'New user', + 'view' => "{username}'s info", + 'all_users' => 'All users', + 'list' => [ + 'user' => 'User', + 'roles' => 'Roles', + 'banned' => 'Banned?', + ], + 'form' => [ + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + 'new_password' => 'New Password', + 'roles' => 'Roles', + 'permissions' => 'Permissions', + 'submit_create' => 'Create user', + 'submit_edit' => 'Save', + 'submit_password_change' => 'Change!', + ], + 'roles' => [ + 'superadmin' => 'Super admin', + ], + 'messages' => [ + 'createSuccess' => + 'User created successfully! {username} will be prompted with a password reset upon first authentication.', + 'rolesEditSuccess' => + "{username}'s roles have been successfully updated.", + 'forcePassResetSuccess' => + '{username} will be prompted with a password reset upon next visit.', + 'banSuccess' => '{username} has been banned.', + 'unbanSuccess' => '{username} has been unbanned.', + 'banSuperAdminError' => + '{username} is a superadmin, one does not simply ban a superadmin…', + 'deleteSuperAdminError' => + '{username} is a superadmin, one does not simply delete a superadmin…', + 'deleteSuccess' => '{username} has been deleted.', + ], +]; diff --git a/modules/Admin/Language/pt/Validation.php b/modules/Admin/Language/pt/Validation.php new file mode 100644 index 00000000..750b1968 --- /dev/null +++ b/modules/Admin/Language/pt/Validation.php @@ -0,0 +1,18 @@ + + '{field} is either not an image, or it is not wide or tall enough.', + 'is_image_ratio' => + '{field} is either not an image or not of the right ratio.', + 'validate_url' => + 'The {field} field must be a valid URL (eg. https://example.com/).', +]; diff --git a/modules/Admin/Language/pt/VideoClip.php b/modules/Admin/Language/pt/VideoClip.php new file mode 100644 index 00000000..638de697 --- /dev/null +++ b/modules/Admin/Language/pt/VideoClip.php @@ -0,0 +1,72 @@ + [ + 'title' => 'Video clips', + '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!', + ], + 'clip' => 'Clip', + 'duration' => 'Job duration', + ], + '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', + '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!', + ], + 'format' => [ + 'landscape' => 'Landscape', + 'portrait' => 'Portrait', + 'squared' => 'Squared', + ], + 'form' => [ + 'title' => 'New video clip', + 'params_section_title' => 'Video clip parameters', + 'clip_title' => 'Clip title', + '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.', + ], + 'theme' => 'Select a theme', + 'start_time' => 'Start at', + 'duration' => 'Duration', + 'trim_start' => 'Trim start', + 'trim_end' => 'Trim end', + 'submit' => 'Create video clip', + ], + '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!', + 'ffmpeg' => 'FFmpeg', + 'gd' => 'Graphics Draw (GD)', + 'freetype' => 'Freetype library for GD', + 'transcript' => 'Transcript file (.srt)', + ], +]; diff --git a/modules/Install/Language/el/Install.php b/modules/Install/Language/el/Install.php index 42ea1b19..c8edb139 100644 --- a/modules/Install/Language/el/Install.php +++ b/modules/Install/Language/el/Install.php @@ -15,48 +15,48 @@ return [ 'Δημιουργήστε ένα αρχείο `.env` με τις ρυθμίσεις σας και ανανεώστε τη σελίδα για να συνεχίσετε την εγκατάσταση.', 'form' => [ 'instance_config' => 'Ρύθμιση παραμέτρων εμφάνισης', - 'hostname' => 'Hostname', - 'media_base_url' => 'Media base URL', + 'hostname' => 'Όνομα κεντρικού υπολογιστή', + 'media_base_url' => 'Διεύθυνση URL πολυμέσων', 'media_base_url_hint' => - 'If you use a CDN and/or an external analytics service, you may set them here.', - 'admin_gateway' => 'Admin gateway', + 'Εάν χρησιμοποιείτε μια υπηρεσία CDN και/ ή μια εξωτερική υπηρεσία ανάλυσης, μπορείτε να την ρυθμίσετε εδώ.', + '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.', - 'auth_gateway' => 'Auth gateway', + 'Η διαδρομή πρόσβασης στην περιοχή διαχειριστή (π.χ. https://example.com/cp-admin). Έχει οριστεί από προεπιλογή ως cp-admin, σας συνιστούμε να την αλλάξετε για λόγους ασφαλείας.', + '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', + 'Η διαδρομή πρόσβασης στην περιοχή διαχειριστή (π.χ. https://example.com/cp-auth). Έχει οριστεί από προεπιλογή ως cp-admin, σας συνιστούμε να την αλλάξετε για λόγους ασφαλείας.', + 'database_config' => 'Ρυθμίσεις βάσης δεδομένων', '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 πρέπει να συνδεθεί στη βάση δεδομένων MySQL (ή MariaDB). Αν δεν έχετε αυτές τις απαιτούμενες πληροφορίες, παρακαλούμε επικοινωνήστε με το διαχειριστή του διακομιστή σας.', + 'db_hostname' => 'Όνομα κεντρικού υπολογιστή βάσης δεδομένων', + 'db_name' => 'Όνομα βάσης δεδομένων', + 'db_username' => 'Όνομα Χρήστη Βάσης Δεδομένων', + 'db_password' => 'Κωδικός πρόσβασης βάσης δεδομένων', + 'db_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', + "Το πρόθεμα των ονομασιών πινάκων Castopod αφήστε σαν να μην ξέρετε τι σημαίνει.", + 'cache_config' => 'Διαμόρφωση cache', 'cache_config_hint' => - 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.', - 'cache_handler' => 'Cache handler', + 'Επιλέξτε τον προτιμώμενο χειριστή προσωρινής μνήμης. Αφήστε την προεπιλεγμένη τιμή αν δεν έχετε ιδέα τι σημαίνει.', + 'cache_handler' => 'Ρυθμιστής cache', 'cacheHandlerOptions' => [ - 'file' => 'File', + 'file' => 'Αρχείο', 'redis' => 'Redis', 'predis' => 'Predis', ], - 'next' => 'Next', - 'submit' => 'Finish install', - 'create_superadmin' => 'Create your superadmin account', + 'next' => 'Επόμενο', + 'submit' => 'Ολοκλήρωση εγκατάστασης', + 'create_superadmin' => 'Δημιουργήστε το λογαριασμό υπερδιαχειριστή', 'email' => 'Email', - 'username' => 'Username', - 'password' => 'Password', + 'username' => 'Όνομα Χρήστη', + 'password' => 'Κωδικόs πρόσβασης', ], 'messages' => [ 'createSuperAdminSuccess' => - 'Your superadmin account has been created successfully. Login to start podcasting!', + 'Ο λογαριασμός υπερδιαχειριστή έχει δημιουργηθεί με επιτυχία. Συνδεθείτε για να ξεκινήσετε το podcasting!', 'databaseConnectError' => - 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'Το Castopod δεν μπόρεσε να συνδεθεί στη βάση δεδομένων σας. Επεξεργαστείτε τη διαμόρφωση της βάσης δεδομένων σας και προσπαθήστε ξανά.', 'writeError' => - "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + "Δεν ήταν δυνατή η δημιουργία/εγγραφή του αρχείου `.env`. Πρέπει να το δημιουργήσετε χειροκίνητα ακολουθώντας το πρότυπο αρχείου `.env.example` που περιγράφεται στο Castopod.", ], ]; diff --git a/modules/Install/Language/nn-NO/Install.php b/modules/Install/Language/nn-NO/Install.php new file mode 100644 index 00000000..46c72d25 --- /dev/null +++ b/modules/Install/Language/nn-NO/Install.php @@ -0,0 +1,62 @@ + 'Castopod-installering', + 'manual_config' => 'Manuelt oppsett', + 'manual_config_subtitle' => + 'Lag ei `.env`-fil med innstillingane dine og oppdater sida for å halda fram installasjonen.', + 'form' => [ + 'instance_config' => 'Oppsett for nettstaden', + 'hostname' => 'Vertsnamn', + 'media_base_url' => 'Mediabase-URL', + 'media_base_url_hint' => + 'Viss du bruker eit leveringsnettverk (CDN) og/eller ei ekstern analysetenest, kan du skriva dei inn her.', + 'admin_gateway' => 'Innfallsport for styrar', + 'admin_gateway_hint' => + 'Ruta for å koma til styringsområdet (td. https://eksempel.no/cp-admin). Standardvalet er cp-admin, me tilrår at du endrar det av omsyn til tryggleiken.', + 'auth_gateway' => 'Innfallsport for autentisering', + 'auth_gateway_hint' => + 'Ruta for å koma til autentiseringssidene (td. https://eksempel.no/cp-auth). Standardvalet er cp-auth, me tilrår at du endrar det av omsyn til tryggleiken.', + 'database_config' => 'Databaseoppsett', + 'database_config_hint' => + 'Castopod treng å kopla seg til MySQL (eller MariaDB)-databasen din. Viss du ikkje har opplysingane som trengst, må du kontakta systemansvarleg.', + 'db_hostname' => 'Databasevertsnamn', + 'db_name' => 'Databasenamn', + 'db_username' => 'Databasebrukarnamn', + 'db_password' => 'Databasepassord', + 'db_prefix' => 'Databaseprefiks', + 'db_prefix_hint' => + "Prefikset til Castopod-tabellane. La det stå om du ikkje veit kva det tyder.", + 'cache_config' => 'Mellomlagringsoppsett', + 'cache_config_hint' => + 'Vel korleis du vil handtera mellomlageret. La stå som det er om du ikkje veit kva det tyder.', + 'cache_handler' => 'Mellomlagerhandtering', + 'cacheHandlerOptions' => [ + 'file' => 'Fil', + 'redis' => 'Redis', + 'predis' => 'Predis', + ], + 'next' => 'Neste', + 'submit' => 'Fullfør installeringa', + 'create_superadmin' => 'Lag superstyrar-konto', + 'email' => 'Epost', + 'username' => 'Brukarnamn', + 'password' => 'Passord', + ], + 'messages' => [ + 'createSuperAdminSuccess' => + 'Superstyrar-kontoen din er oppretta. Logg inn for å byrja med podkasting!', + 'databaseConnectError' => + 'Castopod greidde ikkje å kopla til databasen din. Sjå gjennom databaseoppsettet og prøv ein gong til.', + 'writeError' => + "Greidde ikkje laga eller skriva til `.env`-fila. Du må laga ho manuelt ved å fylgja `.env.example`-filmalen i Castopod-pakka.", + ], +]; diff --git a/modules/Install/Language/oc/Install.php b/modules/Install/Language/oc/Install.php new file mode 100644 index 00000000..1f66ef11 --- /dev/null +++ b/modules/Install/Language/oc/Install.php @@ -0,0 +1,62 @@ + 'Castopod installer', + 'manual_config' => 'Manual configuration', + 'manual_config_subtitle' => + 'Create a `.env` file with your settings and refresh the page to continue installation.', + 'form' => [ + 'instance_config' => 'Instance configuration', + 'hostname' => 'Hostname', + 'media_base_url' => 'Media base URL', + 'media_base_url_hint' => + 'If you use a CDN and/or an external analytics service, you may set them here.', + '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.', + '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', + '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', + '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', + 'cache_config_hint' => + 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.', + 'cache_handler' => 'Cache handler', + 'cacheHandlerOptions' => [ + 'file' => 'File', + 'redis' => 'Redis', + 'predis' => 'Predis', + ], + 'next' => 'Next', + 'submit' => 'Finish install', + 'create_superadmin' => 'Create your superadmin account', + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + ], + 'messages' => [ + 'createSuperAdminSuccess' => + 'Your superadmin account has been created successfully. Login to start podcasting!', + 'databaseConnectError' => + 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'writeError' => + "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + ], +]; diff --git a/modules/Install/Language/pt/Install.php b/modules/Install/Language/pt/Install.php new file mode 100644 index 00000000..1f66ef11 --- /dev/null +++ b/modules/Install/Language/pt/Install.php @@ -0,0 +1,62 @@ + 'Castopod installer', + 'manual_config' => 'Manual configuration', + 'manual_config_subtitle' => + 'Create a `.env` file with your settings and refresh the page to continue installation.', + 'form' => [ + 'instance_config' => 'Instance configuration', + 'hostname' => 'Hostname', + 'media_base_url' => 'Media base URL', + 'media_base_url_hint' => + 'If you use a CDN and/or an external analytics service, you may set them here.', + '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.', + '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', + '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', + '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', + 'cache_config_hint' => + 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.', + 'cache_handler' => 'Cache handler', + 'cacheHandlerOptions' => [ + 'file' => 'File', + 'redis' => 'Redis', + 'predis' => 'Predis', + ], + 'next' => 'Next', + 'submit' => 'Finish install', + 'create_superadmin' => 'Create your superadmin account', + 'email' => 'Email', + 'username' => 'Username', + 'password' => 'Password', + ], + 'messages' => [ + 'createSuperAdminSuccess' => + 'Your superadmin account has been created successfully. Login to start podcasting!', + 'databaseConnectError' => + 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'writeError' => + "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + ], +];