From 5564f77502035111e1c1ea81a41e820cf9a60119 Mon Sep 17 00:00:00 2001 From: Yassine Doghri <yassine@doghri.fr> Date: Thu, 14 Apr 2022 13:11:07 +0000 Subject: [PATCH] chore: new Crowdin updates --- app/Language/ar/Comment.php | 4 +- app/Language/ar/Fediverse.php | 2 +- app/Language/ar/Home.php | 6 +- app/Language/ar/Podcast.php | 10 +- app/Language/ar/Post.php | 4 +- app/Language/br/Comment.php | 17 +- app/Language/br/Common.php | 2 +- app/Language/br/Post.php | 15 +- app/Language/nn-NO/Comment.php | 34 ++ app/Language/nn-NO/Common.php | 29 + app/Language/nn-NO/Episode.php | 33 ++ app/Language/nn-NO/Fediverse.php | 37 ++ app/Language/nn-NO/Home.php | 20 + app/Language/nn-NO/Page.php | 17 + app/Language/nn-NO/Podcast.php | 53 ++ app/Language/nn-NO/Post.php | 40 ++ app/Language/oc/Comment.php | 34 ++ app/Language/oc/Common.php | 29 + app/Language/oc/Episode.php | 33 ++ app/Language/oc/Fediverse.php | 37 ++ app/Language/oc/Home.php | 20 + app/Language/oc/Page.php | 17 + app/Language/oc/Podcast.php | 53 ++ app/Language/oc/Post.php | 40 ++ app/Language/pt-BR/Comment.php | 32 +- app/Language/pt-BR/Episode.php | 32 +- app/Language/pt/Comment.php | 34 ++ app/Language/pt/Common.php | 29 + app/Language/pt/Episode.php | 33 ++ app/Language/pt/Fediverse.php | 37 ++ app/Language/pt/Home.php | 20 + app/Language/pt/Page.php | 17 + app/Language/pt/Podcast.php | 53 ++ app/Language/pt/Post.php | 40 ++ docs/src/ar/getting-started/install.md | 162 ++++++ docs/src/ar/getting-started/security.md | 26 + docs/src/ar/getting-started/update.md | 93 ++++ docs/src/ar/index.md | 216 ++++++++ docs/src/br/getting-started/install.md | 162 ++++++ docs/src/br/getting-started/security.md | 26 + docs/src/br/getting-started/update.md | 93 ++++ docs/src/br/index.md | 216 ++++++++ docs/src/de/getting-started/install.md | 162 ++++++ docs/src/de/getting-started/security.md | 26 + docs/src/de/getting-started/update.md | 93 ++++ docs/src/de/index.md | 219 ++++++++ docs/src/el/getting-started/install.md | 162 ++++++ docs/src/el/getting-started/security.md | 26 + docs/src/el/getting-started/update.md | 93 ++++ docs/src/el/index.md | 216 ++++++++ docs/src/es/getting-started/install.md | 162 ++++++ docs/src/es/getting-started/security.md | 26 + docs/src/es/getting-started/update.md | 93 ++++ docs/src/es/index.md | 216 ++++++++ docs/src/fr/getting-started/install.md | 169 ++++++ docs/src/fr/getting-started/security.md | 26 + docs/src/fr/getting-started/update.md | 96 ++++ docs/src/fr/index.md | 219 ++++++++ docs/src/id/getting-started/install.md | 162 ++++++ docs/src/id/getting-started/security.md | 26 + docs/src/id/getting-started/update.md | 93 ++++ docs/src/id/index.md | 216 ++++++++ docs/src/it/getting-started/install.md | 162 ++++++ docs/src/it/getting-started/security.md | 26 + docs/src/it/getting-started/update.md | 93 ++++ docs/src/it/index.md | 216 ++++++++ docs/src/nl/getting-started/install.md | 162 ++++++ docs/src/nl/getting-started/security.md | 26 + docs/src/nl/getting-started/update.md | 93 ++++ docs/src/nl/index.md | 216 ++++++++ docs/src/nn-NO/getting-started/install.md | 164 ++++++ docs/src/nn-NO/getting-started/security.md | 25 + docs/src/nn-NO/getting-started/update.md | 89 ++++ docs/src/nn-NO/index.md | 219 ++++++++ docs/src/oc/getting-started/install.md | 162 ++++++ docs/src/oc/getting-started/security.md | 26 + docs/src/oc/getting-started/update.md | 93 ++++ docs/src/oc/index.md | 216 ++++++++ docs/src/pl/getting-started/install.md | 162 ++++++ docs/src/pl/getting-started/security.md | 26 + docs/src/pl/getting-started/update.md | 93 ++++ docs/src/pl/index.md | 216 ++++++++ docs/src/pt-BR/getting-started/install.md | 166 ++++++ docs/src/pt-BR/getting-started/security.md | 28 + docs/src/pt-BR/getting-started/update.md | 95 ++++ docs/src/pt-BR/index.md | 219 ++++++++ docs/src/pt/getting-started/install.md | 162 ++++++ docs/src/pt/getting-started/security.md | 26 + docs/src/pt/getting-started/update.md | 93 ++++ docs/src/pt/index.md | 216 ++++++++ docs/src/ru/getting-started/install.md | 162 ++++++ docs/src/ru/getting-started/security.md | 26 + docs/src/ru/getting-started/update.md | 93 ++++ docs/src/ru/index.md | 216 ++++++++ docs/src/sv/getting-started/install.md | 162 ++++++ docs/src/sv/getting-started/security.md | 26 + docs/src/sv/getting-started/update.md | 93 ++++ docs/src/sv/index.md | 216 ++++++++ modules/Admin/Language/ar/Breadcrumb.php | 6 +- modules/Admin/Language/ar/Common.php | 8 +- modules/Admin/Language/ar/Countries.php | 32 +- modules/Admin/Language/ar/Episode.php | 44 +- .../Admin/Language/ar/EpisodeNavigation.php | 2 +- modules/Admin/Language/ar/Install.php | 2 +- modules/Admin/Language/ar/Navigation.php | 4 +- modules/Admin/Language/ar/Page.php | 2 +- modules/Admin/Language/ar/Person.php | 2 +- modules/Admin/Language/ar/Podcast.php | 6 +- modules/Admin/Language/br/Breadcrumb.php | 2 +- modules/Admin/Language/br/Charts.php | 50 +- modules/Admin/Language/br/Common.php | 58 +- modules/Admin/Language/br/Contributor.php | 28 +- modules/Admin/Language/br/Countries.php | 326 ++++++------ modules/Admin/Language/br/Episode.php | 231 ++++---- .../Admin/Language/br/EpisodeNavigation.php | 22 +- modules/Admin/Language/br/Fediverse.php | 28 +- modules/Admin/Language/br/Podcast.php | 42 +- modules/Admin/Language/el/Charts.php | 50 +- modules/Admin/Language/el/Common.php | 58 +- modules/Admin/Language/el/Contributor.php | 38 +- modules/Admin/Language/el/Countries.php | 500 +++++++++--------- modules/Admin/Language/el/Episode.php | 104 ++-- modules/Admin/Language/es/Episode.php | 24 +- modules/Admin/Language/fr/Fediverse.php | 2 +- modules/Admin/Language/nn-NO/Admin.php | 15 + modules/Admin/Language/nn-NO/Breadcrumb.php | 48 ++ modules/Admin/Language/nn-NO/Charts.php | 38 ++ modules/Admin/Language/nn-NO/Common.php | 49 ++ modules/Admin/Language/nn-NO/Contributor.php | 41 ++ modules/Admin/Language/nn-NO/Countries.php | 264 +++++++++ modules/Admin/Language/nn-NO/Episode.php | 165 ++++++ .../Language/nn-NO/EpisodeNavigation.php | 23 + modules/Admin/Language/nn-NO/Fediverse.php | 32 ++ modules/Admin/Language/nn-NO/Home.php | 14 + modules/Admin/Language/nn-NO/Install.php | 61 +++ modules/Admin/Language/nn-NO/MyAccount.php | 18 + modules/Admin/Language/nn-NO/Navigation.php | 41 ++ modules/Admin/Language/nn-NO/Page.php | 30 ++ modules/Admin/Language/nn-NO/Pager.php | 21 + modules/Admin/Language/nn-NO/Person.php | 65 +++ modules/Admin/Language/nn-NO/Platforms.php | 30 ++ modules/Admin/Language/nn-NO/Podcast.php | 243 +++++++++ .../Admin/Language/nn-NO/PodcastImport.php | 37 ++ .../Language/nn-NO/PodcastNavigation.php | 35 ++ modules/Admin/Language/nn-NO/Settings.php | 56 ++ modules/Admin/Language/nn-NO/Soundbite.php | 31 ++ modules/Admin/Language/nn-NO/User.php | 54 ++ modules/Admin/Language/nn-NO/Validation.php | 18 + modules/Admin/Language/nn-NO/VideoClip.php | 72 +++ modules/Admin/Language/oc/Admin.php | 15 + modules/Admin/Language/oc/Breadcrumb.php | 48 ++ modules/Admin/Language/oc/Charts.php | 38 ++ modules/Admin/Language/oc/Common.php | 49 ++ modules/Admin/Language/oc/Contributor.php | 41 ++ modules/Admin/Language/oc/Countries.php | 264 +++++++++ modules/Admin/Language/oc/Episode.php | 165 ++++++ .../Admin/Language/oc/EpisodeNavigation.php | 23 + modules/Admin/Language/oc/Fediverse.php | 32 ++ modules/Admin/Language/oc/Home.php | 14 + modules/Admin/Language/oc/Install.php | 61 +++ modules/Admin/Language/oc/MyAccount.php | 18 + modules/Admin/Language/oc/Navigation.php | 41 ++ modules/Admin/Language/oc/Page.php | 30 ++ modules/Admin/Language/oc/Pager.php | 21 + modules/Admin/Language/oc/Person.php | 65 +++ modules/Admin/Language/oc/Platforms.php | 30 ++ modules/Admin/Language/oc/Podcast.php | 243 +++++++++ modules/Admin/Language/oc/PodcastImport.php | 37 ++ .../Admin/Language/oc/PodcastNavigation.php | 35 ++ modules/Admin/Language/oc/Settings.php | 56 ++ modules/Admin/Language/oc/Soundbite.php | 31 ++ modules/Admin/Language/oc/User.php | 54 ++ modules/Admin/Language/oc/Validation.php | 18 + modules/Admin/Language/oc/VideoClip.php | 72 +++ modules/Admin/Language/pt/Admin.php | 15 + modules/Admin/Language/pt/Breadcrumb.php | 48 ++ modules/Admin/Language/pt/Charts.php | 38 ++ modules/Admin/Language/pt/Common.php | 49 ++ modules/Admin/Language/pt/Contributor.php | 41 ++ modules/Admin/Language/pt/Countries.php | 264 +++++++++ modules/Admin/Language/pt/Episode.php | 165 ++++++ .../Admin/Language/pt/EpisodeNavigation.php | 23 + modules/Admin/Language/pt/Fediverse.php | 32 ++ modules/Admin/Language/pt/Home.php | 14 + modules/Admin/Language/pt/Install.php | 61 +++ modules/Admin/Language/pt/MyAccount.php | 18 + modules/Admin/Language/pt/Navigation.php | 41 ++ modules/Admin/Language/pt/Page.php | 30 ++ modules/Admin/Language/pt/Pager.php | 21 + modules/Admin/Language/pt/Person.php | 65 +++ modules/Admin/Language/pt/Platforms.php | 30 ++ modules/Admin/Language/pt/Podcast.php | 243 +++++++++ modules/Admin/Language/pt/PodcastImport.php | 37 ++ .../Admin/Language/pt/PodcastNavigation.php | 35 ++ modules/Admin/Language/pt/Settings.php | 56 ++ modules/Admin/Language/pt/Soundbite.php | 31 ++ modules/Admin/Language/pt/User.php | 54 ++ modules/Admin/Language/pt/Validation.php | 18 + modules/Admin/Language/pt/VideoClip.php | 72 +++ modules/Install/Language/el/Install.php | 54 +- modules/Install/Language/nn-NO/Install.php | 62 +++ modules/Install/Language/oc/Install.php | 62 +++ modules/Install/Language/pt/Install.php | 62 +++ 203 files changed, 14389 insertions(+), 917 deletions(-) create mode 100644 app/Language/nn-NO/Comment.php create mode 100644 app/Language/nn-NO/Common.php create mode 100644 app/Language/nn-NO/Episode.php create mode 100644 app/Language/nn-NO/Fediverse.php create mode 100644 app/Language/nn-NO/Home.php create mode 100644 app/Language/nn-NO/Page.php create mode 100644 app/Language/nn-NO/Podcast.php create mode 100644 app/Language/nn-NO/Post.php create mode 100644 app/Language/oc/Comment.php create mode 100644 app/Language/oc/Common.php create mode 100644 app/Language/oc/Episode.php create mode 100644 app/Language/oc/Fediverse.php create mode 100644 app/Language/oc/Home.php create mode 100644 app/Language/oc/Page.php create mode 100644 app/Language/oc/Podcast.php create mode 100644 app/Language/oc/Post.php create mode 100644 app/Language/pt/Comment.php create mode 100644 app/Language/pt/Common.php create mode 100644 app/Language/pt/Episode.php create mode 100644 app/Language/pt/Fediverse.php create mode 100644 app/Language/pt/Home.php create mode 100644 app/Language/pt/Page.php create mode 100644 app/Language/pt/Podcast.php create mode 100644 app/Language/pt/Post.php create mode 100644 docs/src/ar/getting-started/install.md create mode 100644 docs/src/ar/getting-started/security.md create mode 100644 docs/src/ar/getting-started/update.md create mode 100644 docs/src/ar/index.md create mode 100644 docs/src/br/getting-started/install.md create mode 100644 docs/src/br/getting-started/security.md create mode 100644 docs/src/br/getting-started/update.md create mode 100644 docs/src/br/index.md create mode 100644 docs/src/de/getting-started/install.md create mode 100644 docs/src/de/getting-started/security.md create mode 100644 docs/src/de/getting-started/update.md create mode 100644 docs/src/de/index.md create mode 100644 docs/src/el/getting-started/install.md create mode 100644 docs/src/el/getting-started/security.md create mode 100644 docs/src/el/getting-started/update.md create mode 100644 docs/src/el/index.md create mode 100644 docs/src/es/getting-started/install.md create mode 100644 docs/src/es/getting-started/security.md create mode 100644 docs/src/es/getting-started/update.md create mode 100644 docs/src/es/index.md create mode 100644 docs/src/fr/getting-started/install.md create mode 100644 docs/src/fr/getting-started/security.md create mode 100644 docs/src/fr/getting-started/update.md create mode 100644 docs/src/fr/index.md create mode 100644 docs/src/id/getting-started/install.md create mode 100644 docs/src/id/getting-started/security.md create mode 100644 docs/src/id/getting-started/update.md create mode 100644 docs/src/id/index.md create mode 100644 docs/src/it/getting-started/install.md create mode 100644 docs/src/it/getting-started/security.md create mode 100644 docs/src/it/getting-started/update.md create mode 100644 docs/src/it/index.md create mode 100644 docs/src/nl/getting-started/install.md create mode 100644 docs/src/nl/getting-started/security.md create mode 100644 docs/src/nl/getting-started/update.md create mode 100644 docs/src/nl/index.md create mode 100644 docs/src/nn-NO/getting-started/install.md create mode 100644 docs/src/nn-NO/getting-started/security.md create mode 100644 docs/src/nn-NO/getting-started/update.md create mode 100644 docs/src/nn-NO/index.md create mode 100644 docs/src/oc/getting-started/install.md create mode 100644 docs/src/oc/getting-started/security.md create mode 100644 docs/src/oc/getting-started/update.md create mode 100644 docs/src/oc/index.md create mode 100644 docs/src/pl/getting-started/install.md create mode 100644 docs/src/pl/getting-started/security.md create mode 100644 docs/src/pl/getting-started/update.md create mode 100644 docs/src/pl/index.md create mode 100644 docs/src/pt-BR/getting-started/install.md create mode 100644 docs/src/pt-BR/getting-started/security.md create mode 100644 docs/src/pt-BR/getting-started/update.md create mode 100644 docs/src/pt-BR/index.md create mode 100644 docs/src/pt/getting-started/install.md create mode 100644 docs/src/pt/getting-started/security.md create mode 100644 docs/src/pt/getting-started/update.md create mode 100644 docs/src/pt/index.md create mode 100644 docs/src/ru/getting-started/install.md create mode 100644 docs/src/ru/getting-started/security.md create mode 100644 docs/src/ru/getting-started/update.md create mode 100644 docs/src/ru/index.md create mode 100644 docs/src/sv/getting-started/install.md create mode 100644 docs/src/sv/getting-started/security.md create mode 100644 docs/src/sv/getting-started/update.md create mode 100644 docs/src/sv/index.md create mode 100644 modules/Admin/Language/nn-NO/Admin.php create mode 100644 modules/Admin/Language/nn-NO/Breadcrumb.php create mode 100644 modules/Admin/Language/nn-NO/Charts.php create mode 100644 modules/Admin/Language/nn-NO/Common.php create mode 100644 modules/Admin/Language/nn-NO/Contributor.php create mode 100644 modules/Admin/Language/nn-NO/Countries.php create mode 100644 modules/Admin/Language/nn-NO/Episode.php create mode 100644 modules/Admin/Language/nn-NO/EpisodeNavigation.php create mode 100644 modules/Admin/Language/nn-NO/Fediverse.php create mode 100644 modules/Admin/Language/nn-NO/Home.php create mode 100644 modules/Admin/Language/nn-NO/Install.php create mode 100644 modules/Admin/Language/nn-NO/MyAccount.php create mode 100644 modules/Admin/Language/nn-NO/Navigation.php create mode 100644 modules/Admin/Language/nn-NO/Page.php create mode 100644 modules/Admin/Language/nn-NO/Pager.php create mode 100644 modules/Admin/Language/nn-NO/Person.php create mode 100644 modules/Admin/Language/nn-NO/Platforms.php create mode 100644 modules/Admin/Language/nn-NO/Podcast.php create mode 100644 modules/Admin/Language/nn-NO/PodcastImport.php create mode 100644 modules/Admin/Language/nn-NO/PodcastNavigation.php create mode 100644 modules/Admin/Language/nn-NO/Settings.php create mode 100644 modules/Admin/Language/nn-NO/Soundbite.php create mode 100644 modules/Admin/Language/nn-NO/User.php create mode 100644 modules/Admin/Language/nn-NO/Validation.php create mode 100644 modules/Admin/Language/nn-NO/VideoClip.php create mode 100644 modules/Admin/Language/oc/Admin.php create mode 100644 modules/Admin/Language/oc/Breadcrumb.php create mode 100644 modules/Admin/Language/oc/Charts.php create mode 100644 modules/Admin/Language/oc/Common.php create mode 100644 modules/Admin/Language/oc/Contributor.php create mode 100644 modules/Admin/Language/oc/Countries.php create mode 100644 modules/Admin/Language/oc/Episode.php create mode 100644 modules/Admin/Language/oc/EpisodeNavigation.php create mode 100644 modules/Admin/Language/oc/Fediverse.php create mode 100644 modules/Admin/Language/oc/Home.php create mode 100644 modules/Admin/Language/oc/Install.php create mode 100644 modules/Admin/Language/oc/MyAccount.php create mode 100644 modules/Admin/Language/oc/Navigation.php create mode 100644 modules/Admin/Language/oc/Page.php create mode 100644 modules/Admin/Language/oc/Pager.php create mode 100644 modules/Admin/Language/oc/Person.php create mode 100644 modules/Admin/Language/oc/Platforms.php create mode 100644 modules/Admin/Language/oc/Podcast.php create mode 100644 modules/Admin/Language/oc/PodcastImport.php create mode 100644 modules/Admin/Language/oc/PodcastNavigation.php create mode 100644 modules/Admin/Language/oc/Settings.php create mode 100644 modules/Admin/Language/oc/Soundbite.php create mode 100644 modules/Admin/Language/oc/User.php create mode 100644 modules/Admin/Language/oc/Validation.php create mode 100644 modules/Admin/Language/oc/VideoClip.php create mode 100644 modules/Admin/Language/pt/Admin.php create mode 100644 modules/Admin/Language/pt/Breadcrumb.php create mode 100644 modules/Admin/Language/pt/Charts.php create mode 100644 modules/Admin/Language/pt/Common.php create mode 100644 modules/Admin/Language/pt/Contributor.php create mode 100644 modules/Admin/Language/pt/Countries.php create mode 100644 modules/Admin/Language/pt/Episode.php create mode 100644 modules/Admin/Language/pt/EpisodeNavigation.php create mode 100644 modules/Admin/Language/pt/Fediverse.php create mode 100644 modules/Admin/Language/pt/Home.php create mode 100644 modules/Admin/Language/pt/Install.php create mode 100644 modules/Admin/Language/pt/MyAccount.php create mode 100644 modules/Admin/Language/pt/Navigation.php create mode 100644 modules/Admin/Language/pt/Page.php create mode 100644 modules/Admin/Language/pt/Pager.php create mode 100644 modules/Admin/Language/pt/Person.php create mode 100644 modules/Admin/Language/pt/Platforms.php create mode 100644 modules/Admin/Language/pt/Podcast.php create mode 100644 modules/Admin/Language/pt/PodcastImport.php create mode 100644 modules/Admin/Language/pt/PodcastNavigation.php create mode 100644 modules/Admin/Language/pt/Settings.php create mode 100644 modules/Admin/Language/pt/Soundbite.php create mode 100644 modules/Admin/Language/pt/User.php create mode 100644 modules/Admin/Language/pt/Validation.php create mode 100644 modules/Admin/Language/pt/VideoClip.php create mode 100644 modules/Install/Language/nn-NO/Install.php create mode 100644 modules/Install/Language/oc/Install.php create mode 100644 modules/Install/Language/pt/Install.php diff --git a/app/Language/ar/Comment.php b/app/Language/ar/Comment.php index b18780b7b0..c90984a1a4 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 5373873a1c..1ad65f7b72 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 e0276c0f20..885408062b 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 09b71dfe65..081d1167e2 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 {<span class="font-semibold">#</span> follower} other {<span class="font-semibold">#</span> followers} @@ -41,7 +41,7 @@ return [ }', 'first_published_at' => 'First episode published on <span class="font-semibold">{0, date, medium}</span>', ], - '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 436c3a1f7a..f92688abd0 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 0675448470..65d9b9b18d 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 7192f77a6b..d50e0372cb 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 d81e3e0a64..972616419e 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 0000000000..57b8a09ede --- /dev/null +++ b/app/Language/nn-NO/Comment.php @@ -0,0 +1,34 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => "{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 0000000000..1a6b9f0d9e --- /dev/null +++ b/app/Language/nn-NO/Common.php @@ -0,0 +1,29 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'yes' => '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 0000000000..e66b3bc223 --- /dev/null +++ b/app/Language/nn-NO/Episode.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'season' => '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 0000000000..22c203d8c8 --- /dev/null +++ b/app/Language/nn-NO/Fediverse.php @@ -0,0 +1,37 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'your_handle' => '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 0000000000..313343d639 --- /dev/null +++ b/app/Language/nn-NO/Home.php @@ -0,0 +1,20 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => '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 0000000000..b28c7f8ce8 --- /dev/null +++ b/app/Language/nn-NO/Page.php @@ -0,0 +1,17 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'back_to_home' => '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 0000000000..a3f834ecfc --- /dev/null +++ b/app/Language/nn-NO/Podcast.php @@ -0,0 +1,53 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'feed' => '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 {<span class="font-semibold">#</span> fylgjar} + other {<span class="font-semibold">#</span> fylgjarar} + }', + 'posts' => '{numberOfPosts, plural, + one {<span class="font-semibold">#</span> innlegg} + other {<span class="font-semibold">#</span> innlegg} + }', + 'activity' => 'Aktivitet', + 'episodes' => 'Episodar', + 'episodes_title' => 'Episodar av {podcastTitle}', + 'about' => 'Om', + 'stats' => [ + 'title' => 'Statistikk', + 'number_of_seasons' => '{0, plural, + one {<span class="font-semibold">#</span> sesong} + other {<span class="font-semibold">#</span> sesongar} + }', + 'number_of_episodes' => '{0, plural, + one {<span class="font-semibold">#</span> episode} + other {<span class="font-semibold">#</span> episodar} + }', + 'first_published_at' => 'Den fyrste episoden vart lagt ut <span class="font-semibold">{0, date, medium}</span>', + ], + '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 0000000000..85cb73890a --- /dev/null +++ b/app/Language/nn-NO/Post.php @@ -0,0 +1,40 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => "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 0000000000..1dd8f5eadc --- /dev/null +++ b/app/Language/oc/Comment.php @@ -0,0 +1,34 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => "{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 0000000000..aff8136b83 --- /dev/null +++ b/app/Language/oc/Common.php @@ -0,0 +1,29 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'yes' => '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 0000000000..ebe39336fc --- /dev/null +++ b/app/Language/oc/Episode.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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}', + '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 0000000000..32f54c074f --- /dev/null +++ b/app/Language/oc/Fediverse.php @@ -0,0 +1,37 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'your_handle' => '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 0000000000..1518239bd9 --- /dev/null +++ b/app/Language/oc/Home.php @@ -0,0 +1,20 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => '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 0000000000..7cd606694e --- /dev/null +++ b/app/Language/oc/Page.php @@ -0,0 +1,17 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'back_to_home' => '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 0000000000..d69cd86daf --- /dev/null +++ b/app/Language/oc/Podcast.php @@ -0,0 +1,53 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'feed' => '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 {<span class="font-semibold">#</span> follower} + other {<span class="font-semibold">#</span> followers} + }', + 'posts' => '{numberOfPosts, plural, + one {<span class="font-semibold">#</span> post} + other {<span class="font-semibold">#</span> posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'episodes_title' => 'Episodes of {podcastTitle}', + 'about' => 'About', + 'stats' => [ + 'title' => 'Stats', + 'number_of_seasons' => '{0, plural, + one {<span class="font-semibold">#</span> season} + other {<span class="font-semibold">#</span> seasons} + }', + 'number_of_episodes' => '{0, plural, + one {<span class="font-semibold">#</span> episode} + other {<span class="font-semibold">#</span> episodes} + }', + 'first_published_at' => 'First episode published on <span class="font-semibold">{0, date, medium}</span>', + ], + '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 0000000000..58d1cf8002 --- /dev/null +++ b/app/Language/oc/Post.php @@ -0,0 +1,40 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => "{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 1dd8f5eadc..1073c6c980 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 ebe39336fc..3dc334f281 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 0000000000..1dd8f5eadc --- /dev/null +++ b/app/Language/pt/Comment.php @@ -0,0 +1,34 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => "{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 0000000000..aff8136b83 --- /dev/null +++ b/app/Language/pt/Common.php @@ -0,0 +1,29 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'yes' => '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 0000000000..ebe39336fc --- /dev/null +++ b/app/Language/pt/Episode.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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}', + '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 0000000000..dae4472235 --- /dev/null +++ b/app/Language/pt/Fediverse.php @@ -0,0 +1,37 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'your_handle' => '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 0000000000..1518239bd9 --- /dev/null +++ b/app/Language/pt/Home.php @@ -0,0 +1,20 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => '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 0000000000..7cd606694e --- /dev/null +++ b/app/Language/pt/Page.php @@ -0,0 +1,17 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'back_to_home' => '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 0000000000..d69cd86daf --- /dev/null +++ b/app/Language/pt/Podcast.php @@ -0,0 +1,53 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'feed' => '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 {<span class="font-semibold">#</span> follower} + other {<span class="font-semibold">#</span> followers} + }', + 'posts' => '{numberOfPosts, plural, + one {<span class="font-semibold">#</span> post} + other {<span class="font-semibold">#</span> posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'episodes_title' => 'Episodes of {podcastTitle}', + 'about' => 'About', + 'stats' => [ + 'title' => 'Stats', + 'number_of_seasons' => '{0, plural, + one {<span class="font-semibold">#</span> season} + other {<span class="font-semibold">#</span> seasons} + }', + 'number_of_episodes' => '{0, plural, + one {<span class="font-semibold">#</span> episode} + other {<span class="font-semibold">#</span> episodes} + }', + 'first_published_at' => 'First episode published on <span class="font-semibold">{0, date, medium}</span>', + ], + '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 0000000000..58d1cf8002 --- /dev/null +++ b/app/Language/pt/Post.php @@ -0,0 +1,40 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => "{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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..37a52fccaf --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installieren<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..708808bade --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..6632c5f770 --- /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 0000000000..430867b2b9 --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installation<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..fa6e5fa47b --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Installer Castopod med Yunohost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github-arkiv</a> + +</div> + +### Installer med Docker + +Viss du vil bruka Docker til Ã¥ installera Castopod, er det mogleg takk vere +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Installer +med +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..c584a183f6 --- /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 0000000000..9fd2b55d19 --- /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 0000000000..4a03931141 --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installer<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..0edbbb39e9 --- /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ê. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Instalar Castopod com YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### 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)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Instalar +com o +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..c4104d9a89 --- /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 0000000000..18449201d3 --- /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 0000000000..a3591bd879 --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Instalar<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Logo de Ad Aures" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="Logo da NLnet" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0000000000..7d35b296f1 --- /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. + +<div class="flex flex-wrap items-center gap-4"> + +<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer"> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" /> +</a> + +<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg + xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" + class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github +Repo</a> + +</div> + +### Install with Docker + +If you wish to use Docker to install Castopod, it is possible thanks to +[Romain de Laage](https://mamot.fr/@rdelaage)! + +<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install +with +Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> + +::: 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 0000000000..e205698df8 --- /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 0000000000..1f48e27492 --- /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 0000000000..161b99403a --- /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! + +::: + +<div class="flex items-center"> + <a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> +</div> + +## 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). + +<div class="flex flex-wrap gap-x-16 gap-y-8"> + <a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a> + <a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a> +</div> + +## 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 0a26229896..396ae47444 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 1bdd4f01cd..9021d57efb 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 1a9b33e023..a55d3d6021 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 0e41bb0782..ff5a70a1f8 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.<br />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 2f788b16f2..33409c678f 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 e8bedfca07..ffca09437b 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 49a4c93992..f264138acd 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 2da89b6308..d4145ddc21 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 72feda82c6..ac2d43c707 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 09216c9ab1..f0aadbb531 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 86ce9bb524..9259d07094 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 dd6686564d..f737d0c006 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 d97bcf991f..cbcb76c9ae 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 6d33ab630f..637fe9f125 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 4cd5d9c857..c7c3bbcabc 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 5aa0098457..e6b8bf403f 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.<br />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.<br />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 1406e3010e..214e2aca7d 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 0e4ca66d89..f93aef578e 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 d9d0d11b03..efccc7d736 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 d9a75a1d84..6e3568bf43 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 d97bcf991f..e19b3e7360 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 d0f3b93d9f..132d9abb7d 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 4cd5d9c857..76a33e3ef7 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 054a23c3b0..e90d5bb032 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 b810f2716f..8d161b45fb 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 c999a16213..95d3a96427 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 0000000000..2b69c6971f --- /dev/null +++ b/modules/Admin/Language/nn-NO/Admin.php @@ -0,0 +1,15 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'dashboard' => '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 0000000000..c7852453f6 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Breadcrumb.php @@ -0,0 +1,48 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'label' => '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 0000000000..02035e04d7 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Charts.php @@ -0,0 +1,38 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'by_service_weekly' => '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 0000000000..813bb910aa --- /dev/null +++ b/modules/Admin/Language/nn-NO/Common.php @@ -0,0 +1,49 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'yes' => '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 0000000000..0fe4cc66fb --- /dev/null +++ b/modules/Admin/Language/nn-NO/Contributor.php @@ -0,0 +1,41 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'podcast_contributors' => '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 0000000000..451541ffac --- /dev/null +++ b/modules/Admin/Language/nn-NO/Countries.php @@ -0,0 +1,264 @@ +<?php + +declare(strict_types=1); + +/** + * ISO 3166 country codes + * + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'AD' => '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 0000000000..b585c3dca5 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Episode.php @@ -0,0 +1,165 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'season' => '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.<br />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 0000000000..e0bf8199c0 --- /dev/null +++ b/modules/Admin/Language/nn-NO/EpisodeNavigation.php @@ -0,0 +1,23 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'go_to_page' => '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 0000000000..1b136b7443 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Fediverse.php @@ -0,0 +1,32 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'messages' => [ + '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 0000000000..3ef4750151 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Home.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => '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 0000000000..fefcb3657d --- /dev/null +++ b/modules/Admin/Language/nn-NO/Install.php @@ -0,0 +1,61 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + '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/Admin/Language/nn-NO/MyAccount.php b/modules/Admin/Language/nn-NO/MyAccount.php new file mode 100644 index 0000000000..a853dc8aef --- /dev/null +++ b/modules/Admin/Language/nn-NO/MyAccount.php @@ -0,0 +1,18 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'info' => '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 0000000000..ce1b2185b2 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Navigation.php @@ -0,0 +1,41 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'toggle_sidebar' => '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 0000000000..3533de5299 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Page.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'back_to_home' => '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 0000000000..5b135b32d9 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Pager.php @@ -0,0 +1,21 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'pageNavigation' => '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 0000000000..c20bfedbf5 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Person.php @@ -0,0 +1,65 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'persons' => '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 0000000000..3cf5f254df --- /dev/null +++ b/modules/Admin/Language/nn-NO/Platforms.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => '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 0000000000..1e5eb58ac8 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Podcast.php @@ -0,0 +1,243 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => '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 {<span class="font-semibold">#</span> fylgjar} + other {<span class="font-semibold">#</span> fylgjarar} + }', + 'posts' => '{numberOfPosts, plural, + one {<span class="font-semibold">#</span> innlegg} + other {<span class="font-semibold">#</span> 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 0000000000..9fb36b11c2 --- /dev/null +++ b/modules/Admin/Language/nn-NO/PodcastImport.php @@ -0,0 +1,37 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'warning' => + 'Dette kan ta lang tid.<br/>Denne versjonen syner ikkje framgangen medan importen gÃ¥r, sÃ¥ du vil ikkje sjÃ¥ noko før han er ferdig.<br/>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 0000000000..cf628d0ea2 --- /dev/null +++ b/modules/Admin/Language/nn-NO/PodcastNavigation.php @@ -0,0 +1,35 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'go_to_page' => '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 0000000000..2d100161d0 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Settings.php @@ -0,0 +1,56 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => '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 0000000000..65e06cab40 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Soundbite.php @@ -0,0 +1,31 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'list' => [ + '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 0000000000..c11ee78e5e --- /dev/null +++ b/modules/Admin/Language/nn-NO/User.php @@ -0,0 +1,54 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'edit_roles' => "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 0000000000..ed99da37d8 --- /dev/null +++ b/modules/Admin/Language/nn-NO/Validation.php @@ -0,0 +1,18 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'min_dims' => + '{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 0000000000..64e1698de7 --- /dev/null +++ b/modules/Admin/Language/nn-NO/VideoClip.php @@ -0,0 +1,72 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'list' => [ + '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 0000000000..5e3942371f --- /dev/null +++ b/modules/Admin/Language/oc/Admin.php @@ -0,0 +1,15 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'dashboard' => '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 0000000000..d9400ca786 --- /dev/null +++ b/modules/Admin/Language/oc/Breadcrumb.php @@ -0,0 +1,48 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'label' => '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 0000000000..d9a75a1d84 --- /dev/null +++ b/modules/Admin/Language/oc/Charts.php @@ -0,0 +1,38 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', + '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 0000000000..d97bcf991f --- /dev/null +++ b/modules/Admin/Language/oc/Common.php @@ -0,0 +1,49 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', + '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 0000000000..d0f3b93d9f --- /dev/null +++ b/modules/Admin/Language/oc/Contributor.php @@ -0,0 +1,41 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', + '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 0000000000..4cd5d9c857 --- /dev/null +++ b/modules/Admin/Language/oc/Countries.php @@ -0,0 +1,264 @@ +<?php + +declare(strict_types=1); + +/** + * ISO 3166 country codes + * + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', +]; diff --git a/modules/Admin/Language/oc/Episode.php b/modules/Admin/Language/oc/Episode.php new file mode 100644 index 0000000000..054a23c3b0 --- /dev/null +++ b/modules/Admin/Language/oc/Episode.php @@ -0,0 +1,165 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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}', + '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.<br />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 0000000000..1406e3010e --- /dev/null +++ b/modules/Admin/Language/oc/EpisodeNavigation.php @@ -0,0 +1,23 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', +]; diff --git a/modules/Admin/Language/oc/Fediverse.php b/modules/Admin/Language/oc/Fediverse.php new file mode 100644 index 0000000000..0e4ca66d89 --- /dev/null +++ b/modules/Admin/Language/oc/Fediverse.php @@ -0,0 +1,32 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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!', + ], + '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 0000000000..3ff4c04dc8 --- /dev/null +++ b/modules/Admin/Language/oc/Home.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => '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 0000000000..36e373a285 --- /dev/null +++ b/modules/Admin/Language/oc/Install.php @@ -0,0 +1,61 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + '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/Admin/Language/oc/MyAccount.php b/modules/Admin/Language/oc/MyAccount.php new file mode 100644 index 0000000000..6ebbb30ef7 --- /dev/null +++ b/modules/Admin/Language/oc/MyAccount.php @@ -0,0 +1,18 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'info' => '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 0000000000..68d4609d5d --- /dev/null +++ b/modules/Admin/Language/oc/Navigation.php @@ -0,0 +1,41 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'toggle_sidebar' => '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 0000000000..b6f49de574 --- /dev/null +++ b/modules/Admin/Language/oc/Page.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'back_to_home' => 'Back to home', + 'page' => 'Page', + 'all_pages' => 'All pages', + 'create' => 'New page', + 'go_to_page' => 'Go to page', + 'edit' => 'Edit page', + 'delete' => 'Delete page', + '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 0000000000..e25ee63810 --- /dev/null +++ b/modules/Admin/Language/oc/Pager.php @@ -0,0 +1,21 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'pageNavigation' => 'Page navigation', + 'first' => 'First', + 'previous' => 'Previous', + 'next' => 'Next', + 'last' => 'Last', + 'older' => 'Older', + 'newer' => 'Newer', + 'invalidTemplate' => '{0} is not a valid Pager template.', + 'invalidPaginationGroup' => '{0} is not a valid Pagination group.', +]; diff --git a/modules/Admin/Language/oc/Person.php b/modules/Admin/Language/oc/Person.php new file mode 100644 index 0000000000..fa9bba2118 --- /dev/null +++ b/modules/Admin/Language/oc/Person.php @@ -0,0 +1,65 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'persons' => '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 0000000000..ab17d5999b --- /dev/null +++ b/modules/Admin/Language/oc/Platforms.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => 'Platforms', + 'home_url' => 'Go to {platformName} website', + 'submit_url' => 'Submit your podcast on {platformName}', + 'visible' => 'Display in podcast homepage?', + 'on_embed' => 'Display on embeddable player?', + 'remove' => 'Remove {platformName}', + 'submit' => 'Save', + '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 0000000000..d9d0d11b03 --- /dev/null +++ b/modules/Admin/Language/oc/Podcast.php @@ -0,0 +1,243 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => 'All podcasts', + 'no_podcast' => 'No podcast found!', + 'create' => 'Create podcast', + 'import' => 'Import podcast', + 'new_episode' => 'New Episode', + 'view' => 'View podcast', + 'edit' => 'Edit podcast', + '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 {<span class="font-semibold">#</span> follower} + other {<span class="font-semibold">#</span> followers} + }', + 'posts' => '{numberOfPosts, plural, + one {<span class="font-semibold">#</span> post} + other {<span class="font-semibold">#</span> 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 0000000000..e9cfc1c4ce --- /dev/null +++ b/modules/Admin/Language/oc/PodcastImport.php @@ -0,0 +1,37 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'warning' => + 'This procedure may take a long time.<br/>As the current version does not show any progress while it runs, you will not see anything updated until it is done.<br/>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 0000000000..b619573154 --- /dev/null +++ b/modules/Admin/Language/oc/PodcastNavigation.php @@ -0,0 +1,35 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'go_to_page' => 'Go to podcast page', + 'dashboard' => 'Podcast dashboard', + 'podcast-view' => 'Home', + 'podcast-edit' => 'Edit podcast', + 'podcast-persons-manage' => 'Manage persons', + 'episodes' => 'Episodes', + 'episode-list' => 'All episodes', + 'episode-create' => 'New episode', + 'analytics' => 'Analytics', + 'podcast-analytics' => 'Audience overview', + 'podcast-analytics-webpages' => 'Web pages visits', + 'podcast-analytics-locations' => 'Locations', + 'podcast-analytics-unique-listeners' => 'Unique listeners', + 'podcast-analytics-players' => 'Players', + 'podcast-analytics-listening-time' => 'Listening time', + 'podcast-analytics-time-periods' => 'Time periods', + '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 0000000000..0d6368ccd2 --- /dev/null +++ b/modules/Admin/Language/oc/Settings.php @@ -0,0 +1,56 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => '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 0000000000..a3f828fe09 --- /dev/null +++ b/modules/Admin/Language/oc/Soundbite.php @@ -0,0 +1,31 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'list' => [ + '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 0000000000..8b2e478bf7 --- /dev/null +++ b/modules/Admin/Language/oc/User.php @@ -0,0 +1,54 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'edit_roles' => "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 0000000000..750b19688f --- /dev/null +++ b/modules/Admin/Language/oc/Validation.php @@ -0,0 +1,18 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'min_dims' => + '{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 0000000000..638de697bb --- /dev/null +++ b/modules/Admin/Language/oc/VideoClip.php @@ -0,0 +1,72 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'list' => [ + '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 0000000000..5e3942371f --- /dev/null +++ b/modules/Admin/Language/pt/Admin.php @@ -0,0 +1,15 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'dashboard' => '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 0000000000..d9400ca786 --- /dev/null +++ b/modules/Admin/Language/pt/Breadcrumb.php @@ -0,0 +1,48 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'label' => '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 0000000000..d9a75a1d84 --- /dev/null +++ b/modules/Admin/Language/pt/Charts.php @@ -0,0 +1,38 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', + '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 0000000000..d97bcf991f --- /dev/null +++ b/modules/Admin/Language/pt/Common.php @@ -0,0 +1,49 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', + '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 0000000000..d0f3b93d9f --- /dev/null +++ b/modules/Admin/Language/pt/Contributor.php @@ -0,0 +1,41 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', + '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 0000000000..4cd5d9c857 --- /dev/null +++ b/modules/Admin/Language/pt/Countries.php @@ -0,0 +1,264 @@ +<?php + +declare(strict_types=1); + +/** + * ISO 3166 country codes + * + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', +]; diff --git a/modules/Admin/Language/pt/Episode.php b/modules/Admin/Language/pt/Episode.php new file mode 100644 index 0000000000..054a23c3b0 --- /dev/null +++ b/modules/Admin/Language/pt/Episode.php @@ -0,0 +1,165 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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}', + '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.<br />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 0000000000..1406e3010e --- /dev/null +++ b/modules/Admin/Language/pt/EpisodeNavigation.php @@ -0,0 +1,23 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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', +]; diff --git a/modules/Admin/Language/pt/Fediverse.php b/modules/Admin/Language/pt/Fediverse.php new file mode 100644 index 0000000000..0e4ca66d89 --- /dev/null +++ b/modules/Admin/Language/pt/Fediverse.php @@ -0,0 +1,32 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +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!', + ], + '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 0000000000..3ff4c04dc8 --- /dev/null +++ b/modules/Admin/Language/pt/Home.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => '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 0000000000..36e373a285 --- /dev/null +++ b/modules/Admin/Language/pt/Install.php @@ -0,0 +1,61 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + '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/Admin/Language/pt/MyAccount.php b/modules/Admin/Language/pt/MyAccount.php new file mode 100644 index 0000000000..6ebbb30ef7 --- /dev/null +++ b/modules/Admin/Language/pt/MyAccount.php @@ -0,0 +1,18 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'info' => '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 0000000000..68d4609d5d --- /dev/null +++ b/modules/Admin/Language/pt/Navigation.php @@ -0,0 +1,41 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'toggle_sidebar' => '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 0000000000..b6f49de574 --- /dev/null +++ b/modules/Admin/Language/pt/Page.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'back_to_home' => 'Back to home', + 'page' => 'Page', + 'all_pages' => 'All pages', + 'create' => 'New page', + 'go_to_page' => 'Go to page', + 'edit' => 'Edit page', + 'delete' => 'Delete page', + '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 0000000000..e25ee63810 --- /dev/null +++ b/modules/Admin/Language/pt/Pager.php @@ -0,0 +1,21 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'pageNavigation' => 'Page navigation', + 'first' => 'First', + 'previous' => 'Previous', + 'next' => 'Next', + 'last' => 'Last', + 'older' => 'Older', + 'newer' => 'Newer', + 'invalidTemplate' => '{0} is not a valid Pager template.', + 'invalidPaginationGroup' => '{0} is not a valid Pagination group.', +]; diff --git a/modules/Admin/Language/pt/Person.php b/modules/Admin/Language/pt/Person.php new file mode 100644 index 0000000000..fa9bba2118 --- /dev/null +++ b/modules/Admin/Language/pt/Person.php @@ -0,0 +1,65 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'persons' => '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 0000000000..ab17d5999b --- /dev/null +++ b/modules/Admin/Language/pt/Platforms.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => 'Platforms', + 'home_url' => 'Go to {platformName} website', + 'submit_url' => 'Submit your podcast on {platformName}', + 'visible' => 'Display in podcast homepage?', + 'on_embed' => 'Display on embeddable player?', + 'remove' => 'Remove {platformName}', + 'submit' => 'Save', + '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 0000000000..d9d0d11b03 --- /dev/null +++ b/modules/Admin/Language/pt/Podcast.php @@ -0,0 +1,243 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'all_podcasts' => 'All podcasts', + 'no_podcast' => 'No podcast found!', + 'create' => 'Create podcast', + 'import' => 'Import podcast', + 'new_episode' => 'New Episode', + 'view' => 'View podcast', + 'edit' => 'Edit podcast', + '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 {<span class="font-semibold">#</span> follower} + other {<span class="font-semibold">#</span> followers} + }', + 'posts' => '{numberOfPosts, plural, + one {<span class="font-semibold">#</span> post} + other {<span class="font-semibold">#</span> 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 0000000000..e9cfc1c4ce --- /dev/null +++ b/modules/Admin/Language/pt/PodcastImport.php @@ -0,0 +1,37 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'warning' => + 'This procedure may take a long time.<br/>As the current version does not show any progress while it runs, you will not see anything updated until it is done.<br/>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 0000000000..b619573154 --- /dev/null +++ b/modules/Admin/Language/pt/PodcastNavigation.php @@ -0,0 +1,35 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'go_to_page' => 'Go to podcast page', + 'dashboard' => 'Podcast dashboard', + 'podcast-view' => 'Home', + 'podcast-edit' => 'Edit podcast', + 'podcast-persons-manage' => 'Manage persons', + 'episodes' => 'Episodes', + 'episode-list' => 'All episodes', + 'episode-create' => 'New episode', + 'analytics' => 'Analytics', + 'podcast-analytics' => 'Audience overview', + 'podcast-analytics-webpages' => 'Web pages visits', + 'podcast-analytics-locations' => 'Locations', + 'podcast-analytics-unique-listeners' => 'Unique listeners', + 'podcast-analytics-players' => 'Players', + 'podcast-analytics-listening-time' => 'Listening time', + 'podcast-analytics-time-periods' => 'Time periods', + '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 0000000000..0d6368ccd2 --- /dev/null +++ b/modules/Admin/Language/pt/Settings.php @@ -0,0 +1,56 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => '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 0000000000..a3f828fe09 --- /dev/null +++ b/modules/Admin/Language/pt/Soundbite.php @@ -0,0 +1,31 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'list' => [ + '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 0000000000..8b2e478bf7 --- /dev/null +++ b/modules/Admin/Language/pt/User.php @@ -0,0 +1,54 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'edit_roles' => "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 0000000000..750b19688f --- /dev/null +++ b/modules/Admin/Language/pt/Validation.php @@ -0,0 +1,18 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'min_dims' => + '{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 0000000000..638de697bb --- /dev/null +++ b/modules/Admin/Language/pt/VideoClip.php @@ -0,0 +1,72 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'list' => [ + '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 42ea1b19cb..c8edb13909 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 0000000000..46c72d259e --- /dev/null +++ b/modules/Install/Language/nn-NO/Install.php @@ -0,0 +1,62 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => '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 0000000000..1f66ef118f --- /dev/null +++ b/modules/Install/Language/oc/Install.php @@ -0,0 +1,62 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => '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 0000000000..1f66ef118f --- /dev/null +++ b/modules/Install/Language/pt/Install.php @@ -0,0 +1,62 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'title' => '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.", + ], +]; -- GitLab