From 9843ce3882e4d03a919d2b8918f8a6f04b4aec0f Mon Sep 17 00:00:00 2001 From: crowdin <project2_bot@noreply.code.castopod.org> Date: Mon, 4 Jul 2022 13:27:21 +0000 Subject: [PATCH] chore: new Crowdin updates --- app/Language/ar/Episode.php | 1 + app/Language/br/Episode.php | 1 + app/Language/br/Podcast.php | 162 +++++------ app/Language/de/Episode.php | 3 +- app/Language/de/Podcast.php | 24 +- app/Language/de/Post.php | 4 +- app/Language/el/Episode.php | 1 + app/Language/el/Podcast.php | 4 +- app/Language/es/Episode.php | 1 + app/Language/es/Podcast.php | 2 +- app/Language/fa/Comment.php | 34 +++ app/Language/fa/Common.php | 29 ++ app/Language/fa/Episode.php | 34 +++ app/Language/fa/Fediverse.php | 37 +++ app/Language/fa/Home.php | 20 ++ app/Language/fa/Page.php | 17 ++ app/Language/fa/Podcast.php | 53 ++++ app/Language/fa/Post.php | 40 +++ app/Language/fr/Episode.php | 1 + app/Language/gd/Comment.php | 38 +++ app/Language/gd/Common.php | 29 ++ app/Language/gd/Episode.php | 38 +++ app/Language/gd/Fediverse.php | 37 +++ app/Language/gd/Home.php | 20 ++ app/Language/gd/Page.php | 17 ++ app/Language/gd/Podcast.php | 63 ++++ app/Language/gd/Post.php | 46 +++ app/Language/id/Episode.php | 1 + app/Language/it/Episode.php | 1 + app/Language/nl/Episode.php | 1 + app/Language/nl/Podcast.php | 18 +- app/Language/nn-NO/Episode.php | 1 + app/Language/nn-NO/Podcast.php | 16 +- app/Language/oc/Episode.php | 1 + app/Language/pl/Episode.php | 1 + app/Language/pl/Podcast.php | 21 +- app/Language/pt-BR/Episode.php | 1 + app/Language/pt-BR/Podcast.php | 2 +- app/Language/pt/Episode.php | 1 + app/Language/ru/Episode.php | 1 + app/Language/ru/Podcast.php | 26 +- app/Language/sk/Comment.php | 34 +++ app/Language/sk/Common.php | 29 ++ app/Language/sk/Episode.php | 34 +++ app/Language/sk/Fediverse.php | 37 +++ app/Language/sk/Home.php | 20 ++ app/Language/sk/Page.php | 17 ++ app/Language/sk/Podcast.php | 53 ++++ app/Language/sk/Post.php | 40 +++ app/Language/sv/Episode.php | 1 + docs/src/ar/getting-started/install.md | 10 +- docs/src/br/getting-started/install.md | 10 +- docs/src/de/getting-started/install.md | 10 +- docs/src/el/getting-started/install.md | 10 +- docs/src/el/index.md | 54 ++-- docs/src/es/getting-started/install.md | 173 +++++------ docs/src/es/getting-started/update.md | 114 ++++---- docs/src/es/index.md | 21 +- docs/src/fa/getting-started/install.md | 170 +++++++++++ docs/src/fa/getting-started/security.md | 26 ++ docs/src/fa/getting-started/update.md | 93 ++++++ docs/src/fa/index.md | 216 ++++++++++++++ docs/src/fr/getting-started/install.md | 67 ++--- docs/src/fr/index.md | 18 +- docs/src/gd/getting-started/install.md | 170 +++++++++++ docs/src/gd/getting-started/security.md | 26 ++ docs/src/gd/getting-started/update.md | 93 ++++++ docs/src/gd/index.md | 216 ++++++++++++++ docs/src/id/getting-started/install.md | 10 +- docs/src/it/getting-started/install.md | 10 +- docs/src/nl/getting-started/install.md | 10 +- docs/src/nn-NO/getting-started/install.md | 63 ++-- docs/src/nn-NO/index.md | 13 +- docs/src/oc/getting-started/install.md | 10 +- docs/src/oc/index.md | 5 + docs/src/pl/getting-started/install.md | 10 +- docs/src/pt-BR/getting-started/install.md | 24 +- docs/src/pt-BR/index.md | 31 +- docs/src/pt/getting-started/install.md | 10 +- docs/src/ru/getting-started/install.md | 10 +- docs/src/sk/getting-started/install.md | 170 +++++++++++ docs/src/sk/getting-started/security.md | 26 ++ docs/src/sk/getting-started/update.md | 93 ++++++ docs/src/sk/index.md | 216 ++++++++++++++ docs/src/sv/getting-started/install.md | 10 +- modules/Admin/Language/ar/Breadcrumb.php | 2 + modules/Admin/Language/ar/Episode.php | 33 ++- modules/Admin/Language/ar/Person.php | 2 +- modules/Admin/Language/ar/Podcast.php | 33 ++- modules/Admin/Language/ar/PodcastImport.php | 2 +- .../Admin/Language/ar/PodcastNavigation.php | 1 + modules/Admin/Language/ar/Settings.php | 2 +- modules/Admin/Language/br/Breadcrumb.php | 2 + modules/Admin/Language/br/Episode.php | 31 +- modules/Admin/Language/br/Page.php | 28 +- modules/Admin/Language/br/Pager.php | 18 +- modules/Admin/Language/br/Person.php | 22 +- modules/Admin/Language/br/Podcast.php | 45 ++- modules/Admin/Language/br/PodcastImport.php | 2 +- .../Admin/Language/br/PodcastNavigation.php | 1 + modules/Admin/Language/br/Settings.php | 2 +- modules/Admin/Language/de/Breadcrumb.php | 2 + modules/Admin/Language/de/Contributor.php | 10 +- modules/Admin/Language/de/Episode.php | 35 ++- modules/Admin/Language/de/Navigation.php | 6 +- modules/Admin/Language/de/Person.php | 2 +- modules/Admin/Language/de/Podcast.php | 43 ++- modules/Admin/Language/de/PodcastImport.php | 2 +- .../Admin/Language/de/PodcastNavigation.php | 7 +- modules/Admin/Language/de/Settings.php | 2 +- modules/Admin/Language/el/Breadcrumb.php | 2 + modules/Admin/Language/el/Episode.php | 153 ++++++---- .../Admin/Language/el/EpisodeNavigation.php | 22 +- modules/Admin/Language/el/Fediverse.php | 28 +- modules/Admin/Language/el/Home.php | 4 +- modules/Admin/Language/el/Install.php | 60 ++-- modules/Admin/Language/el/MyAccount.php | 8 +- modules/Admin/Language/el/Navigation.php | 50 ++-- modules/Admin/Language/el/Page.php | 28 +- modules/Admin/Language/el/Pager.php | 18 +- modules/Admin/Language/el/Person.php | 78 ++--- modules/Admin/Language/el/Platforms.php | 26 +- modules/Admin/Language/el/Podcast.php | 69 +++-- modules/Admin/Language/el/PodcastImport.php | 2 +- .../Admin/Language/el/PodcastNavigation.php | 1 + modules/Admin/Language/el/Settings.php | 2 +- modules/Admin/Language/es/Breadcrumb.php | 2 + modules/Admin/Language/es/Episode.php | 33 ++- modules/Admin/Language/es/Person.php | 2 +- modules/Admin/Language/es/Podcast.php | 41 ++- modules/Admin/Language/es/PodcastImport.php | 2 +- .../Admin/Language/es/PodcastNavigation.php | 1 + modules/Admin/Language/es/Settings.php | 2 +- modules/Admin/Language/fa/Admin.php | 15 + modules/Admin/Language/fa/Breadcrumb.php | 50 ++++ modules/Admin/Language/fa/Charts.php | 38 +++ modules/Admin/Language/fa/Common.php | 49 ++++ modules/Admin/Language/fa/Contributor.php | 41 +++ modules/Admin/Language/fa/Countries.php | 264 +++++++++++++++++ modules/Admin/Language/fa/Episode.php | 192 +++++++++++++ .../Admin/Language/fa/EpisodeNavigation.php | 23 ++ modules/Admin/Language/fa/Fediverse.php | 32 +++ modules/Admin/Language/fa/Home.php | 14 + modules/Admin/Language/fa/Install.php | 61 ++++ modules/Admin/Language/fa/MyAccount.php | 18 ++ modules/Admin/Language/fa/Navigation.php | 41 +++ modules/Admin/Language/fa/Page.php | 30 ++ modules/Admin/Language/fa/Pager.php | 21 ++ modules/Admin/Language/fa/Person.php | 65 +++++ modules/Admin/Language/fa/Platforms.php | 30 ++ modules/Admin/Language/fa/Podcast.php | 272 ++++++++++++++++++ modules/Admin/Language/fa/PodcastImport.php | 37 +++ .../Admin/Language/fa/PodcastNavigation.php | 36 +++ modules/Admin/Language/fa/Settings.php | 56 ++++ modules/Admin/Language/fa/Soundbite.php | 31 ++ modules/Admin/Language/fa/User.php | 54 ++++ modules/Admin/Language/fa/Validation.php | 18 ++ modules/Admin/Language/fa/VideoClip.php | 72 +++++ modules/Admin/Language/fr/Breadcrumb.php | 2 + modules/Admin/Language/fr/Episode.php | 33 ++- modules/Admin/Language/fr/Person.php | 2 +- modules/Admin/Language/fr/Podcast.php | 41 ++- modules/Admin/Language/fr/PodcastImport.php | 2 +- .../Admin/Language/fr/PodcastNavigation.php | 1 + modules/Admin/Language/fr/Settings.php | 2 +- modules/Admin/Language/gd/Admin.php | 15 + modules/Admin/Language/gd/Breadcrumb.php | 50 ++++ modules/Admin/Language/gd/Charts.php | 38 +++ modules/Admin/Language/gd/Common.php | 49 ++++ modules/Admin/Language/gd/Contributor.php | 41 +++ modules/Admin/Language/gd/Countries.php | 264 +++++++++++++++++ modules/Admin/Language/gd/Episode.php | 192 +++++++++++++ .../Admin/Language/gd/EpisodeNavigation.php | 23 ++ modules/Admin/Language/gd/Fediverse.php | 32 +++ modules/Admin/Language/gd/Home.php | 14 + modules/Admin/Language/gd/Install.php | 61 ++++ modules/Admin/Language/gd/MyAccount.php | 18 ++ modules/Admin/Language/gd/Navigation.php | 41 +++ modules/Admin/Language/gd/Page.php | 30 ++ modules/Admin/Language/gd/Pager.php | 21 ++ modules/Admin/Language/gd/Person.php | 65 +++++ modules/Admin/Language/gd/Platforms.php | 30 ++ modules/Admin/Language/gd/Podcast.php | 272 ++++++++++++++++++ modules/Admin/Language/gd/PodcastImport.php | 37 +++ .../Admin/Language/gd/PodcastNavigation.php | 36 +++ modules/Admin/Language/gd/Settings.php | 56 ++++ modules/Admin/Language/gd/Soundbite.php | 31 ++ modules/Admin/Language/gd/User.php | 54 ++++ modules/Admin/Language/gd/Validation.php | 18 ++ modules/Admin/Language/gd/VideoClip.php | 72 +++++ modules/Admin/Language/id/Breadcrumb.php | 2 + modules/Admin/Language/id/Episode.php | 31 +- modules/Admin/Language/id/Person.php | 2 +- modules/Admin/Language/id/Podcast.php | 33 ++- modules/Admin/Language/id/PodcastImport.php | 2 +- .../Admin/Language/id/PodcastNavigation.php | 1 + modules/Admin/Language/id/Settings.php | 2 +- modules/Admin/Language/it/Breadcrumb.php | 2 + modules/Admin/Language/it/Episode.php | 31 +- modules/Admin/Language/it/Person.php | 2 +- modules/Admin/Language/it/Podcast.php | 33 ++- modules/Admin/Language/it/PodcastImport.php | 2 +- .../Admin/Language/it/PodcastNavigation.php | 1 + modules/Admin/Language/it/Settings.php | 2 +- modules/Admin/Language/nl/Breadcrumb.php | 2 + modules/Admin/Language/nl/Episode.php | 31 +- modules/Admin/Language/nl/Person.php | 2 +- modules/Admin/Language/nl/Podcast.php | 33 ++- modules/Admin/Language/nl/PodcastImport.php | 2 +- .../Admin/Language/nl/PodcastNavigation.php | 1 + modules/Admin/Language/nl/Settings.php | 2 +- modules/Admin/Language/nn-NO/Breadcrumb.php | 2 + modules/Admin/Language/nn-NO/Episode.php | 35 ++- modules/Admin/Language/nn-NO/Person.php | 2 +- modules/Admin/Language/nn-NO/Podcast.php | 41 ++- .../Admin/Language/nn-NO/PodcastImport.php | 2 +- .../Language/nn-NO/PodcastNavigation.php | 1 + modules/Admin/Language/nn-NO/Settings.php | 2 +- modules/Admin/Language/oc/Breadcrumb.php | 2 + modules/Admin/Language/oc/Episode.php | 31 +- modules/Admin/Language/oc/Person.php | 2 +- modules/Admin/Language/oc/Podcast.php | 33 ++- modules/Admin/Language/oc/PodcastImport.php | 2 +- .../Admin/Language/oc/PodcastNavigation.php | 1 + modules/Admin/Language/oc/Settings.php | 2 +- modules/Admin/Language/pl/Breadcrumb.php | 2 + modules/Admin/Language/pl/Episode.php | 35 ++- modules/Admin/Language/pl/Person.php | 2 +- modules/Admin/Language/pl/Podcast.php | 42 ++- modules/Admin/Language/pl/PodcastImport.php | 2 +- .../Admin/Language/pl/PodcastNavigation.php | 1 + modules/Admin/Language/pl/Settings.php | 2 +- modules/Admin/Language/pt-BR/Breadcrumb.php | 2 + modules/Admin/Language/pt-BR/Episode.php | 33 ++- modules/Admin/Language/pt-BR/Person.php | 2 +- modules/Admin/Language/pt-BR/Podcast.php | 43 ++- .../Admin/Language/pt-BR/PodcastImport.php | 2 +- .../Language/pt-BR/PodcastNavigation.php | 1 + modules/Admin/Language/pt-BR/Settings.php | 2 +- modules/Admin/Language/pt/Breadcrumb.php | 2 + modules/Admin/Language/pt/Episode.php | 31 +- modules/Admin/Language/pt/Person.php | 2 +- modules/Admin/Language/pt/Podcast.php | 33 ++- modules/Admin/Language/pt/PodcastImport.php | 2 +- .../Admin/Language/pt/PodcastNavigation.php | 1 + modules/Admin/Language/pt/Settings.php | 2 +- modules/Admin/Language/ru/Breadcrumb.php | 2 + modules/Admin/Language/ru/Episode.php | 31 +- modules/Admin/Language/ru/Person.php | 2 +- modules/Admin/Language/ru/Podcast.php | 33 ++- modules/Admin/Language/ru/PodcastImport.php | 2 +- .../Admin/Language/ru/PodcastNavigation.php | 1 + modules/Admin/Language/ru/Settings.php | 2 +- modules/Admin/Language/sk/Admin.php | 15 + modules/Admin/Language/sk/Breadcrumb.php | 50 ++++ modules/Admin/Language/sk/Charts.php | 38 +++ modules/Admin/Language/sk/Common.php | 49 ++++ modules/Admin/Language/sk/Contributor.php | 41 +++ modules/Admin/Language/sk/Countries.php | 264 +++++++++++++++++ modules/Admin/Language/sk/Episode.php | 192 +++++++++++++ .../Admin/Language/sk/EpisodeNavigation.php | 23 ++ modules/Admin/Language/sk/Fediverse.php | 32 +++ modules/Admin/Language/sk/Home.php | 14 + modules/Admin/Language/sk/Install.php | 61 ++++ modules/Admin/Language/sk/MyAccount.php | 18 ++ modules/Admin/Language/sk/Navigation.php | 41 +++ modules/Admin/Language/sk/Page.php | 30 ++ modules/Admin/Language/sk/Pager.php | 21 ++ modules/Admin/Language/sk/Person.php | 65 +++++ modules/Admin/Language/sk/Platforms.php | 30 ++ modules/Admin/Language/sk/Podcast.php | 272 ++++++++++++++++++ modules/Admin/Language/sk/PodcastImport.php | 37 +++ .../Admin/Language/sk/PodcastNavigation.php | 36 +++ modules/Admin/Language/sk/Settings.php | 56 ++++ modules/Admin/Language/sk/Soundbite.php | 31 ++ modules/Admin/Language/sk/User.php | 54 ++++ modules/Admin/Language/sk/Validation.php | 18 ++ modules/Admin/Language/sk/VideoClip.php | 72 +++++ modules/Admin/Language/sv/Breadcrumb.php | 2 + modules/Admin/Language/sv/Episode.php | 31 +- modules/Admin/Language/sv/Person.php | 2 +- modules/Admin/Language/sv/Podcast.php | 33 ++- modules/Admin/Language/sv/PodcastImport.php | 2 +- .../Admin/Language/sv/PodcastNavigation.php | 1 + modules/Admin/Language/sv/Settings.php | 2 +- modules/Install/Language/fa/Install.php | 62 ++++ modules/Install/Language/gd/Install.php | 62 ++++ modules/Install/Language/sk/Install.php | 62 ++++ 288 files changed, 9149 insertions(+), 867 deletions(-) create mode 100644 app/Language/fa/Comment.php create mode 100644 app/Language/fa/Common.php create mode 100644 app/Language/fa/Episode.php create mode 100644 app/Language/fa/Fediverse.php create mode 100644 app/Language/fa/Home.php create mode 100644 app/Language/fa/Page.php create mode 100644 app/Language/fa/Podcast.php create mode 100644 app/Language/fa/Post.php create mode 100644 app/Language/gd/Comment.php create mode 100644 app/Language/gd/Common.php create mode 100644 app/Language/gd/Episode.php create mode 100644 app/Language/gd/Fediverse.php create mode 100644 app/Language/gd/Home.php create mode 100644 app/Language/gd/Page.php create mode 100644 app/Language/gd/Podcast.php create mode 100644 app/Language/gd/Post.php create mode 100644 app/Language/sk/Comment.php create mode 100644 app/Language/sk/Common.php create mode 100644 app/Language/sk/Episode.php create mode 100644 app/Language/sk/Fediverse.php create mode 100644 app/Language/sk/Home.php create mode 100644 app/Language/sk/Page.php create mode 100644 app/Language/sk/Podcast.php create mode 100644 app/Language/sk/Post.php create mode 100644 docs/src/fa/getting-started/install.md create mode 100644 docs/src/fa/getting-started/security.md create mode 100644 docs/src/fa/getting-started/update.md create mode 100644 docs/src/fa/index.md create mode 100644 docs/src/gd/getting-started/install.md create mode 100644 docs/src/gd/getting-started/security.md create mode 100644 docs/src/gd/getting-started/update.md create mode 100644 docs/src/gd/index.md create mode 100644 docs/src/sk/getting-started/install.md create mode 100644 docs/src/sk/getting-started/security.md create mode 100644 docs/src/sk/getting-started/update.md create mode 100644 docs/src/sk/index.md create mode 100644 modules/Admin/Language/fa/Admin.php create mode 100644 modules/Admin/Language/fa/Breadcrumb.php create mode 100644 modules/Admin/Language/fa/Charts.php create mode 100644 modules/Admin/Language/fa/Common.php create mode 100644 modules/Admin/Language/fa/Contributor.php create mode 100644 modules/Admin/Language/fa/Countries.php create mode 100644 modules/Admin/Language/fa/Episode.php create mode 100644 modules/Admin/Language/fa/EpisodeNavigation.php create mode 100644 modules/Admin/Language/fa/Fediverse.php create mode 100644 modules/Admin/Language/fa/Home.php create mode 100644 modules/Admin/Language/fa/Install.php create mode 100644 modules/Admin/Language/fa/MyAccount.php create mode 100644 modules/Admin/Language/fa/Navigation.php create mode 100644 modules/Admin/Language/fa/Page.php create mode 100644 modules/Admin/Language/fa/Pager.php create mode 100644 modules/Admin/Language/fa/Person.php create mode 100644 modules/Admin/Language/fa/Platforms.php create mode 100644 modules/Admin/Language/fa/Podcast.php create mode 100644 modules/Admin/Language/fa/PodcastImport.php create mode 100644 modules/Admin/Language/fa/PodcastNavigation.php create mode 100644 modules/Admin/Language/fa/Settings.php create mode 100644 modules/Admin/Language/fa/Soundbite.php create mode 100644 modules/Admin/Language/fa/User.php create mode 100644 modules/Admin/Language/fa/Validation.php create mode 100644 modules/Admin/Language/fa/VideoClip.php create mode 100644 modules/Admin/Language/gd/Admin.php create mode 100644 modules/Admin/Language/gd/Breadcrumb.php create mode 100644 modules/Admin/Language/gd/Charts.php create mode 100644 modules/Admin/Language/gd/Common.php create mode 100644 modules/Admin/Language/gd/Contributor.php create mode 100644 modules/Admin/Language/gd/Countries.php create mode 100644 modules/Admin/Language/gd/Episode.php create mode 100644 modules/Admin/Language/gd/EpisodeNavigation.php create mode 100644 modules/Admin/Language/gd/Fediverse.php create mode 100644 modules/Admin/Language/gd/Home.php create mode 100644 modules/Admin/Language/gd/Install.php create mode 100644 modules/Admin/Language/gd/MyAccount.php create mode 100644 modules/Admin/Language/gd/Navigation.php create mode 100644 modules/Admin/Language/gd/Page.php create mode 100644 modules/Admin/Language/gd/Pager.php create mode 100644 modules/Admin/Language/gd/Person.php create mode 100644 modules/Admin/Language/gd/Platforms.php create mode 100644 modules/Admin/Language/gd/Podcast.php create mode 100644 modules/Admin/Language/gd/PodcastImport.php create mode 100644 modules/Admin/Language/gd/PodcastNavigation.php create mode 100644 modules/Admin/Language/gd/Settings.php create mode 100644 modules/Admin/Language/gd/Soundbite.php create mode 100644 modules/Admin/Language/gd/User.php create mode 100644 modules/Admin/Language/gd/Validation.php create mode 100644 modules/Admin/Language/gd/VideoClip.php create mode 100644 modules/Admin/Language/sk/Admin.php create mode 100644 modules/Admin/Language/sk/Breadcrumb.php create mode 100644 modules/Admin/Language/sk/Charts.php create mode 100644 modules/Admin/Language/sk/Common.php create mode 100644 modules/Admin/Language/sk/Contributor.php create mode 100644 modules/Admin/Language/sk/Countries.php create mode 100644 modules/Admin/Language/sk/Episode.php create mode 100644 modules/Admin/Language/sk/EpisodeNavigation.php create mode 100644 modules/Admin/Language/sk/Fediverse.php create mode 100644 modules/Admin/Language/sk/Home.php create mode 100644 modules/Admin/Language/sk/Install.php create mode 100644 modules/Admin/Language/sk/MyAccount.php create mode 100644 modules/Admin/Language/sk/Navigation.php create mode 100644 modules/Admin/Language/sk/Page.php create mode 100644 modules/Admin/Language/sk/Pager.php create mode 100644 modules/Admin/Language/sk/Person.php create mode 100644 modules/Admin/Language/sk/Platforms.php create mode 100644 modules/Admin/Language/sk/Podcast.php create mode 100644 modules/Admin/Language/sk/PodcastImport.php create mode 100644 modules/Admin/Language/sk/PodcastNavigation.php create mode 100644 modules/Admin/Language/sk/Settings.php create mode 100644 modules/Admin/Language/sk/Soundbite.php create mode 100644 modules/Admin/Language/sk/User.php create mode 100644 modules/Admin/Language/sk/Validation.php create mode 100644 modules/Admin/Language/sk/VideoClip.php create mode 100644 modules/Install/Language/fa/Install.php create mode 100644 modules/Install/Language/gd/Install.php create mode 100644 modules/Install/Language/sk/Install.php diff --git a/app/Language/ar/Episode.php b/app/Language/ar/Episode.php index 2363eb3926..f9a0e2cb6f 100644 --- a/app/Language/ar/Episode.php +++ b/app/Language/ar/Episode.php @@ -29,5 +29,6 @@ return [ other {# comments} }', 'all_podcast_episodes' => 'كافة حلقات البودكاست', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'العودة إلى البودكاست', ]; diff --git a/app/Language/br/Episode.php b/app/Language/br/Episode.php index a8ff6012da..2909597094 100644 --- a/app/Language/br/Episode.php +++ b/app/Language/br/Episode.php @@ -38,5 +38,6 @@ return [ other {# evezhiadenn} }', 'all_podcast_episodes' => 'Holl rannoù ar podkast', + 'episodes_recycle_bin' => 'Poubellenn', 'back_to_podcast' => 'Mont d\'ar podkast en-dro', ]; diff --git a/app/Language/br/Podcast.php b/app/Language/br/Podcast.php index e5f9008199..4c669ee967 100644 --- a/app/Language/br/Podcast.php +++ b/app/Language/br/Podcast.php @@ -23,44 +23,44 @@ return [ other {# heulier·ez} }', 'posts' => '{numberOfPosts, plural, - 0 {kemennadenn ebet} - 1 {# gemennadenn} - 2 {# gemennadenn} - 3 {# c\'hemennadenn} - 4 {# c\'hemennadenn} - 9 {# c\'hemennadenn} - 21 {# gemennadenn} - 22 {# gemennadenn} - 23 {# c\'hemennadenn} - 24 {# c\'hemennadenn} - 29 {# c\'hemennadenn} - 31 {# gemennadenn} - 32 {# gemennadenn} - 33 {# c\'hemennadenn} - 34 {# c\'hemennadenn} - 39 {# c\'hemennadenn} - 41 {# gemennadenn} - 42 {# gemennadenn} - 43 {# c\'hemennadenn} - 44 {# c\'hemennadenn} - 49 {# c\'hemennadenn} - 51 {# gemennadenn} - 52 {# gemennadenn} - 53 {# c\'hemennadenn} - 54 {# c\'hemennadenn} - 59 {# c\'hemennadenn} - 61 {# gemennadenn} - 62 {# gemennadenn} - 63 {# c\'hemennadenn} - 64 {# c\'hemennadenn} - 69 {# c\'hemennadenn} - 81 {# gemennadenn} - 82 {# gemennadenn} - 83 {# c\'hemennadenn} - 84 {# c\'hemennadenn} - 89 {# c\'hemennadenn} - other {# kemennadenn} - }', + 0 {kemennadenn ebet} + 1 {# gemennadenn} + 2 {# gemennadenn} + 3 {# c\'hemennadenn} + 4 {# c\'hemennadenn} + 9 {# c\'hemennadenn} + other {# kemennadenn} + 21 {# gemennadenn} + 22 {# gemennadenn} + 23 {# c\'hemennadenn} + 24 {# c\'hemennadenn} + 29 {# c\'hemennadenn} + 31 {# gemennadenn} + 32 {# gemennadenn} + 33 {# c\'hemennadenn} + 34 {# c\'hemennadenn} + 39 {# c\'hemennadenn} + 41 {# gemennadenn} + 42 {# gemennadenn} + 43 {# c\'hemennadenn} + 44 {# c\'hemennadenn} + 49 {# c\'hemennadenn} + 51 {# gemennadenn} + 52 {# gemennadenn} + 53 {# c\'hemennadenn} + 54 {# c\'hemennadenn} + 59 {# c\'hemennadenn} + 61 {# gemennadenn} + 62 {# gemennadenn} + 63 {# c\'hemennadenn} + 64 {# c\'hemennadenn} + 69 {# c\'hemennadenn} + 81 {# gemennadenn} + 82 {# gemennadenn} + 83 {# c\'hemennadenn} + 84 {# c\'hemennadenn} + 89 {# c\'hemennadenn} + }', 'activity' => 'Oberiantiz', 'episodes' => 'Rannoù', 'episodes_title' => 'Rannoù {podcastTitle}', @@ -68,50 +68,50 @@ return [ 'stats' => [ 'title' => 'Stadegoù', 'number_of_seasons' => '{0, plural, - 0 {koulzad ebet} - 1 {# c\'houlzad} - 2 {# goulzad} - 3 {# c\'houlzad} - 4 {# c\'houlzad} - 9 {# c\'houlzad} - 21 {# c\'houlzad} - 22 {# goulzad} - 23 {# c\'houlzad} - 24 {# c\'houlzad} - 29 {# c\'houlzad} - 31 {# c\'houlzad} - 32 {# goulzad} - 33 {# c\'houlzad} - 34 {# c\'houlzad} - 39 {# c\'houlzad} - 41 {# c\'houlzad} - 42 {# goulzad} - 43 {# c\'houlzad} - 44 {# c\'houlzad} - 49 {# c\'houlzad} - 51 {# c\'houlzad} - 52 {# goulzad} - 53 {# c\'houlzad} - 54 {# c\'houlzad} - 59 {# c\'houlzad} - 61 {# c\'houlzad} - 62 {# goulzad} - 63 {# c\'houlzad} - 64 {# c\'houlzad} - 69 {# c\'houlzad} - 81 {# c\'houlzad} - 82 {# goulzad} - 83 {# c\'houlzad} - 84 {# c\'houlzad} - 89 {# c\'houlzad} - other {# koulzad} - }', + 0 {koulzad ebet} + 1 {# c\'houlzad} + 2 {# goulzad} + 3 {# c\'houlzad} + 4 {# c\'houlzad} + 9 {# c\'houlzad} + other {# koulzad} + 21 {# c\'houlzad} + 22 {# goulzad} + 23 {# c\'houlzad} + 24 {# c\'houlzad} + 29 {# c\'houlzad} + 31 {# c\'houlzad} + 32 {# goulzad} + 33 {# c\'houlzad} + 34 {# c\'houlzad} + 39 {# c\'houlzad} + 41 {# c\'houlzad} + 42 {# goulzad} + 43 {# c\'houlzad} + 44 {# c\'houlzad} + 49 {# c\'houlzad} + 51 {# c\'houlzad} + 52 {# goulzad} + 53 {# c\'houlzad} + 54 {# c\'houlzad} + 59 {# c\'houlzad} + 61 {# c\'houlzad} + 62 {# goulzad} + 63 {# c\'houlzad} + 64 {# c\'houlzad} + 69 {# c\'houlzad} + 81 {# c\'houlzad} + 82 {# goulzad} + 83 {# c\'houlzad} + 84 {# c\'houlzad} + 89 {# c\'houlzad} + }', 'number_of_episodes' => '{0, plural, - 0 {rann ebet} - one {# rann} - other {# rann} - }', - 'first_published_at' => 'Embannet eo bet ar rann gentañ d\'an/d\'ar{0, date, medium}', + 0 {rann ebet} + one {# rann} + other {# rann} + }', + 'first_published_at' => 'Embannet eo bet ar rann gentañ d\'ar/d\'an {0, date, medium}', ], 'sponsor' => 'Harpit', 'funding_links' => 'Liammoù evit arc\'hantaouiñ {podcastTitle}', diff --git a/app/Language/de/Episode.php b/app/Language/de/Episode.php index 0f3022484e..5dc017cc6a 100644 --- a/app/Language/de/Episode.php +++ b/app/Language/de/Episode.php @@ -19,7 +19,7 @@ return [ one {# Person} other {# Personen} }', - 'persons_list' => 'Personen', + 'persons_list' => 'Mitwirkende', 'back_to_episodes' => 'Zurück zu Folgen von {podcast}', 'comments' => 'Kommentare', 'activity' => 'Aktivitäten', @@ -29,5 +29,6 @@ return [ other {# Kommentare} }', 'all_podcast_episodes' => 'Alle Podcast-Folgen', + 'episodes_recycle_bin' => 'Papierkorb', 'back_to_podcast' => 'Zurück zum Podcast', ]; diff --git a/app/Language/de/Podcast.php b/app/Language/de/Podcast.php index e822f3b1b6..67c3c00baa 100644 --- a/app/Language/de/Podcast.php +++ b/app/Language/de/Podcast.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'feed' => 'RSS-feed', + 'feed' => 'RSS-Feed', 'season' => 'Staffel {seasonNumber}', 'list_of_episodes_year' => '{year} Folgen ({episodeCount})', 'list_of_episodes_season' => @@ -18,28 +18,28 @@ return [ 'follow' => 'Folgen', 'followTitle' => 'Folge {actorDisplayName} im Fediversum', 'followers' => '{numberOfFollowers, plural, - one {# Follower} - other {# Follower} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# Beitrag} - other {# Beiträge} + one {# post} + other {# posts} }', 'activity' => 'Aktivitäten', - 'episodes' => 'Folgen', + 'episodes' => 'Episoden', 'episodes_title' => 'Folgen von {podcastTitle}', 'about' => 'Über', 'stats' => [ 'title' => 'Statistiken', 'number_of_seasons' => '{0, plural, - one {# Staffel} - other {# Staffeln} + one {# season} + other {# seasons} }', 'number_of_episodes' => '{0, plural, - one {# Folge} - other {# Folgen} + one {# episode} + other {# episodes} }', - 'first_published_at' => 'Erste Folge veröffentlicht am {0, date, medium}', + 'first_published_at' => 'Erste Episode veröffentlicht am {0, date, medium}', ], 'sponsor' => 'Unterstützer', 'funding_links' => 'Links zur Finanzierung von {podcastTitle}', @@ -49,5 +49,5 @@ return [ one {# Person} other {# Personen} }', - 'persons_list' => 'Personen', + 'persons_list' => 'Mitwirkende', ]; diff --git a/app/Language/de/Post.php b/app/Language/de/Post.php index cb84da8804..589c69076f 100644 --- a/app/Language/de/Post.php +++ b/app/Language/de/Post.php @@ -15,8 +15,8 @@ return [ 'reply_to' => 'Antorten auf @{actorUsername}', 'form' => [ 'message_placeholder' => 'Scheibe eine Nachricht…', - 'episode_message_placeholder' => 'Schreibe eine Nachricht für die Folge…', - 'episode_url_placeholder' => 'URL der Folge', + 'episode_message_placeholder' => 'Schreibe eine Nachricht für die Episode…', + 'episode_url_placeholder' => 'URL der Episode', 'reply_to_placeholder' => 'Antworten auf @{actorUsername}', 'submit' => 'Senden', 'submit_reply' => 'Antwort senden', diff --git a/app/Language/el/Episode.php b/app/Language/el/Episode.php index d7f8ee9071..fa8bfdb58b 100644 --- a/app/Language/el/Episode.php +++ b/app/Language/el/Episode.php @@ -29,5 +29,6 @@ return [ other {# σχόλια} }', 'all_podcast_episodes' => 'Όλα τα επεισόδια του podcast', + 'episodes_recycle_bin' => 'Κάδος Aνακύκλωσης', 'back_to_podcast' => 'Μετάβαση πίσω στο podcast', ]; diff --git a/app/Language/el/Podcast.php b/app/Language/el/Podcast.php index 2d35d0e0ed..0287a94de7 100644 --- a/app/Language/el/Podcast.php +++ b/app/Language/el/Podcast.php @@ -32,8 +32,8 @@ return [ 'stats' => [ 'title' => 'Στατιστικά', 'number_of_seasons' => '{0, plural, - one {# σεζόν} - other {# σεζόνς} + one {# κύκλος} + other {# κύκλοι} }', 'number_of_episodes' => '{0, plural, one {# επισόδειο} diff --git a/app/Language/es/Episode.php b/app/Language/es/Episode.php index ad8bb076d6..8689a78530 100644 --- a/app/Language/es/Episode.php +++ b/app/Language/es/Episode.php @@ -29,5 +29,6 @@ return [ other {# comentarios} }', 'all_podcast_episodes' => 'Todos los episodios del podcast', + 'episodes_recycle_bin' => 'Papelera de reciclaje', 'back_to_podcast' => 'Regresar al podcast', ]; diff --git a/app/Language/es/Podcast.php b/app/Language/es/Podcast.php index f876c86d01..81b7d3ec5c 100644 --- a/app/Language/es/Podcast.php +++ b/app/Language/es/Podcast.php @@ -39,7 +39,7 @@ return [ one {# episodio} other {# episodios} }', - 'first_published_at' => 'Primer episodio publicado en {0, date, medium}', + 'first_published_at' => 'Primer episodio publicado el {0, date, medium}', ], 'sponsor' => 'Patrocinador', 'funding_links' => 'Enlaces de financiación para {podcastTitle}', diff --git a/app/Language/fa/Comment.php b/app/Language/fa/Comment.php new file mode 100644 index 0000000000..1dd8f5eadc --- /dev/null +++ b/app/Language/fa/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/fa/Common.php b/app/Language/fa/Common.php new file mode 100644 index 0000000000..aff8136b83 --- /dev/null +++ b/app/Language/fa/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/fa/Episode.php b/app/Language/fa/Episode.php new file mode 100644 index 0000000000..0b889707f1 --- /dev/null +++ b/app/Language/fa/Episode.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 [ + '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', + 'episodes_recycle_bin' => 'Recycle bin', + 'back_to_podcast' => 'Go back to podcast', +]; diff --git a/app/Language/fa/Fediverse.php b/app/Language/fa/Fediverse.php new file mode 100644 index 0000000000..32f54c074f --- /dev/null +++ b/app/Language/fa/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/fa/Home.php b/app/Language/fa/Home.php new file mode 100644 index 0000000000..1518239bd9 --- /dev/null +++ b/app/Language/fa/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/fa/Page.php b/app/Language/fa/Page.php new file mode 100644 index 0000000000..7cd606694e --- /dev/null +++ b/app/Language/fa/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/fa/Podcast.php b/app/Language/fa/Podcast.php new file mode 100644 index 0000000000..9b1e749aa1 --- /dev/null +++ b/app/Language/fa/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 {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'episodes_title' => 'Episodes of {podcastTitle}', + 'about' => 'About', + 'stats' => [ + 'title' => 'Stats', + 'number_of_seasons' => '{0, plural, + one {# season} + other {# seasons} + }', + 'number_of_episodes' => '{0, plural, + one {# episode} + other {# episodes} + }', + 'first_published_at' => 'First episode published on {0, date, medium}', + ], + 'sponsor' => 'Sponsor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Listen on', + 'persons' => '{personsCount, plural, + one {# person} + other {# persons} + }', + 'persons_list' => 'Persons', +]; diff --git a/app/Language/fa/Post.php b/app/Language/fa/Post.php new file mode 100644 index 0000000000..58d1cf8002 --- /dev/null +++ b/app/Language/fa/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/fr/Episode.php b/app/Language/fr/Episode.php index 86fa3453b0..7ed01017f8 100644 --- a/app/Language/fr/Episode.php +++ b/app/Language/fr/Episode.php @@ -29,5 +29,6 @@ return [ other {# commentaires} }', 'all_podcast_episodes' => 'Tous les épisodes du podcast', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Revenir au podcast', ]; diff --git a/app/Language/gd/Comment.php b/app/Language/gd/Comment.php new file mode 100644 index 0000000000..0c9663e231 --- /dev/null +++ b/app/Language/gd/Comment.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 [ + 'title' => "Am beachd aig {actorDisplayName} air {episodeTitle}", + 'back_to_comments' => 'Air ais dha na beachdan', + 'form' => [ + 'episode_message_placeholder' => 'Sgrìobh beachd…', + 'reply_to_placeholder' => 'Freagair gu @{actorUsername}', + 'submit' => 'Cuir', + 'submit_reply' => 'Freagair', + ], + 'likes' => '{numberOfLikes, plural, + one {# annsachd} + two {# annsachd} + few {# annsachdan} + other {# annsachd} + }', + 'replies' => '{numberOfReplies, plural, + one {# fhreagairt} + two {# fhreagairt} + few {# freagairtean} + other {# freagairt} + }', + 'like' => 'Cuir ris na h-annsachdan', + 'reply' => 'Freagair', + 'view_replies' => 'Seall na freagairtean ({numberOfReplies})', + 'block_actor' => 'Bac an cleachdaiche @{actorUsername}', + 'block_domain' => 'Bac an àrainn @{actorDomain}', + 'delete' => 'Sguab às am beachd', +]; diff --git a/app/Language/gd/Common.php b/app/Language/gd/Common.php new file mode 100644 index 0000000000..bbda7ca716 --- /dev/null +++ b/app/Language/gd/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' => 'Tha', + 'no' => 'Chan eil', + 'cancel' => 'Sguir dheth', + 'optional' => 'Roghainneil', + 'close' => 'Dùin', + 'home' => 'Dachaigh', + 'explicit' => 'Frionasach', + 'powered_by' => 'Le cumhachd {castopod}', + 'go_back' => 'Air ais', + 'play_episode_button' => [ + 'play' => 'Cluich', + 'playing' => '’Ga chluich', + ], + 'read_more' => 'Leugh an còrr', + 'read_less' => 'Leugh nas lugha dheth', + 'see_more' => 'Seall barrachd dheth', + 'see_less' => 'Seall nas lugha dheth', +]; diff --git a/app/Language/gd/Episode.php b/app/Language/gd/Episode.php new file mode 100644 index 0000000000..1057112c60 --- /dev/null +++ b/app/Language/gd/Episode.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 [ + 'season' => 'Seusan {seasonNumber}', + 'season_abbr' => 'S{seasonNumber}', + 'number' => 'Eapasod {episodeNumber}', + 'number_abbr' => 'Eap. {episodeNumber}', + 'season_episode' => 'Seusan {seasonNumber} eapasod {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}', + 'persons' => '{personsCount, plural, + one {# neach} + two {# dhuine} + few {# daoine} + other {# duine} + }', + 'persons_list' => 'Daoine', + 'back_to_episodes' => 'Air ais dha na h-eapasodan aig {podcast}', + 'comments' => 'Beachdan', + 'activity' => 'Gnìomhachd', + 'description' => 'Tuairisgeul an eapasoid', + 'number_of_comments' => '{numberOfComments, plural, + one {# bheachd} + two {# bheachd} + few {# beachdan} + other {# beachd} + }', + 'all_podcast_episodes' => 'A h-uile eapasod a’ phod-chraolaidh', + 'episodes_recycle_bin' => 'Am biona', + 'back_to_podcast' => 'Air ais dhan phod-chraoladh', +]; diff --git a/app/Language/gd/Fediverse.php b/app/Language/gd/Fediverse.php new file mode 100644 index 0000000000..d1dbaaef86 --- /dev/null +++ b/app/Language/gd/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' => 'An t-aithnichear agad', + 'your_handle_hint' => 'Cuir a-steach an @ainm_cleachdaiche@àrainn leis a ghabhas tu gnìomh.', + 'follow' => [ + 'label' => 'Lean air', + 'title' => 'Lean air {actorDisplayName}', + 'subtitle' => 'Tha thu gu bhith leantainn air:', + 'accountNotFound' => 'Cha deach an cunntas a lorg.', + 'remoteFollowNotAllowed' => 'Tha coltas nach gabh am frithealaiche ri leantainn chèin…', + 'submit' => 'Lean air adhart gus leantainn air', + ], + 'favourite' => [ + 'title' => "Cuir am post aig {actorDisplayName} ris na h-annsachdan", + 'subtitle' => 'Cuiridh tu seo ris na h-annsachdan:', + 'submit' => 'Lean air adhart gus a chur ris na h-annsachdan', + ], + 'reblog' => [ + 'title' => "Co-roinn am post aig {actorDisplayName}", + 'subtitle' => 'Tha thu gu bhith co-roinneadh:', + 'submit' => 'Lean air adhart gus a cho-roinneadh', + ], + 'reply' => [ + 'title' => "Freagair dhan phost aig {actorDisplayName}", + 'subtitle' => 'Tha thu gu bhith freagairt gu:', + 'submit' => 'Lean air adhart gus freagairt dha', + ], +]; diff --git a/app/Language/gd/Home.php b/app/Language/gd/Home.php new file mode 100644 index 0000000000..63fa67b6ba --- /dev/null +++ b/app/Language/gd/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' => 'A h-uile pod-chraoladh', + 'sort_by' => 'Seòrsaich a-rèir', + 'sort_options' => [ + 'activity' => 'A ghnìomhachd as ùire', + 'created_desc' => 'As ùire an toiseach', + 'created_asc' => 'As sine an toiseach', + ], + 'no_podcast' => 'Cha deach pod-chraoladh a lorg', +]; diff --git a/app/Language/gd/Page.php b/app/Language/gd/Page.php new file mode 100644 index 0000000000..57cd81b17e --- /dev/null +++ b/app/Language/gd/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' => 'Dhachaigh', + 'map' => [ + 'title' => 'Mapa', + 'description' => 'Lorg eapasodan pod-chraolaidh air {siteName} a chaidh a chur air a’ mhapa! Seòl am mapa is èist ri eapasodan a bhruidhneas mu àitichean sònraichte.', + ], +]; diff --git a/app/Language/gd/Podcast.php b/app/Language/gd/Podcast.php new file mode 100644 index 0000000000..5fb7d3e875 --- /dev/null +++ b/app/Language/gd/Podcast.php @@ -0,0 +1,63 @@ +<?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' => 'Inbhir RSS a’ pod-chraolaidh', + 'season' => 'Seusan {seasonNumber}', + 'list_of_episodes_year' => 'Eapasodan {year} ({episodeCount})', + 'list_of_episodes_season' => + 'Eapasodan seusan {seasonNumber} ({episodeCount})', + 'no_episode' => 'Cha deach eapasod a lorg!', + 'follow' => 'Lean air', + 'followTitle' => 'Lean air {actorDisplayName} sa cho-shaoghal!', + 'followers' => '{numberOfFollowers, plural, + one {# neach-leantainn} + two {# luchd-leantainn} + few {# luchd-leantainn} + other {# luchd-leantainn} + }', + 'posts' => '{numberOfPosts, plural, + one {# phost} + two {# phost} + few {# postaichean} + other {# post} + }', + 'activity' => 'Gnìomhachd', + 'episodes' => 'Eapasodan', + 'episodes_title' => 'Eapasodan aig {podcastTitle}', + 'about' => 'Mu dhèidhinn', + 'stats' => [ + 'title' => 'Stadastaireachd', + 'number_of_seasons' => '{0, plural, + one {# seusan} + two {# sheusan} + few {# seusanan} + other {# seusan} + }', + 'number_of_episodes' => '{0, plural, + one {# eapasod} + two {# eapasod} + few {# eapasodan} + other {# eapasod} + }', + 'first_published_at' => 'Chaidh a’ chiad eapasod fhoillseachadh {0, date, medium}', + ], + 'sponsor' => 'Taic maoineachaidh', + 'funding_links' => 'Ceanglaichean maoineachaidh dha {podcastTitle}', + 'find_on' => 'Lorg {podcastTitle} air', + 'listen_on' => 'Èist ris air', + 'persons' => '{personsCount, plural, + one {# neach} + two {# dhuine} + few {# daoine} + other {# duine} + }', + 'persons_list' => 'Daoine', +]; diff --git a/app/Language/gd/Post.php b/app/Language/gd/Post.php new file mode 100644 index 0000000000..ffceac5bc3 --- /dev/null +++ b/app/Language/gd/Post.php @@ -0,0 +1,46 @@ +<?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' => "Post aig {actorDisplayName}", + 'back_to_actor_posts' => 'Air ais gu postaichean {actor}', + 'actor_shared' => 'Cho-roinn {actor}', + 'reply_to' => 'Freagair gu @{actorUsername}', + 'form' => [ + 'message_placeholder' => 'Sgrìobh teachdaireachd…', + 'episode_message_placeholder' => 'Sgrìobh teachdaireachd dhan eapasod', + 'episode_url_placeholder' => 'URL an eapasoid', + 'reply_to_placeholder' => 'Freagair gu @{actorUsername}', + 'submit' => 'Cuir', + 'submit_reply' => 'Freagair', + ], + 'favourites' => '{numberOfFavourites, plural, + one {# annsachd} + two {# annsachd} + few {# annsachdan} + other {# annsachd} + }', + 'reblogs' => '{numberOfReblogs, plural, + one {# cho-roinneadh} + two {# cho-roinneadh} + few {# co-roinnidhean} + other {# co-roinneadh} + }', + 'replies' => '{numberOfReplies, plural, + one {# fhreagairt} + two {# fhreagairt} + few {# freagairtean} + other {# freagairt} + }', + 'expand' => 'Leudaich am post', + 'block_actor' => 'Bac an cleachdaiche @{actorUsername}', + 'block_domain' => 'Bac an àrainn @{actorDomain}', + 'delete' => 'Sguab às am post', +]; diff --git a/app/Language/id/Episode.php b/app/Language/id/Episode.php index ebe39336fc..0b889707f1 100644 --- a/app/Language/id/Episode.php +++ b/app/Language/id/Episode.php @@ -29,5 +29,6 @@ return [ other {# comments} }', 'all_podcast_episodes' => 'All podcast episodes', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Go back to podcast', ]; diff --git a/app/Language/it/Episode.php b/app/Language/it/Episode.php index ebe39336fc..0b889707f1 100644 --- a/app/Language/it/Episode.php +++ b/app/Language/it/Episode.php @@ -29,5 +29,6 @@ return [ other {# comments} }', 'all_podcast_episodes' => 'All podcast episodes', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Go back to podcast', ]; diff --git a/app/Language/nl/Episode.php b/app/Language/nl/Episode.php index e1989a2968..8d66f49d72 100644 --- a/app/Language/nl/Episode.php +++ b/app/Language/nl/Episode.php @@ -29,5 +29,6 @@ return [ other {# reacties} }', 'all_podcast_episodes' => 'Alle podcast afleveringen', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Terug naar podcast', ]; diff --git a/app/Language/nl/Podcast.php b/app/Language/nl/Podcast.php index edd796611f..45d3e188e4 100644 --- a/app/Language/nl/Podcast.php +++ b/app/Language/nl/Podcast.php @@ -18,12 +18,12 @@ return [ 'follow' => 'Abonneer', 'followTitle' => 'Abonneer op {actorDisplayName} via de fediverse!', 'followers' => '{numberOfFollowers, plural, - one {# abonnee} - other {# abonnees} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# bericht} - other {# berichten} + one {# post} + other {# posts} }', 'activity' => 'Activiteit', 'episodes' => 'Afleveringen', @@ -32,14 +32,14 @@ return [ 'stats' => [ 'title' => 'Statistieken', 'number_of_seasons' => '{0, plural, - one {# seizoen} - other {# seizoenen} + one {# season} + other {# seasons} }', 'number_of_episodes' => '{0, plural, - one {# aflevering} - other {# afleveringen} + one {# episode} + other {# episodes} }', - 'first_published_at' => 'Eerste aflevering gepubliceerd op {0, date, medium}', + 'first_published_at' => 'First episode published on {0, date, medium}', ], 'sponsor' => 'Sponsor', 'funding_links' => 'Financiering links voor {podcastTitle}', diff --git a/app/Language/nn-NO/Episode.php b/app/Language/nn-NO/Episode.php index e66b3bc223..0209a59059 100644 --- a/app/Language/nn-NO/Episode.php +++ b/app/Language/nn-NO/Episode.php @@ -29,5 +29,6 @@ return [ other {# kommentarar} }', 'all_podcast_episodes' => 'Alle podkast-episodane', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Gå tilbake til podkasten', ]; diff --git a/app/Language/nn-NO/Podcast.php b/app/Language/nn-NO/Podcast.php index 654b98e6d8..ec81b1af8d 100644 --- a/app/Language/nn-NO/Podcast.php +++ b/app/Language/nn-NO/Podcast.php @@ -18,12 +18,12 @@ return [ 'follow' => 'Fylg', 'followTitle' => 'Fylg {actorDisplayName} på fødiverset!', 'followers' => '{numberOfFollowers, plural, - one {# fylgjar} - other {# fylgjarar} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# innlegg} - other {# innlegg} + one {# post} + other {# posts} }', 'activity' => 'Aktivitet', 'episodes' => 'Episodar', @@ -32,14 +32,14 @@ return [ 'stats' => [ 'title' => 'Statistikk', 'number_of_seasons' => '{0, plural, - one {# sesong} - other {# sesongar} + one {# season} + other {# seasons} }', 'number_of_episodes' => '{0, plural, one {# episode} - other {# episodar} + other {# episodes} }', - 'first_published_at' => 'Den fyrste episoden vart lagt ut {0, date, medium}', + 'first_published_at' => 'First episode published on {0, date, medium}', ], 'sponsor' => 'Sponsor', 'funding_links' => 'Finansieringslenker for {podcastTitle}', diff --git a/app/Language/oc/Episode.php b/app/Language/oc/Episode.php index ebe39336fc..0b889707f1 100644 --- a/app/Language/oc/Episode.php +++ b/app/Language/oc/Episode.php @@ -29,5 +29,6 @@ return [ other {# comments} }', 'all_podcast_episodes' => 'All podcast episodes', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Go back to podcast', ]; diff --git a/app/Language/pl/Episode.php b/app/Language/pl/Episode.php index 3f519cce45..fdeb4fa07f 100644 --- a/app/Language/pl/Episode.php +++ b/app/Language/pl/Episode.php @@ -31,5 +31,6 @@ return [ other {# komentarzy} }', 'all_podcast_episodes' => 'Wszystkie odcinki podcastu', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Wróć do podkastu', ]; diff --git a/app/Language/pl/Podcast.php b/app/Language/pl/Podcast.php index af95b8701d..d04dd1581b 100644 --- a/app/Language/pl/Podcast.php +++ b/app/Language/pl/Podcast.php @@ -18,13 +18,12 @@ return [ 'follow' => 'Obserwuj', 'followTitle' => 'Obserwuj {actorDisplayName} na fediverse!', 'followers' => '{numberOfFollowers, plural, - one {# obserwujący} - other {# obserwujących} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# wpis} - few {# wpisy} - other {# wpisów} + one {# post} + other {# posts} }', 'activity' => 'Aktywność', 'episodes' => 'Odcinki', @@ -33,16 +32,14 @@ return [ 'stats' => [ 'title' => 'Statystyki', 'number_of_seasons' => '{0, plural, - one {# sezon} - few{# sezony} - other {# sezonów} + one {# season} + other {# seasons} }', 'number_of_episodes' => '{0, plural, - one {# odcinek} - few {# odcinki} - other {# odcinków} + one {# episode} + other {# episodes} }', - 'first_published_at' => 'Pierwszy odcinek opublikowany {0, date, medium}', + 'first_published_at' => 'First episode published on {0, date, medium}', ], 'sponsor' => 'Sponsoruj', 'funding_links' => 'Linki finansowania dla {podcastTitle}', diff --git a/app/Language/pt-BR/Episode.php b/app/Language/pt-BR/Episode.php index 3dc334f281..fb1e44aaaa 100644 --- a/app/Language/pt-BR/Episode.php +++ b/app/Language/pt-BR/Episode.php @@ -29,5 +29,6 @@ return [ other {# comentários} }', 'all_podcast_episodes' => 'Todos os episódios de podcast', + 'episodes_recycle_bin' => 'Lixeira', 'back_to_podcast' => 'Voltar para o podcast', ]; diff --git a/app/Language/pt-BR/Podcast.php b/app/Language/pt-BR/Podcast.php index 78a63e381c..220725ac4b 100644 --- a/app/Language/pt-BR/Podcast.php +++ b/app/Language/pt-BR/Podcast.php @@ -41,7 +41,7 @@ return [ }', 'first_published_at' => 'Primeiro episódio publicado em {0, date, medium}', ], - 'sponsor' => 'Patrocinador', + 'sponsor' => 'Apoiar', 'funding_links' => 'Links de financiamento para {podcastTitle}', 'find_on' => 'Encontrar {podcastTitle} em', 'listen_on' => 'Ouvir em', diff --git a/app/Language/pt/Episode.php b/app/Language/pt/Episode.php index ebe39336fc..0b889707f1 100644 --- a/app/Language/pt/Episode.php +++ b/app/Language/pt/Episode.php @@ -29,5 +29,6 @@ return [ other {# comments} }', 'all_podcast_episodes' => 'All podcast episodes', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Go back to podcast', ]; diff --git a/app/Language/ru/Episode.php b/app/Language/ru/Episode.php index e97ac45217..56c308b8c3 100644 --- a/app/Language/ru/Episode.php +++ b/app/Language/ru/Episode.php @@ -33,5 +33,6 @@ return [ other {# комментариев} }', 'all_podcast_episodes' => 'Все выпуски подкаста', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Вернуться к подкасту', ]; diff --git a/app/Language/ru/Podcast.php b/app/Language/ru/Podcast.php index fec19e7414..94fb76f55f 100644 --- a/app/Language/ru/Podcast.php +++ b/app/Language/ru/Podcast.php @@ -18,16 +18,12 @@ return [ 'follow' => 'Подписаться', 'followTitle' => 'Подпишитесь на {actorDisplayName} в федивёрсе!', 'followers' => '{numberOfFollowers, plural, - one {# подписчик} - few {# подписчики} - many {# подписчики} - other {# подписчики} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# пост} - few {# постов} - many {# постов} - other {# постов} + one {# post} + other {# posts} }', 'activity' => 'Активность', 'episodes' => 'Выпуски', @@ -36,18 +32,14 @@ return [ 'stats' => [ 'title' => 'Статистика', 'number_of_seasons' => '{0, plural, - one {# сезон} - few {# сезоны} - many {# сезоны} - other {# сезоны} + one {# season} + other {# seasons} }', 'number_of_episodes' => '{0, plural, - one {# эпизод} - few {# эпизодов} - many {# эпизодов} - other {# эпизодов} + one {# episode} + other {# episodes} }', - 'first_published_at' => 'Первый эпизод опубликован {0, date, medium}', + 'first_published_at' => 'First episode published on {0, date, medium}', ], 'sponsor' => 'Спонсор', 'funding_links' => 'Ссылки на финансирование для {podcastTitle}', diff --git a/app/Language/sk/Comment.php b/app/Language/sk/Comment.php new file mode 100644 index 0000000000..d40c4e5f93 --- /dev/null +++ b/app/Language/sk/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' => 'Späť na komentáre', + 'form' => [ + 'episode_message_placeholder' => 'Napísať komentár…', + 'reply_to_placeholder' => 'Reply to @{actorUsername}', + 'submit' => 'Poslať', + 'submit_reply' => 'Odpovedať', + ], + 'likes' => '{numberOfLikes, plural, + one {# like} + other {# likes} + }', + 'replies' => '{numberOfReplies, plural, + one {# reply} + other {# replies} + }', + 'like' => 'Obľúbené', + 'reply' => 'Odpovedať', + 'view_replies' => 'Ukázať odpoved/e ({numberOfReplies})', + 'block_actor' => 'Blokovať užívateľa @{actorUsername}', + 'block_domain' => 'Blokovať doménu @{actorDomain}', + 'delete' => 'Vymazať komentár', +]; diff --git a/app/Language/sk/Common.php b/app/Language/sk/Common.php new file mode 100644 index 0000000000..2be27e09d8 --- /dev/null +++ b/app/Language/sk/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' => 'Áno', + 'no' => 'Nie', + 'cancel' => 'Zrušiť', + 'optional' => 'Voliteľné', + 'close' => 'Zavrieť', + 'home' => 'Domov', + 'explicit' => 'Chúlostivé', + 'powered_by' => 'Poháňané cez {castopod}', + 'go_back' => 'Ísť späť', + 'play_episode_button' => [ + 'play' => 'Prehrať', + 'playing' => 'Prehrávané', + ], + 'read_more' => 'Čítať viac', + 'read_less' => 'Zobraziť menej', + 'see_more' => 'Pozrieť viac', + 'see_less' => 'Pozrieť menej', +]; diff --git a/app/Language/sk/Episode.php b/app/Language/sk/Episode.php new file mode 100644 index 0000000000..67e9323ab5 --- /dev/null +++ b/app/Language/sk/Episode.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 [ + 'season' => 'Séria {seasonNumber}', + 'season_abbr' => 'S{seasonNumber}', + 'number' => 'Epizóda {episodeNumber}', + 'number_abbr' => 'Ep. {episodeNumber}', + 'season_episode' => 'Sezóna {seasonNumber} epizóda {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}', + 'persons' => '{personsCount, plural, + one {# person} + other {# persons} + }', + 'persons_list' => 'Persons', + 'back_to_episodes' => 'Späť k epizódam {podcast}', + 'comments' => 'Komentáre', + 'activity' => 'Aktivita', + 'description' => 'Popis epizódy', + 'number_of_comments' => '{numberOfComments, plural, + one {# comment} + other {# comments} + }', + 'all_podcast_episodes' => 'Všetky epizódy podcastu', + 'episodes_recycle_bin' => 'Kôš', + 'back_to_podcast' => 'Späť na podcast', +]; diff --git a/app/Language/sk/Fediverse.php b/app/Language/sk/Fediverse.php new file mode 100644 index 0000000000..33d0e92340 --- /dev/null +++ b/app/Language/sk/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' => 'Vaša prezývka', + 'your_handle_hint' => 'Enter the @username@domain you want to act from.', + 'follow' => [ + 'label' => 'Nasledovať', + 'title' => 'Nasledovať {actorDisplayName}', + 'subtitle' => 'Budete nasledovať:', + 'accountNotFound' => 'Účet nemožno nájsť.', + 'remoteFollowNotAllowed' => 'Seems like the account server does not allow remote follows…', + 'submit' => 'Pokračovať k nasledovaniu', + ], + 'favourite' => [ + 'title' => "Obľúbiť si príspevok od {actorDisplayName}", + 'subtitle' => 'Idete si obľúbiť:', + 'submit' => 'Pokračovať k obľúbeniu', + ], + 'reblog' => [ + 'title' => "Zdieľať príspevok od {actorDisplayName}", + 'subtitle' => 'Budete zdieľať:', + 'submit' => 'Pokračovať pre zdieľanie', + ], + 'reply' => [ + 'title' => "Odpovedať na príspevok od {actorDisplayName}", + 'subtitle' => 'Idete odpovedať na:', + 'submit' => 'Pokračovať k odpovedi', + ], +]; diff --git a/app/Language/sk/Home.php b/app/Language/sk/Home.php new file mode 100644 index 0000000000..201a3c9086 --- /dev/null +++ b/app/Language/sk/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' => 'Všetky podcasty', + 'sort_by' => 'Zoradiť podľa', + 'sort_options' => [ + 'activity' => 'Nedávna aktivita', + 'created_desc' => 'Od najnovšieho', + 'created_asc' => 'Od najstaršieho', + ], + 'no_podcast' => 'Žiadne podcasty nenájdené', +]; diff --git a/app/Language/sk/Page.php b/app/Language/sk/Page.php new file mode 100644 index 0000000000..60ffc771a0 --- /dev/null +++ b/app/Language/sk/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' => 'Späť na úvod', + 'map' => [ + 'title' => 'Mapa', + '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/sk/Podcast.php b/app/Language/sk/Podcast.php new file mode 100644 index 0000000000..a15fe02c16 --- /dev/null +++ b/app/Language/sk/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 zdroj podcastu', + 'season' => 'Séria {seasonNumber}', + 'list_of_episodes_year' => '{year} epizódy ({episodeCount})', + 'list_of_episodes_season' => + 'Sezóna {seasonNumber} epizódy ({episodeCount})', + 'no_episode' => 'Žiadne epizódy nenájdené!', + 'follow' => 'Nasledovať', + 'followTitle' => 'Nasledovať {actorDisplayName} na fediverse!', + 'followers' => '{numberOfFollowers, plural, + one {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Aktivita', + 'episodes' => 'Epizódy', + 'episodes_title' => 'Epizódy {podcastTitle}', + 'about' => 'O', + 'stats' => [ + 'title' => 'Štatistiky', + 'number_of_seasons' => '{0, plural, + one {# season} + other {# seasons} + }', + 'number_of_episodes' => '{0, plural, + one {# episode} + other {# episodes} + }', + 'first_published_at' => 'First episode published on {0, date, medium}', + ], + 'sponsor' => 'Sponzor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Počúvajte na', + 'persons' => '{personsCount, plural, + one {# person} + other {# persons} + }', + 'persons_list' => 'Persons', +]; diff --git a/app/Language/sk/Post.php b/app/Language/sk/Post.php new file mode 100644 index 0000000000..45ec87f6ab --- /dev/null +++ b/app/Language/sk/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' => 'Vymazať príspevok', +]; diff --git a/app/Language/sv/Episode.php b/app/Language/sv/Episode.php index ebe39336fc..0b889707f1 100644 --- a/app/Language/sv/Episode.php +++ b/app/Language/sv/Episode.php @@ -29,5 +29,6 @@ return [ other {# comments} }', 'all_podcast_episodes' => 'All podcast episodes', + 'episodes_recycle_bin' => 'Recycle bin', 'back_to_podcast' => 'Go back to podcast', ]; diff --git a/docs/src/ar/getting-started/install.md b/docs/src/ar/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/ar/getting-started/install.md +++ b/docs/src/ar/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/br/getting-started/install.md b/docs/src/br/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/br/getting-started/install.md +++ b/docs/src/br/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/de/getting-started/install.md b/docs/src/de/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/de/getting-started/install.md +++ b/docs/src/de/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/el/getting-started/install.md b/docs/src/el/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/el/getting-started/install.md +++ b/docs/src/el/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/el/index.md b/docs/src/el/index.md index 87cdbbcf7d..ec4e776936 100644 --- a/docs/src/el/index.md +++ b/docs/src/el/index.md @@ -2,36 +2,37 @@ 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 είναι μια δωρεάν & ανοικτού κώδικα πλατφόρμα φιλοξενίας podcast που +κατασκευάζεται για podcasters που θέλουν να συμμετάσχουν και να αλληλεπιδράσουν +με το κοινό τους. -Castopod is easy to install and was built on top of -[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very -small footprint. +Το Castopod είναι εύκολο στην εγκατάσταση και χτίστηκε με το +[CodeIgniter4](https://codeigniter.com/), ένα ισχυρό PHP framework με ένα πολύ +μικρό αποτύπωμα. -::: info Status +::: πληροφορίες κατάστασης -Castopod is currently in **beta** but already quite stable and used by -podcasters around the world! +Το Castopod είναι επί του παρόντος σε **beta** αλλά ήδη αρκετά σταθερό και +χρησιμοποιείται από podcasters γύρω από τον κόσμο! ::: <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> + <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">Εγκατάσταση<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: +- 🌱 Δωρεάν & open-source (AGPL v3 License) +- 🔐 Εστιάζει στην κυριαρχία των δεδομένων: το περιεχόμενο, το κοινό και + τα αναλυτικά στοιχεία ανήκουν σε εσάς μόνο +- ◆ Podcasting 2.0 χαρακτηριστικά: GUID, κλειδωμένο, μεταγραφές, + χρηματοδότηση, κεφάλαια, τοποθεσία, πρόσωπα, soundbites, … +- 💬 Ενσωματωμένο κοινωνικό δίκτυο: - 🚀 Castopod is part of the Fediverse, a decentralized social network - ❤️ Create posts, share, favourite, and comment on episodes - 📈 Built-in analytics: @@ -60,7 +61,7 @@ podcasters around the world! - 🌎 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. @@ -201,16 +202,23 @@ backers. If you'd like to help, please consider [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 +[release-badge]: + https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md +[license-badge]: + https://img.shields.io/github/license/ad-aures/castopod?color=blue [contributions]: https://code.castopod.org/adaures/castopod/-/issues +[contributions-badge]: + https://img.shields.io/badge/contributions-welcome-brightgreen.svg [semantic-release]: https://github.com/semantic-release/semantic-release +[semantic-release-badge]: + https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg [discord]: https://castopod.org/discord +[discord-badge]: https://img.shields.io/badge/chat-on%20discord-7389D8 [stars]: https://github.com/ad-aures/castopod/stargazers +[stars-badge]: + https://img.shields.io/github/stars/ad-aures/castopod?style=social [crowdin]: https://translate.castopod.org/project/castopod +[crowdin-badge]: https://badges.crowdin.net/castopod/localized.svg diff --git a/docs/src/es/getting-started/install.md b/docs/src/es/getting-started/install.md index d12e2d3475..db0e0e8f94 100644 --- a/docs/src/es/getting-started/install.md +++ b/docs/src/es/getting-started/install.md @@ -5,138 +5,151 @@ sidebarDepth: 3 # ¿Cómo instalar Castopod? -Castopod era de todas maneras fácil de instalar. Ya sea usando alojamiento -dedicado o compartido, se puede instalar en la mayoría de servidores web +Castopod está pensado para ser fácil de instalar. Ya sea usando un alojamiento +dedicado o compartido, puedes instalarlo en la mayoría de servidores web compatibles con PHP-MySQL. -## Requirements +::: Nota informativa -- PHP v8.0 or higher -- MySQL version 5.7 or higher or MariaDB version 10.2 or higher -- HTTPS support +Esta sección de la documentación te ayudará a configurar Castopod para la +producción. Si estás buscando participar en el desarrollo de Castopod, debes +pasar a la sección de contribuciones. -### PHP v8.0 or higher +::: + +## Requerimientos + +- PHP v8.0 o superior +- MySQL versión 5.7 o superior o MariaDB versión 10.2 o superior +- Soporte HTTPS -PHP version 8.0 or higher is required, with the following extensions installed: +### PHP v8.0 o superior + +Se requiere PHP versión 8.0 o superior con las siguientes extensiones +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) with **JPEG**, - **PNG** and **WEBP** libraries. +- [gd](https://www.php.net/manual/en/image.installation.php) con librerias + **JPEG**, **PNG** y **WEBP**. - [exif](https://www.php.net/manual/en/exif.installation.php) -Additionally, make sure that the following extensions are enabled in your PHP: +Adicionalmente, asegúrate que las siguientes extensiones están habilitadas en tu +PHP: -- json (enabled by default - don't turn it off) -- xml (enabled by default - don't turn it off) +- json (habilitada por defecto - no la desactives) +- xml (habilitada por defecto - no la desactives) - [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) -### MySQL compatible database +### Base de datos compatible con MySQL -> We recommend using [MariaDB](https://mariadb.org). +> Recomendamos usar [MariaDB](https://mariadb.org). -::: warning +::: aviso Aviso -Castopod only works with supported MySQL 5.7 or higher compatible databases. It -will break with the previous MySQL v5.6 for example as its end of life was on -February 5, 2021. +Castopod solo funciona con base de datos compatible con MySQL 5.7 o superior. Se +romperá con la version previa MySQL v5.6 por ejemplo, ya que su vida terminó el +5 de febrero de 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. +Necesitarás el nombre del anfitrión del servidor, nombre de la base de datos, +usuario y contraseña para completar el proceso de instalación. Si no los tienes, +por favor, contacta al administrador del servidor. -#### Privileges +#### Privilegios -User must have at least these privileges on the database for Castopod to work: -`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. +Los usuarios deben tener al menos estos privilegios en la base de datos para que +Castopod funcione: `CREAR`, `ALTERAR`, `BORRAR`, `EJECUTAR`, `INDICE`, +`INSERTAR`, `SELECCIONAR`, `ACTUALIZAR`. -### (Optional) FFmpeg v4.1.8 or higher for Video Clips +### (Opcional) FFmpeg v4.1.8 o superior para clips de video -[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: +Se requiere [FFmpeg](https://www.ffmpeg.org/) versión 4.1.8 o superior si +quieres general clips de video. Se debe instalar las siguientes extensiones: -- **FreeType 2** library for +- Librería **FreeType 2** para [gd](https://www.php.net/manual/en/image.installation.php). -### (Optional) Other recommendations +### (Opcional) Otras recomendaciones -- Redis for better cache performances. -- CDN for static files caching and better performances. -- e-mail gateway for lost passwords. +- Redis para mejores rendimientos de caché. +- CDN para almacenamiento en caché de archivos estáticos y mejores rendimientos. +- puerta de enlace de email para pérdidas de contraseña. -## Install instructions +## Instrucciones de instalación -### Pre-requisites +### Prerequisitos -0. Get a Web Server with [requirements](#requirements) installed -1. Create a MySQL database for Castopod with a user having access and - modification privileges (for more info, see - [MySQL compatible database](#mysql-compatible-database)). -2. Activate HTTPS on your domain with an _SSL certificate_. -3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto - the web server if you haven’t already. - - ⚠️ Set the web server document root to the `public/` sub-folder within the - `castopod` folder. -4. Add **cron tasks** on your web server for various background processes - (replace the paths accordingly): +0. Consigue un Servidor Web con [requerimientos](#requirements) instalados +1. Crea una base de datos MySQL para Castopod con un usuario que tenga acceso y + privilegios de modificación (para más información, ver + [MySQL base de datos compatible](#mysql-compatible-database)). +2. Activa HTTPS en tu domino con un _certificado SSL_. +3. Descarga y descomprime el último [paquete Castopod](https://castopod.org/) en + el servidor de la web si aún no lo has hecho. + - ⚠️ Establece la raiz del documento del servidor web en la subcarpeta + `pública/` en la carpeta `castopod`. +4. Añade **cron tasks** en tu servidor web para varios procesos en segundo plano + (reemplaza las rutas accorde con): - - For social features to work properly, this task is used to broadcast social - activities to your followers on the fediverse: + - Para que las características sociales funcionen correctamente, esta tarea + se utiliza para transmitir las actividades sociales a tus seguidores en el + Fediverso: ```bash - * * * * * /path/to/php /path/to/castopod/public/index.php scheduled-activities + * * * * * /path/to/php /path/to/castopod/public/index.php actividades programadas ``` - - For having your episodes be broadcasted on open hubs upon publication using - [WebSub](https://en.wikipedia.org/wiki/WebSub): + - Para que tus episodios sean transmitidos en hubs abiertos sobre + publicaciones usando [WebSub](https://en.wikipedia.org/wiki/WebSub): ```bash - * * * * * /usr/local/bin/php /castopod/public/index.php scheduled-websub-publish + * * * * * /usr/local/bin/php /castopod/public/index.php publicaciones-websub-programadas ``` - - For Video Clips to be created (see - [FFmpeg requirements](#ffmpeg-v418-or-higher-for-video-clips)): + - Para crear Clips de video (ver + [requerimientos FFmpeg ](#ffmpeg-v418-or-higher-for-video-clips)): ```bash - * * * * * /path/to/php /path/to/castopod/public/index.php scheduled-video-clips + * * * * * /path/to/php /path/to/castopod/public/index.php clips-devideo-programados ``` - > These tasks run **every minute**. You may set the frequency depending on - > your needs: every 5, 10 minutes or more. + > Estas tareas se ejecutan **cada minuto**. Debes establecer la frecuencia + > dependiendo de tus necesidades: cada 5, 10 minutos o más. -### (recommended) Install Wizard +### (recomendado) Instalar 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. +1. Ejecuta el script de instalación de Castopod yendo a la página de instalación + de wizard (`https://your_domain_name.com/cp-install`) en tu navegador web + preferido. +2. Sigue las instrucciones de la pantalla. 3. ¡Empieza a crear podcasting! -::: Nota de información +::: Nota informativa -El script de instalación escribe un archivo `.env` en la raíz del paquete. If -you cannot go through the install wizard, you can -[create and update the `.env` file manually](#alternative-manual-configuration). +El script de instalación escribe un archivo `.env` en la raiz de paquete. Si no +puedes completar la instalación de wizard, puedes +[crear y actualizar el archivo `.env` manualmente](#alternative-manual-configuration). ::: -## Community packages +## Paquetes de la comunidad -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. +Si no quieres molestarte en instalar Castopod manualmente, puedes usar uno de +los paquetes creados y mantenidos por la comunidad de código abierto. -### Install with YunoHost +### Instalar con YunoHost -[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux -made up of free and open-source software packages. It manages the hardships of -self-hosting for you. +[YunoHost](https://yunohost.org/) es una distribuidora basada en Debian +GNU/Linux compuesta por paquetes de software libres y de código abierto. 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" /> + <img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Instalar Castopod con 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 @@ -146,18 +159,18 @@ Repo</a> </div> -### Install with Docker +### Instalar con Docker -If you wish to use Docker to install Castopod, it is possible thanks to +Si desea utilizar Docker para instalar Castopod, ¡es posible gracias 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]">Install -with +<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 +con 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 +::: Nota de información -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. +Dada la alta demanda de docker, planeamos mantener una imagen oficial del Docker +de Castopod directamente en el repositorio de Castopod. ::: diff --git a/docs/src/es/getting-started/update.md b/docs/src/es/getting-started/update.md index 46e5c0bf38..a5dd5b173e 100644 --- a/docs/src/es/getting-started/update.md +++ b/docs/src/es/getting-started/update.md @@ -1,92 +1,100 @@ --- -title: Update +title: Actualización sidebarDepth: 3 --- -# How to update Castopod? +# ¿Cómo actualizar 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 ⚡. +Después de instalar Castopod, es posible que quieras actualizar tu instancia a +la última versión para disfrutar de las últimas características ✨, correcciones +de errores 🐛 y mejoras de rendimiento ⚡. -## Automatic update instructions +## Instrucciones de actualización automática -> Coming soon... 👀 +> Próximamente... 👀 -## Manual update instructions +## Instrucciones de actualización manual -1. Go to the - [releases page](https://code.castopod.org/adaures/castopod/-/releases) and - see if your instance is up to date with the latest Castopod version +1. Vaya a la página de + [lanzamientos](https://code.castopod.org/adaures/castopod/-/releases) y vea + si su instancia está actualizada con la última versión de Castopod - cf. - [Where can I find my Castopod version?](#where-can-i-find-my-castopod-version) + [¿Dónde puedo encontrar mi versión de Castopod?](#where-can-i-find-my-castopod-version) -2. Download the latest release package named `Castopod Package`, you may choose - between the `zip` or `tar.gz` archives +2. Descargue el último paquete de lanzamiento llamado `Paquete Castopod`, puede + elegir entre los archivos `zip` o `tar.gz` - - ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code + - ⚠️ Asegúrate de descargar el paquete de Castopod y **NO** el código fuente -3. On your server: +3. En tu servidor: - - Remove all files except `.env` and `public/media` - - Copy the new files from the downloaded package into your server + - Eliminar todos los archivos excepto `.env` y la carpeta `public/media` + - Copie los nuevos archivos del paquete descargado en su servidor - ::: info Note + ::: Nota de información - You may need to reset files permissions as during the install process. - Check [Security Concerns](./security.md). + Es posible que necesite restablecer los permisos de los archivos después el + proceso de instalación. Compruebe + [preocupaciones de seguridad](./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. +4. Las versiones pueden venir con instrucciones de actualización adicionales + (véase la página de + [lanzamientos](https://code.castopod.org/adaures/castopod/-/releases)). + Generalmente son scripts de migración de base de datos en formato `.sql` para + actualizar su esquema de base de datos. - - 👉 Make sure you run the scripts on your phpmyadmin panel or using command - line to update the database along with the package files! - - I haven't updated my instance in a long time… What should I do? + - 👉 ¡Asegúrate de ejecutar los scripts en tu panel phpmyadmin o usando la + línea de comandos para actualizar la base de datos junto con los archivos + de paquete! + - cf. + +No he actualizado mi instancia en mucho tiempo… ¿Qué debo hacer?</p></li> </ul> + + 5. Si estás usando redis, limpia tu caché. -5. If you are using redis, clear your cache. -6. ✨ Enjoy your fresh instance, you're all done! +6. ✨ ¡Disfruta de tu instancia recién instalada, todo listo! -## Frequently asked questions (FAQ) +## Preguntas Frecuentes (FAQ) -### Where can I find my Castopod version? +### ¿Dónde puedo encontrar mi versión de Castopod? -Go to your Castopod admin panel, the version is displayed on the bottom left -corner. +Ve al panel de administración de Castopod, la versión se muestra en la esquina +inferior izquierda. -Alternatively, you can find the version in the `app > Config > Constants.php` -file. +Alternativamente, puedes encontrar la versión en el archivo +`app > Config > Constants.php`. -### [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) +### No he actualizado mi instancia en mucho tiempo… ¿Qué debo hacer? -No problem! No problem! Just get the latest release as described above. Only, -when going through the release instructions (4), perform them sequentially, from -the oldest to the newest. +¡No hay problema! Sólo obtenga la última versión tal y como se describe +anteriormente. Simplemente cuando vaya a través de las instrucciones de +lanzamiento (4), realice la actualización secuencialmente, desde el más antiguo +hasta el más reciente. -> You may want to backup your instance depending on how long you haven't updated -> Castopod. +> Puede que quieras hacer una copia de seguridad de tu instancia dependiendo del +> tiempo que no hayas actualizado Castopod. -For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to +Por ejemplo, si estás en `v1.0.0-alpha.42` y te gustaría actualizar a `v1.0.0-beta.1`: -0. (highly recommended) Make a backup of your files and database. +0. (altamente recomendado) Haga una copia de seguridad de sus archivos y base de + datos. -1. Download the latest release, overwrite your files whilst keeping `.env` and +1. Descarga la última versión, sobrescribe tus archivos manteniendo `.env` y `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`. +2. Repase las instrucciones de actualización de cada versión secuencialmente (de + más antiguo a más reciente) comenzando con `v1.0.0-alpha. 3`, + `v1.0.0-alpha.44`, `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`. -3. ✨ Enjoy your fresh instance, you're all done! +3. ✨ ¡Disfruta de tu instancia recién instalada, todo listo! -### Should I make a backup before updating? +### ¿Debo hacer una copia de seguridad antes de actualizar? -We advise you do, so you don't lose everything if anything goes wrong! +Te aconsejamos que hagas, así que no lo pierdas todo si algo sale mal! -More generally, we advise you make regular backups of your Castopod files and -database to prevent you from losing it all… +De manera más general, te aconsejamos hacer copias de seguridad regulares de tus +archivos de Castopod y base de datos para evitar que pierdas todo… diff --git a/docs/src/es/index.md b/docs/src/es/index.md index 0e94928548..2ee1b150af 100644 --- a/docs/src/es/index.md +++ b/docs/src/es/index.md @@ -29,8 +29,8 @@ por podcasters alrededor de el mundo! - 🌱 Gratis & de código abierto (AGPL v3 Licencia) - 🔐 Centrado en la soberanía de los datos: su contenido, audiencia, y analíticas le pertenecen a usted, y solo a usted -- Funciones de Podcasting 2.0: GUID, protección y bloqueo del podcast, - transcripciones, fondos, capítulos, ubicación, personas, sonidos, … +- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, + chapters, location, persons, soundbites, … - :speech \_balloon: Red social integrada: - 🚀 Castopod es parte del Fediverso, una red social descentralizada - ❤️ Crear mensajes, compartir, favoritos y comentarios en episodios @@ -204,23 +204,16 @@ contribuyentes. Si quieres ayudar, por favor considera colaborar con [Licencia pública general GNU 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 -[release-badge]: - https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md -[license-badge]: - https://img.shields.io/github/license/ad-aures/castopod?color=blue [contributions]: https://code.castopod.org/adaures/castopod/-/issues -[contributions-badge]: - https://img.shields.io/badge/contributions-welcome-brightgreen.svg [semantic-release]: https://github.com/semantic-release/semantic-release -[semantic-release-badge]: - https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg [discord]: https://castopod.org/discord -[discord-badge]: https://img.shields.io/badge/chat-on%20discord-7389D8 [stars]: https://github.com/ad-aures/castopod/stargazers -[stars-badge]: - https://img.shields.io/github/stars/ad-aures/castopod?style=social [crowdin]: https://translate.castopod.org/project/castopod -[crowdin-badge]: https://badges.crowdin.net/castopod/localized.svg diff --git a/docs/src/fa/getting-started/install.md b/docs/src/fa/getting-started/install.md new file mode 100644 index 0000000000..c63d2fe13a --- /dev/null +++ b/docs/src/fa/getting-started/install.md @@ -0,0 +1,170 @@ +--- +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. + +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + +## 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 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/fa/getting-started/security.md b/docs/src/fa/getting-started/security.md new file mode 100644 index 0000000000..e205698df8 --- /dev/null +++ b/docs/src/fa/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/fa/getting-started/update.md b/docs/src/fa/getting-started/update.md new file mode 100644 index 0000000000..1f48e27492 --- /dev/null +++ b/docs/src/fa/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/fa/index.md b/docs/src/fa/index.md new file mode 100644 index 0000000000..87cdbbcf7d --- /dev/null +++ b/docs/src/fa/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 index fbdf5a5ddd..4d3bd938c4 100644 --- a/docs/src/fr/getting-started/install.md +++ b/docs/src/fr/getting-started/install.md @@ -9,6 +9,14 @@ 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Prérequis - PHP v8.0 ou supérieure @@ -17,8 +25,7 @@ serveurs web compatibles avec PHP-MySQL. ### PHP v8.0 ou supérieure -La version 8.0 ou supérieure de PHP est requise, avec les extensions suivantes -installées : +PHP version 8.0 or higher is required, with the following extensions installed: - [intl](https://www.php.net/manual/fr/intl.requirements.php) - [libcurl](https://www.php.net/manual/fr/curl.requirements.php) @@ -27,8 +34,7 @@ installées : **PNG** et bibliothèques **WEBP**. - [exif](https://www.php.net/manual/fr/exif.installation.php) -De plus, assurez-vous que les extensions suivantes sont activées dans votre PHP -: +Additionally, make sure that the following extensions are enabled in your PHP: - json (activé par défaut - ne le désactivez pas) - xml (activé par défaut - ne pas le désactiver) @@ -38,30 +44,27 @@ De plus, assurez-vous que les extensions suivantes sont activées dans votre PHP > Nous vous recommandons d'utiliser [MariaDB](https://mariadb.org). -::: avertissement +::: warning Warning -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. +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. ::: -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. +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. #### 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`. +User must have at least these privileges on the database for Castopod to work: +`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 : +[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: - bibliothèque **FreeType 2** pour [gd](https://www.php.net/manual/en/image.installation.php). @@ -121,24 +124,24 @@ installées : 2. Suivez les instructions affichée. 3. Commencer à baladodiffuser ! -::: info Nota Bene +::: info Note -Le script install crée un fichier `.env` à la racine du paquet. Si vous ne -pouvez pas passer par l'assistant d'installation, vous pouvez -[créer et mettre à jour le fichier `.env` manuellement](#alternative-manual-configuration). +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). ::: ## Paquets fournis par la communauté -Si vous ne voulez pas vous soucier d'installer Castopod manuellement, vous -pouvez utiliser un des paquets créés et maintenus par la communauté open-source. +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. ### Installer avec YunoHost -[YunoHost](https://yunohost.org/) est une distribution basée sur Debian -GNU/Linux composée de paquets logiciels libres et open-source. Il simplifie -l'auto-hébergement pour vous. +[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"> @@ -155,16 +158,16 @@ Github</a> ### Installer avec Docker -Si vous souhaitez utiliser Docker pour installer Castopod, c'est possible grâce -à [Romain de Laage](https://mamot.fr/@rdelaage)! +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]">Installer avec 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 Bene +::: info Note -Étant donné la forte demande de Docker, nous prévoyons de maintenir une image -officielle de Castopod Docker directement dans le dépôt Castopod. +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/index.md b/docs/src/fr/index.md index 0ee270ab06..15f4b81bee 100644 --- a/docs/src/fr/index.md +++ b/docs/src/fr/index.md @@ -16,7 +16,7 @@ petite taille. ::: info Statut Castopod est actuellement en **version beta** mais est déjà suffisamment stable -et est utilisé par des podcasters partout autour du monde ! +et est utilisé par des podcasters autour partout dans le monde ! ::: @@ -27,8 +27,8 @@ et est utilisé par des podcasters partout autour du monde ! ## Fonctionnalités - 🌱 Libre, gratuit & open-source (Licence AGPL v3) -- 🔐 Focalisé sur la souveraineté des données : votre contenu, votre - audience et vos statistiques vous appartiennent, et à vous seulement +- 🔐 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, … @@ -61,8 +61,8 @@ et est utilisé par des podcasters partout autour du monde ! - 🔀 Multi-locataire : hébergez autant de podcasts que vous le souhaitez - 👥 Multi-utilisateur : ajoutez des contributeurs et définissez leurs rôles -- 🌎 Multilingue: traduit en Anglais, Français, Polonais, Allemand & - Brésilien… et bien d'autres à venir ! +- 🌎 support i18n: traduit en Anglais, Français, Polonais, Allemand & + Brésilien… et bientôt d'autres à venir ! ## Pourquoi Castopod ? @@ -89,9 +89,9 @@ Ce projet s'appuie sur la communauté open-source, plus spécifiquement sur le ## Comparaison avec d'autres solutions -Nous pensons qu'une solution n'est pas forcément adaptée à tous, tout dépend vos -besoins. Voici donc un comparatif avec d'autres outils qui vous aidera à juger -si Castopod est fait pour vous. +Nous pensons qu'une solution n'est pas adaptée à tous, tout dépend vos besoins. +Voici donc un comparatif avec d'autres outils qui vous aidera à juger si +Castopod est fait pour vous. ### Castopod vs Wordpress @@ -107,7 +107,7 @@ plupart des serveurs web. Wordpress est un excellent outil pour créer votre site web et de l'étendre avec des plugins pour faire ce que vous souhaitez. C'est un CMS à part entière qui -vous permet de mettre en ligne tout type de site web. +vous permet de mettre en line tout type de site web. Castopod quant à lui est destiné à répondre aux besoins spécifiques des podcasteurs, en se concentrant sur les podcasts et rien d'autre. Vous n'avez diff --git a/docs/src/gd/getting-started/install.md b/docs/src/gd/getting-started/install.md new file mode 100644 index 0000000000..c63d2fe13a --- /dev/null +++ b/docs/src/gd/getting-started/install.md @@ -0,0 +1,170 @@ +--- +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. + +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + +## 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 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/gd/getting-started/security.md b/docs/src/gd/getting-started/security.md new file mode 100644 index 0000000000..e205698df8 --- /dev/null +++ b/docs/src/gd/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/gd/getting-started/update.md b/docs/src/gd/getting-started/update.md new file mode 100644 index 0000000000..1f48e27492 --- /dev/null +++ b/docs/src/gd/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/gd/index.md b/docs/src/gd/index.md new file mode 100644 index 0000000000..87cdbbcf7d --- /dev/null +++ b/docs/src/gd/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/id/getting-started/install.md b/docs/src/id/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/id/getting-started/install.md +++ b/docs/src/id/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/it/getting-started/install.md b/docs/src/it/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/it/getting-started/install.md +++ b/docs/src/it/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/nl/getting-started/install.md b/docs/src/nl/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/nl/getting-started/install.md +++ b/docs/src/nl/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/nn-NO/getting-started/install.md b/docs/src/nn-NO/getting-started/install.md index 85991dcf96..ea1ffea679 100644 --- a/docs/src/nn-NO/getting-started/install.md +++ b/docs/src/nn-NO/getting-started/install.md @@ -9,6 +9,14 @@ 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Krav - PHP v8.0 eller nyare @@ -17,7 +25,7 @@ og MySQL. ### PHP v8.0 eller nyare -PHP versjon 8.0 er eit krav, med desse utvidingane: +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) @@ -26,8 +34,7 @@ PHP versjon 8.0 er eit krav, med desse utvidingane: **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: +Additionally, make sure that the following extensions are enabled in your PHP: - json (vanlegvis aktivt - ikkje skru det av) - xml (vanlegvis aktivt - ikkje skru det av) @@ -37,28 +44,27 @@ din: > Me tilrår [MariaDB](https://mariadb.org). -::: warning Åtvaring +::: warning Warning -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. +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. ::: -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. +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. #### Tilgangsrettar -Brukaren må minst ha desse tilgangsrettane på databasen for at Castopod skal -fungera: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, -`UPDATE`. +User must have at least these privileges on the database for Castopod to work: +`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: +[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**-biblioteket for [gd](https://www.php.net/manual/en/image.installation.php). @@ -115,25 +121,24 @@ filmklypp. Desse utvidingane må vera installerte: 2. Fylg framgangsmåten på skjermen. 3. Start å podkasta! -::: info +::: info Note -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). +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). ::: ## 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. +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. ### 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. +[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"> @@ -149,16 +154,16 @@ meste som har med oppsett av eigen vevtenar å gjera. ### Installer med Docker -Viss du vil bruka Docker til å installera Castopod, er det mogleg takk vere +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]">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 +::: info Note -Etter som mange spør etter Docker-installasjon, planlegg me å laga ei offisiell -Docker-pakke for Castopod her i vårt eige arkiv. +Given high demand for docker, we plan on maintaining an official Castopod Docker +image directly into the Castopod repository. ::: diff --git a/docs/src/nn-NO/index.md b/docs/src/nn-NO/index.md index 8a73232306..843876b2b7 100644 --- a/docs/src/nn-NO/index.md +++ b/docs/src/nn-NO/index.md @@ -22,16 +22,21 @@ over heile verda bruker det! ::: <div class="flex items-center"> - <a href="/nn-NO/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> + <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) +- 🌱 Fri og open (AGPL v3-lisens) <<<<<<< HEAD - 🔐 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… + finansiering, kapittel, stader, personar, lydbetar… ======= +- 🔐 Legg vekt på at du eig dine eigne data: innhaldet, publikum og + analysedata høyrer deg til, og berre deg +- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, + chapters, location, persons, soundbites, … + > > > > > > > 88098377 (New translations index.md (Norwegian Nynorsk)) - 💬 Innebygd sosialt nettverk: - 🚀 Castopod er ein del av fødiverset, som er eit desentralisert sosialt nettverk @@ -199,7 +204,7 @@ lesa korleis du [GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/) -Copyright © 2020-present, [Ad Aures](https://adaures.com/). +Copyright © 2020-d.d., [Ad Aures](https://adaures.com/). [release]: https://code.castopod.org/adaures/castopod/-/releases [release-badge]: diff --git a/docs/src/oc/getting-started/install.md b/docs/src/oc/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/oc/getting-started/install.md +++ b/docs/src/oc/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/oc/index.md b/docs/src/oc/index.md index 87cdbbcf7d..2587da275f 100644 --- a/docs/src/oc/index.md +++ b/docs/src/oc/index.md @@ -206,6 +206,11 @@ https://img.shields.io/github/license/ad-aures/castopod?color=blue https://img.shields.io/badge/contributions-welcome-brightgreen.svg https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg https://img.shields.io/github/stars/ad-aures/castopod?style=social +https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release +https://img.shields.io/github/license/ad-aures/castopod?color=blue +https://img.shields.io/badge/contributions-welcome-brightgreen.svg +https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg +https://img.shields.io/github/stars/ad-aures/castopod?style=social [release]: https://code.castopod.org/adaures/castopod/-/releases [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md diff --git a/docs/src/pl/getting-started/install.md b/docs/src/pl/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/pl/getting-started/install.md +++ b/docs/src/pl/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/pt-BR/getting-started/install.md b/docs/src/pt-BR/getting-started/install.md index 85c178f5a9..468f435986 100644 --- a/docs/src/pt-BR/getting-started/install.md +++ b/docs/src/pt-BR/getting-started/install.md @@ -9,6 +9,14 @@ Castopod foi pensado para ser fácil de instalar. Seja usando hospedagem dedicad ou compartilhada, você pode instalá-lo na maioria dos servidores web compatíveis com PHP-MySQL. +::: info Nota + +Esta seção da documentação o ajudará a configurar o Castopod para produção. Se +você deseja participar do desenvolvimento do Castopod, pode pular para a seção +de contribuição. + +::: + ## Requisitos - PHP v8.0 ou superior @@ -17,7 +25,7 @@ com PHP-MySQL. ### PHP v8.0 ou superior -É necessário PHP versão 8.0 ou superior com as seguintes extensões instaladas: +É 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) @@ -39,9 +47,9 @@ seu PHP: ::: warning 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. +Castopod só funciona com bancos de dados MySQL 5.7 ou superior compatíveis. Vai +quebrar com a versão anterior MySQL v5.6, por exemplo, pois foi encerrada em 5 +de fevereiro de 2021. ::: @@ -51,14 +59,14 @@ 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`, +O usuário deve ter pelo menos esses privilégios no banco de dados do Castopod +para funcionar: `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: +deseja gerar Video Clips. As seguintes extensões devem ser instaladas: - Biblioteca **FreeType 2** para [gd](https://www.php.net/manual/en/image.installation.php). @@ -133,7 +141,7 @@ 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 +composto 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"> diff --git a/docs/src/pt-BR/index.md b/docs/src/pt-BR/index.md index 74576aa1f5..43c8f7bd35 100644 --- a/docs/src/pt-BR/index.md +++ b/docs/src/pt-BR/index.md @@ -21,7 +21,7 @@ podcasters em todo o mundo! ::: <div class="flex items-center"> - <a href="/pt-BR/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> + <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 @@ -29,8 +29,8 @@ podcasters em todo o mundo! - 🌱 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, … +- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, + chapters, location, persons, soundbites, … - 💬 Rede social integrada: - 🚀 Castopod é parte do Fediverso, uma rede social descentralizada - ❤️ Crie publicações, compartilhe, favorite e comente em episódios @@ -188,11 +188,11 @@ sobre o Castopod: - [LinkedIn](https://linkedin.com/company/castopod) - [Facebook](https://www.facebook.com/castopod) -## Patrocinadores +## Apoiadores 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). +apoiadores. Se você quiser ajudar, por favor considere +[apoiar 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> @@ -203,24 +203,17 @@ patrocinadores. Se você quiser ajudar, por favor considere [Licença Pública Geral GNU Affero v3.0](https://choosealicense.com/licenses/agpl-3.0/) -Copyright © 2020-present, [Ad Aures](https://adaures.com/). +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 -[release-badge]: - https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md -[license-badge]: - https://img.shields.io/github/license/ad-aures/castopod?color=blue [contributions]: https://code.castopod.org/adaures/castopod/-/issues -[contributions-badge]: - https://img.shields.io/badge/contributions-welcome-brightgreen.svg [semantic-release]: https://github.com/semantic-release/semantic-release -[semantic-release-badge]: - https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg [discord]: https://castopod.org/discord -[discord-badge]: https://img.shields.io/badge/chat-on%20discord-7389D8 [stars]: https://github.com/ad-aures/castopod/stargazers -[stars-badge]: - https://img.shields.io/github/stars/ad-aures/castopod?style=social [crowdin]: https://translate.castopod.org/project/castopod -[crowdin-badge]: https://badges.crowdin.net/castopod/localized.svg diff --git a/docs/src/pt/getting-started/install.md b/docs/src/pt/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/pt/getting-started/install.md +++ b/docs/src/pt/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/ru/getting-started/install.md b/docs/src/ru/getting-started/install.md index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/ru/getting-started/install.md +++ b/docs/src/ru/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/docs/src/sk/getting-started/install.md b/docs/src/sk/getting-started/install.md new file mode 100644 index 0000000000..c63d2fe13a --- /dev/null +++ b/docs/src/sk/getting-started/install.md @@ -0,0 +1,170 @@ +--- +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. + +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + +## 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 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/sk/getting-started/security.md b/docs/src/sk/getting-started/security.md new file mode 100644 index 0000000000..e205698df8 --- /dev/null +++ b/docs/src/sk/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/sk/getting-started/update.md b/docs/src/sk/getting-started/update.md new file mode 100644 index 0000000000..1f48e27492 --- /dev/null +++ b/docs/src/sk/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/sk/index.md b/docs/src/sk/index.md new file mode 100644 index 0000000000..87cdbbcf7d --- /dev/null +++ b/docs/src/sk/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 index 7d35b296f1..c63d2fe13a 100644 --- a/docs/src/sv/getting-started/install.md +++ b/docs/src/sv/getting-started/install.md @@ -8,6 +8,14 @@ sidebarDepth: 3 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. +::: info Note + +This section of the documentation will help you set up Castopod for production. +If you are looking to partake in the development of Castopod, you may skip to +the contributing section. + +::: + ## Requirements - PHP v8.0 or higher @@ -35,7 +43,7 @@ Additionally, make sure that the following extensions are enabled in your PHP: > We recommend using [MariaDB](https://mariadb.org). -::: warning +::: warning 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 diff --git a/modules/Admin/Language/ar/Breadcrumb.php b/modules/Admin/Language/ar/Breadcrumb.php index 396ae47444..0a02006987 100644 --- a/modules/Admin/Language/ar/Breadcrumb.php +++ b/modules/Admin/Language/ar/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'edit publication', 'unpublish' => 'unpublish', 'delete' => 'احذف', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'الفديفرس', 'block-lists' => 'قوائم حجب', 'users' => 'مستخدمون', diff --git a/modules/Admin/Language/ar/Episode.php b/modules/Admin/Language/ar/Episode.php index e53b4885ee..a077a3a9dc 100644 --- a/modules/Admin/Language/ar/Episode.php +++ b/modules/Admin/Language/ar/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'غير منشورة', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'الحلقة', 'visibility' => 'الظهور', 'comments' => 'التعليقات', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'تم إنشاء الحلقة بنجاح!', 'editSuccess' => 'تم تحديث الحلقة بنجاح!', 'publishCancelSuccess' => 'تم إلغاء نشر الحلقة بنجاح!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ '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.', + 'cover_size_hint' => 'Cover must be squared and 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.', @@ -147,9 +174,9 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'I understand, I want to delete the episode', - 'submit' => 'احذف', + 'submit' => 'Delete', ], 'embed' => [ 'title' => 'Embeddable player', diff --git a/modules/Admin/Language/ar/Person.php b/modules/Admin/Language/ar/Person.php index ac2d43c707..4c60c7c882 100644 --- a/modules/Admin/Language/ar/Person.php +++ b/modules/Admin/Language/ar/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'الصورة الرمزية', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'الإسم الكامل', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/ar/Podcast.php b/modules/Admin/Language/ar/Podcast.php index b83e2065a3..6470de020f 100644 --- a/modules/Admin/Language/ar/Podcast.php +++ b/modules/Admin/Language/ar/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast has been successfully created!', 'editSuccess' => 'Podcast has been successfully updated!', 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'العنوان', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/ar/PodcastImport.php b/modules/Admin/Language/ar/PodcastImport.php index cccbaa65a6..27a7f39fcd 100644 --- a/modules/Admin/Language/ar/PodcastImport.php +++ b/modules/Admin/Language/ar/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/ar/PodcastNavigation.php b/modules/Admin/Language/ar/PodcastNavigation.php index 04ee9a93d2..90526ea5b1 100644 --- a/modules/Admin/Language/ar/PodcastNavigation.php +++ b/modules/Admin/Language/ar/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'الحلقات', 'episode-list' => 'جميع الحلقات', 'episode-create' => 'حلقة جديدة', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/ar/Settings.php b/modules/Admin/Language/ar/Settings.php index daee3f9c14..6cce90a181 100644 --- a/modules/Admin/Language/ar/Settings.php +++ b/modules/Admin/Language/ar/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'حفظ', diff --git a/modules/Admin/Language/br/Breadcrumb.php b/modules/Admin/Language/br/Breadcrumb.php index c3ea93ff27..43f6e74b78 100644 --- a/modules/Admin/Language/br/Breadcrumb.php +++ b/modules/Admin/Language/br/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'kemmañ an embannadur', 'unpublish' => 'diembannañ', 'delete' => 'dilemel', + 'deleted' => 'dilamet', + 'delete-permanently' => 'dilemel da viken', 'fediverse' => 'kevrebed', 'block-lists' => 'roll ar re stanket', 'users' => 'implijerien·ezed', diff --git a/modules/Admin/Language/br/Episode.php b/modules/Admin/Language/br/Episode.php index aed951b761..7340335790 100644 --- a/modules/Admin/Language/br/Episode.php +++ b/modules/Admin/Language/br/Episode.php @@ -39,6 +39,15 @@ return [ 'not_published' => 'Diembann', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Rann', 'visibility' => 'Gwelusted', 'comments' => 'Evezhiadennoù', @@ -48,6 +57,24 @@ return [ '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!', + 'unpublishBeforeDeleteTip' => 'Ret eo deoc\'h diembannañ ar rann a-raok dilemel anezhi.', + 'deletePublishedEpisodeError' => 'Diembannit ar rann a-raok dilemel anezhi mar plij.', + 'deleteSuccess' => 'Dilamet eo bet ar rann gant berzh!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'Bez ez eus eus ur rann gant ar berradur-mañ (slug) dija.', ], 'form' => [ 'file_size_error' => @@ -58,7 +85,7 @@ return [ 'cover' => 'Golo ar rann', 'cover_hint' => '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ñ.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Titl', 'title_hint' => 'Dleout a rafe anv ar rann, sklaer ha berr. Arabat lakaat niverenn ar rann pe ar c\'houlzad amañ.', @@ -148,7 +175,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Dilemel ar rann a zilamo an holl gemennadennoù liammet outi ha skarzhet e vo eus lanv RSS ar podkast.", + "Gant ar rann e vo dilamet an holl restroù media, evezhiadennoù, tennadoù video ha son liammet outi.", 'understand' => 'Komprennet eo, dilemel ar rann a fell din', 'submit' => 'Dilemel', ], diff --git a/modules/Admin/Language/br/Page.php b/modules/Admin/Language/br/Page.php index b6f49de574..4cfefec67a 100644 --- a/modules/Admin/Language/br/Page.php +++ b/modules/Admin/Language/br/Page.php @@ -9,22 +9,22 @@ declare(strict_types=1); */ return [ - 'back_to_home' => 'Back to home', - 'page' => 'Page', - 'all_pages' => 'All pages', - 'create' => 'New page', - 'go_to_page' => 'Go to page', - 'edit' => 'Edit page', - 'delete' => 'Delete page', + 'back_to_home' => 'Distreiñ d\'ar bennbajennad', + 'page' => 'Pajenn', + 'all_pages' => 'An holl bajennoù', + 'create' => 'Krouiñ ur bajenn', + 'go_to_page' => 'Mont d\'ar bajenn', + 'edit' => 'Kemm ar bajenn', + 'delete' => 'Dilemel ar bajenn', 'form' => [ - 'title' => 'Title', - 'permalink' => 'Permalink', - 'content' => 'Content', - 'submit_create' => 'Create page', - 'submit_edit' => 'Save', + 'title' => 'Titl', + 'permalink' => 'Peurliamm', + 'content' => 'Danvez', + 'submit_create' => 'Krouiñ ar bajenn', + 'submit_edit' => 'Enrollañ', ], 'messages' => [ - 'createSuccess' => 'The page “{pageTitle}” was created successfully!', - 'editSuccess' => 'The page was successfully updated!', + 'createSuccess' => 'Krouet eo bet ar bajenn "{pageTitle}" gant berzh!', + 'editSuccess' => 'Hizivaet eo bet ar bajenn gant berzh!', ], ]; diff --git a/modules/Admin/Language/br/Pager.php b/modules/Admin/Language/br/Pager.php index e25ee63810..776905f93e 100644 --- a/modules/Admin/Language/br/Pager.php +++ b/modules/Admin/Language/br/Pager.php @@ -9,13 +9,13 @@ declare(strict_types=1); */ return [ - 'pageNavigation' => 'Page navigation', - 'first' => 'First', - 'previous' => 'Previous', - 'next' => 'Next', - 'last' => 'Last', - 'older' => 'Older', - 'newer' => 'Newer', - 'invalidTemplate' => '{0} is not a valid Pager template.', - 'invalidPaginationGroup' => '{0} is not a valid Pagination group.', + 'pageNavigation' => 'Merdeiñ', + 'first' => 'Kentañ', + 'previous' => 'Kent', + 'next' => 'Da heul', + 'last' => 'Diwezhañ', + 'older' => 'Koshañ', + 'newer' => 'Nevesañ', + 'invalidTemplate' => 'N\'eo ket {0} ur patrom reizh.', + 'invalidPaginationGroup' => 'N\'eo ket {0} ur strollad reizh.', ]; diff --git a/modules/Admin/Language/br/Person.php b/modules/Admin/Language/br/Person.php index fa9bba2118..c28087d8f7 100644 --- a/modules/Admin/Language/br/Person.php +++ b/modules/Admin/Language/br/Person.php @@ -9,22 +9,22 @@ declare(strict_types=1); */ return [ - 'persons' => 'Persons', - 'all_persons' => 'All persons', - 'no_person' => 'Nobody found!', - 'create' => 'Create a person', - 'view' => 'View person', - 'edit' => 'Edit person', - 'delete' => 'Delete person', + 'persons' => 'Emellerien·ezed', + 'all_persons' => 'An holl emellerien·ezed', + 'no_person' => 'Emeller·ez ebet!', + 'create' => 'Krouiñ un emeller·ez', + 'view' => 'Gwelet an emeller·ez', + 'edit' => 'Kemmañ an emeller·ez', + 'delete' => 'Dilemel an emeller·ez', 'messages' => [ - 'createSuccess' => 'Person has been successfully created!', - 'editSuccess' => 'Person has been successfully updated!', - 'deleteSuccess' => 'Person has been removed!', + 'createSuccess' => 'Krouet eo bet an emeller·ez gant berzh!', + 'editSuccess' => 'Hizivaet eo bet an emeller·ez gant berzh!', + 'deleteSuccess' => 'Tennet eo bet an emeller·ez!', ], 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Full name', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/br/Podcast.php b/modules/Admin/Language/br/Podcast.php index 9eddb6a5dc..93e3529848 100644 --- a/modules/Admin/Language/br/Podcast.php +++ b/modules/Admin/Language/br/Podcast.php @@ -26,19 +26,39 @@ return [ 'createSuccess' => 'Krouet eo bet ar podkast gant berzh!', 'editSuccess' => 'Hizivaet eo bet ar podkast gant berzh!', 'importSuccess' => 'Enporzhet eo bet ar podkast gant berzh!', + 'deleteSuccess' => 'Dilamet eo bet ar podkast @{podcast_handle} gant berzh!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], 'form' => [ - 'identity_section_title' => 'Podcast identity', - 'identity_section_subtitle' => 'These fields allow you to get noticed.', + 'identity_section_title' => 'Titouroù diwar-benn ar podkast', + 'identity_section_subtitle' => 'Ar maeziennoù a laka ac\'hanoc\'h da vezañ remerket.', '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', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', + 'banner' => 'Giton ar podkast', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', + 'banner_delete' => 'Dilemel giton ar podkast', 'title' => 'Titl', - 'handle' => 'Handle', + 'handle' => 'Anv ar podkast (handle)', 'handle_hint' => - 'Used to identify the podcast. Uppercase, lowercase, numbers and underscores are accepted.', + 'Implijet evit anavezout ar podkast. Lizherennoù bras pe munut, niveroù hag islinenn (_) degemeret.', 'type' => [ 'label' => 'Doare', 'episodic' => 'Episodic', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/br/PodcastImport.php b/modules/Admin/Language/br/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/br/PodcastImport.php +++ b/modules/Admin/Language/br/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/br/PodcastNavigation.php b/modules/Admin/Language/br/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/br/PodcastNavigation.php +++ b/modules/Admin/Language/br/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/br/Settings.php b/modules/Admin/Language/br/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/br/Settings.php +++ b/modules/Admin/Language/br/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Admin/Language/de/Breadcrumb.php b/modules/Admin/Language/de/Breadcrumb.php index 01449c4af3..2f4a1cb035 100644 --- a/modules/Admin/Language/de/Breadcrumb.php +++ b/modules/Admin/Language/de/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'Veröffentlichung bearbeiten', 'unpublish' => 'Veröffentlichung aufheben', 'delete' => 'löschen', + 'deleted' => 'gelöscht', + 'delete-permanently' => 'Endgültig löschen', 'fediverse' => 'Fediversum', 'block-lists' => 'Sperrlisten', 'users' => 'Benutzer', diff --git a/modules/Admin/Language/de/Contributor.php b/modules/Admin/Language/de/Contributor.php index c72b7feba3..dc59434889 100644 --- a/modules/Admin/Language/de/Contributor.php +++ b/modules/Admin/Language/de/Contributor.php @@ -9,10 +9,10 @@ declare(strict_types=1); */ return [ - 'podcast_contributors' => 'Podcast-Mitwirkende', + 'podcast_contributors' => 'Podcast-Administratoren', 'view' => "{username}'s Mitwirkung an {podcastTitle}", - 'add' => 'Mitwirkenden zufügen', - 'add_contributor' => 'Mitwirkenden zufügen für {0}', + 'add' => 'Adminstrator zufügen', + 'add_contributor' => 'Administrator zufügen für {0}', 'edit_role' => 'Rolle aktualisieren für {0}', 'edit' => 'Bearbeiten', 'remove' => 'Entfernen', @@ -25,7 +25,7 @@ return [ 'user_placeholder' => 'Benutzer auswählen…', 'role' => 'Rolle', 'role_placeholder' => 'Rolle auswählen…', - 'submit_add' => 'Mitwirkenden zufügen', + 'submit_add' => 'Administrator zufügen', 'submit_edit' => 'Rolle aktualisieren', ], 'roles' => [ @@ -36,6 +36,6 @@ return [ 'removeSuccess' => '{username} wurde von {podcastTitle} entfernt', 'alreadyAddedError' => - "Der Mitwirkende wurde bereits zugefügt!", + "Der Adminstrator wurde bereits zugefügt!", ], ]; diff --git a/modules/Admin/Language/de/Episode.php b/modules/Admin/Language/de/Episode.php index aec9f687fa..5def244192 100644 --- a/modules/Admin/Language/de/Episode.php +++ b/modules/Admin/Language/de/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Nicht veröffentlicht', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Suche nach einer Episode', + 'clear' => 'Suche zurücksetzen', + 'submit' => 'Suche', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Folge', 'visibility' => 'Sichtweite', 'comments' => 'Komemntar', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Folge wurde erfolgreich erstellt!', 'editSuccess' => 'Folge wurde erfolgreich aktualisiert!', 'publishCancelSuccess' => 'Veröffentlichung der Episode erfolgreich abgebrochen!', + 'unpublishBeforeDeleteTip' => 'Du musst die Episode zurückziehen, bevor du sie löschst.', + 'deletePublishedEpisodeError' => 'Bitte ziehe die Episode zurück, bevor du sie löschst.', + 'deleteSuccess' => 'Folge erfolgreich gelöscht!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'Eine Folge mit dem ausgewählten Slug existiert bereits.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ 'cover' => 'Episoden-Cover', 'cover_hint' => 'Wenn Du kein Cover festlegst, wird stattdessen das Podcast-Cover verwendet.', - 'cover_size_hint' => 'Das Cover muss quadratisch sein und mindestens 1400 Pixel breit und hoch sein.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Titel', 'title_hint' => 'Nutze einen klaren und einprägsamen Episodennamen. Gib hier nicht die Episoden- oder Staffelnummern an.', @@ -89,7 +116,7 @@ return [ 'Dieser Text wird am Ende jeder Episodenbeschreibung hinzugefügt, es ist ein guter Ort, um zum Beispiel Ihre sozialen Links einzufügen.', 'additional_files_section_title' => 'Zusätzliche Dateien', 'additional_files_section_subtitle' => - 'Diese Filter können von anderen Platformen genutzt werden, um eine bessere Nutzererfahrung bieten zu können. Weitere Informationen sind unter {podcastNamespaceLink} zu finden.', + 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', 'location_section_title' => 'Standort', 'location_section_subtitle' => 'Über welchen Ort handelt diese Folge?', 'location_name' => 'Standortname oder Adresse', @@ -147,9 +174,9 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Das Löschen der Folge löscht alle damit verbundenen Beiträge und entfernt sie aus dem RSS-Feed des Podcasts.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'Ich verstehe, ich möchte die Folge löschen', - 'submit' => 'Löschen', + 'submit' => 'Delete', ], 'embed' => [ 'title' => 'Einbettbarer Spieler', diff --git a/modules/Admin/Language/de/Navigation.php b/modules/Admin/Language/de/Navigation.php index 0be75a2cae..04fad13755 100644 --- a/modules/Admin/Language/de/Navigation.php +++ b/modules/Admin/Language/de/Navigation.php @@ -18,9 +18,9 @@ return [ 'podcast-list' => 'Alle Podcasts', 'podcast-create' => 'Neuer Podcast', 'podcast-import' => 'Podcast importieren', - 'persons' => 'Personen', - 'person-list' => 'Alle Personen', - 'person-create' => 'Neue Person', + 'persons' => 'Mitwirkende', + 'person-list' => 'Alle Mitwirkenden', + 'person-create' => 'Neuer Mitwirkender', 'fediverse' => 'Fediversum', 'fediverse-blocked-actors' => 'Blockierte Konten', 'fediverse-blocked-domains' => 'Blockierte Domains', diff --git a/modules/Admin/Language/de/Person.php b/modules/Admin/Language/de/Person.php index b8b8071580..96724be08d 100644 --- a/modules/Admin/Language/de/Person.php +++ b/modules/Admin/Language/de/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Profilbild', 'avatar_size_hint' => - 'Das Profilbild muss quadratisch sein und mindestens 400 Pixel breit und hoch.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Vollständiger Name', 'full_name_hint' => 'Dies ist der vollständige Name oder der Alias der Person.', 'unique_name' => 'Eindeutiger Name', diff --git a/modules/Admin/Language/de/Podcast.php b/modules/Admin/Language/de/Podcast.php index be9d11d33e..938367e3c4 100644 --- a/modules/Admin/Language/de/Podcast.php +++ b/modules/Admin/Language/de/Podcast.php @@ -18,7 +18,7 @@ return [ 'edit' => 'Podcast bearbeiten', 'delete' => 'Podcast löschen', 'see_episodes' => 'Episoden ansehen', - 'see_contributors' => 'Mitwirkende anzeigen', + 'see_contributors' => 'Administratoren anzeigen', 'go_to_page' => 'Gehe zur Seite', 'latest_episodes' => 'Neueste Folgen', 'see_all_episodes' => 'Alle Folgen anzeigen', @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Der Podcast wurde erfolgreich erstellt!', 'editSuccess' => 'Der Podcast wurde erfolgreich aktualisiert!', 'importSuccess' => 'Der Podcast wurde erfolgreich importiert!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], 'form' => [ 'identity_section_title' => 'Podcast-Identität', 'identity_section_subtitle' => 'Diese Felder erlauben es dir, Aufmerksamkeit zu bekommen.', 'cover' => 'Podcast-Cover', - 'cover_size_hint' => 'Das Cover muss quadratisch sein und mindestens 1400 Pixel breit und hoch sein.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'banner' => 'Podcast-Banner', - 'banner_size_hint' => 'Das Banner muss ein 3:1-Verhältnis und mindestens 1500px Breite haben.', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Podcast-Banner löschen', 'title' => 'Titel', 'handle' => 'Identifikator', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'Dies wird innerhalb des ❬channel❭ Tags eingefügt.', 'new_feed_url' => 'Neue Feed-URL', 'new_feed_url_hint' => 'Benutzen Sie dieses Feld, wenn Sie zu einer anderen Domain oder Podcast-Plattform wechseln. Standardmäßig wird der Wert auf die aktuelle RSS URL gesetzt, wenn der Podcast importiert wird.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnerschaft:en', 'partner_id' => 'ID', 'partner_link_url' => 'Link', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Filmkritiken', 'tv_reviews' => 'TV-Kritiken', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'Von {publisher}', 'season' => 'Staffel {seasonNumber}', 'list_of_episodes_year' => '{year} Folgen ({episodeCount})', @@ -227,12 +256,12 @@ return [ 'no_episode' => 'Keine Folge gefunden!', 'follow' => 'Folgen', 'followers' => '{numberOfFollowers, plural, - one {# Follower} - other {# Follower} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# Beitrag} - other {# Beiträge} + one {# post} + other {# posts} }', 'activity' => 'Aktivitäten', 'episodes' => 'Folgen', diff --git a/modules/Admin/Language/de/PodcastImport.php b/modules/Admin/Language/de/PodcastImport.php index affc41ed4a..c44dd1a2c9 100644 --- a/modules/Admin/Language/de/PodcastImport.php +++ b/modules/Admin/Language/de/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'Dieses Verfahren kann lange dauern. Da die aktuelle Version keinen Fortschritt anzeigt, während sie läuft, werden Sie keine Aktuallisierung mehr sehen, bis sie fertig ist. Im Falle eines Timeout-Fehlers erhöhen Sie den `max_execution_time` Wert.', + 'Dieses Verfahren kann lange dauern.<br/>Da die aktuelle Version keinen Fortschritt anzeigt, während sie läuft, werden Sie keine Aktuallisierung mehr sehen, bis sie fertig ist.<br/>Im Falle eines Timeout-Fehlers erhöhen Sie den `max_execution_time` Wert.', 'old_podcast_section_title' => 'Der zu importierende Podcast', 'old_podcast_section_subtitle' => 'Stellen Sie sicher, dass Sie die Rechte für diesen Podcast besitzen, bevor Sie ihn importieren. Vervielfältigung und Ausstrahlung eines Podcasts ohne die entsprechenden Rechte sind Piraterie und strafbar.', diff --git a/modules/Admin/Language/de/PodcastNavigation.php b/modules/Admin/Language/de/PodcastNavigation.php index 68126d7fef..4f5688df0e 100644 --- a/modules/Admin/Language/de/PodcastNavigation.php +++ b/modules/Admin/Language/de/PodcastNavigation.php @@ -13,10 +13,11 @@ return [ 'dashboard' => 'Podcast-Dashboard', 'podcast-view' => 'Startseite', 'podcast-edit' => 'Podcast bearbeiten', - 'podcast-persons-manage' => 'Personen verwalten', + 'podcast-persons-manage' => 'Mitwirkende verwalten', 'episodes' => 'Folgen', 'episode-list' => 'Alle Episoden', 'episode-create' => 'Neue Episoden', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analysen', 'podcast-analytics' => 'Zuhörer-Übersicht', 'podcast-analytics-webpages' => 'Webseiten-Besuche', @@ -25,9 +26,9 @@ return [ 'podcast-analytics-players' => 'Podcast-Player', 'podcast-analytics-listening-time' => 'Hörzeit', 'podcast-analytics-time-periods' => 'Zeiträume', - 'contributors' => 'Mitwirkende', + 'contributors' => 'Administratoren', 'contributor-list' => 'Alle Unterstützer', - 'contributor-add' => 'Mitwirkenden hinzufügen', + 'contributor-add' => 'Administrator hinzufügen', 'platforms' => 'Externe Plattformen', 'platforms-podcasting' => 'Podcasting', 'platforms-social' => 'Soziale Netzwerke', diff --git a/modules/Admin/Language/de/Settings.php b/modules/Admin/Language/de/Settings.php index 50b7789a1a..f08af7a621 100644 --- a/modules/Admin/Language/de/Settings.php +++ b/modules/Admin/Language/de/Settings.php @@ -15,7 +15,7 @@ return [ 'site_icon' => 'Webseiten-Icon', 'site_icon_delete' => 'Lösche Webseiten-Icon', 'site_icon_hint' => 'Webseiten-Icons sind das, was Sie auf Ihrem Browser Tabs, Lesezeichenleiste und wenn Sie eine Website als Verknüpfung auf mobilen Geräten hinzufügen, sehen.', - 'site_icon_helper' => 'Das Icon muss quadratisch sein und mindestens 512 Pixel breit und hoch.', + 'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Seitenname', 'site_description' => 'Seitenbeschreibung', 'submit' => 'Speichern', diff --git a/modules/Admin/Language/el/Breadcrumb.php b/modules/Admin/Language/el/Breadcrumb.php index c235a34f97..c1bd971720 100644 --- a/modules/Admin/Language/el/Breadcrumb.php +++ b/modules/Admin/Language/el/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'επεξεργασία δημοσίευσης', 'unpublish' => 'αναίρεση δημοσίευσης', 'delete' => 'διαγραφή', + 'deleted' => 'διαγράφηκε', + 'delete-permanently' => 'οριστική διαγραφή', 'fediverse' => 'fediverse', 'block-lists' => 'λίστες αποκλεισμένων', 'users' => 'χρήστες', diff --git a/modules/Admin/Language/el/Episode.php b/modules/Admin/Language/el/Episode.php index 0ae908e51d..3e93590bf9 100644 --- a/modules/Admin/Language/el/Episode.php +++ b/modules/Admin/Language/el/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Δεν έχει δημοσιευτεί', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Επεισόδιο', 'visibility' => 'Ορατότητα', 'comments' => 'Σχόλια', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Το επεισόδιο δημιουργήθηκε με επιτυχία!', 'editSuccess' => 'Το επεισόδιο ενημερώθηκε με επιτυχία!', 'publishCancelSuccess' => 'Η δημοσίευση του επεισοδίου ακυρώθηκε επιτυχώς!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ 'cover' => 'Εξώφυλλο επισοδίου', 'cover_hint' => 'Εάν δεν ορίσετε ένα εξώφυλλο, το εξώφυλλο του podcast θα χρησιμοποιηθεί αντ \'αυτού.', - 'cover_size_hint' => 'Το εξώφυλλο πρέπει να είναι τουλάχιστον 1400px πλάτος και ύψος.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Τίτλος', 'title_hint' => 'Θα πρέπει να υπάρχει ένα σαφές και συνοπτικό όνομα επεισοδίου. Μην καθορίσετε εδώ το επεισόδιο ή τους αριθμούς της σεζόν.', @@ -75,91 +102,91 @@ return [ ], 'parental_advisory' => [ 'label' => 'Γονικός σύμβουλος', - 'hint' => 'Does the episode contain explicit content?', - 'undefined' => 'undefined', - 'clean' => 'Clean', - 'explicit' => 'Explicit', + 'hint' => 'Μήπως το επεισόδιο περιέχει ακατάλληλο περιεχόμενο;', + 'undefined' => 'απροσδιόριστο', + 'clean' => 'Καθαρισμός', + 'explicit' => 'Άσεμνο περιεχόμενο', ], - 'show_notes_section_title' => 'Show notes', + 'show_notes_section_title' => 'Εμφάνιση σημειώσεων', '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', + 'Μέχρι 4000 χαρακτήρες, να είναι σαφείς και συνοπτικές. Η εμφάνιση σημειώσεων βοηθάει πιθανούς ακροατές στην εύρεση του επεισοδίου.', + 'description' => 'Περιγραφή', + 'description_footer' => 'Υποσέλιδο περιγραφής', 'description_footer_hint' => - 'This text is added at the end of each episode description, it is a good place to input your social links for example.', - 'additional_files_section_title' => 'Additional files', + 'Αυτό το κείμενο προστίθεται στο τέλος του κάθε επεισοδίου, είναι ένα καλό μέρος για να εισάγετε κοινωνικές συνδέσεις για παράδειγμα.', + 'additional_files_section_title' => 'Επιπρόσθετα αρχεία', 'additional_files_section_subtitle' => - 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', - 'location_section_title' => 'Location', - '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', + 'Αυτά τα αρχεία μπορούν να χρησιμοποιηθούν από άλλες πλατφόρμες για την παροχή καλύτερης εμπειρίας στο κοινό σας. Δείτε το {podcastNamespaceLink} για περισσότερες πληροφορίες.', + 'location_section_title' => 'Τοποθεσία', + 'location_section_subtitle' => 'Σε ποιο μέρος είναι αυτό το επεισόδιο;', + 'location_name' => 'Όνομα τοποθεσίας ή διεύθυνση', + 'location_name_hint' => 'Αυτή μπορεί να είναι μια πραγματική ή φανταστική τοποθεσία', + 'transcript' => 'Απομαγνητοφώνηση (υπότιτλοι / κλειστοί υπότιτλοι)', + 'transcript_hint' => 'Επιτρέπονται μόνο .srt αρχεία.', + 'transcript_download' => 'Λήψη απομαγνητοφώνησης', + 'transcript_file' => 'Αρχείο απομαγνητοφώνησης (.srt)', + 'transcript_remote_url' => 'Απομακρυσμένη διεύθυνση url για απομαγνητοφώνηση', + 'transcript_file_delete' => 'Διαγραφή αρχείου απομαγνητοφώνησης', + 'chapters' => 'Κεφάλαια', + 'chapters_hint' => 'Το αρχείο πρέπει να είναι σε μορφή JSON.', + 'chapters_download' => 'Κατεβάστε τα κεφάλαια', + 'chapters_file' => 'Αρχεία κεφαλαίων', + 'chapters_remote_url' => 'Απομακρυσμένη διεύθυνση url για αρχεία κεφαλαίων', + 'chapters_file_delete' => 'Διαγραφή αρχείου κεφαλαίων', + 'advanced_section_title' => 'Προηγμένες Παράμετροι', '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', + 'Αν χρειάζεστε ετικέτες RSS που δεν χειρίζεται το Castopod, ορίστε τις εδώ.', + 'custom_rss' => 'Προσαρμοσμένες ετικέτες RSS για το επεισόδιο', + 'custom_rss_hint' => 'Αυτό θα ενεθεί εντός της ετικέτας "item".', + 'block' => 'Το επεισόδιο πρέπει να είναι κρυμμένο από όλες τις πλατφόρμες', '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', + 'Το επεισόδιο εμφανίζει ή αποκρύπτει την ανάρτηση. Αν θέλετε αυτό το επεισόδιο να αφαιρεθεί από τον κατάλογο της Apple, ενεργοποιήστε το.', + 'submit_create' => 'Δημιουργία επεισοδίου', + 'submit_edit' => 'Αποθήκευση επεισοδίου', ], 'publish_form' => [ - 'back_to_episode_dashboard' => 'Back to episode dashboard', - 'post' => 'Your announcement post', + 'back_to_episode_dashboard' => 'Πίσω στον Πίνακα Ελέγχου', + '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', + "Γράψτε ένα μήνυμα για να ανακοινώσετε τη δημοσίευση του επεισοδίου σας. Το μήνυμα θα μεταδοθεί σε όλους τους οπαδούς σας στο fediverse και θα εμφανίζεται στην αρχική σελίδα του podcast σας.", + 'message_placeholder' => 'Γράψτε το μήνυμά σας…', + 'publication_date' => 'Ημερομηνία δημοσίευσης', 'publication_method' => [ - 'now' => 'Now', - 'schedule' => 'Schedule', + 'now' => 'Τώρα', + 'schedule' => 'Προγραμματισμός', ], - 'scheduled_publication_date' => 'Scheduled publication date', - 'scheduled_publication_date_clear' => 'Clear publication date', + 'scheduled_publication_date' => 'Ημερομηνία προγραμματισμένης δημοσίευσης', + 'scheduled_publication_date_clear' => 'Εκκαθάριση ημερομηνίας δημοσίευσης', '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.', + 'Μπορείτε να προγραμματίσετε την έκδοση επεισοδίων ορίζοντας μια μελλοντική ημερομηνία δημοσίευσης. Αυτό το πεδίο πρέπει να μορφοποιηθεί ως ΕΕΕ-ΜΜ-ΗΗ HH:mm', + 'submit' => 'Δημοσίευση', + 'submit_edit' => 'Επεξεργασία δημοσίευσης', + 'cancel_publication' => 'Ακύρωση δημοσίευσης', + 'message_warning' => 'Δεν γράψατε μήνυμα για την ανακοίνωσή σας!', + 'message_warning_hint' => 'Έχοντας ένα μήνυμα αυξάνει την κοινωνική δέσμευση, με αποτέλεσμα μια καλύτερη προβολή για το επεισόδιο σας.', 'message_warning_submit' => 'Δημοσίευση ούτως ή άλλως', ], 'unpublish_form' => [ 'disclaimer' => "Η κατάργηση της δημοσίευσης του επεισοδίου θα διαγράψει όλες τις δημοσιεύσεις που σχετίζονται με αυτό και θα τις αφαιρέσει από τη ροή RSS του podcast.", - 'understand' => 'I understand, I want to unpublish the episode', - 'submit' => 'Unpublish', + 'understand' => 'Καταλαβαίνω, θέλω να αποδημοσιεύσει το επεισόδιο', + 'submit' => 'Αναίρεση δημοσίευσης', ], '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', + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", + 'understand' => 'Καταλαβαίνω, θέλω να διαγράψω το επεισόδιο', 'submit' => 'Delete', ], 'embed' => [ - 'title' => 'Embeddable player', + 'title' => 'Ενσωματώσιμος αναπαραγωγέας', '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', + 'Επιλέξτε ένα χρώμα θέματος, αντιγράψτε τον ενσωματωμένο παίκτη στο πρόχειρο και στη συνέχεια επικολλήστε το στην ιστοσελίδα σας.', + 'clipboard_iframe' => 'Αντιγραφή ενσωματωμένου αναπαραγωγέα στο πρόχειρο', + 'clipboard_url' => 'Αντιγραφή διεύθυνσης στο πρόχειρο', + 'dark' => 'Σκοτεινό', + 'dark-transparent' => 'Σκούρο διαφανές', + 'light' => 'Ανοιχτόχρωμο', + 'light-transparent' => 'Ανοιχτό διαφανές', ], ]; diff --git a/modules/Admin/Language/el/EpisodeNavigation.php b/modules/Admin/Language/el/EpisodeNavigation.php index 1406e3010e..c2a9ccddce 100644 --- a/modules/Admin/Language/el/EpisodeNavigation.php +++ b/modules/Admin/Language/el/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' => 'Προβολή σελίδας επεισοδίου', + 'dashboard' => 'Πίνακας εργαλείων επεισοδίου', + 'episode-view' => 'Αρχική σελίδα', + 'episode-edit' => 'Επεξεργασία επεισοδίου', + 'episode-persons-manage' => 'Διαχείριση ατόμων', + 'embed-add' => 'Ενσωματώσιμος αναπαραγωγέας', + 'clips' => 'Αποσπάσματα', + 'video-clips-list' => 'Βίντεο κλιπς', + 'video-clips-create' => 'Νέο βίντεο κλιπ', + 'soundbites-list' => 'Ήχοι', + 'soundbites-create' => 'Νέο soundbite', ]; diff --git a/modules/Admin/Language/el/Fediverse.php b/modules/Admin/Language/el/Fediverse.php index 0e4ca66d89..b75a73f1f6 100644 --- a/modules/Admin/Language/el/Fediverse.php +++ b/modules/Admin/Language/el/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' => 'Δεν βρέθηκε ο λογαριασμός!', + 'blockActorSuccess' => '{0} έχει αποκλειστεί!', + 'unblockActorSuccess' => 'Ο ηθοποιός έχει ξεμπλοκαριστεί!', + 'blockDomainSuccess' => '{domain} έχει αποκλειστεί!', + 'unblockDomainSuccess' => '{domain} έχει ξεμπλοκαριστεί!', ], - 'blocked_actors' => 'Blocked accounts', - 'blocked_domains' => 'Blocked domains', + 'blocked_actors' => 'Αποκλεισμένοι λογαριασμοί', + 'blocked_domains' => 'Αποκλεισμένοι τομείς', 'block_lists_form' => [ - 'handle' => 'Account handle', - 'handle_hint' => 'Input @username@domain account.', - 'domain' => 'Domain name', - 'submit' => 'Block!', + 'handle' => 'Χειρισμός λογαριασμού', + 'handle_hint' => 'Εισαγωγή λογαριασμού @username@domain.', + 'domain' => 'Όνομα τομέα', + 'submit' => 'Αποκλεισμός!', ], 'list' => [ - 'actor' => 'Account', - 'domain' => 'Domain name', - 'unblock' => 'Unblock', + 'actor' => 'Λογαριασμός', + 'domain' => 'Όνομα τομέα', + 'unblock' => 'Ξεμπλοκάρισμα', ], ]; diff --git a/modules/Admin/Language/el/Home.php b/modules/Admin/Language/el/Home.php index 3ff4c04dc8..c160f26df3 100644 --- a/modules/Admin/Language/el/Home.php +++ b/modules/Admin/Language/el/Home.php @@ -9,6 +9,6 @@ declare(strict_types=1); */ return [ - 'all_podcasts' => 'All podcasts', - 'no_podcast' => 'No podcast found', + 'all_podcasts' => 'Όλα τα podcasts', + 'no_podcast' => 'Δεν βρέθηκαν podcast', ]; diff --git a/modules/Admin/Language/el/Install.php b/modules/Admin/Language/el/Install.php index 36e373a285..80c070263b 100644 --- a/modules/Admin/Language/el/Install.php +++ b/modules/Admin/Language/el/Install.php @@ -9,53 +9,53 @@ declare(strict_types=1); */ return [ - 'manual_config' => 'Manual configuration', + 'manual_config' => 'Χειροκίνητη ρύθμιση', 'manual_config_subtitle' => - 'Create a `.env` file with your settings and refresh the page to continue installation.', + 'Δημιουργήστε ένα αρχείο `.env` με τις ρυθμίσεις σας και ανανεώστε τη σελίδα για να συνεχίσετε την εγκατάσταση.', 'form' => [ - 'instance_config' => 'Instance configuration', - 'hostname' => 'Hostname', - 'media_base_url' => 'Media base URL', + 'instance_config' => 'Ρύθμιση παραμέτρων εμφάνισης', + '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/Admin/Language/el/MyAccount.php b/modules/Admin/Language/el/MyAccount.php index 6ebbb30ef7..fe2dc34e8b 100644 --- a/modules/Admin/Language/el/MyAccount.php +++ b/modules/Admin/Language/el/MyAccount.php @@ -9,10 +9,10 @@ declare(strict_types=1); */ return [ - 'info' => 'My account info', - 'changePassword' => 'Change my password', + 'info' => 'Πληροφορίες Λογαριασμού', + 'changePassword' => 'Αλλαγή κωδικού πρόσβασης', 'messages' => [ - 'wrongPasswordError' => "You've entered the wrong password, try again.", - 'passwordChangeSuccess' => 'Password has been successfully changed!', + 'wrongPasswordError' => "Έχετε εισάγει λάθος κωδικό πρόσβασης, προσπαθήστε ξανά.", + 'passwordChangeSuccess' => 'Ο κωδικός πρόσβασής σας άλλαξε με επιτυχία!', ], ]; diff --git a/modules/Admin/Language/el/Navigation.php b/modules/Admin/Language/el/Navigation.php index 68d4609d5d..2325bd3800 100644 --- a/modules/Admin/Language/el/Navigation.php +++ b/modules/Admin/Language/el/Navigation.php @@ -9,33 +9,33 @@ declare(strict_types=1); */ return [ - 'toggle_sidebar' => 'Toggle sidebar', - 'go_to_website' => 'Go to website', - 'go_to_admin' => 'Go to admin', - 'dashboard' => 'Dashboard', - 'admin' => 'Home', + 'toggle_sidebar' => 'Εναλλαγή πλαϊνής μπάρας', + 'go_to_website' => 'Μεταβείτε στον ιστότοπο', + 'go_to_admin' => 'Μεταβείτε στον πίνακα διαχείρισης', + 'dashboard' => 'Πίνακας εργαλείων', + 'admin' => 'Αρχική σελίδα', 'podcasts' => 'Podcasts', - 'podcast-list' => 'All podcasts', - 'podcast-create' => 'New podcast', - 'podcast-import' => 'Import a podcast', - 'persons' => 'Persons', - 'person-list' => 'All persons', - 'person-create' => 'New person', + 'podcast-list' => 'Όλα τα podcasts', + 'podcast-create' => 'Νέο podcast', + 'podcast-import' => 'Εισαγωγή ενός podcast', + 'persons' => 'Πρόσωπα', + 'person-list' => 'Όλα τα άτομα', + 'person-create' => 'Νέο άτομο', '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', + 'fediverse-blocked-actors' => 'Αποκλεισμένοι λογαριασμοί', + 'fediverse-blocked-domains' => 'Αποκλεισμένοι τομείς', + 'users' => 'Χρήστες', + 'user-list' => 'Όλοι οι χρήστες', + 'user-create' => 'Νέος χρήστης', + 'pages' => 'Σελίδες', + 'page-list' => 'Όλες οι σελίδες', + 'page-create' => 'Νέα σελίδα', + 'settings' => 'Ρυθμίσεις', + 'settings-general' => 'Γενικά', + 'settings-theme' => 'Θέμα', 'account' => [ - 'my-account' => 'My account', - 'change-password' => 'Change password', - 'logout' => 'Logout', + 'my-account' => 'Ο λογαριασμός μου', + 'change-password' => 'Αλλαγή κωδικού πρόσβασης', + 'logout' => 'Αποσυνδέση', ], ]; diff --git a/modules/Admin/Language/el/Page.php b/modules/Admin/Language/el/Page.php index b6f49de574..00358402b0 100644 --- a/modules/Admin/Language/el/Page.php +++ b/modules/Admin/Language/el/Page.php @@ -9,22 +9,22 @@ declare(strict_types=1); */ return [ - 'back_to_home' => 'Back to home', - 'page' => 'Page', - 'all_pages' => 'All pages', - 'create' => 'New page', - 'go_to_page' => 'Go to page', - 'edit' => 'Edit page', - 'delete' => 'Delete page', + 'back_to_home' => 'Επιστροφή στην αρχική σελίδα', + 'page' => 'Σελίδα', + 'all_pages' => 'Όλες οι σελίδες', + 'create' => 'Νέα σελίδα', + 'go_to_page' => 'Μετάβαση στη σελίδα', + 'edit' => 'Επεξεργασία σελίδας', + 'delete' => 'Διαγραφή σελίδας', 'form' => [ - 'title' => 'Title', - 'permalink' => 'Permalink', - 'content' => 'Content', - 'submit_create' => 'Create page', - 'submit_edit' => 'Save', + 'title' => 'Τίτλος', + 'permalink' => 'Μόνιμος σύνδεσμος', + 'content' => 'Περιεχόμενο', + 'submit_create' => 'Δημιουργία σελίδας', + 'submit_edit' => 'Αποθήκευση', ], 'messages' => [ - 'createSuccess' => 'The page “{pageTitle}” was created successfully!', - 'editSuccess' => 'The page was successfully updated!', + 'createSuccess' => 'Η σελίδα “{pageTitle}” δημιουργήθηκε με επιτυχία!', + 'editSuccess' => 'Η σελίδα ενημερώθηκε επιτυχώς!', ], ]; diff --git a/modules/Admin/Language/el/Pager.php b/modules/Admin/Language/el/Pager.php index e25ee63810..31c0354d2d 100644 --- a/modules/Admin/Language/el/Pager.php +++ b/modules/Admin/Language/el/Pager.php @@ -9,13 +9,13 @@ declare(strict_types=1); */ return [ - 'pageNavigation' => 'Page navigation', - 'first' => 'First', - 'previous' => 'Previous', - 'next' => 'Next', - 'last' => 'Last', - 'older' => 'Older', - 'newer' => 'Newer', - 'invalidTemplate' => '{0} is not a valid Pager template.', - 'invalidPaginationGroup' => '{0} is not a valid Pagination group.', + 'pageNavigation' => 'Πλοήγηση στις σελίδες', + 'first' => 'Πρώτη', + 'previous' => 'Προηγούμενη', + 'next' => 'Επόμενη', + 'last' => 'Τελευταία', + 'older' => 'Παλιότερα', + 'newer' => 'Νεότερη', + 'invalidTemplate' => '{0} δεν είναι έγκυρο πρότυπο Pager.', + 'invalidPaginationGroup' => '{0} δεν είναι μια έγκυρη ομάδα σελιδοποίησης.', ]; diff --git a/modules/Admin/Language/el/Person.php b/modules/Admin/Language/el/Person.php index fa9bba2118..4235a3374f 100644 --- a/modules/Admin/Language/el/Person.php +++ b/modules/Admin/Language/el/Person.php @@ -9,57 +9,57 @@ declare(strict_types=1); */ return [ - 'persons' => 'Persons', - 'all_persons' => 'All persons', - 'no_person' => 'Nobody found!', - 'create' => 'Create a person', - 'view' => 'View person', - 'edit' => 'Edit person', - 'delete' => 'Delete person', + 'persons' => 'Πρόσωπα', + 'all_persons' => 'Όλα τα πρόσωπα', + 'no_person' => 'Δεν βρέθηκε κανείς!', + 'create' => 'Δημιουργήστε ένα πρόσωπο', + 'view' => 'Προβολή προσώπου', + 'edit' => 'Επεξεργασία προσώπου', + 'delete' => 'Διαγραφή ατόμου', 'messages' => [ - 'createSuccess' => 'Person has been successfully created!', - 'editSuccess' => 'Person has been successfully updated!', - 'deleteSuccess' => 'Person has been removed!', + 'createSuccess' => 'Το άτομο δημιουργήθηκε με επιτυχία!', + 'editSuccess' => 'Το άτομο ενημερώθηκε με επιτυχία!', + 'deleteSuccess' => 'Το άτομο έχει αφαιρεθεί!', ], 'form' => [ - 'avatar' => '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', + 'Avatar must be squared and at least 400px wide and tall.', + 'full_name' => 'Ονοματεπώνυμο', + 'full_name_hint' => 'Αυτό είναι το πλήρες όνομα ή το ψευδώνυμο του ατόμου.', + 'unique_name' => 'Μοναδικό όνομα', + 'unique_name_hint' => 'Χρησιμοποιείται για διευθύνσεις URL', + 'information_url' => 'Url Πληροφοριών', 'information_url_hint' => - 'Url to a relevant resource of information about the person, such as a homepage or third-party profile platform.', - 'submit_create' => 'Create person', - 'submit_edit' => 'Save person', + 'Url σε μια σχετική πηγή πληροφοριών σχετικά με το άτομο, όπως μια αρχική σελίδα ή πλατφόρμα προφίλ τρίτων.', + 'submit_create' => 'Δημιουργία προσώπου', + 'submit_edit' => 'Αποθήκευση ατόμου', ], 'podcast_form' => [ - 'title' => 'Manage persons', - 'add_section_title' => 'Add persons to this podcast', - 'add_section_subtitle' => 'You may pick several persons and roles.', - 'persons' => 'Persons', + 'title' => 'Διαχείριση προσώπων', + 'add_section_title' => 'Προσθέστε άτομα σε αυτό το podcast', + 'add_section_subtitle' => 'Μπορείτε να επιλέξετε πολλά άτομα και ρόλους.', + 'persons' => 'Πρόσωπα', 'persons_hint' => - 'You may select one or several persons with the same roles. You need to create the persons first.', - 'roles' => 'Roles', + 'Μπορείτε να επιλέξετε ένα ή περισσότερα άτομα με τους ίδιους ρόλους. Πρέπει πρώτα να δημιουργήσετε τα πρόσωπα.', + 'roles' => 'Ρόλοι', 'roles_hint' => - 'You may select none, one or several roles for a person.', - 'submit_add' => 'Add person(s)', - 'remove' => 'Remove', + 'Μπορείτε να επιλέξετε κανένα, έναν ή περισσότερους ρόλους για ένα άτομο.', + 'submit_add' => 'Προσθήκη ατόμου(ων)', + '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', + 'title' => 'Διαχείριση προσώπων', + 'add_section_title' => 'Προσθήκη ατόμων σε αυτό το επεισόδιο', + 'add_section_subtitle' => 'Μπορείτε να επιλέξετε πολλά άτομα και ρόλους.', + 'persons' => 'Πρόσωπα', 'persons_hint' => - 'You may select one or several persons with the same roles. You need to create the persons first.', - 'roles' => 'Roles', + 'Μπορείτε να επιλέξετε ένα ή περισσότερα άτομα με τους ίδιους ρόλους. Πρέπει πρώτα να δημιουργήσετε τα πρόσωπα.', + 'roles' => 'Ρόλοι', 'roles_hint' => - 'You may select none, one or several roles for a person.', - 'submit_add' => 'Add person(s)', - 'remove' => 'Remove', + 'Μπορείτε να επιλέξετε κανένα, έναν ή περισσότερους ρόλους για ένα άτομο.', + 'submit_add' => 'Προσθήκη ατόμου(ων)', + 'remove' => 'Διαγραφή', ], - 'credits' => 'Credits', + 'credits' => 'Συντελεστές', ]; diff --git a/modules/Admin/Language/el/Platforms.php b/modules/Admin/Language/el/Platforms.php index ab17d5999b..4b5f2fb555 100644 --- a/modules/Admin/Language/el/Platforms.php +++ b/modules/Admin/Language/el/Platforms.php @@ -9,22 +9,22 @@ declare(strict_types=1); */ return [ - 'title' => 'Platforms', - 'home_url' => 'Go to {platformName} website', - 'submit_url' => 'Submit your podcast on {platformName}', - 'visible' => 'Display in podcast homepage?', - 'on_embed' => 'Display on embeddable player?', - 'remove' => 'Remove {platformName}', - 'submit' => 'Save', + 'title' => 'Πλατφόρμες', + 'home_url' => 'Μεταβείτε στην ιστοσελίδα {platformName}', + 'submit_url' => 'Υποβάλετε το podcast σας στην πλατφόρμα {platformName}', + 'visible' => 'Εμφάνιση στην αρχική σελίδα του podcast;', + 'on_embed' => 'Εμφάνιση σε ενσωματωμένο player;', + 'remove' => 'Κατάργηση {platformName}', + 'submit' => 'Αποθήκευση', 'messages' => [ - 'updateSuccess' => 'Platform links have been successfully updated!', - 'removeLinkSuccess' => 'The platform link has been removed.', + 'updateSuccess' => 'Οι σύνδεσμοι της πλατφόρμας ενημερώθηκαν επιτυχώς!', + 'removeLinkSuccess' => 'Ο σύνδεσμος πλατφόρμας έχει αφαιρεθεί.', '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', + 'podcasting' => 'Το αναγνωριστικό podcast σε αυτή την πλατφόρμα', + 'social' => 'Το αναγνωριστικό λογαριασμού podcast σε αυτήν την πλατφόρμα', + 'funding' => 'Κλήση σε μήνυμα δράσης', ], ]; diff --git a/modules/Admin/Language/el/Podcast.php b/modules/Admin/Language/el/Podcast.php index 67335c104f..44c802b0c7 100644 --- a/modules/Admin/Language/el/Podcast.php +++ b/modules/Admin/Language/el/Podcast.php @@ -9,31 +9,51 @@ declare(strict_types=1); */ return [ - 'all_podcasts' => 'All podcasts', - 'no_podcast' => 'No podcast found!', - 'create' => 'Create podcast', - 'import' => 'Import podcast', - 'new_episode' => 'New Episode', - 'view' => 'View podcast', - 'edit' => 'Edit podcast', - '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', + 'all_podcasts' => 'Όλα τα podcasts', + 'no_podcast' => 'Δεν βρέθηκαν podcast!', + 'create' => 'Δημιουργία podcast', + 'import' => 'Εισαγωγή ενός podcast', + 'new_episode' => 'Νέο Επεισόδιο', + 'view' => 'Προβολή podcast', + 'edit' => 'Επεξεργασία podcast', + 'delete' => 'Διαγραφή podcast', + 'see_episodes' => 'Δείτε επεισόδια', + 'see_contributors' => 'Βλέπε συντελεστές', + 'go_to_page' => 'Μετάβαση στη σελίδα', + 'latest_episodes' => 'Τελευταία επεισόδια', + 'see_all_episodes' => 'Δείτε όλα τα επεισόδια', 'messages' => [ - 'createSuccess' => 'Podcast has been successfully created!', - 'editSuccess' => 'Podcast has been successfully updated!', - 'importSuccess' => 'Podcast has been successfully imported!', + 'createSuccess' => 'Το επεισόδιο δημιουργήθηκε με επιτυχία!', + 'editSuccess' => 'Το Podcast ενημερώθηκε με επιτυχία!', + 'importSuccess' => 'Το Podcast εισήχθη με επιτυχία!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], 'form' => [ - 'identity_section_title' => 'Podcast identity', - 'identity_section_subtitle' => 'These fields allow you to get noticed.', + 'identity_section_title' => 'Αναγνωριστικό Podcast', + 'identity_section_subtitle' => 'Αυτά τα πεδία σας επιτρέπουν να ξεχωρίσει το podcast σας.', 'cover' => 'Podcast cover', - 'cover_size_hint' => 'Cover must be squared with at least 1400px wide and tall.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'Title', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/el/PodcastImport.php b/modules/Admin/Language/el/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/el/PodcastImport.php +++ b/modules/Admin/Language/el/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/el/PodcastNavigation.php b/modules/Admin/Language/el/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/el/PodcastNavigation.php +++ b/modules/Admin/Language/el/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/el/Settings.php b/modules/Admin/Language/el/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/el/Settings.php +++ b/modules/Admin/Language/el/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Admin/Language/es/Breadcrumb.php b/modules/Admin/Language/es/Breadcrumb.php index ee7001fce0..47ae562813 100644 --- a/modules/Admin/Language/es/Breadcrumb.php +++ b/modules/Admin/Language/es/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'editar publicación', 'unpublish' => 'anular publicación', 'delete' => 'borrar', + 'deleted' => 'eliminado', + 'delete-permanently' => 'eliminar permanentemente', 'fediverse' => 'fediverso', 'block-lists' => 'listas de bloqueo', 'users' => 'usuarios', diff --git a/modules/Admin/Language/es/Episode.php b/modules/Admin/Language/es/Episode.php index ca5ee1f8da..5b2ab91727 100644 --- a/modules/Admin/Language/es/Episode.php +++ b/modules/Admin/Language/es/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'No publicado', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episodio', 'visibility' => 'Visibilidad', 'comments' => 'Comentarios', @@ -47,6 +56,24 @@ return [ 'createSuccess' => '¡El episodio ha sido creado correctamente!', 'editSuccess' => '¡El episodio ha sido actualizado correctamente!', 'publishCancelSuccess' => '¡La publicación del episodio ha sido cancelada correctamente!', + 'unpublishBeforeDeleteTip' => 'Debe anular la publicación del episodio antes de eliminarlo.', + 'deletePublishedEpisodeError' => 'Por favor, anule la publicación del episodio antes de eliminarlo.', + 'deleteSuccess' => '¡Episodio eliminado con éxito!', + 'deleteError' => 'Error al eliminar episodio {type, select, + transcript {transcripción} + chapters {capítulos} + image {portada} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'Ya existe un episodio con el slug elegido.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ 'cover' => 'Portada del episodio', 'cover_hint' => 'Si no establece una portada, la portada del podcast se utilizará en su lugar.', - 'cover_size_hint' => 'La portada debe ser cuadrada con al menos 1400px de ancho y alto.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Título', 'title_hint' => 'Debe contener un nombre de episodio claro y conciso. No especifique los números de episodio o temporada aquí.', @@ -89,7 +116,7 @@ return [ 'Este texto se añade al final de cada descripción de episodios, es un buen lugar para introducir sus enlaces sociales, por ejemplo.', 'additional_files_section_title' => 'Archivos adicionales', 'additional_files_section_subtitle' => - 'Estos archivos pueden ser usados por otras plataformas para proporcionar una mejor experiencia a tu audiencia. Ver el {podcastNamespaceLink} para más información.', + 'Estos archivos pueden ser utilizados por otras plataformas para proporcionar una mejor experiencia a su audiencia. Vea {podcastNamespaceLink} para más información.', 'location_section_title' => 'Ubicación', 'location_section_subtitle' => '¿De qué lugar trata este episodio?', 'location_name' => 'Nombre o dirección de ubicación', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Al eliminar el episodio se borrarán todos los mensajes asociados con él y se eliminarán del feed RSS del podcast.", + "Eliminar el episodio eliminará todos los archivos multimedia, comentarios, video clips y sonidos asociados a él.", 'understand' => 'Entiendo, quiero eliminar el episodio', 'submit' => 'Borrar', ], diff --git a/modules/Admin/Language/es/Person.php b/modules/Admin/Language/es/Person.php index 1d40394d51..15a70f41b0 100644 --- a/modules/Admin/Language/es/Person.php +++ b/modules/Admin/Language/es/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'El avatar debe ser cuadrado con al menos 400px de ancho y alto.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Nombre completo', 'full_name_hint' => 'Este es el nombre completo o el alias de la persona.', 'unique_name' => 'Nombre único', diff --git a/modules/Admin/Language/es/Podcast.php b/modules/Admin/Language/es/Podcast.php index 52a8f07620..db32975d6d 100644 --- a/modules/Admin/Language/es/Podcast.php +++ b/modules/Admin/Language/es/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'El Podcast ha sido creado con éxito!', 'editSuccess' => 'El Podcast se ha actualizado correctamente!', 'importSuccess' => 'El Podcast se ha importado correctamente!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], 'form' => [ 'identity_section_title' => 'Identidad de Podcast', 'identity_section_subtitle' => 'Estos campos le permiten recibir un aviso.', 'cover' => 'Portada de Podcast', - 'cover_size_hint' => 'La portada debe ser cuadrada con al menos 1400px de ancho y alto.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'banner' => 'Cartel del Podcast', - 'banner_size_hint' => 'El cartel debe tener una relación de 3:1 con al menos 1500px.', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Borrar el cartel del podcast', 'title' => 'Título', 'handle' => 'Alias', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'Esto se inyectará dentro de la etiqueta de canal.', 'new_feed_url' => 'Nueva URL de feed', 'new_feed_url_hint' => 'Utilice este campo cuando se mueva a otro dominio o plataforma de alojamiento podcast. De forma predeterminada, el valor se establece en la URL actual de RSS si el podcast es importado.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Asociación', 'partner_id' => 'ID', 'partner_link_url' => 'URL del enlace', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Reseñas de cine', 'tv_reviews' => 'Reseñas de TV', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'Por {publisher}', 'season' => 'Temporada {seasonNumber}', 'list_of_episodes_year' => '{year} episodios ({episodeCount})', @@ -227,12 +256,12 @@ return [ 'no_episode' => '¡No se encontró el episodio!', 'follow' => 'Seguir', 'followers' => '{numberOfFollowers, plural, - one {# seguidor} - other {# seguidores} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# publicación} - other {# publicaciones} + one {# post} + other {# posts} }', 'activity' => 'Actividad', 'episodes' => 'Episodios', diff --git a/modules/Admin/Language/es/PodcastImport.php b/modules/Admin/Language/es/PodcastImport.php index ceefce1b49..9d281ce66b 100644 --- a/modules/Admin/Language/es/PodcastImport.php +++ b/modules/Admin/Language/es/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'Este procedimiento puede llevar mucho tiempo. Como la versión actual no muestra ningún progreso mientras se ejecuta, no verá nada actualizado hasta que termine. En caso de error de tiempo de espera, incrementa el valor `max_execution_time`.', + 'Este procedimiento puede llevar mucho tiempo.<br/>Como la versión actual no muestra ningún progreso mientras se ejecuta, no verá nada actualizado hasta que termine.<br/>En caso de error de tiempo de espera, incrementa el valor `max_execution_time`.', 'old_podcast_section_title' => 'Podcasts para importar', 'old_podcast_section_subtitle' => 'Asegúrese de que tiene los derechos para este podcast antes de importarlo. Copiar y difundir un podcast sin los derechos apropiados es piratería y puede ser procesado.', diff --git a/modules/Admin/Language/es/PodcastNavigation.php b/modules/Admin/Language/es/PodcastNavigation.php index 6e1a409109..df138c532f 100644 --- a/modules/Admin/Language/es/PodcastNavigation.php +++ b/modules/Admin/Language/es/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodios', 'episode-list' => 'Todos los episodios', 'episode-create' => 'Nuevo episodio', + 'episode-deleted' => 'Papelera de reciclaje', 'analytics' => 'Estadísticas', 'podcast-analytics' => 'Vista general del público', 'podcast-analytics-webpages' => 'Visitas a páginas web', diff --git a/modules/Admin/Language/es/Settings.php b/modules/Admin/Language/es/Settings.php index 65fbde062b..9ee6763f9e 100644 --- a/modules/Admin/Language/es/Settings.php +++ b/modules/Admin/Language/es/Settings.php @@ -15,7 +15,7 @@ return [ 'site_icon' => 'Icono del sitio', 'site_icon_delete' => 'Borrar icono del sitio', 'site_icon_hint' => 'Los iconos del sitio son lo que ves en las pestañas del navegador, la barra de marcadores y cuando agregas un sitio web como un acceso directo en los dispositivos móviles.', - 'site_icon_helper' => 'El icono debe ser cuadrado con al menos 512px de ancho y alto.', + 'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Nombre del sitio', 'site_description' => 'Descripción del sitio', 'submit' => 'Guardar', diff --git a/modules/Admin/Language/fa/Admin.php b/modules/Admin/Language/fa/Admin.php new file mode 100644 index 0000000000..5e3942371f --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Breadcrumb.php b/modules/Admin/Language/fa/Breadcrumb.php new file mode 100644 index 0000000000..69915453e3 --- /dev/null +++ b/modules/Admin/Language/fa/Breadcrumb.php @@ -0,0 +1,50 @@ +<?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', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', + '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/fa/Charts.php b/modules/Admin/Language/fa/Charts.php new file mode 100644 index 0000000000..d9a75a1d84 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Common.php b/modules/Admin/Language/fa/Common.php new file mode 100644 index 0000000000..d97bcf991f --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Contributor.php b/modules/Admin/Language/fa/Contributor.php new file mode 100644 index 0000000000..d0f3b93d9f --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Countries.php b/modules/Admin/Language/fa/Countries.php new file mode 100644 index 0000000000..4cd5d9c857 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Episode.php b/modules/Admin/Language/fa/Episode.php new file mode 100644 index 0000000000..e82ff8ca8b --- /dev/null +++ b/modules/Admin/Language/fa/Episode.php @@ -0,0 +1,192 @@ +<?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' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', + '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!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', + ], + '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 and at least 1400px wide and tall.', + 'title' => 'Title', + 'title_hint' => + 'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.', + 'permalink' => 'Permalink', + 'season_number' => 'Season', + 'episode_number' => 'Episode', + 'type' => [ + 'label' => 'Type', + 'full' => 'Full', + 'full_hint' => 'Complete content (the episode)', + 'trailer' => 'Trailer', + 'trailer_hint' => 'Short, promotional piece of content that represents a preview of the current show', + 'bonus' => 'Bonus', + 'bonus_hint' => 'Extra content for the show (for example, behind the scenes info or interviews with the cast) or cross-promotional content for another show', + ], + 'parental_advisory' => [ + 'label' => 'Parental advisory', + 'hint' => 'Does the episode contain explicit content?', + 'undefined' => 'undefined', + 'clean' => 'Clean', + 'explicit' => 'Explicit', + ], + 'show_notes_section_title' => 'Show notes', + 'show_notes_section_subtitle' => + 'Up to 4000 characters, be clear and concise. Show notes help potential listeners in finding the episode.', + 'description' => 'Description', + 'description_footer' => 'Description footer', + 'description_footer_hint' => + 'This text is added at the end of each episode description, it is a good place to input your social links for example.', + 'additional_files_section_title' => 'Additional files', + 'additional_files_section_subtitle' => + 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', + 'location_section_title' => 'Location', + 'location_section_subtitle' => 'What place is this episode about?', + 'location_name' => 'Location name or address', + 'location_name_hint' => 'This can be a real or fictional location', + 'transcript' => 'Transcript (subtitles / closed captions)', + 'transcript_hint' => 'Only .srt are allowed.', + 'transcript_download' => 'Download transcript', + 'transcript_file' => 'Transcript file (.srt)', + 'transcript_remote_url' => 'Remote url for transcript', + 'transcript_file_delete' => 'Delete transcript file', + 'chapters' => 'Chapters', + 'chapters_hint' => 'File must be in JSON Chapters format.', + 'chapters_download' => 'Download chapters', + 'chapters_file' => 'Chapters file', + 'chapters_remote_url' => 'Remote url for chapters file', + 'chapters_file_delete' => 'Delete chapters file', + 'advanced_section_title' => 'Advanced Parameters', + 'advanced_section_subtitle' => + 'If you need RSS tags that Castopod does not handle, set them here.', + 'custom_rss' => 'Custom RSS tags for the episode', + 'custom_rss_hint' => 'This will be injected within the ❬item❭ tag.', + 'block' => 'Episode should be hidden from all platforms', + 'block_hint' => + 'The episode show or hide post. If you want this episode removed from the Apple directory, toggle this on.', + 'submit_create' => 'Create episode', + 'submit_edit' => 'Save episode', + ], + 'publish_form' => [ + 'back_to_episode_dashboard' => 'Back to episode dashboard', + 'post' => 'Your announcement post', + 'post_hint' => + "Write a message to announce the publication of your episode. The message will be broadcasted to all your followers in the fediverse and be featured in your podcast's homepage.", + 'message_placeholder' => 'Write your message…', + 'publication_date' => 'Publication date', + 'publication_method' => [ + 'now' => 'Now', + 'schedule' => 'Schedule', + ], + 'scheduled_publication_date' => 'Scheduled publication date', + 'scheduled_publication_date_clear' => 'Clear publication date', + 'scheduled_publication_date_hint' => + 'You can schedule the episode release by setting a future publication date. This field must be formatted as YYYY-MM-DD HH:mm', + 'submit' => 'Publish', + 'submit_edit' => 'Edit publication', + 'cancel_publication' => 'Cancel publication', + 'message_warning' => 'You did not write a message for your announcement post!', + 'message_warning_hint' => 'Having a message increases social engagement, resulting in a better visibility for your episode.', + 'message_warning_submit' => 'Publish anyways', + ], + 'unpublish_form' => [ + 'disclaimer' => + "Unpublishing the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + 'understand' => 'I understand, I want to unpublish the episode', + 'submit' => 'Unpublish', + ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", + '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/fa/EpisodeNavigation.php b/modules/Admin/Language/fa/EpisodeNavigation.php new file mode 100644 index 0000000000..1406e3010e --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Fediverse.php b/modules/Admin/Language/fa/Fediverse.php new file mode 100644 index 0000000000..0e4ca66d89 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Home.php b/modules/Admin/Language/fa/Home.php new file mode 100644 index 0000000000..3ff4c04dc8 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Install.php b/modules/Admin/Language/fa/Install.php new file mode 100644 index 0000000000..36e373a285 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/MyAccount.php b/modules/Admin/Language/fa/MyAccount.php new file mode 100644 index 0000000000..6ebbb30ef7 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Navigation.php b/modules/Admin/Language/fa/Navigation.php new file mode 100644 index 0000000000..68d4609d5d --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Page.php b/modules/Admin/Language/fa/Page.php new file mode 100644 index 0000000000..b6f49de574 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Pager.php b/modules/Admin/Language/fa/Pager.php new file mode 100644 index 0000000000..e25ee63810 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Person.php b/modules/Admin/Language/fa/Person.php new file mode 100644 index 0000000000..a652be9fda --- /dev/null +++ b/modules/Admin/Language/fa/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 and at least 400px wide and tall.', + 'full_name' => 'Full name', + 'full_name_hint' => 'This is the full name or alias of the person.', + 'unique_name' => 'Unique name', + 'unique_name_hint' => 'Used for URLs', + '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/fa/Platforms.php b/modules/Admin/Language/fa/Platforms.php new file mode 100644 index 0000000000..ab17d5999b --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Podcast.php b/modules/Admin/Language/fa/Podcast.php new file mode 100644 index 0000000000..2561b87667 --- /dev/null +++ b/modules/Admin/Language/fa/Podcast.php @@ -0,0 +1,272 @@ +<?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!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', + ], + 'form' => [ + 'identity_section_title' => 'Podcast identity', + 'identity_section_subtitle' => 'These fields allow you to get noticed.', + 'cover' => 'Podcast cover', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', + 'banner' => 'Podcast banner', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', + 'banner_delete' => 'Delete podcast banner', + 'title' => 'Title', + 'handle' => 'Handle', + '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.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', + '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', + ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], + 'by' => 'By {publisher}', + 'season' => 'Season {seasonNumber}', + 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'list_of_episodes_season' => + 'Season {seasonNumber} episodes ({episodeCount})', + 'no_episode' => 'No episode found!', + 'follow' => 'Follow', + 'followers' => '{numberOfFollowers, plural, + one {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'sponsor' => 'Sponsor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Listen on', +]; diff --git a/modules/Admin/Language/fa/PodcastImport.php b/modules/Admin/Language/fa/PodcastImport.php new file mode 100644 index 0000000000..e9cfc1c4ce --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/PodcastNavigation.php b/modules/Admin/Language/fa/PodcastNavigation.php new file mode 100644 index 0000000000..f9a75b1a9e --- /dev/null +++ b/modules/Admin/Language/fa/PodcastNavigation.php @@ -0,0 +1,36 @@ +<?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', + 'episode-deleted' => 'Recycle bin', + '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/fa/Settings.php b/modules/Admin/Language/fa/Settings.php new file mode 100644 index 0000000000..345976be7f --- /dev/null +++ b/modules/Admin/Language/fa/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 and at least 512px wide and tall.', + 'site_name' => 'Site name', + 'site_description' => 'Site description', + 'submit' => 'Save', + 'editSuccess' => 'Instance has been updated successfully!', + 'deleteIconSuccess' => 'Site icon has been remove successfully!', + ], + '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/fa/Soundbite.php b/modules/Admin/Language/fa/Soundbite.php new file mode 100644 index 0000000000..a3f828fe09 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/User.php b/modules/Admin/Language/fa/User.php new file mode 100644 index 0000000000..8b2e478bf7 --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/Validation.php b/modules/Admin/Language/fa/Validation.php new file mode 100644 index 0000000000..750b19688f --- /dev/null +++ b/modules/Admin/Language/fa/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/fa/VideoClip.php b/modules/Admin/Language/fa/VideoClip.php new file mode 100644 index 0000000000..638de697bb --- /dev/null +++ b/modules/Admin/Language/fa/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/fr/Breadcrumb.php b/modules/Admin/Language/fr/Breadcrumb.php index 814b02c0ed..a1c9f37b72 100644 --- a/modules/Admin/Language/fr/Breadcrumb.php +++ b/modules/Admin/Language/fr/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'modifier la publication', 'unpublish' => 'dépublier', 'delete' => 'supprimer', + 'deleted' => 'supprimés', + 'delete-permanently' => 'supprimer définitivement', 'fediverse' => 'fédiverse', 'block-lists' => 'listes de blocage', 'users' => 'utilisateurs', diff --git a/modules/Admin/Language/fr/Episode.php b/modules/Admin/Language/fr/Episode.php index 4b8d039fd9..aab767533f 100644 --- a/modules/Admin/Language/fr/Episode.php +++ b/modules/Admin/Language/fr/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Non publié', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Épisode', 'visibility' => 'Visibilité', 'comments' => 'Commentaires', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'L’épisode a été créé avec succès !', 'editSuccess' => 'L’épisode a bien été mis à jour !', 'publishCancelSuccess' => 'La publication de l’épisode a bien été annulée !', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ 'cover' => 'Image de couverture', 'cover_hint' => 'Si vous ne définissez pas d’image, celle du podcast sera utilisée à la place.', - 'cover_size_hint' => 'La couverture de l’épisode doit être carrée, avec au minimum 1400px de largeur et de hauteur.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Titre', 'title_hint' => 'Doit contenir un titre d’épisode clair et concis. Ne précisez ici aucun numéro de saison ou d’épisode.', @@ -89,7 +116,7 @@ return [ 'Ce texte est ajouté à la fin de chaque description d’épisode, c’est un bon endroit pour placer vos liens sociaux par exemple.', 'additional_files_section_title' => 'Fichiers additionels', 'additional_files_section_subtitle' => - 'Ces fichiers pourront être utilisées par d’autres plate-formes pour procurer une meilleure expérience à vos auditeurs. Consulter le {podcastNamespaceLink} pour plus d’informations.', + 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', 'location_section_title' => 'Localisation', 'location_section_subtitle' => 'De quel lieu cet épisode parle-t-il ?', 'location_name' => 'Nom ou adresse du lieu', @@ -149,7 +176,7 @@ return [ 'disclaimer' => "Supprimer l’épisode supprimera tous les fichiers multimédia, commentaires, extraits vidéos et extraits sonores qui lui sont associés.", 'understand' => 'Je comprends, je veux supprimer l’épisode', - 'submit' => 'Supprimer', + 'submit' => 'Delete', ], 'embed' => [ 'title' => 'Lecteur intégré', diff --git a/modules/Admin/Language/fr/Person.php b/modules/Admin/Language/fr/Person.php index da49f4eb9d..e5f3128aad 100644 --- a/modules/Admin/Language/fr/Person.php +++ b/modules/Admin/Language/fr/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'L’image doit être carrée et avoir au moins 400px de largeur et de hauteur.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Nom complet', 'full_name_hint' => 'Le nom complet ou le pseudonyme de l’intervenant', 'unique_name' => 'Nom unique', diff --git a/modules/Admin/Language/fr/Podcast.php b/modules/Admin/Language/fr/Podcast.php index db374b4ef3..f923adb0fe 100644 --- a/modules/Admin/Language/fr/Podcast.php +++ b/modules/Admin/Language/fr/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Le podcast a été créé avec succès !', 'editSuccess' => 'Le podcast a bien été mis à jour !', 'importSuccess' => 'Le podcast a été importé avec succès !', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], 'form' => [ 'identity_section_title' => 'Informations sur le Podcast', 'identity_section_subtitle' => 'Ces champs vous permettent de vous faire remarquer.', 'cover' => 'Couverture du podcast', - 'cover_size_hint' => 'La couverture du podcast doit être carrée, avec au minimum 1400px de largeur et de hauteur.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'banner' => 'Bannière du podcast', - 'banner_size_hint' => 'La bannière doit être au format 3/1, avec au minimum 1500px de largeur.', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Supprimer la bannière du podcast', 'title' => 'Titre', 'handle' => 'Identifiant', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'Ceci sera injecté dans la balise ❬channel❭.', 'new_feed_url' => 'URL du nouveau flux', 'new_feed_url_hint' => 'Utilisez ce champ lorsque vous déplacez ce podcast vers un autre domaine ou que vous changez d’hébergeur. Par défaut, ce champ est rempli avec l’URL du flux actuel si le podcast est importé.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partenariat', 'partner_id' => 'ID', 'partner_link_url' => 'URL lien', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Critiques de films', 'tv_reviews' => 'Critiques TV', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'Par {publisher}', 'season' => 'Saison {seasonNumber}', 'list_of_episodes_year' => 'Épisodes de {year} ({episodeCount})', @@ -227,12 +256,12 @@ return [ 'no_episode' => 'Aucun épisode trouvé !', 'follow' => 'Suivre', 'followers' => '{numberOfFollowers, plural, - one {# abonné·e} - other {# abonné·e·s} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# publication} - other {# publications} + one {# post} + other {# posts} }', 'activity' => 'Activité', 'episodes' => 'Épisodes', diff --git a/modules/Admin/Language/fr/PodcastImport.php b/modules/Admin/Language/fr/PodcastImport.php index 45d52548b0..71991c5c02 100644 --- a/modules/Admin/Language/fr/PodcastImport.php +++ b/modules/Admin/Language/fr/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'Cette procédure peut prendre du temps. Dans la mesure où la version actuelle ne montre aucune progression durant l’exécution, vous ne pourrez voir aucun changement avant la fin. En cas d’erreur de timeout, augmentez la valeur de `max_execution_time`.', + 'Cette procédure peut prendre du temps.<br/>Dans la mesure où la version actuelle ne montre aucune progression durant l’exécution, vous ne pourrez voir aucun changement avant la fin.<br/>En cas d’erreur de timeout, augmentez la valeur de `max_execution_time`.', 'old_podcast_section_title' => 'Le podcast à importer', 'old_podcast_section_subtitle' => 'Assurez-vous d’être détenteur des droits du podcast avant de l’importer. Copier et diffuser un podcast sans en détenir les droits est assimilable à de la contrefaçon et est passible de poursuites.', diff --git a/modules/Admin/Language/fr/PodcastNavigation.php b/modules/Admin/Language/fr/PodcastNavigation.php index ddce3a3147..d865d127ae 100644 --- a/modules/Admin/Language/fr/PodcastNavigation.php +++ b/modules/Admin/Language/fr/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Épisodes', 'episode-list' => 'Tous les épisodes', 'episode-create' => 'Créer un épisode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Mesures d’audience', 'podcast-analytics' => 'Vue d’ensemble', 'podcast-analytics-webpages' => 'Visites des pages web', diff --git a/modules/Admin/Language/fr/Settings.php b/modules/Admin/Language/fr/Settings.php index 297c0c570a..d8538c438b 100644 --- a/modules/Admin/Language/fr/Settings.php +++ b/modules/Admin/Language/fr/Settings.php @@ -15,7 +15,7 @@ return [ 'site_icon' => 'Favicon du site', 'site_icon_delete' => 'Supprimer la favicon du site', 'site_icon_hint' => 'Les favicons sont ce que vous voyez sur les onglets de votre navigateur, dans votre barre de favoris, et lorsque vous ajoutez un site web en raccourci sur des appareils mobiles.', - 'site_icon_helper' => 'La favicon doit être carrée, avec au minimum 512px de largeur et de hauteur.', + 'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Titre du site', 'site_description' => 'Description du site', 'submit' => 'Sauvegarder', diff --git a/modules/Admin/Language/gd/Admin.php b/modules/Admin/Language/gd/Admin.php new file mode 100644 index 0000000000..5e3942371f --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Breadcrumb.php b/modules/Admin/Language/gd/Breadcrumb.php new file mode 100644 index 0000000000..69915453e3 --- /dev/null +++ b/modules/Admin/Language/gd/Breadcrumb.php @@ -0,0 +1,50 @@ +<?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', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', + '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/gd/Charts.php b/modules/Admin/Language/gd/Charts.php new file mode 100644 index 0000000000..d9a75a1d84 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Common.php b/modules/Admin/Language/gd/Common.php new file mode 100644 index 0000000000..d97bcf991f --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Contributor.php b/modules/Admin/Language/gd/Contributor.php new file mode 100644 index 0000000000..d0f3b93d9f --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Countries.php b/modules/Admin/Language/gd/Countries.php new file mode 100644 index 0000000000..4cd5d9c857 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Episode.php b/modules/Admin/Language/gd/Episode.php new file mode 100644 index 0000000000..e82ff8ca8b --- /dev/null +++ b/modules/Admin/Language/gd/Episode.php @@ -0,0 +1,192 @@ +<?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' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', + '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!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', + ], + '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 and at least 1400px wide and tall.', + 'title' => 'Title', + 'title_hint' => + 'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.', + 'permalink' => 'Permalink', + 'season_number' => 'Season', + 'episode_number' => 'Episode', + 'type' => [ + 'label' => 'Type', + 'full' => 'Full', + 'full_hint' => 'Complete content (the episode)', + 'trailer' => 'Trailer', + 'trailer_hint' => 'Short, promotional piece of content that represents a preview of the current show', + 'bonus' => 'Bonus', + 'bonus_hint' => 'Extra content for the show (for example, behind the scenes info or interviews with the cast) or cross-promotional content for another show', + ], + 'parental_advisory' => [ + 'label' => 'Parental advisory', + 'hint' => 'Does the episode contain explicit content?', + 'undefined' => 'undefined', + 'clean' => 'Clean', + 'explicit' => 'Explicit', + ], + 'show_notes_section_title' => 'Show notes', + 'show_notes_section_subtitle' => + 'Up to 4000 characters, be clear and concise. Show notes help potential listeners in finding the episode.', + 'description' => 'Description', + 'description_footer' => 'Description footer', + 'description_footer_hint' => + 'This text is added at the end of each episode description, it is a good place to input your social links for example.', + 'additional_files_section_title' => 'Additional files', + 'additional_files_section_subtitle' => + 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', + 'location_section_title' => 'Location', + 'location_section_subtitle' => 'What place is this episode about?', + 'location_name' => 'Location name or address', + 'location_name_hint' => 'This can be a real or fictional location', + 'transcript' => 'Transcript (subtitles / closed captions)', + 'transcript_hint' => 'Only .srt are allowed.', + 'transcript_download' => 'Download transcript', + 'transcript_file' => 'Transcript file (.srt)', + 'transcript_remote_url' => 'Remote url for transcript', + 'transcript_file_delete' => 'Delete transcript file', + 'chapters' => 'Chapters', + 'chapters_hint' => 'File must be in JSON Chapters format.', + 'chapters_download' => 'Download chapters', + 'chapters_file' => 'Chapters file', + 'chapters_remote_url' => 'Remote url for chapters file', + 'chapters_file_delete' => 'Delete chapters file', + 'advanced_section_title' => 'Advanced Parameters', + 'advanced_section_subtitle' => + 'If you need RSS tags that Castopod does not handle, set them here.', + 'custom_rss' => 'Custom RSS tags for the episode', + 'custom_rss_hint' => 'This will be injected within the ❬item❭ tag.', + 'block' => 'Episode should be hidden from all platforms', + 'block_hint' => + 'The episode show or hide post. If you want this episode removed from the Apple directory, toggle this on.', + 'submit_create' => 'Create episode', + 'submit_edit' => 'Save episode', + ], + 'publish_form' => [ + 'back_to_episode_dashboard' => 'Back to episode dashboard', + 'post' => 'Your announcement post', + 'post_hint' => + "Write a message to announce the publication of your episode. The message will be broadcasted to all your followers in the fediverse and be featured in your podcast's homepage.", + 'message_placeholder' => 'Write your message…', + 'publication_date' => 'Publication date', + 'publication_method' => [ + 'now' => 'Now', + 'schedule' => 'Schedule', + ], + 'scheduled_publication_date' => 'Scheduled publication date', + 'scheduled_publication_date_clear' => 'Clear publication date', + 'scheduled_publication_date_hint' => + 'You can schedule the episode release by setting a future publication date. This field must be formatted as YYYY-MM-DD HH:mm', + 'submit' => 'Publish', + 'submit_edit' => 'Edit publication', + 'cancel_publication' => 'Cancel publication', + 'message_warning' => 'You did not write a message for your announcement post!', + 'message_warning_hint' => 'Having a message increases social engagement, resulting in a better visibility for your episode.', + 'message_warning_submit' => 'Publish anyways', + ], + 'unpublish_form' => [ + 'disclaimer' => + "Unpublishing the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + 'understand' => 'I understand, I want to unpublish the episode', + 'submit' => 'Unpublish', + ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", + '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/gd/EpisodeNavigation.php b/modules/Admin/Language/gd/EpisodeNavigation.php new file mode 100644 index 0000000000..1406e3010e --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Fediverse.php b/modules/Admin/Language/gd/Fediverse.php new file mode 100644 index 0000000000..0e4ca66d89 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Home.php b/modules/Admin/Language/gd/Home.php new file mode 100644 index 0000000000..3ff4c04dc8 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Install.php b/modules/Admin/Language/gd/Install.php new file mode 100644 index 0000000000..36e373a285 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/MyAccount.php b/modules/Admin/Language/gd/MyAccount.php new file mode 100644 index 0000000000..6ebbb30ef7 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Navigation.php b/modules/Admin/Language/gd/Navigation.php new file mode 100644 index 0000000000..68d4609d5d --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Page.php b/modules/Admin/Language/gd/Page.php new file mode 100644 index 0000000000..b6f49de574 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Pager.php b/modules/Admin/Language/gd/Pager.php new file mode 100644 index 0000000000..e25ee63810 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Person.php b/modules/Admin/Language/gd/Person.php new file mode 100644 index 0000000000..a652be9fda --- /dev/null +++ b/modules/Admin/Language/gd/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 and at least 400px wide and tall.', + 'full_name' => 'Full name', + 'full_name_hint' => 'This is the full name or alias of the person.', + 'unique_name' => 'Unique name', + 'unique_name_hint' => 'Used for URLs', + '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/gd/Platforms.php b/modules/Admin/Language/gd/Platforms.php new file mode 100644 index 0000000000..ab17d5999b --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Podcast.php b/modules/Admin/Language/gd/Podcast.php new file mode 100644 index 0000000000..2561b87667 --- /dev/null +++ b/modules/Admin/Language/gd/Podcast.php @@ -0,0 +1,272 @@ +<?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!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', + ], + 'form' => [ + 'identity_section_title' => 'Podcast identity', + 'identity_section_subtitle' => 'These fields allow you to get noticed.', + 'cover' => 'Podcast cover', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', + 'banner' => 'Podcast banner', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', + 'banner_delete' => 'Delete podcast banner', + 'title' => 'Title', + 'handle' => 'Handle', + '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.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', + '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', + ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], + 'by' => 'By {publisher}', + 'season' => 'Season {seasonNumber}', + 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'list_of_episodes_season' => + 'Season {seasonNumber} episodes ({episodeCount})', + 'no_episode' => 'No episode found!', + 'follow' => 'Follow', + 'followers' => '{numberOfFollowers, plural, + one {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'sponsor' => 'Sponsor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Listen on', +]; diff --git a/modules/Admin/Language/gd/PodcastImport.php b/modules/Admin/Language/gd/PodcastImport.php new file mode 100644 index 0000000000..e9cfc1c4ce --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/PodcastNavigation.php b/modules/Admin/Language/gd/PodcastNavigation.php new file mode 100644 index 0000000000..f9a75b1a9e --- /dev/null +++ b/modules/Admin/Language/gd/PodcastNavigation.php @@ -0,0 +1,36 @@ +<?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', + 'episode-deleted' => 'Recycle bin', + '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/gd/Settings.php b/modules/Admin/Language/gd/Settings.php new file mode 100644 index 0000000000..345976be7f --- /dev/null +++ b/modules/Admin/Language/gd/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 and at least 512px wide and tall.', + 'site_name' => 'Site name', + 'site_description' => 'Site description', + 'submit' => 'Save', + 'editSuccess' => 'Instance has been updated successfully!', + 'deleteIconSuccess' => 'Site icon has been remove successfully!', + ], + '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/gd/Soundbite.php b/modules/Admin/Language/gd/Soundbite.php new file mode 100644 index 0000000000..a3f828fe09 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/User.php b/modules/Admin/Language/gd/User.php new file mode 100644 index 0000000000..8b2e478bf7 --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/Validation.php b/modules/Admin/Language/gd/Validation.php new file mode 100644 index 0000000000..750b19688f --- /dev/null +++ b/modules/Admin/Language/gd/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/gd/VideoClip.php b/modules/Admin/Language/gd/VideoClip.php new file mode 100644 index 0000000000..638de697bb --- /dev/null +++ b/modules/Admin/Language/gd/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/id/Breadcrumb.php b/modules/Admin/Language/id/Breadcrumb.php index d9400ca786..69915453e3 100644 --- a/modules/Admin/Language/id/Breadcrumb.php +++ b/modules/Admin/Language/id/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'edit publication', 'unpublish' => 'unpublish', 'delete' => 'delete', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'fediverse', 'block-lists' => 'block lists', 'users' => 'users', diff --git a/modules/Admin/Language/id/Episode.php b/modules/Admin/Language/id/Episode.php index 82ed40dc75..e82ff8ca8b 100644 --- a/modules/Admin/Language/id/Episode.php +++ b/modules/Admin/Language/id/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Not published', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episode', 'visibility' => 'Visibility', 'comments' => 'Comments', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Episode has been successfully created!', 'editSuccess' => 'Episode has been successfully updated!', 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ '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.', + 'cover_size_hint' => 'Cover must be squared and 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.', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'I understand, I want to delete the episode', 'submit' => 'Delete', ], diff --git a/modules/Admin/Language/id/Person.php b/modules/Admin/Language/id/Person.php index fa9bba2118..a652be9fda 100644 --- a/modules/Admin/Language/id/Person.php +++ b/modules/Admin/Language/id/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Full name', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/id/Podcast.php b/modules/Admin/Language/id/Podcast.php index 67335c104f..2561b87667 100644 --- a/modules/Admin/Language/id/Podcast.php +++ b/modules/Admin/Language/id/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast has been successfully created!', 'editSuccess' => 'Podcast has been successfully updated!', 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'Title', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/id/PodcastImport.php b/modules/Admin/Language/id/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/id/PodcastImport.php +++ b/modules/Admin/Language/id/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/id/PodcastNavigation.php b/modules/Admin/Language/id/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/id/PodcastNavigation.php +++ b/modules/Admin/Language/id/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/id/Settings.php b/modules/Admin/Language/id/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/id/Settings.php +++ b/modules/Admin/Language/id/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Admin/Language/it/Breadcrumb.php b/modules/Admin/Language/it/Breadcrumb.php index d9400ca786..69915453e3 100644 --- a/modules/Admin/Language/it/Breadcrumb.php +++ b/modules/Admin/Language/it/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'edit publication', 'unpublish' => 'unpublish', 'delete' => 'delete', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'fediverse', 'block-lists' => 'block lists', 'users' => 'users', diff --git a/modules/Admin/Language/it/Episode.php b/modules/Admin/Language/it/Episode.php index 82ed40dc75..e82ff8ca8b 100644 --- a/modules/Admin/Language/it/Episode.php +++ b/modules/Admin/Language/it/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Not published', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episode', 'visibility' => 'Visibility', 'comments' => 'Comments', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Episode has been successfully created!', 'editSuccess' => 'Episode has been successfully updated!', 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ '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.', + 'cover_size_hint' => 'Cover must be squared and 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.', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'I understand, I want to delete the episode', 'submit' => 'Delete', ], diff --git a/modules/Admin/Language/it/Person.php b/modules/Admin/Language/it/Person.php index fa9bba2118..a652be9fda 100644 --- a/modules/Admin/Language/it/Person.php +++ b/modules/Admin/Language/it/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Full name', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/it/Podcast.php b/modules/Admin/Language/it/Podcast.php index 67335c104f..2561b87667 100644 --- a/modules/Admin/Language/it/Podcast.php +++ b/modules/Admin/Language/it/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast has been successfully created!', 'editSuccess' => 'Podcast has been successfully updated!', 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'Title', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/it/PodcastImport.php b/modules/Admin/Language/it/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/it/PodcastImport.php +++ b/modules/Admin/Language/it/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/it/PodcastNavigation.php b/modules/Admin/Language/it/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/it/PodcastNavigation.php +++ b/modules/Admin/Language/it/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/it/Settings.php b/modules/Admin/Language/it/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/it/Settings.php +++ b/modules/Admin/Language/it/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Admin/Language/nl/Breadcrumb.php b/modules/Admin/Language/nl/Breadcrumb.php index ecb81fc78f..edf2a67ef9 100644 --- a/modules/Admin/Language/nl/Breadcrumb.php +++ b/modules/Admin/Language/nl/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'publicatie aanpassen', 'unpublish' => 'publicatie ongedaan maken', 'delete' => 'verwijder', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'fediverse', 'block-lists' => 'blokkeerlijst', 'users' => 'gebruikers', diff --git a/modules/Admin/Language/nl/Episode.php b/modules/Admin/Language/nl/Episode.php index 0fc11e3201..4f8fcf3e66 100644 --- a/modules/Admin/Language/nl/Episode.php +++ b/modules/Admin/Language/nl/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Niet gepubliceerd', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Aflevering', 'visibility' => 'Zichtbaarheid', 'comments' => 'Reacties', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Aflevering is succesvol aangemaakt!', 'editSuccess' => 'Aflevering is succesvol bijgewerkt!', 'publishCancelSuccess' => 'Aflevering publicatie is geannuleerd!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ 'cover' => 'Aflevering omslag', 'cover_hint' => 'Als je geen omslag instelt, zal de podcast omslag worden gebruikt.', - 'cover_size_hint' => 'Omslag moet minstens 1400px breed en hoog zijn.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Titel', 'title_hint' => 'Moet een duidelijke en beknopte afleveringsnaam bevatten. Geef hier geen aflevering of seizoen nummers op.', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'I understand, I want to delete the episode', 'submit' => 'Delete', ], diff --git a/modules/Admin/Language/nl/Person.php b/modules/Admin/Language/nl/Person.php index fa9bba2118..a652be9fda 100644 --- a/modules/Admin/Language/nl/Person.php +++ b/modules/Admin/Language/nl/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Full name', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/nl/Podcast.php b/modules/Admin/Language/nl/Podcast.php index 67335c104f..2561b87667 100644 --- a/modules/Admin/Language/nl/Podcast.php +++ b/modules/Admin/Language/nl/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast has been successfully created!', 'editSuccess' => 'Podcast has been successfully updated!', 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'Title', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/nl/PodcastImport.php b/modules/Admin/Language/nl/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/nl/PodcastImport.php +++ b/modules/Admin/Language/nl/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/nl/PodcastNavigation.php b/modules/Admin/Language/nl/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/nl/PodcastNavigation.php +++ b/modules/Admin/Language/nl/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/nl/Settings.php b/modules/Admin/Language/nl/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/nl/Settings.php +++ b/modules/Admin/Language/nl/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Admin/Language/nn-NO/Breadcrumb.php b/modules/Admin/Language/nn-NO/Breadcrumb.php index c7852453f6..38afbb4183 100644 --- a/modules/Admin/Language/nn-NO/Breadcrumb.php +++ b/modules/Admin/Language/nn-NO/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'rediger publiseringa', 'unpublish' => 'avpubliser', 'delete' => 'slett', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'fødiverset', 'block-lists' => 'blokkeringslister', 'users' => 'brukarar', diff --git a/modules/Admin/Language/nn-NO/Episode.php b/modules/Admin/Language/nn-NO/Episode.php index fa998be714..88257737d7 100644 --- a/modules/Admin/Language/nn-NO/Episode.php +++ b/modules/Admin/Language/nn-NO/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Ikkje lagt ut', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episode', 'visibility' => 'Synlegheit', 'comments' => 'Kommentarar', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Episoden er oppretta!', 'editSuccess' => 'Episoden er oppdatert!', 'publishCancelSuccess' => 'Du har avbrote å leggja ut episoden.', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ '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.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Tittel', 'title_hint' => 'Bør innehalda eit klårt og konsist episodenamn. Ikkje skriv inn nummer på episode eller sesong her.', @@ -89,7 +116,7 @@ return [ 'Denne teksten ligg på slutten av kvar episodeskildring, og er ein god stad å ha lenker til td. sosiale nettverk.', 'additional_files_section_title' => 'Fleire filer', 'additional_files_section_subtitle' => - 'Desse filene kan brukast av andre plattformer for å gje publikum ei betre oppleving. Sjå {podcastNamespaceLink} for meir informasjon.', + 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', 'location_section_title' => 'Stad', 'location_section_subtitle' => 'Kva stad handlar denne episoden om?', 'location_name' => 'Stadnamn eller adresse', @@ -147,9 +174,9 @@ return [ ], '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.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'Eg forstår, eg vil sletta episoden', - 'submit' => 'Slett', + 'submit' => 'Delete', ], 'embed' => [ 'title' => 'Innbyggbar spelar', diff --git a/modules/Admin/Language/nn-NO/Person.php b/modules/Admin/Language/nn-NO/Person.php index c20bfedbf5..3b12626f58 100644 --- a/modules/Admin/Language/nn-NO/Person.php +++ b/modules/Admin/Language/nn-NO/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Profilbilete', 'avatar_size_hint' => - 'Profilbiletet må vera minst 400pkt breitt og høgt.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Fullt namn', 'full_name_hint' => 'Dette er det fulle namnet eller aliaset til personen.', 'unique_name' => 'Unikt namn', diff --git a/modules/Admin/Language/nn-NO/Podcast.php b/modules/Admin/Language/nn-NO/Podcast.php index 236ad1ab3a..2df0c19c39 100644 --- a/modules/Admin/Language/nn-NO/Podcast.php +++ b/modules/Admin/Language/nn-NO/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podkasten er oppretta!', 'editSuccess' => 'Podkasten er oppdatert!', 'importSuccess' => 'Podkasten er importert!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'banner' => 'Podkastbanner', - 'banner_size_hint' => 'Banneret må ha 3:1-forhold og vera minst 1500pkt breitt.', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Slett podkastbanneret', 'title' => 'Tittel', 'handle' => 'Handtak', @@ -90,6 +110,9 @@ return [ '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.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnarskap', 'partner_id' => 'ID', 'partner_link_url' => 'Lenke-URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Filmmeldingar', 'tv_reviews' => 'TV-meldingar', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'Av {publisher}', 'season' => 'Sesong {seasonNumber}', 'list_of_episodes_year' => '{year}-episodar ({episodeCount})', @@ -227,12 +256,12 @@ return [ 'no_episode' => 'Fann ingen episode!', 'follow' => 'Fylg', 'followers' => '{numberOfFollowers, plural, - one {# fylgjar} - other {# fylgjarar} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# innlegg} - other {# innlegg} + one {# post} + other {# posts} }', 'activity' => 'Aktivitet', 'episodes' => 'Episodar', diff --git a/modules/Admin/Language/nn-NO/PodcastImport.php b/modules/Admin/Language/nn-NO/PodcastImport.php index 9a27842a45..9fb36b11c2 100644 --- a/modules/Admin/Language/nn-NO/PodcastImport.php +++ b/modules/Admin/Language/nn-NO/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'Dette kan ta lang tid. Denne versjonen syner ikkje framgangen medan importen går, så du vil ikkje sjå noko før han er ferdig. Viss du får feil med tidsavbrot, aukar du `max_execution_time`-verdien.', + '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.', diff --git a/modules/Admin/Language/nn-NO/PodcastNavigation.php b/modules/Admin/Language/nn-NO/PodcastNavigation.php index cf628d0ea2..29d612f566 100644 --- a/modules/Admin/Language/nn-NO/PodcastNavigation.php +++ b/modules/Admin/Language/nn-NO/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodar', 'episode-list' => 'Alle episodane', 'episode-create' => 'Ny episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analysar', 'podcast-analytics' => 'Oversikt over publikum', 'podcast-analytics-webpages' => 'Nettsidevisingar', diff --git a/modules/Admin/Language/nn-NO/Settings.php b/modules/Admin/Language/nn-NO/Settings.php index 2d100161d0..2ef7b6c92a 100644 --- a/modules/Admin/Language/nn-NO/Settings.php +++ b/modules/Admin/Language/nn-NO/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Nettstadnamn', 'site_description' => 'Skildring av nettstaden', 'submit' => 'Lagre', diff --git a/modules/Admin/Language/oc/Breadcrumb.php b/modules/Admin/Language/oc/Breadcrumb.php index d9400ca786..69915453e3 100644 --- a/modules/Admin/Language/oc/Breadcrumb.php +++ b/modules/Admin/Language/oc/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'edit publication', 'unpublish' => 'unpublish', 'delete' => 'delete', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'fediverse', 'block-lists' => 'block lists', 'users' => 'users', diff --git a/modules/Admin/Language/oc/Episode.php b/modules/Admin/Language/oc/Episode.php index 82ed40dc75..e82ff8ca8b 100644 --- a/modules/Admin/Language/oc/Episode.php +++ b/modules/Admin/Language/oc/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Not published', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episode', 'visibility' => 'Visibility', 'comments' => 'Comments', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Episode has been successfully created!', 'editSuccess' => 'Episode has been successfully updated!', 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ '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.', + 'cover_size_hint' => 'Cover must be squared and 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.', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'I understand, I want to delete the episode', 'submit' => 'Delete', ], diff --git a/modules/Admin/Language/oc/Person.php b/modules/Admin/Language/oc/Person.php index fa9bba2118..a652be9fda 100644 --- a/modules/Admin/Language/oc/Person.php +++ b/modules/Admin/Language/oc/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Full name', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/oc/Podcast.php b/modules/Admin/Language/oc/Podcast.php index 67335c104f..2561b87667 100644 --- a/modules/Admin/Language/oc/Podcast.php +++ b/modules/Admin/Language/oc/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast has been successfully created!', 'editSuccess' => 'Podcast has been successfully updated!', 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'Title', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/oc/PodcastImport.php b/modules/Admin/Language/oc/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/oc/PodcastImport.php +++ b/modules/Admin/Language/oc/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/oc/PodcastNavigation.php b/modules/Admin/Language/oc/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/oc/PodcastNavigation.php +++ b/modules/Admin/Language/oc/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/oc/Settings.php b/modules/Admin/Language/oc/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/oc/Settings.php +++ b/modules/Admin/Language/oc/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Admin/Language/pl/Breadcrumb.php b/modules/Admin/Language/pl/Breadcrumb.php index 6ad15119c9..f7ced27709 100644 --- a/modules/Admin/Language/pl/Breadcrumb.php +++ b/modules/Admin/Language/pl/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'edytuj publikację', 'unpublish' => 'cofnij publikację', 'delete' => 'usuń', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'fediverse', 'block-lists' => 'listy blokowanych', 'users' => 'użytkownicy', diff --git a/modules/Admin/Language/pl/Episode.php b/modules/Admin/Language/pl/Episode.php index c69567219b..5cb039d900 100644 --- a/modules/Admin/Language/pl/Episode.php +++ b/modules/Admin/Language/pl/Episode.php @@ -39,6 +39,15 @@ return [ 'not_published' => 'Nieopublikowany', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Odcinek', 'visibility' => 'Widoczność', 'comments' => 'Komentarze', @@ -48,6 +57,24 @@ return [ 'createSuccess' => 'Odcinek został pomyślnie utworzony!', 'editSuccess' => 'Odcinek został pomyślnie zaktualizowany!', 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -58,7 +85,7 @@ return [ 'cover' => 'Okładka odcinka', 'cover_hint' => 'Jeśli nie ustawisz okładki, zamiast niej zostanie użyta okładka podcastu.', - 'cover_size_hint' => 'Okładka musi być kwadratowa o szerokości i wysokości co najmniej 1400 pikseli.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Tytuł', 'title_hint' => 'Powinien zawierać jasną i zwięzłą nazwę odcinka. Nie podawaj tutaj numerów odcinków ani sezonów.', @@ -90,7 +117,7 @@ return [ 'Ten tekst jest dodawany na końcu każdego opisu odcinka; jest to dobre miejsce do wpisania np. linków społecznościowych.', 'additional_files_section_title' => 'Dodatkowe pliki', 'additional_files_section_subtitle' => - 'Pliki te mogą być używane przez inne platformy, aby zapewnić lepsze wrażenia odbiorcom. Więcej informacji znajdziesz w {podcastNamespaceLink}.', + 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', 'location_section_title' => 'Lokalizacja', 'location_section_subtitle' => 'O jakim miejscu jest ten odcinek?', 'location_name' => 'Nazwa lub adres lokalizacji', @@ -148,9 +175,9 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Usunięcie odcinka spowoduje usunięcie wszystkich powiązanych z nim wpisów i usunięcie go z kanału RSS podcastu.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'Rozumiem, chcę usunąć odcinek', - 'submit' => 'Usuń', + 'submit' => 'Delete', ], 'embed' => [ 'title' => 'Odtwarzacz osadzalny', diff --git a/modules/Admin/Language/pl/Person.php b/modules/Admin/Language/pl/Person.php index b1143eb70b..baf670946b 100644 --- a/modules/Admin/Language/pl/Person.php +++ b/modules/Admin/Language/pl/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Awatar', 'avatar_size_hint' => - 'Awatar musi być kwadratowy o szerokości i wysokości co najmniej 400 pikseli.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Pełne imię i nazwisko', 'full_name_hint' => 'To jest pełne imię i nazwisko lub pseudonim osoby.', 'unique_name' => 'Unikalna nazwa', diff --git a/modules/Admin/Language/pl/Podcast.php b/modules/Admin/Language/pl/Podcast.php index 88b05f4290..2902375fdc 100644 --- a/modules/Admin/Language/pl/Podcast.php +++ b/modules/Admin/Language/pl/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast został pomyślnie utworzony!', 'editSuccess' => 'Podcast został pomyślnie zaktualizowany!', 'importSuccess' => 'Podcast został pomyślnie zaimportowany!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], 'form' => [ 'identity_section_title' => 'Tożsamość podcastu', 'identity_section_subtitle' => 'Te pola pozwalają Ci zostać zauważonym.', 'cover' => 'Okładka podcastu', - 'cover_size_hint' => 'Okładka musi być kwadratowa o szerokości i wysokości co najmniej 1400 pikseli.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'banner' => 'Baner podcastu', - 'banner_size_hint' => 'Baner musi mieć proporcje 3:1 i co najmniej 1500 pikseli szerokości.', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Usuń baner podcastu', 'title' => 'Tytuł', 'handle' => 'Uchwyt', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'Zostaną wstawione w tagu ❬channel❭.', 'new_feed_url' => 'Nowy adres URL kanału', 'new_feed_url_hint' => 'Użyj tego pola, gdy przenosisz się do innej domeny lub platformy hostingowej podcastu. Domyślnie wartość jest ustawiona na bieżący adres URL RSS, jeśli podcast jest importowany.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnerstwo', 'partner_id' => 'ID', 'partner_link_url' => 'Adres URL linku', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Recenzje filmów', 'tv_reviews' => 'Recenzje telewizyjne', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'Przez {publisher}', 'season' => 'Sezon {seasonNumber}', 'list_of_episodes_year' => '{year} odcinki ({episodeCount})', @@ -227,13 +256,12 @@ return [ 'no_episode' => 'Nie znaleziono odcinków!', 'follow' => 'Obserwuj', 'followers' => '{numberOfFollowers, plural, - one {# obserwujący} - other {# obserwujących} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# wpis} - few {# wpisy} - other {# wpisów} + one {# post} + other {# posts} }', 'activity' => 'Aktywność', 'episodes' => 'Odcinki', diff --git a/modules/Admin/Language/pl/PodcastImport.php b/modules/Admin/Language/pl/PodcastImport.php index eeceb4fd16..468d844760 100644 --- a/modules/Admin/Language/pl/PodcastImport.php +++ b/modules/Admin/Language/pl/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'Ta procedura może zająć dużo czasu. Ponieważ bieżąca wersja nie pokazuje żadnego postępu podczas działania, nie zobaczysz żadnych aktualizacji dopóki nie zostanie wykonana. W przypadku błędu przekroczenia limitu czasu, zwiększ wartość `max_execution_time`.', + 'Ta procedura może zająć dużo czasu.<br/>Ponieważ bieżąca wersja nie pokazuje żadnego postępu podczas działania, nie zobaczysz żadnych aktualizacji dopóki nie zostanie wykonana.<br/>W przypadku błędu przekroczenia limitu czasu, zwiększ wartość `max_execution_time`.', 'old_podcast_section_title' => 'Podcast do zaimportowania', 'old_podcast_section_subtitle' => 'Upewnij się, że masz prawa do tego podcastu zanim go zaimportujesz. Kopiowanie i nadawanie podcastu bez odpowiednich praw jest piractwem i podlega ściganiu.', diff --git a/modules/Admin/Language/pl/PodcastNavigation.php b/modules/Admin/Language/pl/PodcastNavigation.php index 38b73ffbe1..d643e2c3d4 100644 --- a/modules/Admin/Language/pl/PodcastNavigation.php +++ b/modules/Admin/Language/pl/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Odcinki', 'episode-list' => 'Wszystkie odcinki', 'episode-create' => 'Nowy odcinek', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analityka', 'podcast-analytics' => 'Przegląd odbiorców', 'podcast-analytics-webpages' => 'Odwiedziny stron internetowych', diff --git a/modules/Admin/Language/pl/Settings.php b/modules/Admin/Language/pl/Settings.php index 1abb1409c5..308012aea7 100644 --- a/modules/Admin/Language/pl/Settings.php +++ b/modules/Admin/Language/pl/Settings.php @@ -15,7 +15,7 @@ return [ 'site_icon' => 'Ikona witryny', 'site_icon_delete' => 'Usuń ikonę witryny', 'site_icon_hint' => 'Ikony witryny są widoczne na kartach przeglądarki, paskach zakładek oraz po dodaniu witryny jako skrótu na urządzeniach mobilnych.', - 'site_icon_helper' => 'Ikona musi być kwadratowa o szerokości i wysokości co najmniej 512 pikseli.', + 'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Nazwa strony', 'site_description' => 'Opis strony', 'submit' => 'Zapisz', diff --git a/modules/Admin/Language/pt-BR/Breadcrumb.php b/modules/Admin/Language/pt-BR/Breadcrumb.php index ea0d019c40..e84748324b 100644 --- a/modules/Admin/Language/pt-BR/Breadcrumb.php +++ b/modules/Admin/Language/pt-BR/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'editar publicação', 'unpublish' => 'despublicar', 'delete' => 'excluir', + 'deleted' => 'excluído', + 'delete-permanently' => 'excluir permanentemente', 'fediverse' => 'fediverso', 'block-lists' => 'listas de bloqueio', 'users' => 'usuários', diff --git a/modules/Admin/Language/pt-BR/Episode.php b/modules/Admin/Language/pt-BR/Episode.php index d02778a26c..2c320e0740 100644 --- a/modules/Admin/Language/pt-BR/Episode.php +++ b/modules/Admin/Language/pt-BR/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Não publicado', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episódio', 'visibility' => 'Visibilidade', 'comments' => 'Comentários', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Episódio foi criado com sucesso!', 'editSuccess' => 'Episódio foi atualizado com sucesso!', 'publishCancelSuccess' => 'Publicação do episódio cancelada!', + 'unpublishBeforeDeleteTip' => 'Você deve despublicar o episódio antes de excluí-lo.', + 'deletePublishedEpisodeError' => 'Por favor, despublique o episódio antes de excluí-lo.', + 'deleteSuccess' => 'Episódio excluído com sucesso!', + 'deleteError' => 'Falha ao excluir o episódio {type, select, + transcript {transcrição} + chapters {capítulos} + image {cupa} + audio {áudio} + other {mídia} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'Um episódio com o slug escolhido já existe.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ 'cover' => 'Capa de episódio', 'cover_hint' => 'Se você não definir uma capa, a capa do podcast será usada no lugar.', - 'cover_size_hint' => 'Capa deve ser quadrada com pelo menos 1400px de largura e altura.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'title' => 'Título', 'title_hint' => 'Deve conter um nome de episódio claro e conciso. Não especifique o número de episódio ou de temporada aqui.', @@ -89,7 +116,7 @@ return [ 'Este texto é adicionado no final de cada descrição de episódio, é um bom lugar para inserir seus links sociais por exemplo.', 'additional_files_section_title' => 'Arquivos adicionais', 'additional_files_section_subtitle' => - 'Estes arquivos podem ser usados por outras plataformas para fornecer uma melhor experiência ao seu público. Veja {podcastNamespaceLink} para mais informações.', + 'Estes arquivos podem ser usados por outras plataformas para fornecer uma melhor experiência ao seu público. Veja o {podcastNamespaceLink} para mais informações.', 'location_section_title' => 'Localização', 'location_section_subtitle' => 'Sobre que lugar é este episódio?', 'location_name' => 'Nome ou endereço da localização', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Excluir o episódio vai deletar todas as publicações associadas a ele e removê-lo do feed RSS do podcast.", + "Excluir o episódio irá excluir todos os arquivos de mídia, comentários, clipes de vídeo e clipes de áudio associados a ele.", 'understand' => 'Eu entendo, eu quero excluir o episódio', 'submit' => 'Excluir', ], diff --git a/modules/Admin/Language/pt-BR/Person.php b/modules/Admin/Language/pt-BR/Person.php index 74d38de957..fc48401d29 100644 --- a/modules/Admin/Language/pt-BR/Person.php +++ b/modules/Admin/Language/pt-BR/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar deve ser quadrado com pelo menos 400px de largura e altura.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Nome completo', 'full_name_hint' => 'Este é o nome completo ou apelido da pessoa.', 'unique_name' => 'Nome único', diff --git a/modules/Admin/Language/pt-BR/Podcast.php b/modules/Admin/Language/pt-BR/Podcast.php index 99e5f98c49..e14ebf764d 100644 --- a/modules/Admin/Language/pt-BR/Podcast.php +++ b/modules/Admin/Language/pt-BR/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast foi criado com sucesso!', 'editSuccess' => 'Podcast foi atualizado com sucesso!', 'importSuccess' => 'Podcast foi importado com sucesso!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], 'form' => [ 'identity_section_title' => 'Identidade do podcast', 'identity_section_subtitle' => 'Esses campos permitem que você seja notado.', 'cover' => 'Capa do podcast', - 'cover_size_hint' => 'Capa deve ser quadrada com pelo menos 1400px de largura e altura.', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', 'banner' => 'Banner do podcast', - 'banner_size_hint' => 'Banner deve ter uma proporção 3:1 com ao menos 1500px de largura.', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Excluir banner do podcast', 'title' => 'Título', 'handle' => 'Identificador', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'Isto será injetado dentro da tag ❬channel❭.', 'new_feed_url' => 'Nova URL de feed', 'new_feed_url_hint' => 'Use este campo ao mover este podcast para outro domínio ou alterar hosts. Por padrão, este campo é preenchido com a URL do feed RSS atual se o podcast for importado.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Parceria', 'partner_id' => 'ID', 'partner_link_url' => 'URL do link', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Avaliações de Filmes', 'tv_reviews' => 'Avaliações de TV', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'Por {publisher}', 'season' => 'Temporada {seasonNumber}', 'list_of_episodes_year' => 'Episódios de {year} ({episodeCount})', @@ -227,16 +256,16 @@ return [ 'no_episode' => 'Nenhum episódio encontrado!', 'follow' => 'Seguir', 'followers' => '{numberOfFollowers, plural, - one {# seguidor} - other {# seguidores} + one {# follower} + other {# followers} }', 'posts' => '{numberOfPosts, plural, - one {# publicação} - other {# publicações} + one {# post} + other {# posts} }', 'activity' => 'Atividade', 'episodes' => 'Episódios', - 'sponsor' => 'Patrocinador', + 'sponsor' => 'Apoiar', 'funding_links' => 'Links de financiamento para {podcastTitle}', 'find_on' => 'Encontrar {podcastTitle} em', 'listen_on' => 'Ouvir em', diff --git a/modules/Admin/Language/pt-BR/PodcastImport.php b/modules/Admin/Language/pt-BR/PodcastImport.php index f1d59e2b7a..a4aceeaa3e 100644 --- a/modules/Admin/Language/pt-BR/PodcastImport.php +++ b/modules/Admin/Language/pt-BR/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'Este procedimento pode levar muito tempo. Como a versão atual não mostra nenhum progresso enquanto é executada, você não verá nada atualizado até que seja finalizado. Em caso de erro de tempo limite, aumente o valor de `max_execution_time`.', + 'Este procedimento pode levar muito tempo.<br/>Como a versão atual não mostra nenhum progresso enquanto é executada, você não verá nada atualizado até que seja finalizado.<br/>Em caso de erro de tempo limite, aumente o valor de `max_execution_time`.', 'old_podcast_section_title' => 'O podcast para importar', 'old_podcast_section_subtitle' => 'Certifique-se de possuir os direitos para esse podcast antes de importá-lo. Copiar e transmitir um podcast sem os direitos adequados é uma pirataria e corre o risco de ser processado.', diff --git a/modules/Admin/Language/pt-BR/PodcastNavigation.php b/modules/Admin/Language/pt-BR/PodcastNavigation.php index 2214743c57..382033fc63 100644 --- a/modules/Admin/Language/pt-BR/PodcastNavigation.php +++ b/modules/Admin/Language/pt-BR/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episódios', 'episode-list' => 'Todos os episódios', 'episode-create' => 'Novo episódio', + 'episode-deleted' => 'Lixeira', 'analytics' => 'Estatísticas', 'podcast-analytics' => 'Visão geral da audiência', 'podcast-analytics-webpages' => 'Visitas às páginas web', diff --git a/modules/Admin/Language/pt-BR/Settings.php b/modules/Admin/Language/pt-BR/Settings.php index 605bbbe33b..d4f4f0274d 100644 --- a/modules/Admin/Language/pt-BR/Settings.php +++ b/modules/Admin/Language/pt-BR/Settings.php @@ -15,7 +15,7 @@ return [ 'site_icon' => 'Ícone do site', 'site_icon_delete' => 'Excluir ícone do site', 'site_icon_hint' => 'Ícones de sites são o que você vê nas abas do seu navegador, barra de favoritos e quando você adiciona um site como um atalho em dispositivos móveis.', - 'site_icon_helper' => 'O ícone deve ser quadrado com pelo menos 512px de largura e altura.', + 'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Nome do site', 'site_description' => 'Descrição do site', 'submit' => 'Salvar', diff --git a/modules/Admin/Language/pt/Breadcrumb.php b/modules/Admin/Language/pt/Breadcrumb.php index d9400ca786..69915453e3 100644 --- a/modules/Admin/Language/pt/Breadcrumb.php +++ b/modules/Admin/Language/pt/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'edit publication', 'unpublish' => 'unpublish', 'delete' => 'delete', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'fediverse', 'block-lists' => 'block lists', 'users' => 'users', diff --git a/modules/Admin/Language/pt/Episode.php b/modules/Admin/Language/pt/Episode.php index 82ed40dc75..e82ff8ca8b 100644 --- a/modules/Admin/Language/pt/Episode.php +++ b/modules/Admin/Language/pt/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Not published', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episode', 'visibility' => 'Visibility', 'comments' => 'Comments', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Episode has been successfully created!', 'editSuccess' => 'Episode has been successfully updated!', 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ '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.', + 'cover_size_hint' => 'Cover must be squared and 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.', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'I understand, I want to delete the episode', 'submit' => 'Delete', ], diff --git a/modules/Admin/Language/pt/Person.php b/modules/Admin/Language/pt/Person.php index fa9bba2118..a652be9fda 100644 --- a/modules/Admin/Language/pt/Person.php +++ b/modules/Admin/Language/pt/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Full name', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/pt/Podcast.php b/modules/Admin/Language/pt/Podcast.php index 67335c104f..2561b87667 100644 --- a/modules/Admin/Language/pt/Podcast.php +++ b/modules/Admin/Language/pt/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast has been successfully created!', 'editSuccess' => 'Podcast has been successfully updated!', 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'Title', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/pt/PodcastImport.php b/modules/Admin/Language/pt/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/pt/PodcastImport.php +++ b/modules/Admin/Language/pt/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/pt/PodcastNavigation.php b/modules/Admin/Language/pt/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/pt/PodcastNavigation.php +++ b/modules/Admin/Language/pt/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/pt/Settings.php b/modules/Admin/Language/pt/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/pt/Settings.php +++ b/modules/Admin/Language/pt/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Admin/Language/ru/Breadcrumb.php b/modules/Admin/Language/ru/Breadcrumb.php index 8f4438fff8..93dd4625b1 100644 --- a/modules/Admin/Language/ru/Breadcrumb.php +++ b/modules/Admin/Language/ru/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'редактировать публикацию', 'unpublish' => 'снять с публикации', 'delete' => 'удалить', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'Федивёрс', 'block-lists' => 'список блокируемых', 'users' => 'пользователи', diff --git a/modules/Admin/Language/ru/Episode.php b/modules/Admin/Language/ru/Episode.php index 82ed40dc75..e82ff8ca8b 100644 --- a/modules/Admin/Language/ru/Episode.php +++ b/modules/Admin/Language/ru/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Not published', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episode', 'visibility' => 'Visibility', 'comments' => 'Comments', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Episode has been successfully created!', 'editSuccess' => 'Episode has been successfully updated!', 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ '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.', + 'cover_size_hint' => 'Cover must be squared and 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.', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'I understand, I want to delete the episode', 'submit' => 'Delete', ], diff --git a/modules/Admin/Language/ru/Person.php b/modules/Admin/Language/ru/Person.php index fa9bba2118..a652be9fda 100644 --- a/modules/Admin/Language/ru/Person.php +++ b/modules/Admin/Language/ru/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Full name', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/ru/Podcast.php b/modules/Admin/Language/ru/Podcast.php index 67335c104f..2561b87667 100644 --- a/modules/Admin/Language/ru/Podcast.php +++ b/modules/Admin/Language/ru/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast has been successfully created!', 'editSuccess' => 'Podcast has been successfully updated!', 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'Title', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/ru/PodcastImport.php b/modules/Admin/Language/ru/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/ru/PodcastImport.php +++ b/modules/Admin/Language/ru/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/ru/PodcastNavigation.php b/modules/Admin/Language/ru/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/ru/PodcastNavigation.php +++ b/modules/Admin/Language/ru/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/ru/Settings.php b/modules/Admin/Language/ru/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/ru/Settings.php +++ b/modules/Admin/Language/ru/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Admin/Language/sk/Admin.php b/modules/Admin/Language/sk/Admin.php new file mode 100644 index 0000000000..5e3942371f --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Breadcrumb.php b/modules/Admin/Language/sk/Breadcrumb.php new file mode 100644 index 0000000000..b6868c5c20 --- /dev/null +++ b/modules/Admin/Language/sk/Breadcrumb.php @@ -0,0 +1,50 @@ +<?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' => 'pridať', + 'new' => 'new', + 'edit' => 'upraviť', + 'persons' => 'persons', + 'publish' => 'zverejniť', + 'publish-edit' => 'upraviť zverejnené', + 'unpublish' => 'unpublish', + 'delete' => 'vymazať', + 'deleted' => 'vymazané', + 'delete-permanently' => 'delete permanently', + '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/sk/Charts.php b/modules/Admin/Language/sk/Charts.php new file mode 100644 index 0000000000..d9a75a1d84 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Common.php b/modules/Admin/Language/sk/Common.php new file mode 100644 index 0000000000..73e4cd69fe --- /dev/null +++ b/modules/Admin/Language/sk/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' => 'Zavrieť', + 'edit' => 'Upraviť', + 'copy' => 'Copy', + 'copied' => 'Copied!', + 'home' => 'Domov', + 'explicit' => 'Chúlostivé', + 'powered_by' => 'Poháňané cez {castopod}', + 'actions' => 'Actions', + 'pageInfo' => 'Page {currentPage} out of {pageCount}', + 'go_back' => 'Ísť späť', + 'forms' => [ + 'editor' => [ + 'write' => 'Písať', + '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' => 'Nahrať súbor', + 'remote_url' => 'Remote URL', + ], + 'play_episode_button' => [ + 'play' => 'Prehrať', + 'playing' => 'Prehrávané', + ], + 'size_limit' => 'Size limit: {0}.', +]; diff --git a/modules/Admin/Language/sk/Contributor.php b/modules/Admin/Language/sk/Contributor.php new file mode 100644 index 0000000000..94072a9391 --- /dev/null +++ b/modules/Admin/Language/sk/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' => 'Pridať prispievateľa', + 'add_contributor' => 'Pridať prispievateľa pre {0}', + 'edit_role' => 'Upraviť rolu pre {0}', + 'edit' => 'Upraviť', + 'remove' => 'Odstrániť', + 'list' => [ + 'username' => 'Užívateľské meno', + 'role' => 'Rola', + ], + 'form' => [ + 'user' => 'Užívateľ', + 'user_placeholder' => 'Vybrať užívateľa…', + 'role' => 'Rola', + 'role_placeholder' => 'Vybrať jeho úlohu…', + 'submit_add' => 'Pridať prispievateľa', + '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/sk/Countries.php b/modules/Admin/Language/sk/Countries.php new file mode 100644 index 0000000000..3febee2613 --- /dev/null +++ b/modules/Admin/Language/sk/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' => 'Spojené Arabské Emiráty', + 'AF' => 'Afghanistan', + 'AG' => 'Antigua and Barbuda', + 'AI' => 'Anguilla', + 'AL' => 'Albánsko', + 'AM' => 'Arménsko', + 'AO' => 'Angola', + 'AQ' => 'Antarktída', + 'AR' => 'Argentína', + 'AS' => 'Americká Samoa', + 'AT' => 'Rakúsko', + 'AU' => 'Austrália', + 'AW' => 'Aruba', + 'AX' => 'Åland Islands', + 'AZ' => 'Azerbaijan', + 'BA' => 'Bosna a Hercegovina', + 'BB' => 'Barbados', + 'BD' => 'Bangladéš', + 'BE' => 'Belgicko', + 'BF' => 'Burkina Faso', + 'BG' => 'Bulharsko', + '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' => 'Vianočný Ostrov', + 'CY' => 'Cyprus', + 'CZ' => 'Česká republika', + 'DE' => 'Nemecko', + 'DJ' => 'Djibouti', + 'DK' => 'Dánsko', + 'DM' => 'Dominica', + 'DO' => 'Dominikánska republika', + 'DZ' => 'Alžírsko', + 'EC' => 'Ekvádor', + 'EE' => 'Estónsko', + 'EG' => 'Egypt', + 'EH' => 'Western Sahara', + 'ER' => 'Eritrea', + 'ES' => 'Španielsko', + 'ET' => 'Etiópia', + 'FI' => 'Fínsko', + 'FJ' => 'Fiji', + 'FK' => 'Falklandské ostrovy (Malvíny)', + 'FM' => 'Micronesia, Federated States of', + 'FO' => 'Faroe Islands', + 'FR' => 'Francúzsko', + 'GA' => 'Gabon', + 'GB' => 'United Kingdom', + 'GD' => 'Grenada', + 'GE' => 'Georgia', + 'GF' => 'French Guiana', + 'GG' => 'Guernsey', + 'GH' => 'Ghana', + 'GI' => 'Gibraltar', + 'GL' => 'Grónsko', + 'GM' => 'Gambia', + 'GN' => 'Guinea', + 'GP' => 'Guadeloupe', + 'GQ' => 'Equatorial Guinea', + 'GR' => 'Grécko', + 'GS' => 'Južná Georgia a Južné Sandwichove ostrovy', + 'GT' => 'Guatemala', + 'GU' => 'Guam', + 'GW' => 'Guinea-Bissau', + 'GY' => 'Guyana', + 'HK' => 'Hong Kong', + 'HM' => 'Teritórium Heardovho ostrova a Macdonaldových ostrovov', + 'HN' => 'Honduras', + 'HR' => 'Chorvátsko', + 'HT' => 'Haiti', + 'HU' => 'Maďarsko', + 'ID' => 'Indonézia', + 'IE' => 'Írsko', + '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' => 'Libanon', + 'LC' => 'Svätá Lucia', + 'LI' => 'Lichtenštajnsko', + 'LK' => 'Sri Lanka', + 'LR' => 'Libéria', + 'LS' => 'Lesotho', + 'LT' => 'Litva', + 'LU' => 'Luxembursko', + 'LV' => 'Lotyšsko', + 'LY' => 'Líbia', + 'MA' => 'Maroko', + 'MC' => 'Monako', + 'MD' => 'Moldavská Republika', + 'ME' => 'Čierna Hora', + 'MF' => 'Saint Martin (French part)', + 'MG' => 'Madagaskar', + 'MH' => 'Marshall Islands', + 'MK' => 'Macedónsko-Bývalá Juhoslovanská Republika', + 'ML' => 'Mali', + 'MM' => 'Mjanmarsko', + 'MN' => 'Mongolsko', + 'MO' => 'Macao', + 'MP' => 'Northern Mariana Islands', + 'MQ' => 'Martinique', + 'MR' => 'Mauritania', + 'MS' => 'Montserrat', + 'MT' => 'Malta', + 'MU' => 'Mauritius', + 'MV' => 'Maldives', + 'MW' => 'Malawi', + 'MX' => 'Mexiko', + 'MY' => 'Malajzia', + 'MZ' => 'Mozambique', + 'N/A' => 'Not Applicable (local IP…)', + 'NA' => 'Namibia', + 'NC' => 'New Caledonia', + 'NE' => 'Niger', + 'NF' => 'Norfolk Island', + 'NG' => 'Nigéria', + 'NI' => 'Nikaragua', + 'NL' => 'Holandsko', + 'NO' => 'Nórsko', + 'NP' => 'Nepál', + 'NR' => 'Nauru', + 'NU' => 'Niue', + 'NZ' => 'Nový Zéland', + 'OM' => 'Omán', + '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' => 'Slovinsko', + 'SJ' => 'Svalbard and Jan Mayen', + 'SK' => 'Slovensko', + 'SL' => 'Sierra Leone', + 'SM' => 'San Marino', + 'SN' => 'Senegal', + 'SO' => 'Somálsko', + 'SR' => 'Suriname', + 'SS' => 'Južný Sudán', + 'ST' => 'Sao Tome and Principe', + 'SV' => 'Salvádor', + 'SX' => 'Sint Maarten (Dutch part)', + 'SY' => 'Syrian Arab Republic', + 'SZ' => 'Svazijsko', + 'TC' => 'Turks and Caicos Islands', + 'TD' => 'Chad', + 'TF' => 'Francúzske južné územia', + 'TG' => 'Togo', + 'TH' => 'Thajsko', + 'TJ' => 'Tadžikistan', + 'TK' => 'Tokelau', + 'TL' => 'Timor-Leste', + 'TM' => 'Turkménsko', + 'TN' => 'Tunisko', + 'TO' => 'Tonga', + 'TR' => 'Turkey', + 'TT' => 'Trinidad and Tobago', + 'TV' => 'Tuvalu', + 'TW' => 'Taiwan, provincia Číny', + 'TZ' => 'Tanzánia', + 'UA' => 'Ukraina', + 'UG' => 'Uganda', + 'UM' => 'United States Minor Outlying Islands', + 'US' => 'Spojené Štáty', + 'UY' => 'Uruguaj', + 'UZ' => 'Uzbekistán', + 'VA' => 'Svätá Stolica (Vatikánsky Mestský Štát)', + 'VC' => 'Svätý Vincent a Grenadíny', + 'VE' => 'Venezuela, Bolívarovská republika', + 'VG' => 'Britské Panenské ostrovy', + 'VI' => 'Americké Panenské ostrovy', + 'VN' => 'Vietnam', + 'VU' => 'Vanuatu', + 'WF' => 'Wallis and Futuna', + 'WS' => 'Samoa', + 'YE' => 'Jemen', + 'YT' => 'Mayotte', + 'ZA' => 'Južná Afrika', + 'ZM' => 'Zambia', + 'ZW' => 'Zimbabwe', +]; diff --git a/modules/Admin/Language/sk/Episode.php b/modules/Admin/Language/sk/Episode.php new file mode 100644 index 0000000000..3eb42c7b3d --- /dev/null +++ b/modules/Admin/Language/sk/Episode.php @@ -0,0 +1,192 @@ +<?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' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', + 'episode' => 'Episode', + 'visibility' => 'Viditeľnosť', + 'comments' => 'Komentáre', + 'actions' => 'Úkony', + ], + 'messages' => [ + 'createSuccess' => 'Episode has been successfully created!', + 'editSuccess' => 'Episode has been successfully updated!', + 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', + ], + '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' => 'Zvukový súbor', + 'audio_file_hint' => 'Vyberte zvukový súbor .mp3, alebo .m4a.', + '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 and 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' => 'Epizóda', + 'type' => [ + 'label' => 'Type', + 'full' => 'Full', + 'full_hint' => 'Complete content (the episode)', + 'trailer' => 'Trailer', + 'trailer_hint' => 'Short, promotional piece of content that represents a preview of the current show', + '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' => 'Popis', + 'description_footer' => 'Description footer', + 'description_footer_hint' => + 'This text is added at the end of each episode description, it is a good place to input your social links for example.', + 'additional_files_section_title' => 'Additional files', + 'additional_files_section_subtitle' => + 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.', + 'location_section_title' => 'Lokácia', + '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' => 'Stiahnuť prepis', + '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' => 'Vytvoriť epizódu', + 'submit_edit' => 'Uložiť epizódu', + ], + '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 media files, comments, video clips and soundbites associated with it.", + '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/sk/EpisodeNavigation.php b/modules/Admin/Language/sk/EpisodeNavigation.php new file mode 100644 index 0000000000..1406e3010e --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Fediverse.php b/modules/Admin/Language/sk/Fediverse.php new file mode 100644 index 0000000000..0e4ca66d89 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Home.php b/modules/Admin/Language/sk/Home.php new file mode 100644 index 0000000000..3ff4c04dc8 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Install.php b/modules/Admin/Language/sk/Install.php new file mode 100644 index 0000000000..36e373a285 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/MyAccount.php b/modules/Admin/Language/sk/MyAccount.php new file mode 100644 index 0000000000..6ebbb30ef7 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Navigation.php b/modules/Admin/Language/sk/Navigation.php new file mode 100644 index 0000000000..68d4609d5d --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Page.php b/modules/Admin/Language/sk/Page.php new file mode 100644 index 0000000000..b6f49de574 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Pager.php b/modules/Admin/Language/sk/Pager.php new file mode 100644 index 0000000000..e25ee63810 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Person.php b/modules/Admin/Language/sk/Person.php new file mode 100644 index 0000000000..a652be9fda --- /dev/null +++ b/modules/Admin/Language/sk/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 and at least 400px wide and tall.', + 'full_name' => 'Full name', + 'full_name_hint' => 'This is the full name or alias of the person.', + 'unique_name' => 'Unique name', + 'unique_name_hint' => 'Used for URLs', + '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/sk/Platforms.php b/modules/Admin/Language/sk/Platforms.php new file mode 100644 index 0000000000..ab17d5999b --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Podcast.php b/modules/Admin/Language/sk/Podcast.php new file mode 100644 index 0000000000..2561b87667 --- /dev/null +++ b/modules/Admin/Language/sk/Podcast.php @@ -0,0 +1,272 @@ +<?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!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', + ], + 'form' => [ + 'identity_section_title' => 'Podcast identity', + 'identity_section_subtitle' => 'These fields allow you to get noticed.', + 'cover' => 'Podcast cover', + 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.', + 'banner' => 'Podcast banner', + 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', + 'banner_delete' => 'Delete podcast banner', + 'title' => 'Title', + 'handle' => 'Handle', + '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.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', + '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', + ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], + 'by' => 'By {publisher}', + 'season' => 'Season {seasonNumber}', + 'list_of_episodes_year' => '{year} episodes ({episodeCount})', + 'list_of_episodes_season' => + 'Season {seasonNumber} episodes ({episodeCount})', + 'no_episode' => 'No episode found!', + 'follow' => 'Follow', + 'followers' => '{numberOfFollowers, plural, + one {# follower} + other {# followers} + }', + 'posts' => '{numberOfPosts, plural, + one {# post} + other {# posts} + }', + 'activity' => 'Activity', + 'episodes' => 'Episodes', + 'sponsor' => 'Sponsor', + 'funding_links' => 'Funding links for {podcastTitle}', + 'find_on' => 'Find {podcastTitle} on', + 'listen_on' => 'Listen on', +]; diff --git a/modules/Admin/Language/sk/PodcastImport.php b/modules/Admin/Language/sk/PodcastImport.php new file mode 100644 index 0000000000..e9cfc1c4ce --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/PodcastNavigation.php b/modules/Admin/Language/sk/PodcastNavigation.php new file mode 100644 index 0000000000..f9a75b1a9e --- /dev/null +++ b/modules/Admin/Language/sk/PodcastNavigation.php @@ -0,0 +1,36 @@ +<?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', + 'episode-deleted' => 'Recycle bin', + '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/sk/Settings.php b/modules/Admin/Language/sk/Settings.php new file mode 100644 index 0000000000..345976be7f --- /dev/null +++ b/modules/Admin/Language/sk/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 and at least 512px wide and tall.', + 'site_name' => 'Site name', + 'site_description' => 'Site description', + 'submit' => 'Save', + 'editSuccess' => 'Instance has been updated successfully!', + 'deleteIconSuccess' => 'Site icon has been remove successfully!', + ], + '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/sk/Soundbite.php b/modules/Admin/Language/sk/Soundbite.php new file mode 100644 index 0000000000..a3f828fe09 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/User.php b/modules/Admin/Language/sk/User.php new file mode 100644 index 0000000000..8b2e478bf7 --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/Validation.php b/modules/Admin/Language/sk/Validation.php new file mode 100644 index 0000000000..750b19688f --- /dev/null +++ b/modules/Admin/Language/sk/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/sk/VideoClip.php b/modules/Admin/Language/sk/VideoClip.php new file mode 100644 index 0000000000..638de697bb --- /dev/null +++ b/modules/Admin/Language/sk/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/sv/Breadcrumb.php b/modules/Admin/Language/sv/Breadcrumb.php index d9400ca786..69915453e3 100644 --- a/modules/Admin/Language/sv/Breadcrumb.php +++ b/modules/Admin/Language/sv/Breadcrumb.php @@ -26,6 +26,8 @@ return [ 'publish-edit' => 'edit publication', 'unpublish' => 'unpublish', 'delete' => 'delete', + 'deleted' => 'deleted', + 'delete-permanently' => 'delete permanently', 'fediverse' => 'fediverse', 'block-lists' => 'block lists', 'users' => 'users', diff --git a/modules/Admin/Language/sv/Episode.php b/modules/Admin/Language/sv/Episode.php index 82ed40dc75..e82ff8ca8b 100644 --- a/modules/Admin/Language/sv/Episode.php +++ b/modules/Admin/Language/sv/Episode.php @@ -38,6 +38,15 @@ return [ 'not_published' => 'Not published', ], 'list' => [ + 'search' => [ + 'placeholder' => 'Search for an episode', + 'clear' => 'Clear search', + 'submit' => 'Search', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episode} + other {# episodes} + }', 'episode' => 'Episode', 'visibility' => 'Visibility', 'comments' => 'Comments', @@ -47,6 +56,24 @@ return [ 'createSuccess' => 'Episode has been successfully created!', 'editSuccess' => 'Episode has been successfully updated!', 'publishCancelSuccess' => 'Episode publication successfully cancelled!', + 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', + 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', + 'deleteSuccess' => 'Episode successfully deleted!', + 'deleteError' => 'Failed to delete episode {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deleteFileError' => 'Failed to delete {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + } file {file_path}. You may manually remove it from your disk.', + 'sameSlugError' => 'An episode with the chosen slug already exists.', ], 'form' => [ 'file_size_error' => @@ -57,7 +84,7 @@ return [ '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.', + 'cover_size_hint' => 'Cover must be squared and 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.', @@ -147,7 +174,7 @@ return [ ], 'delete_form' => [ 'disclaimer' => - "Deleting the episode will delete all the posts associated with it and remove it from the podcast's RSS feed.", + "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.", 'understand' => 'I understand, I want to delete the episode', 'submit' => 'Delete', ], diff --git a/modules/Admin/Language/sv/Person.php b/modules/Admin/Language/sv/Person.php index fa9bba2118..a652be9fda 100644 --- a/modules/Admin/Language/sv/Person.php +++ b/modules/Admin/Language/sv/Person.php @@ -24,7 +24,7 @@ return [ 'form' => [ 'avatar' => 'Avatar', 'avatar_size_hint' => - 'Avatar must be squared with at least 400px wide and tall.', + 'Avatar must be squared and at least 400px wide and tall.', 'full_name' => 'Full name', 'full_name_hint' => 'This is the full name or alias of the person.', 'unique_name' => 'Unique name', diff --git a/modules/Admin/Language/sv/Podcast.php b/modules/Admin/Language/sv/Podcast.php index 67335c104f..2561b87667 100644 --- a/modules/Admin/Language/sv/Podcast.php +++ b/modules/Admin/Language/sv/Podcast.php @@ -26,14 +26,34 @@ return [ 'createSuccess' => 'Podcast has been successfully created!', 'editSuccess' => 'Podcast has been successfully updated!', 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, + transcript {transcript} + chapters {chapters} + image {cover} + audio {audio} + other {media} + }.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', ], '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.', + 'cover_size_hint' => 'Cover must be squared and 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_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', 'banner_delete' => 'Delete podcast banner', 'title' => 'Title', 'handle' => 'Handle', @@ -90,6 +110,9 @@ return [ 'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.', 'new_feed_url' => 'New feed URL', 'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.', + 'old_feed_url' => 'Old feed URL', + 'update_feed' => 'Update feed', + 'update_feed_tip' => 'Import this podcast\'s latest episodes', 'partnership' => 'Partnership', 'partner_id' => 'ID', 'partner_link_url' => 'Link URL', @@ -219,6 +242,12 @@ return [ 'film_reviews' => 'Film Reviews', 'tv_reviews' => 'TV Reviews', ], + 'delete_form' => [ + 'disclaimer' => + "Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.", + 'understand' => 'I understand, I want the podcast to be permanently deleted', + 'submit' => 'Delete', + ], 'by' => 'By {publisher}', 'season' => 'Season {seasonNumber}', 'list_of_episodes_year' => '{year} episodes ({episodeCount})', diff --git a/modules/Admin/Language/sv/PodcastImport.php b/modules/Admin/Language/sv/PodcastImport.php index 7c3ef67d1f..e9cfc1c4ce 100644 --- a/modules/Admin/Language/sv/PodcastImport.php +++ b/modules/Admin/Language/sv/PodcastImport.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'warning' => - 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + '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.', diff --git a/modules/Admin/Language/sv/PodcastNavigation.php b/modules/Admin/Language/sv/PodcastNavigation.php index b619573154..f9a75b1a9e 100644 --- a/modules/Admin/Language/sv/PodcastNavigation.php +++ b/modules/Admin/Language/sv/PodcastNavigation.php @@ -17,6 +17,7 @@ return [ 'episodes' => 'Episodes', 'episode-list' => 'All episodes', 'episode-create' => 'New episode', + 'episode-deleted' => 'Recycle bin', 'analytics' => 'Analytics', 'podcast-analytics' => 'Audience overview', 'podcast-analytics-webpages' => 'Web pages visits', diff --git a/modules/Admin/Language/sv/Settings.php b/modules/Admin/Language/sv/Settings.php index 0d6368ccd2..345976be7f 100644 --- a/modules/Admin/Language/sv/Settings.php +++ b/modules/Admin/Language/sv/Settings.php @@ -15,7 +15,7 @@ return [ '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_icon_helper' => 'Icon must be squared and at least 512px wide and tall.', 'site_name' => 'Site name', 'site_description' => 'Site description', 'submit' => 'Save', diff --git a/modules/Install/Language/fa/Install.php b/modules/Install/Language/fa/Install.php new file mode 100644 index 0000000000..1f66ef118f --- /dev/null +++ b/modules/Install/Language/fa/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/gd/Install.php b/modules/Install/Language/gd/Install.php new file mode 100644 index 0000000000..1f66ef118f --- /dev/null +++ b/modules/Install/Language/gd/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/sk/Install.php b/modules/Install/Language/sk/Install.php new file mode 100644 index 0000000000..1f66ef118f --- /dev/null +++ b/modules/Install/Language/sk/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