diff --git a/app/Language/br/Comment.php b/app/Language/br/Comment.php index e46befd1e8e7f1058d81ceed0b4113daf5f9a9ec..5ce07ee54648a78e7b3f9d2ecb3fea2ae30a9223 100644 --- a/app/Language/br/Comment.php +++ b/app/Language/br/Comment.php @@ -35,7 +35,7 @@ return [ }', 'like' => 'Muiañ-karet', 'reply' => 'Respont', - 'view_replies' => 'Gwelout an evezhiadennoù ({numberOfReplies})', + 'view_replies' => 'Gwelet an evezhiadennoù ({numberOfReplies})', 'block_actor' => 'Stankañ an implijer·ez @{actorUsername}', 'block_domain' => 'Stankañ @{actorDomain}', 'delete' => 'Dilemel an evezhiadenn', diff --git a/app/Language/br/Common.php b/app/Language/br/Common.php index 2d2e86920b39b7b541259faf3e293a9bc0e3812d..99d3b59721c89d443ebef85c575ed50597393936 100644 --- a/app/Language/br/Common.php +++ b/app/Language/br/Common.php @@ -15,7 +15,7 @@ return [ 'optional' => 'Diret', 'close' => 'Serriñ', 'home' => 'Degemer', - 'explicit' => 'Endalc\'had evit an oadourien', + 'explicit' => 'Danvez evit an oadourien', 'powered_by' => 'Lusket gant {castopod}', 'go_back' => 'Mont war-gil', 'play_episode_button' => [ @@ -24,7 +24,7 @@ return [ ], 'read_more' => 'Lenn muioc\'h', 'read_less' => 'Lenn nebeutoc\'h', - 'see_more' => 'Gwelout muioc\'h', - 'see_less' => 'Gwelout nebeutoc\'h', - 'legal_notice' => 'Legal notice', + 'see_more' => 'Gwelet muioc\'h', + 'see_less' => 'Gwelet nebeutoc\'h', + 'legal_notice' => 'Evezhiadennoù a-fet lezenn', ]; diff --git a/app/Language/br/Podcast.php b/app/Language/br/Podcast.php index 4c669ee967f7d05ab9bc6974af88f4eddb85ad7c..d2b0533a10c0be45cc19a043310e222c702a88d3 100644 --- a/app/Language/br/Podcast.php +++ b/app/Language/br/Podcast.php @@ -114,7 +114,7 @@ return [ '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}', + 'funding_links' => 'Ereoù evit arc\'hantaouiñ {podcastTitle}', 'find_on' => 'Kavit {podcastTitle} war', 'listen_on' => 'Selaouit war', 'persons' => '{personsCount, plural, diff --git a/app/Language/es/Common.php b/app/Language/es/Common.php index e15951d762ddbb028023212d25f9946548db6a8a..937fa24df8414d39ac3299dd0499ae05bb5af49e 100644 --- a/app/Language/es/Common.php +++ b/app/Language/es/Common.php @@ -26,5 +26,5 @@ return [ 'read_less' => 'Leer menos', 'see_more' => 'Ver más', 'see_less' => 'Ver menos', - 'legal_notice' => 'Legal notice', + 'legal_notice' => 'Aviso legal', ]; diff --git a/app/Language/gl/Comment.php b/app/Language/gl/Comment.php new file mode 100644 index 0000000000000000000000000000000000000000..8da20a1239cf5d2fedf4c2cd2627d5ef91752f93 --- /dev/null +++ b/app/Language/gl/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' => "Comentario de {actorDisplayName} en {episodeTitle}", + 'back_to_comments' => 'Volver a comentarios', + 'form' => [ + 'episode_message_placeholder' => 'Escribir un comentario…', + 'reply_to_placeholder' => 'Responder a @{actorUsername}', + 'submit' => 'Enviar', + 'submit_reply' => 'Responder', + ], + 'likes' => '{numberOfLikes, plural, + one {# like} + other {# likes} + }', + 'replies' => '{numberOfReplies, plural, + one {# resposta} + other {# respostas} + }', + 'like' => 'Agrádame', + 'reply' => 'Responder', + 'view_replies' => 'Ver respostas ({numberOfReplies})', + 'block_actor' => 'Bloquear usuaria @{actorUsername}', + 'block_domain' => 'Bloquear dominio @{actorDomain}', + 'delete' => 'Eliminar comentario', +]; diff --git a/app/Language/gl/Common.php b/app/Language/gl/Common.php new file mode 100644 index 0000000000000000000000000000000000000000..59a4cc5ad4b04899eca719b2d9d2f6297da0d782 --- /dev/null +++ b/app/Language/gl/Common.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 [ + 'yes' => 'Si', + 'no' => 'Non', + 'cancel' => 'Cancelar', + 'optional' => 'Optativo', + 'close' => 'Pechar', + 'home' => 'Inicio', + 'explicit' => 'ExplÃcito', + 'powered_by' => 'Grazas a {castopod}', + 'go_back' => 'Volver', + 'play_episode_button' => [ + 'play' => 'Reproducir', + 'playing' => 'Reproducindo', + ], + 'read_more' => 'Ler máis', + 'read_less' => 'Ler menos', + 'see_more' => 'Ver máis', + 'see_less' => 'Ver menos', + 'legal_notice' => 'Aviso legal', +]; diff --git a/app/Language/gl/Episode.php b/app/Language/gl/Episode.php new file mode 100644 index 0000000000000000000000000000000000000000..9d228bd9e93bcba08548bddcd97a9bb8a57293e6 --- /dev/null +++ b/app/Language/gl/Episode.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'season' => 'Tempada {seasonNumber}', + 'season_abbr' => 'S{seasonNumber}', + 'number' => 'Episodio {episodeNumber}', + 'number_abbr' => 'Ep. {episodeNumber}', + 'season_episode' => 'Tempada {seasonNumber} episodio {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}', + 'persons' => '{personsCount, plural, + one {# persoa} + other {# persoas} + }', + 'persons_list' => 'Persoas', + 'back_to_episodes' => 'Volver aos episodios de {podcast}', + 'comments' => 'Comentarios', + 'activity' => 'Actividade', + 'description' => 'Descrición do episodio', + 'number_of_comments' => '{numberOfComments, plural, + one {# comentario} + other {# comentarios} + }', + 'all_podcast_episodes' => 'Tódolos episodios do podcast', + 'back_to_podcast' => 'Volver ao podcast', +]; diff --git a/app/Language/gl/Fediverse.php b/app/Language/gl/Fediverse.php new file mode 100644 index 0000000000000000000000000000000000000000..c8eb9824d3901f39a495340369a4a9c993ca8cd8 --- /dev/null +++ b/app/Language/gl/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' => 'O teu alcume', + 'your_handle_hint' => 'Escribe o @usuaria@dominio desde onde queres actuar.', + 'follow' => [ + 'label' => 'Seguir', + 'title' => 'Seguir a {actorDisplayName}', + 'subtitle' => 'Vas seguir a:', + 'accountNotFound' => 'Non se atopou a conta.', + 'remoteFollowNotAllowed' => 'Semella que o servidor da conta non permite o seguimento remoto…', + 'submit' => 'Realizar seguimento', + ], + 'favourite' => [ + 'title' => "Dar a favorito na publicación de {actorDisplayName}", + 'subtitle' => 'Vas mostrar agrado por:', + 'submit' => 'Darlle a favorito', + ], + 'reblog' => [ + 'title' => "Compartir a publicación de {actorDisplayName}", + 'subtitle' => 'Vas compartir:', + 'submit' => 'Fai a compartición', + ], + 'reply' => [ + 'title' => "Responder á publicación de {actorDisplayName}", + 'subtitle' => 'Vas responder a:', + 'submit' => 'Responde', + ], +]; diff --git a/app/Language/gl/Home.php b/app/Language/gl/Home.php new file mode 100644 index 0000000000000000000000000000000000000000..433b7b759e05ef616cdc90e5c55b4334fd8c2047 --- /dev/null +++ b/app/Language/gl/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' => 'Tódolos podcast', + 'sort_by' => 'Orde por', + 'sort_options' => [ + 'activity' => 'Actividade recente', + 'created_desc' => 'Primeiro o máis recente', + 'created_asc' => 'Máis antigos primeiro', + ], + 'no_podcast' => 'Non se atopan podcast', +]; diff --git a/app/Language/gl/Page.php b/app/Language/gl/Page.php new file mode 100644 index 0000000000000000000000000000000000000000..9d061373cb07d8e1cef3b2899b16e4ef99325810 --- /dev/null +++ b/app/Language/gl/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' => 'Volver ao inicio', + 'map' => [ + 'title' => 'Mapa', + 'description' => 'Descobre episodios de podcast en {siteName} situados nun mapa! Viaxa a través do mapa e escoita episodios que falan de lugares concretos.', + ], +]; diff --git a/app/Language/gl/Podcast.php b/app/Language/gl/Podcast.php new file mode 100644 index 0000000000000000000000000000000000000000..f26babe30e0618c99d5ad6ef130015d8a04b7b28 --- /dev/null +++ b/app/Language/gl/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' => 'Fonte RSS do Podcast', + 'season' => 'Tempada {seasonNumber}', + 'list_of_episodes_year' => 'Episodios en {year} ({episodeCount})', + 'list_of_episodes_season' => + 'Episodios da tempada {seasonNumber} ({episodeCount})', + 'no_episode' => 'Non se atoparon episodios!', + 'follow' => 'Seguir', + 'followTitle' => 'Segue a {actorDisplayName} no fediverso!', + 'followers' => '{numberOfFollowers, plural, + one {# seguidora} + other {# seguidoras} + }', + 'posts' => '{numberOfPosts, plural, + one {# publicación} + other {# publicacións} + }', + 'activity' => 'Actividade', + 'episodes' => 'Episodios', + 'episodes_title' => 'Episodios de {podcastTitle}', + 'about' => 'Acerca de', + 'stats' => [ + 'title' => 'EstatÃsticas', + 'number_of_seasons' => '{0, plural, + one {# tempada} + other {# tempadas} + }', + 'number_of_episodes' => '{0, plural, + one {# episodio} + other {# episodios} + }', + 'first_published_at' => 'Primeiro episodio publicado o {0, date, medium}', + ], + 'sponsor' => 'Apoiar', + 'funding_links' => 'Ligazóns para apoiar a {podcastTitle}', + 'find_on' => 'Atopa a {podcastTitle} en', + 'listen_on' => 'Escoita en', + 'persons' => '{personsCount, plural, + one {# persoa} + other {# persoas} + }', + 'persons_list' => 'Persoas', +]; diff --git a/app/Language/gl/Post.php b/app/Language/gl/Post.php new file mode 100644 index 0000000000000000000000000000000000000000..5cf07f28de597ad86ea6732c26521dec7a94d231 --- /dev/null +++ b/app/Language/gl/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' => "Publicación de {actorDisplayName}", + 'back_to_actor_posts' => 'Volver ás publicacións de {actor}', + 'actor_shared' => '{actor} compartiu', + 'reply_to' => 'Responder a @{actorUsername}', + 'form' => [ + 'message_placeholder' => 'Escribir unha mensaxe…', + 'episode_message_placeholder' => 'Escribe unha mensaxe para o episodio…', + 'episode_url_placeholder' => 'URL do episodio', + 'reply_to_placeholder' => 'Responder a @{actorUsername}', + 'submit' => 'Enviar', + 'submit_reply' => 'Responder', + ], + 'favourites' => '{numberOfFavourites, plural, + one {# favorito} + other {# favoritos} + }', + 'reblogs' => '{numberOfReblogs, plural, + one {# compartición} + other {# comparticións} + }', + 'replies' => '{numberOfReplies, plural, + one {# resposta} + other {# respostas} + }', + 'expand' => 'Despregar publicación', + 'block_actor' => 'Bloquear usuaria @{actorUsername}', + 'block_domain' => 'Bloquear dominio @{actorDomain}', + 'delete' => 'Eliminar publicación', +]; diff --git a/app/Language/ru/Common.php b/app/Language/ru/Common.php index 1463939f84bc45ea7c1d9a5e61cd9fa26d83d002..bb54fd28262e0f7b921223b350ea248a9a52432c 100644 --- a/app/Language/ru/Common.php +++ b/app/Language/ru/Common.php @@ -26,5 +26,5 @@ return [ 'read_less' => 'Скрыть подробноÑти', 'see_more' => 'Показать больше', 'see_less' => 'Показать меньше', - 'legal_notice' => 'Legal notice', + 'legal_notice' => 'ÐŸÑ€Ð°Ð²Ð¾Ð²Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ', ]; diff --git a/app/Language/sk/Comment.php b/app/Language/sk/Comment.php index d40c4e5f935b518295187da567fa50cdcffae96a..5fa9788f99f77ad1c4210302632856844a5b47b9 100644 --- a/app/Language/sk/Comment.php +++ b/app/Language/sk/Comment.php @@ -9,26 +9,30 @@ declare(strict_types=1); */ return [ - 'title' => "{actorDisplayName}'s comment for {episodeTitle}", + 'title' => "Komentár použÃvateľa {actorDisplayName} pre epizódu {episodeTitle}", 'back_to_comments' => 'Späť na komentáre', 'form' => [ 'episode_message_placeholder' => 'NapÃsaÅ¥ komentár…', - 'reply_to_placeholder' => 'Reply to @{actorUsername}', + 'reply_to_placeholder' => 'OdpovedaÅ¥ použÃvateľovi @{actorUsername}', 'submit' => 'PoslaÅ¥', 'submit_reply' => 'OdpovedaÅ¥', ], 'likes' => '{numberOfLikes, plural, - one {# like} - other {# likes} + one {# si obľúbil} + few {# si obľúbili} + many {# si obľúbilo} + other {# si obľúbili} }', 'replies' => '{numberOfReplies, plural, - one {# reply} - other {# replies} + one {# odpoveÄ} + few {# odpovede} + many {# odpovedÃ} + other {# odpovedÃ} }', 'like' => 'Obľúbené', 'reply' => 'OdpovedaÅ¥', 'view_replies' => 'UkázaÅ¥ odpoved/e ({numberOfReplies})', - 'block_actor' => 'BlokovaÅ¥ užÃvateľa @{actorUsername}', + 'block_actor' => 'BlokovaÅ¥ použÃ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 index 993a1ccd84b51d6453ea171543cf3464f755f369..eece433a2afcd2d7cb22225266b1067b44189e3c 100644 --- a/app/Language/sk/Common.php +++ b/app/Language/sk/Common.php @@ -26,5 +26,5 @@ return [ 'read_less' => 'ZobraziÅ¥ menej', 'see_more' => 'PozrieÅ¥ viac', 'see_less' => 'PozrieÅ¥ menej', - 'legal_notice' => 'Legal notice', + 'legal_notice' => 'Právne informácie', ]; diff --git a/app/Language/sk/Episode.php b/app/Language/sk/Episode.php index a4b232b22c886039066c79d7a918b06ac76f0b39..d8fe87596935d74ed2f10564703476f7edb95d0d 100644 --- a/app/Language/sk/Episode.php +++ b/app/Language/sk/Episode.php @@ -16,17 +16,21 @@ return [ 'season_episode' => 'Sezóna {seasonNumber} epizóda {episodeNumber}', 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}', 'persons' => '{personsCount, plural, - one {# person} - other {# persons} + one {# osobnosÅ¥} + few {# osobnosti} + many {# osobnostÃ} + other {# osobnostÃ} }', - 'persons_list' => 'Persons', + 'persons_list' => 'Osobnosti', '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} + one {# komentár} + few {# komentáre} + many {# komentárov} + other {# komentárov} }', 'all_podcast_episodes' => 'VÅ¡etky epizódy podcastu', 'back_to_podcast' => 'Späť na podcast', diff --git a/app/Language/sk/Fediverse.php b/app/Language/sk/Fediverse.php index 33d0e923404aa17634a0488d310dcbb7695cbc23..a4851bf1212fafb37d905a954bd61b59be8b42f8 100644 --- a/app/Language/sk/Fediverse.php +++ b/app/Language/sk/Fediverse.php @@ -10,13 +10,13 @@ declare(strict_types=1); return [ 'your_handle' => 'VaÅ¡a prezývka', - 'your_handle_hint' => 'Enter the @username@domain you want to act from.', + 'your_handle_hint' => 'Vložte identifikátor v tvare @meno@doména, s ktorým si želáte vystupovaÅ¥.', '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…', + 'remoteFollowNotAllowed' => 'Zdá sa, že server podľa zadaného identifikátora nepodporuje vzdialené sledovanie…', 'submit' => 'PokraÄovaÅ¥ k nasledovaniu', ], 'favourite' => [ diff --git a/app/Language/sk/Page.php b/app/Language/sk/Page.php index 60ffc771a0aa47cc627fa7098f6673b4f3f62f95..8a350c2b23b25536310d83f21dc60c3fa2b69cee 100644 --- a/app/Language/sk/Page.php +++ b/app/Language/sk/Page.php @@ -12,6 +12,6 @@ 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.', + 'description' => 'Objavujte epizódy podcastov zo stránky {siteName} umiestnené na mape! Cestujte zobrazenými oblasÅ¥ami a vypoÄujte si epizódy, ktoré sa o týchto oblastiach zmieňujú.', ], ]; diff --git a/app/Language/sk/Podcast.php b/app/Language/sk/Podcast.php index a15fe02c16c256bff0f9bc90f2a8edf99a90042b..bf3b232f7f4aed7ab7793e96162b70b3b4d12f8a 100644 --- a/app/Language/sk/Podcast.php +++ b/app/Language/sk/Podcast.php @@ -18,12 +18,16 @@ return [ 'follow' => 'NasledovaÅ¥', 'followTitle' => 'NasledovaÅ¥ {actorDisplayName} na fediverse!', 'followers' => '{numberOfFollowers, plural, - one {# follower} - other {# followers} + one {# sledujúci} + few {# sledujúci} + many {# sledujúcich} + other {# sledujúcich} }', 'posts' => '{numberOfPosts, plural, - one {# post} - other {# posts} + one {# prÃspevok} + few {# prÃspevky} + many {# prÃspevkov} + other {# prÃspevkov} }', 'activity' => 'Aktivita', 'episodes' => 'Epizódy', @@ -32,22 +36,28 @@ return [ 'stats' => [ 'title' => 'Å tatistiky', 'number_of_seasons' => '{0, plural, - one {# season} - other {# seasons} + one {# séria} + few {# série} + many {# sériÃ} + other {# sériÃ} }', 'number_of_episodes' => '{0, plural, - one {# episode} - other {# episodes} + one {# epizóda} + few {# epizódy} + many {# epizód} + other {# epizód} }', - 'first_published_at' => 'First episode published on {0, date, medium}', + 'first_published_at' => 'Prvá epizóda publikovaná {0, date, medium}', ], 'sponsor' => 'Sponzor', - 'funding_links' => 'Funding links for {podcastTitle}', - 'find_on' => 'Find {podcastTitle} on', + 'funding_links' => 'Odkazy na financovanie podcastu {podcastTitle}', + 'find_on' => 'NájsÅ¥ podcast {podcastTitle} na', 'listen_on' => 'PoÄúvajte na', 'persons' => '{personsCount, plural, - one {# person} - other {# persons} + one {# osobnosÅ¥} + few {# osobnosti} + many {# osobnostÃ} + other {# osobnostÃ} }', - 'persons_list' => 'Persons', + 'persons_list' => 'Osobnosti', ]; diff --git a/app/Language/sk/Post.php b/app/Language/sk/Post.php index 45ec87f6ab27f2c3fca56984637251d54a51fe03..4292024eab37ad945338924764b32cbda7e2885f 100644 --- a/app/Language/sk/Post.php +++ b/app/Language/sk/Post.php @@ -9,32 +9,38 @@ declare(strict_types=1); */ return [ - 'title' => "{actorDisplayName}'s post", - 'back_to_actor_posts' => 'Back to {actor} posts', - 'actor_shared' => '{actor} shared', - 'reply_to' => 'Reply to @{actorUsername}', + 'title' => "PrÃspevok použÃvateľa {actorDisplayName}", + 'back_to_actor_posts' => 'Späť na prÃspevky použÃvateľa {actor}', + 'actor_shared' => '{actor} zdieľal', + 'reply_to' => 'OdpoveÄ použÃvateľovi @{actorUsername}', 'form' => [ - 'message_placeholder' => 'Write a message…', - 'episode_message_placeholder' => 'Write a message for the episode…', - 'episode_url_placeholder' => 'Episode URL', - 'reply_to_placeholder' => 'Reply to @{actorUsername}', - 'submit' => 'Send', - 'submit_reply' => 'Reply', + 'message_placeholder' => 'NapÃÅ¡te správu…', + 'episode_message_placeholder' => 'NapÃÅ¡te správu pre túto epizódu…', + 'episode_url_placeholder' => 'Adresa URL epizódy', + 'reply_to_placeholder' => 'OdpoveÄ použÃvateľovi @{actorUsername}', + 'submit' => 'OdoslaÅ¥', + 'submit_reply' => 'OdpovedaÅ¥', ], 'favourites' => '{numberOfFavourites, plural, - one {# favourite} - other {# favourites} + one {# si obľúbil} + few {# si obľúbili} + many {# si obľúbilo} + other {# si obľúbilo} }', 'reblogs' => '{numberOfReblogs, plural, - one {# share} - other {# shares} + one {# zdieľanie} + few {# zdieľania} + many {# zdieľanÃ} + other {# zdieľanÃ} }', 'replies' => '{numberOfReplies, plural, - one {# reply} - other {# replies} + one {# odpoveÄ} + few {# odpovede} + many {# odpovedÃ} + other {# odpovedÃ} }', - 'expand' => 'Expand post', - 'block_actor' => 'Block user @{actorUsername}', - 'block_domain' => 'Block domain @{actorDomain}', + 'expand' => 'RozbaliÅ¥ prÃspevok', + 'block_actor' => 'ZablokovaÅ¥ použÃvateľa @{actorUsername}', + 'block_domain' => 'ZablokovaÅ¥ doménu @{actorDomain}', 'delete' => 'VymazaÅ¥ prÃspevok', ]; diff --git a/docs/src/ar/getting-started/docker.md b/docs/src/ar/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/ar/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/ar/getting-started/install.md b/docs/src/ar/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/ar/getting-started/install.md +++ b/docs/src/ar/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/ar/index.md b/docs/src/ar/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/ar/index.md +++ b/docs/src/ar/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/br/getting-started/docker.md b/docs/src/br/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/br/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/br/getting-started/install.md b/docs/src/br/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..f0a71a3e033b33d46bed1a2207fb0498c68c25d0 100644 --- a/docs/src/br/getting-started/install.md +++ b/docs/src/br/getting-started/install.md @@ -1,18 +1,19 @@ --- -title: Installation +title: Staliañ sidebarDepth: 3 --- -# How to install Castopod? +# Penaos staliañ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/br/index.md b/docs/src/br/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/br/index.md +++ b/docs/src/br/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/de/getting-started/docker.md b/docs/src/de/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/de/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/de/getting-started/install.md b/docs/src/de/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/de/getting-started/install.md +++ b/docs/src/de/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/de/index.md b/docs/src/de/index.md index b16a77943e7b6eed5754da0aef499b72659559ff..2d1ef4505709bfa7171a05eacfa218a0905835c7 100644 --- a/docs/src/de/index.md +++ b/docs/src/de/index.md @@ -219,7 +219,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/el/getting-started/docker.md b/docs/src/el/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/el/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/el/getting-started/install.md b/docs/src/el/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/el/getting-started/install.md +++ b/docs/src/el/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/el/index.md b/docs/src/el/index.md index 55b2ea3a7cea7eccce28e4698ad112285c049bbe..c657df590c2343bd613ff9d66bfb7c16048bafb9 100644 --- a/docs/src/el/index.md +++ b/docs/src/el/index.md @@ -217,7 +217,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/es/getting-started/docker.md b/docs/src/es/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..5c245a115e8e290824b9ac0544e018d988923f32 --- /dev/null +++ b/docs/src/es/getting-started/docker.md @@ -0,0 +1,144 @@ +--- +title: Imágenes oficiales de Docker +sidebarDepth: 3 +--- + +# Imágenes oficiales de Docker + +Castopod lanza 2 imágenes Docker al Docker Hub durante su proceso de +construcción automatizada: + +- [**`castopod/aplicación`**](https://hub.docker.com/r/castopod/app): el paquete + de aplicación +- [**`castopod/servidor-web`**](https://hub.docker.com/r/castopod/web-server): + una configuración Nginx para Castopod + +Adicionalmente, Castopod requiere una base de datos compatible con MySQL. Una +base de datos Redis puede ser añadida como gestor de caché. + +## Etiquetas admitidas + +- `desarrollo` [unstable], última rama de desarrollo construida + +// más etiquetas por llegar! + +## Ejemplo de uso + +1. Instalar [docker](https://docs.docker.com/get-docker/) y + [docker-compose](https://docs.docker.com/compose/install/) +2. Crear un archivo `docker-compose.yml` con lo siguiente: + + ```yml + versión: "3.7" + + servicios: + applicación: + imagen: castopod/app:develop + nombre_contenedor: "castopod-app" + volúmenes: + - castopod-media:/opt/castopod/public/media + ambiente: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: cámbiame + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: cámbiame + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + redes: + - castopod-app + - castopod-db + reiniciar: unless-stopped + + servidor-web: + imagen: castopod/web-server:develop + nombre_contenedor: "castopod-web-server" + volúmenes: + - castopod-media:/var/www/html/media + redes: + - castopod-app + puertos: + - 8080:80 + reiniciar: unless-stopped + + mariadb: + imagen: mariadb:10.5 + nombre_contenedor: "castopod-mariadb" + redes: + - castopod-db + volúmenes: + - castopod-db:/var/lib/mysql + ambiente: + MYSQL_ROOT_PASSWORD: cámbiame + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: cámbiame + reiniciar: unless-stopped + + redis: + imagen: redis:7.0-alpine + nombre_contenedor: "castopod-redis" + volúmenes: + - castopod-cache:/data + redes: + - castopod-app + + volúmenes: + castopod-media: + castopod-db: + castopod-cache: + + redes: + castopod-app: + castopod-db: + ``` + + Debes adaptar algunas variables a tus necesidades (ej. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Configura un proxy inverso para TLS (SSL/HTTPS) + + TLS es obligatorio para que ActivityPub funcione. Este trabajo puede ser + fácilmente manejado por un proxy inverso, por ejemplo con + [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Ejecuta `docker-compose -d`, espera a que se inicie y ve a + `https://castopod.example.com/cp-install` para terminar de configurar + Castopod! + +5. Todo listo, empieza a podcastear! 🎙ï¸ðŸš€ + +## Variables del Entorno + +- **castopod/app** + + | Nombre de la Variable | Escribe (`predeterminado`) | + | ----------------------------- | ----------------------------------- | + | **`CP_URLBASE`** | string (`indefinido`) | + | **`CP_MEDIA_URLBASE`** | ?string (`(vacÃo)`) | + | **`CP_PUERTA_ADMINISTRADOR`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_PUERTA`** | ?string (`"cp-auth"`) | + | **`CP_ANALÃTICAS_SALT`** | string (`indefinido`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/es/getting-started/install.md b/docs/src/es/getting-started/install.md index db0e0e8f94ae7de77799ac21f1a17ff583b9a818..7c2b5cee24e76a98e1970db4fde506669afd9d1b 100644 --- a/docs/src/es/getting-started/install.md +++ b/docs/src/es/getting-started/install.md @@ -9,11 +9,12 @@ 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. -::: Nota informativa +::: tip Note -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. +We've released official Docker images for Castopod! + +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -25,8 +26,7 @@ pasar a la sección de contribuciones. ### PHP v8.0 o superior -Se requiere PHP versión 8.0 o superior con las siguientes extensiones -instaladas: +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) @@ -35,8 +35,7 @@ instaladas: **JPEG**, **PNG** y **WEBP**. - [exif](https://www.php.net/manual/en/exif.installation.php) -Adicionalmente, asegúrate que las siguientes extensiones están habilitadas en tu -PHP: +Additionally, make sure that the following extensions are enabled in your PHP: - json (habilitada por defecto - no la desactives) - xml (habilitada por defecto - no la desactives) @@ -46,28 +45,27 @@ PHP: > Recomendamos usar [MariaDB](https://mariadb.org). -::: aviso Aviso +::: warning Warning -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. +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. ::: -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. +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. #### Privilegios -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`. +User must have at least these privileges on the database for Castopod to work: +`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`. ### (Opcional) FFmpeg v4.1.8 o superior para clips de video -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: +[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: - LibrerÃa **FreeType 2** para [gd](https://www.php.net/manual/en/image.installation.php). @@ -127,24 +125,24 @@ quieres general clips de video. Se debe instalar las siguientes extensiones: 2. Sigue las instrucciones de la pantalla. 3. ¡Empieza a crear podcasting! -::: Nota informativa +::: info Note -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). +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). ::: ## Paquetes de la comunidad -Si no quieres molestarte en instalar Castopod manualmente, puedes usar uno de -los paquetes creados y mantenidos por la comunidad de código abierto. +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. ### Instalar con YunoHost -[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. +[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"> @@ -158,19 +156,3 @@ manages the hardships of self-hosting for you. Repo</a> </div> - -### Instalar con Docker - -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]">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> - -::: Nota de información - -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/index.md b/docs/src/es/index.md index f6842362eacd475d6ee270acf5ae349c1b3270bf..3c416619a4e6a4ea24a5d6be133f79349e9dd084 100644 --- a/docs/src/es/index.md +++ b/docs/src/es/index.md @@ -219,7 +219,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/fa/getting-started/docker.md b/docs/src/fa/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/fa/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/fa/getting-started/install.md b/docs/src/fa/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/fa/getting-started/install.md +++ b/docs/src/fa/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. 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/index.md b/docs/src/fa/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/fa/index.md +++ b/docs/src/fa/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/fr/getting-started/docker.md b/docs/src/fr/getting-started/docker.md index 6e0b0dcea02e7db151527c74f92d51c780b98513..2a35a8bb2b947c3cc888859382fbc37825c428f8 100644 --- a/docs/src/fr/getting-started/docker.md +++ b/docs/src/fr/getting-started/docker.md @@ -1,32 +1,32 @@ --- -title: Images Docker officielles +title: Official Docker images sidebarDepth: 3 --- -# Images Docker officielles +# Official Docker images -Castopod publie 2 images Docker sur Docker Hub grâce à l'automatisation de la -construction des images par la chaîne d'intégration GitLab : +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: -- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): l'application - avec toutes les dépendances de Castopod -- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): un - serveur Nginx avec une configuration adaptée à Castopod +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod -De plus, Castopod nécessite une base de donnée compatible avec MySQL. Une base -de donnée Redis peut être utilisée pour gérer le cache. +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. -## Tags disponibles +## Supported tags -- `develop` [instable], dernière version de développement de Castopod +- `develop` [unstable], latest development branch build -// d'autres tags sont à venir ! +// more tags to come! -## Exemple d'utilisation +## Example usage -1. Installez [docker](https://docs.docker.com/get-docker/) et +1. Install [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/install/) -2. Créez un fichier `docker-compose.yml` contenant : +2. Create a `docker-compose.yml` file with the following: ```yml version: "3.7" @@ -93,33 +93,31 @@ de donnée Redis peut être utilisée pour gérer le cache. castopod-db: ``` - Vous devez adapter la configuration à vos besoins (e.g. `CP_BASEURL`, + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). -3. Mettre en place un reverse proxy pour gérer TLS (SSL/HTTPS) +3. Setup a reverse proxy for TLS (SSL/HTTPS) - TLS est obligatoire pour faire fonctionner ActivityPub. Cette tâche peut - facilement être déléguée à un reverse proxy, par exemple avec - [Caddy](https://caddyserver.com/): + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): ``` #castopod castopod.example.com { - reverse_proxy localhost:8080 + reverse_proxy localhost:8080 } ``` -4. Lancez la commande `docker-compose up -d`, attendez l'initialisation et - rendez-vous sur `https://castopod.example.com/cp-install` pour finir - l'installation de Castopod ! +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! -5. Tout est bon à présent, à vos podcasts ! 🎙ï¸ðŸš€ +5. You're all set, start podcasting! 🎙ï¸ðŸš€ -## Variables d'environnement +## Environment Variables - **castopod/app** - | Nom de le variable | Type (`default`) | + | Variable name | Type (`default`) | | -------------------------- | ----------------------------------- | | **`CP_BASEURL`** | string (`undefined`) | | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | @@ -139,6 +137,6 @@ de donnée Redis peut être utilisée pour gérer le cache. - **castopod/web-server** - | Nom de la variable | Type (`default`) | + | Variable name | Type (`default`) | | --------------------- | ----------------- | | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/fr/getting-started/install.md b/docs/src/fr/getting-started/install.md index 4d3bd938c403596ab4dcda4d49b0416dca2f51e9..dc8e52cfb2b2a3b3a934a54842a24d1bf21d7469 100644 --- a/docs/src/fr/getting-started/install.md +++ b/docs/src/fr/getting-started/install.md @@ -9,11 +9,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -155,19 +156,3 @@ self-hosting for you. Github</a> </div> - -### Installer avec 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]">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 Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/fr/index.md b/docs/src/fr/index.md index ee45816127a596f1131a941709218b65363c43a0..1ee8a8e52441c683ab5dcf3946abef50871a9ef5 100644 --- a/docs/src/fr/index.md +++ b/docs/src/fr/index.md @@ -223,7 +223,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/gd/getting-started/docker.md b/docs/src/gd/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/gd/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/gd/getting-started/install.md b/docs/src/gd/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/gd/getting-started/install.md +++ b/docs/src/gd/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. 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/index.md b/docs/src/gd/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/gd/index.md +++ b/docs/src/gd/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/gl/getting-started/docker.md b/docs/src/gl/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/gl/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/gl/getting-started/install.md b/docs/src/gl/getting-started/install.md new file mode 100644 index 0000000000000000000000000000000000000000..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 --- /dev/null +++ b/docs/src/gl/getting-started/install.md @@ -0,0 +1,155 @@ +--- +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. + +::: tip Note + +We've released official Docker images for Castopod! + +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. + +::: + +## 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> diff --git a/docs/src/gl/getting-started/security.md b/docs/src/gl/getting-started/security.md new file mode 100644 index 0000000000000000000000000000000000000000..e205698df8a8029f080840922a212f01da1baa7e --- /dev/null +++ b/docs/src/gl/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/gl/getting-started/update.md b/docs/src/gl/getting-started/update.md new file mode 100644 index 0000000000000000000000000000000000000000..1f48e274922fd3affdc428ffd59a8d79909dcab7 --- /dev/null +++ b/docs/src/gl/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/gl/index.md b/docs/src/gl/index.md new file mode 100644 index 0000000000000000000000000000000000000000..cb12ac591a04d5e9c3ff97212327567c954d54be --- /dev/null +++ b/docs/src/gl/index.md @@ -0,0 +1,289 @@ +--- +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, German, + Brazilian Portuguese & Spanish… with + [more to come](https://translate.castopod.org)! + +## Motivation + +The podcasting ecosystem is decentralized by nature: you can create your podcast +as an RSS file, publish it on the web and have it shared everywhere online. + +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. + +## Contributors ✨ + +Thanks goes to these wonderful people +([emoji key](https://allcontributors.org/docs/en/emoji-key)): + +<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> +<!-- prettier-ignore-start --> +<!-- markdownlint-disable --> +<table> + <tr> + <td align="center"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">ðŸ›</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">ï¸ï¸ï¸ï¸â™¿ï¸</a> <a href="https://translate.castopod.org" title="Translation">ðŸŒ</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑â€ðŸ«</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">ðŸ“</a></td> + <td align="center"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">ðŸ›</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">ðŸŒ</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">ðŸ“</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td> + <td align="center"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">ðŸŒ</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">ðŸ›</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">ðŸ›</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">ðŸ›</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">ðŸŒ</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td> + </tr> + <tr> + <td align="center"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">ðŸ›</a></td> + <td align="center"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td> + <td align="center"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk MiÅ›</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">ðŸ›</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td> + <td align="center"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td> + <td align="center"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">ðŸ›</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td> + </tr> + <tr> + <td align="center"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">ðŸ›</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">ðŸ›</a> <a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">ðŸ›</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td> + <td align="center"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">ðŸ›</a></td> + <td align="center"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">ðŸ›</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">ðŸ›</a></td> + </tr> + <tr> + <td align="center"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">ðŸ›</a></td> + <td align="center"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">ðŸ›</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td> + <td align="center"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt=""/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + </tr> + <tr> + <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt=""/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt=""/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + </tr> + <tr> + <td align="center"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt=""/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt=""/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt=""/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt=""/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td> + </tr> +</table> + +<!-- markdownlint-restore --> +<!-- prettier-ignore-end --> + +<!-- ALL-CONTRIBUTORS-LIST:END --> + +This project follows the +[all-contributors](https://github.com/all-contributors/all-contributors) +specification. Contributions of any kind welcome! + +## 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/docker.md b/docs/src/id/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/id/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/id/getting-started/install.md b/docs/src/id/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/id/getting-started/install.md +++ b/docs/src/id/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/id/index.md b/docs/src/id/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/id/index.md +++ b/docs/src/id/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/it/getting-started/docker.md b/docs/src/it/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/it/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/it/getting-started/install.md b/docs/src/it/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/it/getting-started/install.md +++ b/docs/src/it/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/it/index.md b/docs/src/it/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/it/index.md +++ b/docs/src/it/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/nl/getting-started/docker.md b/docs/src/nl/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/nl/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/nl/getting-started/install.md b/docs/src/nl/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/nl/getting-started/install.md +++ b/docs/src/nl/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/nl/index.md b/docs/src/nl/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/nl/index.md +++ b/docs/src/nl/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/nn-NO/getting-started/docker.md b/docs/src/nn-NO/getting-started/docker.md index 1a057fe4ec9d4eb68b3c3be91c5aa684acbae778..2a35a8bb2b947c3cc888859382fbc37825c428f8 100644 --- a/docs/src/nn-NO/getting-started/docker.md +++ b/docs/src/nn-NO/getting-started/docker.md @@ -104,7 +104,7 @@ can be added as a cache handler. ``` #castopod castopod.example.com { - reverse_proxy localhost:8080 + reverse_proxy localhost:8080 } ``` diff --git a/docs/src/nn-NO/getting-started/install.md b/docs/src/nn-NO/getting-started/install.md index ea1ffea679125f421aa09d4a8935c4e1ce7a5e0d..f58f9cb079e5701edca17a3c5df6b7ec16a30ca9 100644 --- a/docs/src/nn-NO/getting-started/install.md +++ b/docs/src/nn-NO/getting-started/install.md @@ -9,11 +9,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -151,19 +152,3 @@ self-hosting for you. class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github-arkiv</a> </div> - -### Installer med Docker - -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 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/nn-NO/index.md b/docs/src/nn-NO/index.md index fa83927dd96bf40df03e7430c50aa9c0323ff18e..9ead96ba73be421f2934fc699c27c59280dc6ba8 100644 --- a/docs/src/nn-NO/index.md +++ b/docs/src/nn-NO/index.md @@ -217,7 +217,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/oc/getting-started/docker.md b/docs/src/oc/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/oc/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/oc/getting-started/install.md b/docs/src/oc/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/oc/getting-started/install.md +++ b/docs/src/oc/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/oc/index.md b/docs/src/oc/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/oc/index.md +++ b/docs/src/oc/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/pl/getting-started/docker.md b/docs/src/pl/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/pl/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/pl/getting-started/install.md b/docs/src/pl/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/pl/getting-started/install.md +++ b/docs/src/pl/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/pl/index.md b/docs/src/pl/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/pl/index.md +++ b/docs/src/pl/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/pt-BR/getting-started/docker.md b/docs/src/pt-BR/getting-started/docker.md index 1a057fe4ec9d4eb68b3c3be91c5aa684acbae778..2a35a8bb2b947c3cc888859382fbc37825c428f8 100644 --- a/docs/src/pt-BR/getting-started/docker.md +++ b/docs/src/pt-BR/getting-started/docker.md @@ -104,7 +104,7 @@ can be added as a cache handler. ``` #castopod castopod.example.com { - reverse_proxy localhost:8080 + reverse_proxy localhost:8080 } ``` diff --git a/docs/src/pt-BR/getting-started/install.md b/docs/src/pt-BR/getting-started/install.md index 468f4359866e65410810eddeec40cf1416cbff20..04f8f4ff54dc3e9920beebae7d09633c81ddf6a0 100644 --- a/docs/src/pt-BR/getting-started/install.md +++ b/docs/src/pt-BR/getting-started/install.md @@ -9,11 +9,12 @@ 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 +::: dica 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. +We've released official Docker images for Castopod! + +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -25,7 +26,7 @@ de contribuição. ### PHP v8.0 ou superior -É necessário PHP versão 8.0 ou superior, com as seguintes extensões instaladas: +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) @@ -34,8 +35,7 @@ de contribuição. **PNG** e bibliotecas **WEBP**. - [exif](https://www.php.net/manual/en/exif.installation.php) -Além disso, certifique-se de que as seguintes extensões estejam habilitadas em -seu PHP: +Additionally, make sure that the following extensions are enabled in your PHP: - json (habilitado por padrão - não desativar) - xml (habilitado por padrão - não desativar) @@ -45,28 +45,27 @@ seu PHP: > Recomendamos usar o [MariaDB](https://mariadb.org). -::: warning Aviso +::: warning Warning -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. +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. ::: -Você vai precisar do hostname do servidor, nome do banco de dados, nome do -usuário e senha para concluir o processo de instalação. Se você não os tem, -entre em contato com o administrador do servidor. +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. #### Privilégios -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`. +User must have at least these privileges on the database for Castopod to work: +`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 Video Clips. As seguintes extensões devem ser instaladas: +[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: - Biblioteca **FreeType 2** para [gd](https://www.php.net/manual/en/image.installation.php). @@ -125,24 +124,24 @@ deseja gerar Video Clips. As seguintes extensões devem ser instaladas: 2. Siga as instruções na sua tela. 3. Comece o podcast! -::: info Nota +::: info Note -O script de instalação grava um arquivo `.env` na raiz do pacote. Se você não -puder passar pelo assistente de instalação, você pode -[criar e atualizar o arquivo `.env` manualmente](#alternative-manual-configuration). +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). ::: ## Pacotes comunitários -Se você não quiser se preocupar em instalar o Castopod manualmente, você pode -usar um dos pacotes criados e mantidos pela comunidade de código aberto. +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. ### Instalar com YunoHost -[YunoHost](https://yunohost.org/) é uma distribuição baseada no Debian GNU/Linux -composto por pacotes de software livre e de código aberto. Ele gerencia as -dificuldades de auto-hospedagem para você. +[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"> @@ -156,19 +155,3 @@ dificuldades de auto-hospedagem para você. Repo</a> </div> - -### Instalar com o Docker - -Se você deseja usar o Docker para instalar o Castopod, é possÃvel graças a -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Instalar -com o -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Nota - -Dado o alto nÃvel de demanda por docker, planejamos manter uma imagem oficial do -Castopod Docker diretamente no repositório do Castopod. - -::: diff --git a/docs/src/pt-BR/index.md b/docs/src/pt-BR/index.md index df6ea095c8fe22fb2303ea0e6367ccb597313897..24204271fde1fd7f3a9e911b24c7d7bc8a2f215c 100644 --- a/docs/src/pt-BR/index.md +++ b/docs/src/pt-BR/index.md @@ -219,7 +219,7 @@ Agradecimento vai para essas pessoas maravilhosas </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/pt/getting-started/docker.md b/docs/src/pt/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/pt/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/pt/getting-started/install.md b/docs/src/pt/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/pt/getting-started/install.md +++ b/docs/src/pt/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/pt/index.md b/docs/src/pt/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/pt/index.md +++ b/docs/src/pt/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/ru/getting-started/docker.md b/docs/src/ru/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/ru/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/ru/getting-started/install.md b/docs/src/ru/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/ru/getting-started/install.md +++ b/docs/src/ru/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/ru/index.md b/docs/src/ru/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/ru/index.md +++ b/docs/src/ru/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/sk/getting-started/docker.md b/docs/src/sk/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/sk/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/sk/getting-started/install.md b/docs/src/sk/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/sk/getting-started/install.md +++ b/docs/src/sk/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. 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/index.md b/docs/src/sk/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/sk/index.md +++ b/docs/src/sk/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/docs/src/sv/getting-started/docker.md b/docs/src/sv/getting-started/docker.md new file mode 100644 index 0000000000000000000000000000000000000000..2a35a8bb2b947c3cc888859382fbc37825c428f8 --- /dev/null +++ b/docs/src/sv/getting-started/docker.md @@ -0,0 +1,142 @@ +--- +title: Official Docker images +sidebarDepth: 3 +--- + +# Official Docker images + +Castopod pushes 2 Docker images to the Docker Hub during its automated build +process: + +- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle + with all of Castopod dependencies +- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an + Nginx configuration for Castopod + +Additionally, Castopod requires a MySQL-compatible database. A Redis database +can be added as a cache handler. + +## Supported tags + +- `develop` [unstable], latest development branch build + +// more tags to come! + +## Example usage + +1. Install [docker](https://docs.docker.com/get-docker/) and + [docker-compose](https://docs.docker.com/compose/install/) +2. Create a `docker-compose.yml` file with the following: + + ```yml + version: "3.7" + + services: + app: + image: castopod/app:develop + container_name: "castopod-app" + volumes: + - castopod-media:/opt/castopod/public/media + environment: + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + CP_BASEURL: "http://castopod.example.com" + CP_ANALYTICS_SALT: changeme + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + networks: + - castopod-app + - castopod-db + restart: unless-stopped + + web-server: + image: castopod/web-server:develop + container_name: "castopod-web-server" + volumes: + - castopod-media:/var/www/html/media + networks: + - castopod-app + ports: + - 8080:80 + restart: unless-stopped + + mariadb: + image: mariadb:10.5 + container_name: "castopod-mariadb" + networks: + - castopod-db + volumes: + - castopod-db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: changeme + MYSQL_DATABASE: castopod + MYSQL_USER: castopod + MYSQL_PASSWORD: changeme + restart: unless-stopped + + redis: + image: redis:7.0-alpine + container_name: "castopod-redis" + volumes: + - castopod-cache:/data + networks: + - castopod-app + + volumes: + castopod-media: + castopod-db: + castopod-cache: + + networks: + castopod-app: + castopod-db: + ``` + + You have to adapt some variables to your needs (e.g. `CP_BASEURL`, + `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). + +3. Setup a reverse proxy for TLS (SSL/HTTPS) + + TLS is mandatory for ActivityPub to work. This job can easily be handled by + a reverse proxy, for example with [Caddy](https://caddyserver.com/): + + ``` + #castopod + castopod.example.com { + reverse_proxy localhost:8080 + } + ``` + +4. Run `docker-compose up -d`, wait for it to initialize and head on to + `https://castopod.example.com/cp-install` to finish setting up Castopod! + +5. You're all set, start podcasting! 🎙ï¸ðŸš€ + +## Environment Variables + +- **castopod/app** + + | Variable name | Type (`default`) | + | -------------------------- | ----------------------------------- | + | **`CP_BASEURL`** | string (`undefined`) | + | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) | + | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) | + | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) | + | **`CP_ANALYTICS_SALT`** | string (`undefined`) | + | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) | + | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) | + | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) | + | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) | + | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) | + | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) | + | **`CP_REDIS_HOST`** | ?string (`"localhost"`) | + | **`CP_REDIS_PASSWORD`** | ?string (`null`) | + | **`CP_REDIS_PORT`** | ?number (`6379`) | + | **`CP_REDIS_DATABASE`** | ?number (`0`) | + +- **castopod/web-server** + + | Variable name | Type (`default`) | + | --------------------- | ----------------- | + | **`CP_APP_HOSTNAME`** | ?string (`"app"`) | diff --git a/docs/src/sv/getting-started/install.md b/docs/src/sv/getting-started/install.md index c63d2fe13acf3b7637f6eae2542b163729f2d007..05659d73eb1e9ae243c4de711e3b4ad2683faaf8 100644 --- a/docs/src/sv/getting-started/install.md +++ b/docs/src/sv/getting-started/install.md @@ -8,11 +8,12 @@ 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 +::: tip Note + +We've released official Docker images for Castopod! -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. +If you prefer using Docker, you may skip this and go straight to the +[docker documentation](./docker.md) for Castopod. ::: @@ -152,19 +153,3 @@ self-hosting for you. Repo</a> </div> - -### Install with Docker - -If you wish to use Docker to install Castopod, it is possible thanks to -[Romain de Laage](https://mamot.fr/@rdelaage)! - -<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install -with -Docker<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a> - -::: info Note - -Given high demand for docker, we plan on maintaining an official Castopod Docker -image directly into the Castopod repository. - -::: diff --git a/docs/src/sv/index.md b/docs/src/sv/index.md index 94dca16520219653853ddca41eebf92d670684b2..cb12ac591a04d5e9c3ff97212327567c954d54be 100644 --- a/docs/src/sv/index.md +++ b/docs/src/sv/index.md @@ -216,7 +216,7 @@ Thanks goes to these wonderful people </tr> <tr> <td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> - <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> + <td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> <td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">ðŸŒ</a></td> diff --git a/modules/Admin/Language/ar/Breadcrumb.php b/modules/Admin/Language/ar/Breadcrumb.php index 396ae47444525b08e3db539a4f3215536765a049..2a562d7d5f3ab18adaeb91df10abcdb33d4a6190 100644 --- a/modules/Admin/Language/ar/Breadcrumb.php +++ b/modules/Admin/Language/ar/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'soundbites', 'video-clips' => 'video clips', 'embed' => 'embeddable player', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/ar/Common.php b/modules/Admin/Language/ar/Common.php index ce8a29f18e434823f51c185a86e8f8523711e024..9dff13c60241fedfbe4e7b0723b1bde25eb7ce86 100644 --- a/modules/Admin/Language/ar/Common.php +++ b/modules/Admin/Language/ar/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'Playing', ], 'size_limit' => 'Size limit: {0}.', - 'choose_interact' => 'اختر أسلوب التÙاعل', + 'choose_interact' => 'Choose how to interact', 'view' => 'View', ]; diff --git a/modules/Admin/Language/ar/Dashboard.php b/modules/Admin/Language/ar/Dashboard.php index 3d963a7ef8116c972ea731b574767dfcd17a1084..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 100644 --- a/modules/Admin/Language/ar/Dashboard.php +++ b/modules/Admin/Language/ar/Dashboard.php @@ -9,8 +9,8 @@ declare(strict_types=1); */ return [ - 'home' => 'لوØØ© التØكم الإدارية', - 'welcome_message' => 'أهلًا بك ÙÙŠ المنطقة الإدارية!', + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', 'podcasts' => [ 'title' => 'Podcasts', 'not_found' => 'No published podcast', diff --git a/modules/Admin/Language/ar/Notifications.php b/modules/Admin/Language/ar/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/ar/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/br/Breadcrumb.php b/modules/Admin/Language/br/Breadcrumb.php index c3ea93ff27cb65a8eaf9fae284c3dca901db48a6..8702d4ce9dc9feec2ec242f31d582100c8a0bef4 100644 --- a/modules/Admin/Language/br/Breadcrumb.php +++ b/modules/Admin/Language/br/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'tennadoù son', 'video-clips' => 'tennadoù video', 'embed' => 'lenner enkorfet', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/br/Charts.php b/modules/Admin/Language/br/Charts.php index 1d70b13b5a0378001b1bd4fbd207fe17da5100c1..7de3c6acd6e64be4143d8cb5662c98526cf35d93 100644 --- a/modules/Admin/Language/br/Charts.php +++ b/modules/Admin/Language/br/Charts.php @@ -35,6 +35,6 @@ return [ 'by_weekday' => 'Dre zeiz ar sizhun (e-pad an 60 devezh diwezhañ)', 'by_hour' => 'Dre eur an devezh (e-pad an 60 devezh diwezhañ)', 'podcast_by_bandwidth' => 'Lec\'hed bann implijet bemdez (e MB)', - 'total_storage_by_month' => 'Monthly storage (in MB)', - 'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)', + 'total_storage_by_month' => 'Kadaviñ bep miz (e MB)', + 'total_bandwidth_by_month' => 'Lec\'hed bann implijet bep miz (e MB)', ]; diff --git a/modules/Admin/Language/br/Common.php b/modules/Admin/Language/br/Common.php index e9305d4ed2854a60b9d6ce1f9c090209f8fdc568..1cb6c3b2c01f607fb12e0aa89e4c57c6d040017b 100644 --- a/modules/Admin/Language/br/Common.php +++ b/modules/Admin/Language/br/Common.php @@ -20,7 +20,7 @@ return [ 'copy' => 'Eilañ', 'copied' => 'Eilet!', 'home' => 'Degemer', - 'explicit' => 'Endalc\'had evit an oadourien', + 'explicit' => 'Danvez evit an oadourien', 'powered_by' => 'Lusket gant {castopod}', 'actions' => 'Obererezhioù', 'pageInfo' => 'Pajenn {currentPage} diwar {pageCount}', @@ -46,6 +46,6 @@ return [ 'playing' => 'O lenn', ], 'size_limit' => 'Bevenn ar vent: {0}.', - 'choose_interact' => 'Dibabit penaos interaktiñ', - 'view' => 'View', + 'choose_interact' => 'Dibabit penaos bezañ e darempred', + 'view' => 'Gwelet', ]; diff --git a/modules/Admin/Language/br/Dashboard.php b/modules/Admin/Language/br/Dashboard.php index 0b7c784fb13d70937fdd734fdd8a16607562bdcd..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 100644 --- a/modules/Admin/Language/br/Dashboard.php +++ b/modules/Admin/Language/br/Dashboard.php @@ -9,8 +9,8 @@ declare(strict_types=1); */ return [ - 'home' => 'Taolenn-stur', - 'welcome_message' => 'Degemer mat en daolenn-stur!', + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', 'podcasts' => [ 'title' => 'Podcasts', 'not_found' => 'No published podcast', diff --git a/modules/Admin/Language/br/Episode.php b/modules/Admin/Language/br/Episode.php index 611955d3486157be83811bc459306d8525333837..800e64598321ac4953667f6b9a7dc0af4d5d5820 100644 --- a/modules/Admin/Language/br/Episode.php +++ b/modules/Admin/Language/br/Episode.php @@ -31,25 +31,26 @@ return [ 'publish_cancel_error' => 'Embannet eo bet ar rann dija.', 'unpublish_error' => 'N\'eo ket bet embannet ar rann.', 'delete' => 'Dilemel', - 'go_to_page' => 'Gwelout ar bajenn', + 'go_to_page' => 'Gwelet ar bajenn', 'create' => 'Ouzhpennañ ur rann', 'publication_status' => [ 'published' => 'Embannet', - 'with_podcast' => 'Published', + 'with_podcast' => 'Embannet', 'scheduled' => 'Steuñvet', 'not_published' => 'Diembann', ], - 'with_podcast_hint' => 'To be published at the same time as the podcast', + 'with_podcast_hint' => 'Embannet e vo war un dro gant ar podkast', 'list' => [ 'search' => [ - 'placeholder' => 'Search for an episode', - 'clear' => 'Clear search', - 'submit' => 'Search', + 'placeholder' => 'Klask ur rann', + 'clear' => 'Diverkañ an enklask', + 'submit' => 'Klask', ], 'number_of_episodes' => '{numberOfEpisodes, plural, - one {# episode} - other {# episodes} - }', + 0 {rann ebet} + one {# rann} + other {# rann} + }', 'episode' => 'Rann', 'visibility' => 'Gwelusted', 'comments' => 'Evezhiadennoù', @@ -59,30 +60,30 @@ return [ 'createSuccess' => 'Krouet eo bet ar rann gant berzh!', 'editSuccess' => 'Hizivaet eo bet ar rann gant berzh!', 'publishSuccess' => '{publication_status, select, - published {Episode successfully published!} - scheduled {Episode publication successfully scheduled!} - with_podcast {This episode will be published at the same time as the podcast.} - other {This episode is not published.} + published {Embannet eo bet ar rann gant berzh!} + scheduled {Raktreset eo bet embannadur ar rann gant berzh!} + with_podcast {Ar rann-mañ a vo embannet war un dro gant ar podkast.} + other {N\'eo ket bet embannet ar rann-mañ.} }', 'publishCancelSuccess' => 'Nullet eo bet embannadur ar rann gant berzh!', 'unpublishBeforeDeleteTip' => 'Ret eo deoc\'h diembannañ ar rann a-raok dilemel anezhi.', - 'scheduleDateError' => 'Schedule date must be set!', + 'scheduleDateError' => 'Ret eo lakaat un deiziad evit an embannadur!', '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} + 'deleteError' => 'C\'hwitadenn war dilemel {type, select, + transcript {treuzskrivadur} + chapters {chabistroù} + image {golo} + audio {aodio} other {media} - } file {file_path}. You may manually remove it from your disk.', + } ar rann.', + 'deleteFileError' => 'C\'hwitadenn war dilemel restr {type, select, + transcript {an treuzskrivadur} + chapters {ar chabistroù} + image {ar golo} + audio {an aodio} + other {ar media} + } ({file_path}). Gallout a rit lemel kuit ar restr-mañ diouzh ar gantenn dre zorn.', 'sameSlugError' => 'Bez ez eus eus ur rann gant ar berradur-mañ (slug) dija.', ], 'form' => [ @@ -94,11 +95,11 @@ 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' => 'Cover must be squared and at least 1400px wide and tall.', + 'cover_size_hint' => 'Ar golo a rankfe bezañ ur c\'harrez ha 1400px e vent da nebeutañ.', 'title' => 'Titl', 'title_hint' => 'Dleout a rafe anv ar rann, sklaer ha berr. Arabat lakaat niverenn ar rann pe ar c\'houlzad amañ.', - 'permalink' => 'Peurliamm', + 'permalink' => 'Ere peurzalc\'hus', 'season_number' => 'Koulzad', 'episode_number' => 'Rann', 'type' => [ @@ -112,10 +113,10 @@ return [ ], 'parental_advisory' => [ 'label' => 'Kemenn evit ar gerent', - 'hint' => 'Hag ar rann-mañ a zo endalc\'had ha ne zlefe ket gwelet gant bugale?', + 'hint' => 'Hag ar rann-mañ a zo danvez ha ne zlefe ket gwelet gant bugale?', 'undefined' => 'andermenet', 'clean' => 'Dereat', - 'explicit' => 'Endalc\'had evit an oadourien', + 'explicit' => 'Danvez evit an oadourien', ], 'show_notes_section_title' => 'Notennoù ar rann', 'show_notes_section_subtitle' => @@ -123,7 +124,7 @@ return [ 'description' => 'Deskrivadur', 'description_footer' => 'Traoñ an deskrivadur', 'description_footer_hint' => - 'Emañ ouzhpennet an destenn-mañ e dibenn an holl rannoù. Ul lec\'h mat eo evit lakaat liammoù ho rouedadoù sokial da skouer.', + 'Emañ ouzhpennet an destenn-mañ e dibenn an holl rannoù. Ul lec\'h mat eo evit lakaat ereoù ho rouedadoù sokial da skouer.', 'additional_files_section_title' => 'Restroù ouzhpenn', 'additional_files_section_subtitle' => 'Ar restroù-mañ a c\'hell bezañ implijet gant savennoù all evit aesaat an traoù d\'ho selaouerien·ezed. Sellit ouzh {podcastNamespaceLink} evit muioc\'h a ditouroù.', @@ -148,9 +149,9 @@ return [ 'M\'ho peus ezhomm eus balizennoù RSS ha n\'eus ket anezho e Castopod e c\'hellit o lakaat amañ.', 'custom_rss' => 'Balizennoù RSS personelaet evit ar rann', 'custom_rss_hint' => 'An dra-se a vo ouzhpennet e-barzh ar valizenn â¬itemâ.', - 'block' => 'Episode should be hidden from public catalogues', + 'block' => 'Ar rann-se a rankfe bezañ kuzhet diouzh ar rolladoù publik', 'block_hint' => - 'The episode show or hide status: toggling this on prevents the episode from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)', + 'Diskouez pe kuzhat ar rann: trec\'haoliñ an afell-mañ a viro ar rann-mañ ouzh bezañ diskouezet war Apple Podcasts, Google Podcasts pe savennoù all hag a implij ar renabloù-se. (N\'eus gwarant ebet)', 'submit_create' => 'Krouiñ ar rann', 'submit_edit' => 'Enrollañ ar rann', ], @@ -164,7 +165,7 @@ return [ 'publication_method' => [ 'now' => 'Bremañ', 'schedule' => 'Steuñviñ', - 'with_podcast' => 'Publish alongside podcast', + 'with_podcast' => 'Embann asambles gant ar podkast', ], 'scheduled_publication_date' => 'Deiziad embannadur steuñvet', 'scheduled_publication_date_clear' => 'Skarzhañ deiziad embannadur', diff --git a/modules/Admin/Language/br/Notifications.php b/modules/Admin/Language/br/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/br/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/br/Page.php b/modules/Admin/Language/br/Page.php index 4cfefec67a62a00f8a4b9cbf53617c0cd66426da..dccaa097788255c1488ae5b92433f8b89f63c6ba 100644 --- a/modules/Admin/Language/br/Page.php +++ b/modules/Admin/Language/br/Page.php @@ -18,7 +18,7 @@ return [ 'delete' => 'Dilemel ar bajenn', 'form' => [ 'title' => 'Titl', - 'permalink' => 'Peurliamm', + 'permalink' => 'Ere peurzalc\'hus', 'content' => 'Danvez', 'submit_create' => 'Krouiñ ar bajenn', 'submit_edit' => 'Enrollañ', diff --git a/modules/Admin/Language/br/Person.php b/modules/Admin/Language/br/Person.php index c28087d8f724b43f4ef25d54e0bf30f5fa93190a..9a1d0f69bba835bed9985d000853b02f302afafc 100644 --- a/modules/Admin/Language/br/Person.php +++ b/modules/Admin/Language/br/Person.php @@ -24,42 +24,42 @@ return [ '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', + 'An avatar a rankfe bezañ ur c\'harrez ha 400px e vent da nebeutañ.', + 'full_name' => 'Anv klok', + 'full_name_hint' => 'Anv klok pe lesanv an emeller·ez.', + 'unique_name' => 'Anv unel', + 'unique_name_hint' => 'Implijet evit an URLioù', + 'information_url' => 'URL an titouroù', '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', + 'Un URL a gas betek titouroù an emeller·ez, evel ur bajenn bersonel pe un aelad war ur savenn all.', + 'submit_create' => 'Krouiñ an emeller·ez', + 'submit_edit' => 'Enrollañ an emeller·ez', ], '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' => 'Merañ an emellerien·ezed', + 'add_section_title' => 'Ouzhpennañ emellerien·ezed d\'ar podkast-mañ', + 'add_section_subtitle' => 'Gallout a rit dibab meur a emeller·ez ha meur a roll.', + 'persons' => 'Emellerien·ezed', 'persons_hint' => - 'You may select one or several persons with the same roles. You need to create the persons first.', - 'roles' => 'Roles', + 'Gallout a rit dibab un emeller·ez pe meur a hini gant ar memes roll. Rankout a reoc\'h krouiñ an emellerien·ezed a-raok avat.', + 'roles' => 'Rolloù', 'roles_hint' => - 'You may select none, one or several roles for a person.', - 'submit_add' => 'Add person(s)', - 'remove' => 'Remove', + 'Gallout a rit dibab roll ebet, unan pe meur hini evit pep emeller·ez.', + 'submit_add' => 'Ouzhpennañ emellerien·ezed', + 'remove' => 'Lemel', ], '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' => 'Merañ an emellerien·ezed', + 'add_section_title' => 'Ouzhpennañ emellerien·ezed d\'ar rann-mañ', + 'add_section_subtitle' => 'Gallout a rit dibab meur a emeller·ez ha meur a roll.', + 'persons' => 'Emellerien·ezed', 'persons_hint' => - 'You may select one or several persons with the same roles. You need to create the persons first.', - 'roles' => 'Roles', + 'Gallout a rit dibab un emeller·ez pe meur a hini gant ar memes roll. Rankout a reoc\'h krouiñ an emellerien·ezed a-raok avat.', + 'roles' => 'Rolloù', 'roles_hint' => - 'You may select none, one or several roles for a person.', - 'submit_add' => 'Add person(s)', - 'remove' => 'Remove', + 'Gallout a rit dibab roll ebet, unan pe meur hini evit pep emeller·ez.', + 'submit_add' => 'Ouzhpennañ emellerien·ezed', + 'remove' => 'Lemel', ], - 'credits' => 'Credits', + 'credits' => 'Perzhidi', ]; diff --git a/modules/Admin/Language/br/Platforms.php b/modules/Admin/Language/br/Platforms.php index ab17d5999b1626535499464902c12f5c3bcb7aa8..71d041685ec995cd49501f5350e794dc2a41f658 100644 --- a/modules/Admin/Language/br/Platforms.php +++ b/modules/Admin/Language/br/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' => 'Savennoù', + 'home_url' => 'Mont da lec\'hienn {platformName}', + 'submit_url' => 'Kasit ho podkast war {platformName}', + 'visible' => 'Diskouez e pajenn ar podkast?', + 'on_embed' => 'Diskouez el lenner enkorfet?', + 'remove' => 'Dilemel {platformName}', + 'submit' => 'Enrollañ', 'messages' => [ - 'updateSuccess' => 'Platform links have been successfully updated!', - 'removeLinkSuccess' => 'The platform link has been removed.', + 'updateSuccess' => 'Hizivaet eo bet ereoù ar savennoù gant berzh!', + 'removeLinkSuccess' => 'Dilamet eo bet ere ar savenn.', 'removeLinkError' => - 'The platform link could not be removed. Try again.', + 'N\'eo ket bet dilamet ere ar savenn. Klaskit en-dro.', ], 'description' => [ - 'podcasting' => 'The podcast ID on this platform', - 'social' => 'The podcast account ID on this platform', - 'funding' => 'Call to action message', + 'podcasting' => 'ID ar podkast war ar savenn-mañ', + 'social' => 'ID kont ar podkast war ar savenn-mañ', + 'funding' => 'Kemennadenn evit broudañ', ], ]; diff --git a/modules/Admin/Language/br/Podcast.php b/modules/Admin/Language/br/Podcast.php index 61a53119c0bd847081ef98a9c660785d6d478b39..0de9f71b8442bfc6705831cdc2353490caffe753 100644 --- a/modules/Admin/Language/br/Podcast.php +++ b/modules/Admin/Language/br/Podcast.php @@ -14,53 +14,56 @@ return [ 'create' => 'Krouiñ ur podkast', 'import' => 'Enporzhiañ ur podkast', 'new_episode' => 'Rann nevez', - 'view' => 'View podcast', + 'view' => 'Gwelet ar podkast', 'edit' => 'Kemmañ ar podkast', - 'publish' => 'Publish podcast', - 'publish_edit' => 'Edit publication', + 'publish' => 'Embann ar podkast', + 'publish_edit' => 'Kemmañ an embannadur', 'delete' => 'Dilemel ar podkast', - 'see_episodes' => 'See episodes', - 'see_contributors' => 'See contributors', - 'go_to_page' => 'Gwelout ar bajenn', + 'see_episodes' => 'Gwelet ar rannoù', + 'see_contributors' => 'Gwelet ar berzhidi, ar perzhiadezed', + 'go_to_page' => 'Gwelet ar bajenn', 'latest_episodes' => 'Rannoù diwezhañ', - 'see_all_episodes' => 'Gwelout an holl rannoù', - 'draft' => 'Draft', + 'see_all_episodes' => 'Gwelet an holl rannoù', + 'draft' => 'Brouilhed', 'messages' => [ - 'createSuccess' => 'Podcast successfully created!', + '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} + 'deletePodcastMediaError' => 'C\'hwitadenn war dilemel {type, select, + cover {golo} + banner {giton} other {media} - }.', - 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select, - transcript {transcript} - chapters {chapters} - image {cover} - audio {audio} + } ar podkast.', + 'deleteEpisodeMediaError' => 'C\'hwitadenn war dilemel {type, select, + transcript {treuzskrivadur} + chapters {chabistroù} + image {golo} + audio {aodio} other {media} - }.', - 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', - 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, - one {# episode was} - other {# episodes were} - } added to the podcast!', - 'podcastFeedUpToDate' => 'Podcast is already up to date.', - 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', - 'publishError' => 'This podcast is either already published or scheduled for publication.', - 'publishEditError' => 'This podcast is not scheduled for publication.', - 'publishCancelSuccess' => 'Podcast publication successfully cancelled!', - 'scheduleDateError' => 'Schedule date must be set!', + } ar rann {episode_slug}.', + 'deletePodcastMediaFolderError' => 'C\'hwitadenn war dilemel teuliad ar mediaioù {folder_path}. Gallout a rit lemel an teuliad-mañ diouzh ar gantenn dre zorn.', + 'podcastFeedUpdateSuccess' => 'Hizivadenn: {number_of_new_episodes, plural, + one {# rann} + two {# rann} + few {# rann} + many {# rann} + other {# rann} + } a zo bet ouzhpennet d\'ar podkast gant berzh!', + 'podcastFeedUpToDate' => 'Hizivaet eo bet ar podkast dija.', + 'podcastNotImported' => 'C\'hwitadenn war hizivadenn ar podkast peogwir n\'eo ket bet enporzhiet.', + 'publishError' => 'Ar podkast-mañ a zo bet embannet dija pe steuñvet eo e embannadur.', + 'publishEditError' => 'N\'eo ket steuñvet embannadur ar podkast-mañ.', + 'publishCancelSuccess' => 'Nullet eo bet embannadur ar podkast gant berzh!', + 'scheduleDateError' => 'Ret eo lakaat un deiziad evit an embannadur!', ], 'form' => [ '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 and at least 1400px wide and tall.', + 'cover_size_hint' => 'Ar golo a rankfe bezañ ur c\'harrez ha 1400px e vent da nebeutañ.', 'banner' => 'Giton ar podkast', - 'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.', + 'banner_size_hint' => 'Ar giton a rankfe bezañ 3:1 e feur led/sav ha bezañ 1500px e led d\'an nebeutañ.', 'banner_delete' => 'Dilemel giton ar podkast', 'title' => 'Titl', 'handle' => 'Anv ar podkast (handle)', @@ -68,176 +71,176 @@ return [ 'Implijet evit anavezout ar podkast. Lizherennoù bras pe munut, niveroù hag islinenn (_) degemeret.', 'type' => [ 'label' => 'Doare', - 'episodic' => 'Episodic', - 'episodic_hint' => 'If episodes are intended to be consumed without any specific order. Newest episodes will be presented first.', - 'serial' => 'Serial', - 'serial_hint' => 'If episodes are intended to be consumed in sequential order. The oldest episodes will be presented first.', + 'episodic' => 'Bep ur mare', + 'episodic_hint' => 'M\'eo ar rannoù da vezañ selaouet hep urzh resis. Ar rannoù nevesoc’h a vo kinniget da gentañ.', + 'serial' => 'Heuliad', + 'serial_hint' => 'M\'eo ar rannoù da vezañ selaouet gant un urzh resis. Ar rannoù koshoc\'h a vo kinniget da gentañ.', ], 'description' => 'Deskrivadur', 'classification_section_title' => 'Rummatadur', 'classification_section_subtitle' => - 'These fields will impact your audience and competition.', + 'Ar maeziennoù-mañ o do ul levezon war an niver a selaouerien·ezed hag ho kevezerezh.', 'language' => 'Yezh', - 'category' => 'Category', - 'category_placeholder' => 'Select a category…', - 'other_categories' => 'Other categories', + 'category' => 'Rummad', + 'category_placeholder' => 'Dibab ur rummad…', + 'other_categories' => 'Rummadoù all', 'parental_advisory' => [ 'label' => 'Kemenn evit ar gerent', - 'hint' => 'Does it contain explicit content?', + 'hint' => 'Hag an dra-se a zo danvez ha ne zlefe ket gwelet gant bugale?', 'undefined' => 'andermenet', - 'clean' => 'Clean', - 'explicit' => 'Explicit', + 'clean' => 'Dereat', + 'explicit' => 'Danvez evit an oadourien', ], - 'author_section_title' => 'Author', - 'author_section_subtitle' => 'Who is managing the podcast?', - 'owner_name' => 'Owner name', + 'author_section_title' => 'Aozer·ez', + 'author_section_subtitle' => 'Piv zo o verañ ar podkast?', + 'owner_name' => 'Anv ar perc\'henn', 'owner_name_hint' => - 'For administrative use only. Visible in the public RSS feed.', - 'owner_email' => 'Owner email', + 'Evit a sell ouzh ar mererezh. War al lanv RSS publik e vo.', + 'owner_email' => 'Chomlec\'h postel ar perc\'henn', 'owner_email_hint' => - 'Will be used by most platforms to verify the podcast ownership. Visible in the public RSS feed.', - 'publisher' => 'Publisher', + 'Implijet e vo gant an darn vrasañ eus ar savennoù evit gwiriañ perc\'hentiezh ar podkast. War al lanv RSS publik e vo.', + 'publisher' => 'Embanner·ez', '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', + 'Ar strollad kiriek eus sevel ar podkast. Alies eo embregerezh pe rouedad ar podkast. A-wechoù e vez anvet ar vaezienn-mañ "Aozer·ez".', + 'copyright' => 'Gwirioù an aozer·ez', + 'location_section_title' => 'Lec\'h', + 'location_section_subtitle' => 'Eus peseurt lec\'h ez eus kaoz er podkast-mañ?', + 'location_name' => 'Anv pe chomlec\'h al lec\'h', + 'location_name_hint' => 'Gallout a ra bezañ gwir pe faltaziek', + 'monetization_section_title' => 'Moneisaat', 'monetization_section_subtitle' => - 'Earn money thanks to your audience.', - 'payment_pointer' => 'Payment Pointer for Web Monetization', + 'Dastum arc\'hant a-drugarez d\'ho selaouerien·ezed.', + 'payment_pointer' => 'Chomlec\'h paeañ (Payment Poienter) evit Web Monetization', 'payment_pointer_hint' => - 'This is your where you will receive money thanks to Web Monetization', - 'advanced_section_title' => 'Advanced Parameters', + 'Ar chomlec\'h ma vo dastumet an arc\'hant ganeoc\'h a-drugarez da Web Monetization', + 'advanced_section_title' => 'Arventennoù kempleshoc\'h', 'advanced_section_subtitle' => - 'If you need RSS tags that Castopod does not handle, set them here.', - 'custom_rss' => 'Custom RSS tags for the 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', + 'M\'ho peus ezhomm eus balizennoù RSS ha n\'eus ket anezho e Castopod e c\'hellit o lakaat amañ.', + 'custom_rss' => 'Balizennoù RSS personelaet evit ar podkast', + 'custom_rss_hint' => 'An dra-se a vo ouzhpennet e-barzh ar valizenn â¬channelâ.', + 'new_feed_url' => 'URL nevez al lanv', + 'new_feed_url_hint' => 'Implijit ar vaezienn-mañ pa cheñchit anv domani pe savenn herberc\'hiañ ho podkast. M\'eo enporzhiet ar podkast e vez lakaet enni URL a-vremañ al lanv dre ziouer.', + 'old_feed_url' => 'URL kozh al lanv', + 'update_feed' => 'Hizivaat al lanv', + 'update_feed_tip' => 'Enporzhiañ rannoù diwezhañ ar podkast-mañ', + 'partnership' => 'Kevelerezh', '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 public catalogues', + 'partner_link_url' => 'Ere URL', + 'partner_image_url' => 'URL ar skeudenn', + 'partner_id_hint' => 'Hoc’h ID deoc\'h-c\'hwi e ti ar c\'heveler', + 'partner_link_url_hint' => 'Chomlec\'h generek an ereoù gant ar c\'heveler', + 'partner_image_url_hint' => 'Chomlec\'h generek ar skeudennoù gant ar c\'heveler', + 'status_section_title' => 'Statud', + 'block' => 'Ar podkast a rankfe bezañ kuzhet diouzh ar rolladoù publik', 'block_hint' => - 'The podcast show or hide status: toggling this on prevents the entire podcast from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)', - 'complete' => 'Podcast will not be having new episodes', - 'lock' => 'Prevent podcast from being copied', + 'Diskouez pe kuzhat ar podkast: trec\'haoliñ an afell-mañ a viro ar podkast a-bezh ouzh bezañ diskouezet war Apple Podcasts, Google Podcasts pe savennoù all hag a implij ar renabloù-se. (N\'eus gwarant ebet)', + 'complete' => 'Ne vo mui rannoù nevez gant ar podkast', + 'lock' => 'Mirout ar podkast ouzh bezañ eilet', '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', + 'Ar pal eo lavaret d\'ar savennoù all hag aotreet int da enporzhiañ al lanv-mañ pe get. "Ya" a dalv eo nac\'het an holl c\'houlennoù enporzhiañ.', + 'submit_create' => 'Krouiñ ar podkast', + 'submit_edit' => 'Enrollañ ar podkast', ], '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', + 'uncategorized' => 'hep rummad', + 'arts' => 'Arzoù', + 'business' => 'Embregerezh', + 'comedy' => 'Fentc\'hoari', + 'education' => 'Deskadurezh', + 'fiction' => 'Faltazi', + 'government' => 'Gouarnamant', + 'health_and_fitness' => 'Yec\'hed ha fitness', + 'history' => 'Istor', + 'kids_and_family' => 'Bugale ha familh', + 'leisure' => 'Dudi', + 'music' => 'Sonerezh', + 'news' => 'Keleier', + 'religion_and_spirituality' => 'Relijion ha speredelezh', + 'science' => 'Skiant', + 'society_and_culture' => 'Kevredigezh ha sevenadur', + 'sports' => 'Sportoù', + 'technology' => 'Teknologiezh', + 'true_crime' => 'Teulioù an torfed', + 'tv_and_film' => 'Skinwel ha filmoù', + 'books' => 'Levrioù', + 'design' => 'Ergrafañ', + 'fashion_and_beauty' => 'Giz ha kened', + 'food' => 'Boued', + 'performing_arts' => 'Arzoù an arvest', + 'visual_arts' => 'Arzoù ar gweled', + 'careers' => 'Respetoù', + 'entrepreneurship' => 'Antreprenerezh', + 'investing' => 'Postadur', + 'management' => 'Mererezh', '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', + 'non_profit' => 'Hep pal kenwerzhel', + 'comedy_interviews' => 'Atersadennoù fentus', + 'improv' => 'Primaozañ', + 'stand_up' => 'Stand up', + 'courses' => 'Kentelioù', + 'how_to' => 'Tutorial', + 'language_learning' => 'Deskiñ yezhoù', + 'self_improvement' => 'Diorren hiniennel', + 'comedy_fiction' => 'Fentc\'hoari faltaziek', 'drama' => 'Drama', - 'science_fiction' => 'Science Fiction', - 'alternative_health' => 'Alternative Health', + 'science_fiction' => 'Skiant-faltazi', + 'alternative_health' => 'Yec\'hed all', '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', + 'medicine' => 'Medisinerezh', + 'mental_health' => 'Yec\'hed-spered', + 'nutrition' => 'Magadurezh', + 'sexuality' => 'Seksualegezh', + 'education_for_kids' => 'Deskadurezh evit ar vugale', + 'parenting' => 'Kerentelezh', + 'pets_and_animals' => 'Loened-ti ha loened', + 'stories_for_kids' => 'Marvailhoù evit ar vugale', + 'animation_and_manga' => 'Tresadennoù bev ha Manga', + 'automotive' => 'Kirri-tan', + 'aviation' => 'Kirri-nij', + 'crafts' => 'Artizanerezh', + 'games' => 'C\'hoarioù', + 'hobbies' => 'Dudioù', + 'home_and_garden' => 'Ti ha jardin', + 'video_games' => 'C\'hoarioù video', + 'music_commentary' => 'Evezhiadenn sonerezh', + 'music_history' => 'Istor ar sonerezh', + 'music_interviews' => 'Atersadennoù sonerezh', + 'business_news' => 'Keleier ekonomikel', + 'daily_news' => 'Keleier pemdeziek', + 'entertainment_news' => 'Keleier an diduamant', + 'news_commentary' => 'Evezhiadenn ar c\'heleier', + 'politics' => 'Politikerezh', + 'sports_news' => 'Keleier sport', + 'tech_news' => 'Keleier teknologiezh', + 'buddhism' => 'Boudaegezh', + 'christianity' => 'Kristeniezh', + 'hinduism' => 'Hindouegezh', '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', + 'judaism' => 'Yuzevegezh', + 'religion' => 'Relijion', + 'spirituality' => 'Speredelezh', + 'astronomy' => 'Steredoniezh', + 'chemistry' => 'Kimiezh', + 'earth_sciences' => 'Skiantoù an douar', + 'life_sciences' => 'Bevoniezh', + 'mathematics' => 'Matematikoù', + 'natural_sciences' => 'Skiantoù an natur', + 'nature' => 'Natur', + 'physics' => 'Fizik', + 'social_sciences' => 'Skiantoù sokial', + 'documentary' => 'Teulioù', + 'personal_journals' => 'Deizlevr hiniennel', + 'philosophy' => 'Prederouriezh', + 'places_and_travel' => 'Lec\'hioù ha beajoù', + 'relationships' => 'Darempredoù', 'baseball' => 'Baseball', - 'basketball' => 'Basketball', - 'cricket' => 'Cricket', - 'fantasy_sports' => 'Fantasy Sports', - 'football' => 'Football', + 'basketball' => 'Basket-ball', + 'cricket' => 'Kriked', + 'fantasy_sports' => 'Sportoù faltaziek', + 'football' => 'Mell-droad', 'golf' => 'Golf', 'hockey' => 'Hockey', - 'rugby' => 'Rugby', + 'rugby' => 'Rugbi', 'running' => 'Running', 'soccer' => 'Soccer', 'swimming' => 'Swimming', @@ -303,5 +306,5 @@ return [ 'sponsor' => 'Sponsor', 'funding_links' => 'Funding links for {podcastTitle}', 'find_on' => 'Find {podcastTitle} on', - 'listen_on' => 'Listen on', + 'listen_on' => 'Selaouit war', ]; diff --git a/modules/Admin/Language/br/PodcastImport.php b/modules/Admin/Language/br/PodcastImport.php index 7c3ef67d1f998b7f3d7e5d658d2ae7b99851f4f5..7ba8d90984be90772b9ec65a1389a8b58a58ea45 100644 --- a/modules/Admin/Language/br/PodcastImport.php +++ b/modules/Admin/Language/br/PodcastImport.php @@ -14,10 +14,10 @@ return [ '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' => 'URL al lanv', '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', + 'new_podcast_section_title' => 'Ar podkast nevez', + 'advanced_params_section_title' => 'Arventennoù kempleshoc\'h', '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', @@ -26,12 +26,12 @@ return [ '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' => 'Niverenn ar c\'houlzad', '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', + 'submit' => 'Enporzhiañ ar podkast', ]; diff --git a/modules/Admin/Language/br/PodcastNavigation.php b/modules/Admin/Language/br/PodcastNavigation.php index b619573154735a9370f5c222b74bf39acc09c8c8..56c575789d53f079e3b8e3c31a9690611bb38388 100644 --- a/modules/Admin/Language/br/PodcastNavigation.php +++ b/modules/Admin/Language/br/PodcastNavigation.php @@ -9,27 +9,27 @@ declare(strict_types=1); */ return [ - 'go_to_page' => 'Go to podcast page', - 'dashboard' => 'Podcast dashboard', - 'podcast-view' => 'Home', - 'podcast-edit' => 'Edit podcast', - 'podcast-persons-manage' => 'Manage persons', - 'episodes' => 'Episodes', - 'episode-list' => 'All episodes', - 'episode-create' => 'New episode', - 'analytics' => 'Analytics', + 'go_to_page' => 'Mont da pajenn ar podkast', + 'dashboard' => 'Taolenn-stur ar podkast', + 'podcast-view' => 'Degemer', + 'podcast-edit' => 'Kemmañ ar podkast', + 'podcast-persons-manage' => 'Merañ an emellerien·ezed', + 'episodes' => 'Rannoù', + 'episode-list' => 'An holl rannoù', + 'episode-create' => 'Rann nevez', + 'analytics' => 'Muzulioù heklev', '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', + 'podcast-analytics-locations' => 'Lec\'hioù', + 'podcast-analytics-unique-listeners' => 'Selaouerien·ezed unel', + 'podcast-analytics-players' => 'Lennerioù', + 'podcast-analytics-listening-time' => 'Padelezh ar selaou', + 'podcast-analytics-time-periods' => 'Mareoù ar selaou', + 'contributors' => 'Perzhidi, perzhiadezed', + 'contributor-list' => 'An holl berzhidi ha perzhiadezed', + 'contributor-add' => 'Ouzhpennañ ur perzhiad pe ur berzhiadez', + 'platforms' => 'Savennoù diavaez', + 'platforms-podcasting' => 'Podkast', + 'platforms-social' => 'Rouedadoù sokial', + 'platforms-funding' => 'Arc\'hantaouiñ', ]; diff --git a/modules/Admin/Language/br/Settings.php b/modules/Admin/Language/br/Settings.php index 345976be7f307ddd34bb7b3cf1d5a95d62935e6e..10c855bf4846359535cb146b9c78c829e32af763 100644 --- a/modules/Admin/Language/br/Settings.php +++ b/modules/Admin/Language/br/Settings.php @@ -9,21 +9,21 @@ declare(strict_types=1); */ return [ - 'title' => 'General settings', + 'title' => 'Arventennoù hollek', 'instance' => [ - 'title' => 'Instance', - 'site_icon' => 'Site icon', - 'site_icon_delete' => 'Delete site icon', + 'title' => 'Istañs', + 'site_icon' => 'Arlun al lec\'hienn', + 'site_icon_delete' => 'Dilemel arlun al lec\'hienn', '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', + 'site_icon_helper' => 'An arlun a rankfe bezañ ur c\'harrez ha 512px e vent da nebeutañ.', + 'site_name' => 'Titl al lec\'hienn', + 'site_description' => 'Deskrivadur al lec\'hienn', + 'submit' => 'Enrollañ', 'editSuccess' => 'Instance has been updated successfully!', 'deleteIconSuccess' => 'Site icon has been remove successfully!', ], 'images' => [ - 'title' => 'Images', + 'title' => 'Skeudennoù', '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!', @@ -41,8 +41,8 @@ return [ 'runSuccess' => 'Housekeeping has been run successfully!', ], 'theme' => [ - 'title' => 'Theme', - 'accent_section_title' => 'Accent color', + 'title' => 'Neuz', + 'accent_section_title' => 'Liv kentañ', 'accent_section_subtitle' => 'Choose the color to determine the look and feel of all public pages.', 'pine' => 'Pine', 'crimson' => 'Crimson', @@ -50,7 +50,7 @@ return [ 'lake' => 'Lake', 'jacaranda' => 'Jacaranda', 'onyx' => 'Onyx', - 'submit' => 'Save', - 'setInstanceThemeSuccess' => 'Theme has been updated successfully!', + 'submit' => 'Enrollañ', + 'setInstanceThemeSuccess' => 'Cheñchet eo bet an neuz gant berzh!', ], ]; diff --git a/modules/Admin/Language/br/Soundbite.php b/modules/Admin/Language/br/Soundbite.php index a3f828fe09fa68f902251e7438bb54a2727ac8cb..85d3ce584aa334d21ca0bd7b689fb0b29b662268 100644 --- a/modules/Admin/Language/br/Soundbite.php +++ b/modules/Admin/Language/br/Soundbite.php @@ -10,22 +10,22 @@ declare(strict_types=1); return [ 'list' => [ - 'title' => 'Soundbites', - 'soundbite' => 'Soundbite', + 'title' => 'Tennadoù son', + 'soundbite' => 'Tennad son', ], 'messages' => [ - 'createSuccess' => 'Soundbite has been successfully created!', - 'deleteSuccess' => 'Soundbite has been successfully removed!', + 'createSuccess' => 'Krouet eo bet an tennad son gant berzh!', + 'deleteSuccess' => 'Dilamet eo bet an tennad son gant berzh!', ], 'form' => [ - 'title' => 'New soundbite', - 'soundbite_title' => 'Soundbite title', - 'start_time' => 'Start at', - 'duration' => 'Duration', - 'submit' => 'Create soundbite', + 'title' => 'Tennad son nevez', + 'soundbite_title' => 'Titl an tennad son', + 'start_time' => 'Kregiñ da', + 'duration' => 'Padelezh', + 'submit' => 'Krouiñ an tennad son', ], - 'play' => 'Play soundbite', - 'stop' => 'Stop soundbite', - 'create' => 'New soundbite', - 'delete' => 'Delete soundbite', + 'play' => 'Lenn an tennad son', + 'stop' => 'Paouez an tennad son', + 'create' => 'Tennad son nevez', + 'delete' => 'Dilemel an tennad son', ]; diff --git a/modules/Admin/Language/br/User.php b/modules/Admin/Language/br/User.php index 8b2e478bf7b6c5d97364e6888e9724b8fa24188f..2684206f68a0bbb6eccceb575965952042f04440 100644 --- a/modules/Admin/Language/br/User.php +++ b/modules/Admin/Language/br/User.php @@ -9,29 +9,29 @@ declare(strict_types=1); */ return [ - 'edit_roles' => "Edit {username}'s roles", + 'edit_roles' => "Kemm rolloù {username}", 'forcePassReset' => 'Force pass reset', 'ban' => 'Ban', 'unban' => 'Unban', - 'delete' => 'Delete', - 'create' => 'New user', - 'view' => "{username}'s info", - 'all_users' => 'All users', + 'delete' => 'Dilemel', + 'create' => 'Krouiñ un implijer·ez', + 'view' => "Titouroù diwar-benn {username}", + 'all_users' => 'An holl implijerien·ezed', 'list' => [ - 'user' => 'User', - 'roles' => 'Roles', + 'user' => 'Implijer·ez', + 'roles' => 'Rolloù', '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!', + 'email' => 'Postel', + 'username' => 'Anv implijer·ez', + 'password' => 'Ger-tremen', + 'new_password' => 'Ger-tremen nevez', + 'roles' => 'Rolloù', + 'permissions' => 'Aotreoù', + 'submit_create' => 'Krouiñ an implijer·ez', + 'submit_edit' => 'Enrollañ', + 'submit_password_change' => 'Kemm!', ], 'roles' => [ 'superadmin' => 'Super admin', @@ -49,6 +49,6 @@ return [ '{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.', + 'deleteSuccess' => 'Dilamet eo bet {username}.', ], ]; diff --git a/modules/Admin/Language/br/VideoClip.php b/modules/Admin/Language/br/VideoClip.php index 638de697bba7f2c0fbc240dace9dd73bfeb77615..fa2adf21ae7355308ef196c2f4bb7578962dcf2d 100644 --- a/modules/Admin/Language/br/VideoClip.php +++ b/modules/Admin/Language/br/VideoClip.php @@ -10,29 +10,29 @@ declare(strict_types=1); return [ 'list' => [ - 'title' => 'Video clips', + 'title' => 'Tennadoù video', 'status' => [ - 'label' => 'Status', - 'queued' => 'queued', - 'queued_hint' => 'Clip is waiting to be processed.', - 'pending' => 'pending', + 'label' => 'Statud', + 'queued' => 'el lost', + 'queued_hint' => 'Emañ an tennad video el lost.', + 'pending' => 'o c\'hortoz', 'pending_hint' => 'Clip will be generated shortly.', 'running' => 'running', 'running_hint' => 'Clip is being generated.', - 'failed' => 'failed', + 'failed' => 'c\'hwitet', 'failed_hint' => 'Clip could not be generated: script failure.', 'passed' => 'passed', 'passed_hint' => 'Clip was generated successfully!', ], - 'clip' => 'Clip', + 'clip' => 'Tennad', 'duration' => 'Job duration', ], 'title' => 'Video clip: {videoClipLabel}', - 'download_clip' => 'Download clip', - 'create' => 'New video clip', - 'go_to_page' => 'Go to clip page', + 'download_clip' => 'Pellgargañ an tennad', + 'create' => 'Tennad video nevez', + 'go_to_page' => 'Mont da pajenn an tennad', 'retry' => 'Retry clip generation', - 'delete' => 'Delete clip', + 'delete' => 'Dilemel an tennad', 'logs' => 'Job logs', 'messages' => [ 'alreadyExistingError' => 'The video clip you are trying to create already exists!', @@ -47,14 +47,14 @@ return [ 'form' => [ 'title' => 'New video clip', 'params_section_title' => 'Video clip parameters', - 'clip_title' => 'Clip title', + 'clip_title' => 'Titl an tennad', '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', + 'theme' => 'Dibab un neuz', 'start_time' => 'Start at', 'duration' => 'Duration', 'trim_start' => 'Trim start', @@ -62,11 +62,11 @@ return [ 'submit' => 'Create video clip', ], 'requirements' => [ - 'title' => 'Missing requirements', + 'title' => 'Mankout a ra binvioù', '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)', + 'freetype' => 'Levraoueg Freetype evit GD', + 'transcript' => 'Restr an treuzskrivadur (.srt)', ], ]; diff --git a/modules/Admin/Language/de/Breadcrumb.php b/modules/Admin/Language/de/Breadcrumb.php index 01449c4af3911afa7c1d692e9506fea9ccd3da8c..b54c9c8e390f5bc5ad2f6b72d890b543589ba137 100644 --- a/modules/Admin/Language/de/Breadcrumb.php +++ b/modules/Admin/Language/de/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'Tonschnipsel', 'video-clips' => 'Videoclips', 'embed' => 'einbettbarer Spieler', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/de/Common.php b/modules/Admin/Language/de/Common.php index a4447027500cc43a9609f78afbc591f451c558a2..f9b6a99cb612fb7ab5dcc240d7054c1c488dad6d 100644 --- a/modules/Admin/Language/de/Common.php +++ b/modules/Admin/Language/de/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'Spielt', ], 'size_limit' => 'Größenlimit: {0}.', - 'choose_interact' => 'Mit welchem Podcast-Profil wollen Sie handeln', + 'choose_interact' => 'Choose how to interact', 'view' => 'View', ]; diff --git a/modules/Admin/Language/de/Dashboard.php b/modules/Admin/Language/de/Dashboard.php index 7dc34ad8eb12d7e03b3b8532b1da21a3263892c5..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 100644 --- a/modules/Admin/Language/de/Dashboard.php +++ b/modules/Admin/Language/de/Dashboard.php @@ -9,8 +9,8 @@ declare(strict_types=1); */ return [ - 'home' => 'Adminübersicht', - 'welcome_message' => 'Willkommen im Administrationsbereich!', + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', 'podcasts' => [ 'title' => 'Podcasts', 'not_found' => 'No published podcast', diff --git a/modules/Admin/Language/de/Episode.php b/modules/Admin/Language/de/Episode.php index 4ccb1d949e9d7ffcfc65e3d818cdbd8a4b9a5136..eaa881fd3810f0cfcca9ee9288ae253691d7284a 100644 --- a/modules/Admin/Language/de/Episode.php +++ b/modules/Admin/Language/de/Episode.php @@ -178,7 +178,7 @@ return [ ], 'unpublish_form' => [ 'disclaimer' => - "Das Zurückziehen der Episode löscht alle damit verbundenen Beiträge und entfernt sie aus dem RSS-Feed des Podcasts.", + "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'Ich verstehe, ich möchte die Episode zurückziehen', 'submit' => 'Zurückziehen', ], diff --git a/modules/Admin/Language/de/Notifications.php b/modules/Admin/Language/de/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/de/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/el/Breadcrumb.php b/modules/Admin/Language/el/Breadcrumb.php index c235a34f9742243c23fbce02b6ef588714b54747..cad9d1b4c14c6300621ec65502b9db606dcf13ed 100644 --- a/modules/Admin/Language/el/Breadcrumb.php +++ b/modules/Admin/Language/el/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'ήχοι', 'video-clips' => 'βίντεο κλιπς', 'embed' => 'ενσωματώσιμος αναπαÏαγωγÎας', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/el/Common.php b/modules/Admin/Language/el/Common.php index 2ec4cac11d20eab20e8bb70fbccf92abb570f75a..13b75af434aa9319c73adba634b7100f45357dc5 100644 --- a/modules/Admin/Language/el/Common.php +++ b/modules/Admin/Language/el/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'ΑναπαÏάγεται', ], 'size_limit' => 'ÎŒÏιο μεγÎθους: {0}.', - 'choose_interact' => 'ΕπιλÎξτε τον Ï„Ïόπο αλληλεπίδÏασης', + 'choose_interact' => 'Choose how to interact', 'view' => 'View', ]; diff --git a/modules/Admin/Language/el/Episode.php b/modules/Admin/Language/el/Episode.php index 906b255bda49e47f824b43623c397b5371c66ac9..8dee5476aac6fbeae2dfc839e4477bbf34832b4e 100644 --- a/modules/Admin/Language/el/Episode.php +++ b/modules/Admin/Language/el/Episode.php @@ -178,7 +178,7 @@ return [ ], 'unpublish_form' => [ 'disclaimer' => - "Η κατάÏγηση της δημοσίευσης του επεισοδίου θα διαγÏάψει όλες τις δημοσιεÏσεις που σχετίζονται με αυτό και θα τις αφαιÏÎσει από τη Ïοή RSS του podcast.", + "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'Καταλαβαίνω, θÎλω να αποδημοσιεÏσει το επεισόδιο', 'submit' => 'ΑναίÏεση δημοσίευσης', ], diff --git a/modules/Admin/Language/el/Notifications.php b/modules/Admin/Language/el/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/el/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/es/Breadcrumb.php b/modules/Admin/Language/es/Breadcrumb.php index ee7001fce077e1d888635463e824140121c7d70b..e06fe65784b6b18e1eaeba2303b4fb69d7381e61 100644 --- a/modules/Admin/Language/es/Breadcrumb.php +++ b/modules/Admin/Language/es/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'fragmentos de sonido', 'video-clips' => 'clips de vÃdeo', 'embed' => 'reproductor embebido', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/es/Common.php b/modules/Admin/Language/es/Common.php index 0502f776cb2cad8edfcd09c8d2c4421e201fe046..91d41dc1ca21bf3feecd137bd279d265bd835782 100644 --- a/modules/Admin/Language/es/Common.php +++ b/modules/Admin/Language/es/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'Reproduciendo', ], 'size_limit' => 'LÃmite de tamaño: {0}.', - 'choose_interact' => 'Elige cómo interactuar', + 'choose_interact' => 'Choose how to interact', 'view' => 'View', ]; diff --git a/modules/Admin/Language/es/Episode.php b/modules/Admin/Language/es/Episode.php index 7a15ab347efafedbbd5af3e90337a240453b9782..7c7c7047bdcf98cc608f743360a45b8a7f6d964b 100644 --- a/modules/Admin/Language/es/Episode.php +++ b/modules/Admin/Language/es/Episode.php @@ -178,7 +178,7 @@ return [ ], 'unpublish_form' => [ 'disclaimer' => - "Al cancelar la publicación del episodio se eliminarán todos los mensajes asociados a él y se eliminarán del feed RSS del podcast.", + "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'Lo entiendo, quiero anular la publicación del episodio', 'submit' => 'Anular publicación', ], diff --git a/modules/Admin/Language/es/Notifications.php b/modules/Admin/Language/es/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/es/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/fa/Breadcrumb.php b/modules/Admin/Language/fa/Breadcrumb.php index d9400ca786ad22820c4bda166f6f11e61a0cb199..24bece0140b8e7cbd6edf835d096f76a43f97e70 100644 --- a/modules/Admin/Language/fa/Breadcrumb.php +++ b/modules/Admin/Language/fa/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'soundbites', 'video-clips' => 'video clips', 'embed' => 'embeddable player', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/fa/Notifications.php b/modules/Admin/Language/fa/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/fa/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/fr/Breadcrumb.php b/modules/Admin/Language/fr/Breadcrumb.php index 814b02c0ede4dffe2a006850de8f5cd7126b14cb..126727275c0b415ef1c02bdb0ad53e30fae0da01 100644 --- a/modules/Admin/Language/fr/Breadcrumb.php +++ b/modules/Admin/Language/fr/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'extraits sonores', 'video-clips' => 'extraits vidéo', 'embed' => 'lecteur intégré', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/fr/Common.php b/modules/Admin/Language/fr/Common.php index 0a12d861d511d301a1d631259bf2c57addbe786e..f66f2a29530d0a9d82c0c8f1fcf6c0884bcefb03 100644 --- a/modules/Admin/Language/fr/Common.php +++ b/modules/Admin/Language/fr/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'En cours', ], 'size_limit' => 'Taille maximale : {0}.', - 'choose_interact' => 'Choisissez comment interagir', - 'view' => 'Voir', + 'choose_interact' => 'Choose how to interact', + 'view' => 'View', ]; diff --git a/modules/Admin/Language/fr/Dashboard.php b/modules/Admin/Language/fr/Dashboard.php index c47c901bbe67a9b745544bfe2865db15f04f0699..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 100644 --- a/modules/Admin/Language/fr/Dashboard.php +++ b/modules/Admin/Language/fr/Dashboard.php @@ -9,8 +9,8 @@ declare(strict_types=1); */ return [ - 'home' => 'Tableau de bord', - 'welcome_message' => 'Bienvenue dans l’administration !', + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', 'podcasts' => [ 'title' => 'Podcasts', 'not_found' => 'No published podcast', diff --git a/modules/Admin/Language/fr/Episode.php b/modules/Admin/Language/fr/Episode.php index d74545a10d45741a8e72e310ebc32083373732a8..a65e0234204b052a94efe608f276bc65617d5a70 100644 --- a/modules/Admin/Language/fr/Episode.php +++ b/modules/Admin/Language/fr/Episode.php @@ -178,7 +178,7 @@ return [ ], 'unpublish_form' => [ 'disclaimer' => - "Dépublier l’épisode supprimera toutes les publications qui lui sont associées et le retirera du flux RSS du podcast.", + "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'Je comprends, je veux dépublier l’épisode', 'submit' => 'Dépublier', ], diff --git a/modules/Admin/Language/fr/Notifications.php b/modules/Admin/Language/fr/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/fr/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/gd/Breadcrumb.php b/modules/Admin/Language/gd/Breadcrumb.php index d9400ca786ad22820c4bda166f6f11e61a0cb199..24bece0140b8e7cbd6edf835d096f76a43f97e70 100644 --- a/modules/Admin/Language/gd/Breadcrumb.php +++ b/modules/Admin/Language/gd/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'soundbites', 'video-clips' => 'video clips', 'embed' => 'embeddable player', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/gd/Notifications.php b/modules/Admin/Language/gd/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/gd/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/gl/Breadcrumb.php b/modules/Admin/Language/gl/Breadcrumb.php new file mode 100644 index 0000000000000000000000000000000000000000..93ead034bf7f0a5a593c990ce70570df91b9a61b --- /dev/null +++ b/modules/Admin/Language/gl/Breadcrumb.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 [ + 'label' => 'breadcrumb', + config('Admin') + ->gateway => 'Inicio', + 'podcasts' => 'podcasts', + 'episodes' => 'episodios', + 'contributors' => 'contribúen', + 'pages' => 'páxinas', + 'settings' => 'axustes', + 'theme' => 'decorado', + 'add' => 'engadir', + 'new' => 'novo', + 'edit' => 'editar', + 'persons' => 'persoas', + 'publish' => 'publicar', + 'publish-edit' => 'editar publicación', + 'unpublish' => 'retirar publicación', + 'delete' => 'eliminar', + 'fediverse' => 'fediverso', + 'block-lists' => 'listas de bloqueo', + 'users' => 'usuarias', + 'my-account' => 'a miña conta', + 'change-password' => 'cambiar contrasinal', + 'import' => 'importar fonte', + 'platforms' => 'plataformas', + 'social' => 'redes sociais', + 'funding' => 'financiamento', + 'analytics' => 'análise', + 'locations' => 'localizacións', + 'webpages' => 'páxinas web', + 'unique-listeners' => 'oÃntes únicos', + 'players' => 'reprodutores', + 'listening-time' => 'tempo de escoita', + 'time-periods' => 'perÃodo de tempo', + 'soundbites' => 'soundbites', + 'video-clips' => 'clips de vÃdeo', + 'embed' => 'reprodutor para incluÃr', + 'notifications' => 'notifications', +]; diff --git a/modules/Admin/Language/gl/Charts.php b/modules/Admin/Language/gl/Charts.php new file mode 100644 index 0000000000000000000000000000000000000000..edd2f8af1fb68333d38f77eb3f821053c9528a2a --- /dev/null +++ b/modules/Admin/Language/gl/Charts.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 [ + 'by_service_weekly' => 'Descargas do episodio por servizo (na última semana)', + 'by_player_weekly' => 'Descargas do episodio por reprodutor (na última semana)', + 'by_player_yearly' => 'Descargas do episodio por reprodutor (no último ano)', + 'by_device_weekly' => 'Descargas do episodio por dispositivo (na última semana)', + 'by_os_weekly' => 'Descargas do episodio por SO (na última semana)', + 'podcast_by_region' => 'Descargas do episodio por rexión (na última semana)', + 'unique_daily_listeners' => 'OÃntes únicas diarias', + 'unique_monthly_listeners' => 'OÃntes únicas mensuais', + 'by_browser' => 'Uso de páxinas web por navegador (na última semana)', + 'podcast_by_day' => 'Descargas diarias do episodio', + 'podcast_by_month' => 'Descargas mensuais do episodio', + 'episode_by_day' => 'Descargas diarias do episodio (primeiros 60 dÃas)', + 'episode_by_month' => 'Descargas mensuais do episodio', + 'episodes_by_day' => + 'Descargas dos últimos 5 episodios (durante os primeiros 60 dÃas)', + 'by_country_weekly' => 'Descargas do episodio por paÃs (na última semana)', + 'by_country_yearly' => 'Descargas de episodio por paÃs (no último ano)', + 'by_domain_weekly' => 'Visitas a páxinas web por orixe (na última semana)', + 'by_domain_yearly' => 'Visitas a páxinas web por orixe (no último ano)', + 'by_entry_page' => 'Visitas a páxinas we por páxina de entrada (na última semana)', + 'podcast_bots' => 'Bots (rastrexadores)', + 'daily_listening_time' => 'Tempo de escoita acumulado diario', + 'monthly_listening_time' => 'Tempo de escoita acumulado mensual', + 'by_weekday' => 'Por dÃa da semana (nos últimos 60 dÃas)', + 'by_hour' => 'Por hora do dÃa (nos últimos 60 dÃas)', + 'podcast_by_bandwidth' => 'Ancho de banda diario utilizado (en MB)', + 'total_storage_by_month' => 'Almacenaxe mensual (en MB)', + 'total_bandwidth_by_month' => 'Ancho de banda mensual utilizado (en MB)', +]; diff --git a/modules/Admin/Language/gl/Common.php b/modules/Admin/Language/gl/Common.php new file mode 100644 index 0000000000000000000000000000000000000000..66a6f8d2d762884cc6f10efbfeb615c936f37007 --- /dev/null +++ b/modules/Admin/Language/gl/Common.php @@ -0,0 +1,51 @@ +<?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' => 'Si', + 'no' => 'Non', + 'cancel' => 'Cancelar', + 'optional' => 'Optativo', + 'more' => 'Máis', + 'no_data' => 'Non se atopan datos!', + 'close' => 'Pechar', + 'edit' => 'Editar', + 'copy' => 'Copiar', + 'copied' => 'Copiado!', + 'home' => 'Inicio', + 'explicit' => 'ExplÃcito', + 'powered_by' => 'Grazas a {castopod}', + 'actions' => 'Accións', + 'pageInfo' => 'Páxina {currentPage} de {pageCount}', + 'go_back' => 'Volver', + 'forms' => [ + 'editor' => [ + 'write' => 'Escribir', + 'preview' => 'Vista previa', + 'help' => 'Con soporte markdown', + ], + 'multiSelect' => [ + 'selectText' => 'Preme para seleccionar', + 'loadingText' => 'Cargando…', + 'noResultsText' => 'Non se atoparon resultados', + 'noChoicesText' => 'Non hai opcións para elexir', + 'maxItemText' => 'Non podes engadir máis elementos', + ], + 'upload_file' => 'Subir un ficheiro', + 'remote_url' => 'URL remoto', + ], + 'play_episode_button' => [ + 'play' => 'Reproducir', + 'playing' => 'Reproducindo', + ], + 'size_limit' => 'LÃmite do tamaño: {0}.', + 'choose_interact' => 'Elixe como interactuar', + 'view' => 'Ver', +]; diff --git a/modules/Admin/Language/gl/Contributor.php b/modules/Admin/Language/gl/Contributor.php new file mode 100644 index 0000000000000000000000000000000000000000..a09021cde7de7273c6b256609e91d4aabc6aea3c --- /dev/null +++ b/modules/Admin/Language/gl/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' => 'Contribúen ao podcast', + 'view' => "Contribución de {username} a {podcastTitle}", + 'add' => 'Engadir colaboración', + 'add_contributor' => 'Engadir unha colaboración a {0}', + 'edit_role' => 'Actualizar rol de {0}', + 'edit' => 'Editar', + 'remove' => 'Eliminar', + 'list' => [ + 'username' => 'Identificador', + 'role' => 'Rol', + ], + 'form' => [ + 'user' => 'Usuaria', + 'user_placeholder' => 'Elixe unha usuaria…', + 'role' => 'Rol', + 'role_placeholder' => 'Elixe o seu rol…', + 'submit_add' => 'Engadir colaboración', + 'submit_edit' => 'Actualizar rol', + ], + 'roles' => [ + 'podcast_admin' => 'Admin podcast', + ], + 'messages' => [ + 'removeOwnerError' => "Non podes eliminar a propietaria do podcast!", + 'removeSuccess' => + 'Quitaches correctamente a {username} de {podcastTitle}', + 'alreadyAddedError' => + "A colaboradora que intentas engadir xa está engadida!", + ], +]; diff --git a/modules/Admin/Language/gl/Countries.php b/modules/Admin/Language/gl/Countries.php new file mode 100644 index 0000000000000000000000000000000000000000..cf34b15ff5b2ca190e3997b6dd315f4d572f92f7 --- /dev/null +++ b/modules/Admin/Language/gl/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' => 'Brasil', + 'BS' => 'Bahamas', + 'BT' => 'Bután', + 'BV' => 'Illa Bouvet', + 'BW' => 'Botswana', + 'BY' => 'Bielorrusia', + 'BZ' => 'Belice', + 'CA' => 'Canadá', + 'CC' => 'Illas Cocos (Keeling)', + 'CD' => 'Congo, República Democrática do', + 'CF' => 'República Centro Africana', + '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' => 'Chipre', + 'CZ' => 'República Checa', + 'DE' => 'Alemaña', + 'DJ' => 'Djibuti', + 'DK' => 'Dinamarca', + 'DM' => 'Dominica', + 'DO' => 'República Dominicana', + 'DZ' => 'Alxeria', + 'EC' => 'Ecuador', + 'EE' => 'Estonia', + 'EG' => 'Exipto', + 'EH' => 'O Sáhara Occidental', + 'ER' => 'Eritrea', + 'ES' => 'España', + 'ET' => 'EtiopÃa', + 'FI' => 'Finlandia', + 'FJ' => 'Fidji', + 'FK' => 'Illas Malvinas', + 'FM' => 'Estados Federados da Micronesia', + 'FO' => 'Illas Feroe', + 'FR' => 'Francia', + 'GA' => 'Gabón', + 'GB' => 'Reino Unido', + 'GD' => 'Granada', + 'GE' => 'Xeorxia', + 'GF' => 'Güiana Francesa', + 'GG' => 'Guernsey', + 'GH' => 'Ghana', + 'GI' => 'Xibraltar', + 'GL' => 'Groenlandia', + 'GM' => 'Gambia', + 'GN' => 'Guinea', + 'GP' => 'Guadalupe', + 'GQ' => 'Guinea Ecuatorial', + 'GR' => 'Grecia', + 'GS' => 'Xeorxia do Sur e Islas Sandwich do Sur', + 'GT' => 'Guatemala', + 'GU' => 'Guam', + 'GW' => 'Guinea-Bisau', + 'GY' => 'Güiana', + 'HK' => 'Hong Kong', + 'HM' => 'Illas Heard e McDonald', + 'HN' => 'Honduras', + 'HR' => 'Croacia', + 'HT' => 'HaitÃ', + 'HU' => 'HungrÃa', + 'ID' => 'Indonesia', + 'IE' => 'Irlanda', + 'IL' => 'Israel', + 'IM' => 'Illa de 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' => 'Maldivas', + 'MW' => 'Malaui', + 'MX' => 'México', + 'MY' => 'Malaisia', + 'MZ' => 'Mozambique', + 'N/A' => 'Sen correspondencia (IP local…)', + 'NA' => 'Namibia', + 'NC' => 'Nova Caledonia', + 'NE' => 'NÃxer', + 'NF' => 'Illa Norfolk', + 'NG' => 'Nixeria', + 'NI' => 'Nicaragua', + 'NL' => 'PaÃses Baixos', + 'NO' => 'Noruega', + 'NP' => 'Nepal', + 'NR' => 'Nauru', + 'NU' => 'Niue', + 'NZ' => 'Nova Zelandia', + 'OM' => 'Omán', + 'PA' => 'Panamá', + 'PE' => 'Perú', + 'PF' => 'Polinesia francesa', + 'PG' => 'Papúa Nova Guinea', + 'PH' => 'Filipinas', + 'PK' => 'Paquistán', + 'PL' => 'Polonia', + 'PM' => 'San Pedro e Miguelón', + 'PN' => 'Pitcairn', + 'PR' => 'Porto Rico', + 'PS' => 'Estado de Palestina', + 'PT' => 'Portugal', + 'PW' => 'Palau', + 'PY' => 'Paraguai', + 'QA' => 'Catar', + 'RE' => 'Reunión', + 'RO' => 'RomanÃa', + 'RS' => 'Serbia', + 'RU' => 'Federación Rusa', + 'RW' => 'Ruanda', + 'SA' => 'Arabia Saudita', + 'SB' => 'Illas Salomón', + 'SC' => 'Seixeles', + 'SD' => 'Sudán', + 'SE' => 'Suecia', + 'SG' => 'Singapur', + 'SH' => 'Santa Helena, Ascensión e Tristán da Cunha', + 'SI' => 'Eslovenia', + 'SJ' => 'Svalbard e Jan Mayen', + 'SK' => 'Eslovaquia', + 'SL' => 'Serra Leoa', + '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/gl/Dashboard.php b/modules/Admin/Language/gl/Dashboard.php new file mode 100644 index 0000000000000000000000000000000000000000..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 --- /dev/null +++ b/modules/Admin/Language/gl/Dashboard.php @@ -0,0 +1,28 @@ +<?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 [ + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', + 'podcasts' => [ + 'title' => 'Podcasts', + 'not_found' => 'No published podcast', + 'last_published' => 'Last published on {lastPublicationDate}', + ], + 'episodes' => [ + 'title' => 'Episodes', + 'not_found' => 'No published episode', + 'last_published' => 'Last published on {lastPublicationDate}', + ], + 'storage' => [ + 'title' => 'Storage', + 'subtitle' => '{totalUploaded} out of {totalStorage}', + ], +]; diff --git a/modules/Admin/Language/gl/Episode.php b/modules/Admin/Language/gl/Episode.php new file mode 100644 index 0000000000000000000000000000000000000000..bfc6647af5334695874bccb01ae497bc8e72a2ec --- /dev/null +++ b/modules/Admin/Language/gl/Episode.php @@ -0,0 +1,202 @@ +<?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' => 'Tempada {seasonNumber} episodio {episodeNumber}', + 'season_episode_abbr' => 'S{seasonNumber}E{episodeNumber}', + 'number_of_comments' => '{numberOfComments, plural, + one {# comentario} + other {# comentarios} + }', + 'all_podcast_episodes' => 'Tódolos episodios do podcast', + 'back_to_podcast' => 'Volver ao podcast', + 'edit' => 'Editar', + 'publish' => 'Publicar', + 'publish_edit' => 'Editar publicación', + 'unpublish' => 'Retirar publicación', + 'publish_error' => 'O episodio xa está publicado.', + 'publish_edit_error' => 'O episodio xa está publicado.', + 'publish_cancel_error' => 'O episodio xa está publicado.', + 'unpublish_error' => 'O episodio non foi publicado.', + 'delete' => 'Eliminar', + 'go_to_page' => 'Ir á páxina', + 'create' => 'Engadir un episodio', + 'publication_status' => [ + 'published' => 'Publicado', + 'with_podcast' => 'Publicado', + 'scheduled' => 'Programado', + 'not_published' => 'Sen publicar', + ], + 'with_podcast_hint' => 'Para ser publicado ao mesmo tempo que o podcast', + 'list' => [ + 'search' => [ + 'placeholder' => 'Buscar un episodio', + 'clear' => 'Limpar busca', + 'submit' => 'Buscar', + ], + 'number_of_episodes' => '{numberOfEpisodes, plural, + one {# episodio} + other {# episodios} + }', + 'episode' => 'Episodio', + 'visibility' => 'Visibilidade', + 'comments' => 'Comentarios', + 'actions' => 'Accións', + ], + 'messages' => [ + 'createSuccess' => 'Episodio creado correctamente!', + 'editSuccess' => 'Episodio actualizado correctamente!', + 'publishSuccess' => '{publication_status, select, + published {Episodio publicado correctamente!} + scheduled {Programación correcta para o episodio!} + with_podcast {Este episodio vaise publicar ao mesmo tempo que o podcast.} + other {Este episodio non foi publicado.} + }', + 'publishCancelSuccess' => 'Cancelouse correctamente a publicación do episodio!', + 'unpublishBeforeDeleteTip' => 'Tes que retirar a publicación do episodio antes de eliminalo.', + 'scheduleDateError' => 'Debes establecer a data de publicación!', + 'deletePublishedEpisodeError' => 'Retira a publicación do episodio antes de eliminalo.', + 'deleteSuccess' => 'Episodio eliminado correctamente!', + 'deleteError' => 'Fallou a eliminación {type, select, + transcript {da transcrición} + chapters {dos capÃtulos} + image {da imaxe} + audio {do audio} + other {do multimedia} + } do episodio.', + 'deleteFileError' => 'Fallou a eliminación do ficheiro {type, select, + transcript {da transcrición} + chapters {dos capÃtulos} + image {da imaxe} + audio {do audio} + other {do multimedia} + } {file_path}. DeberÃas eliminala manualmente do disco.', + 'sameSlugError' => 'Xa existe un episodio co id de url elexido.', + ], + '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' => 'Ficheiro de son', + 'audio_file_hint' => 'Elixe un ficheiro .mp3 ou un .m4a de audio.', + 'info_section_title' => 'Info do episodio', + 'cover' => 'Portada do episodio', + 'cover_hint' => + 'Se non estableces unha portada usarase a portada do podcast no seu lugar.', + 'cover_size_hint' => 'A portada ten que ser cadrada e como mÃnimo de 1400px de alto e ancho.', + 'title' => 'TÃtulo', + 'title_hint' => + 'Debe conter un nome de episodio claro e conciso. Non indiques aquà a tempada ou número de episodio.', + 'permalink' => 'Ligazón permanente', + 'season_number' => 'Tempada', + 'episode_number' => 'Episodio', + 'type' => [ + 'label' => 'Tipo', + 'full' => 'Completo', + 'full_hint' => 'Contido completo (o episodio)', + 'trailer' => 'Avance', + 'trailer_hint' => 'Peza curta de carácter promocional que representa unha vista previa do programa actual', + 'bonus' => 'Extra', + 'bonus_hint' => 'Contido extra para o programa (por exemplo, info sobre a elaboración ou conversa casual cos participantes) ou contido promocional de outras creadoras', + ], + 'parental_advisory' => [ + 'label' => 'Aviso sobre o contido', + 'hint' => 'Contén o episodio elementos explÃcitos?', + 'undefined' => 'non definido', + 'clean' => 'Limpo', + 'explicit' => 'ExplÃcito', + ], + 'show_notes_section_title' => 'Mostrar notas', + 'show_notes_section_subtitle' => + 'Ata 4000 caracteres, mantén a concisión e claridade. As notas do episodio axudan a que pontenciais oÃntes atopen o programa.', + 'description' => 'Descrición', + 'description_footer' => 'Nota ao pé descritiva', + 'description_footer_hint' => + 'Este texto engádese ao final da descrición de cada episodio, é un bo lugar para engadir por exemplo ligazóns a medios sociais.', + 'additional_files_section_title' => 'Ficheiros adicionais', + 'additional_files_section_subtitle' => + 'Estos ficheiros poden ser usados por outras plataformas para proporcionar unha mellor experiencia para a túa audiencia. Mira {podcastNamespaceLink} para máis información.', + 'location_section_title' => 'Localización', + 'location_section_subtitle' => 'De qué lugar trata o episodio?', + 'location_name' => 'Nome da localización e enderezo', + 'location_name_hint' => 'Pode ser unha localización real ou ficticia', + 'transcript' => 'Transcrición (subtÃtulos / texto descritivo)', + 'transcript_hint' => 'Só admite .srt', + 'transcript_download' => 'Descargar transcrición', + 'transcript_file' => 'Fichero da transcrición (.srt)', + 'transcript_remote_url' => 'URL remoto da transcrición', + 'transcript_file_delete' => 'Eliminar ficheiro coa transcrición', + 'chapters' => 'CapÃtulos', + 'chapters_hint' => 'O ficheiro ten que estar no formato JSON de CapÃtulos.', + 'chapters_download' => 'Descargar capÃtulos', + 'chapters_file' => 'Ficheiro de capÃtulos', + 'chapters_remote_url' => 'URL remoto para ficheiro de capÃtulos', + 'chapters_file_delete' => 'Eliminar ficheiro de capÃtulos', + 'advanced_section_title' => 'Parámetros Avanzados', + 'advanced_section_subtitle' => + 'Se precisas etiquetas RSS que Castopod non xestiona, establéceas aquÃ.', + 'custom_rss' => 'Etiquetas RSS personalizadas para o episodio', + 'custom_rss_hint' => 'This will be injected within the â¬itemâ tag.', + 'block' => 'Episode should be hidden from public catalogues', + 'block_hint' => + 'The episode show or hide status: toggling this on prevents the episode from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)', + 'submit_create' => 'Create episode', + 'submit_edit' => 'Save episode', + ], + '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', + 'with_podcast' => 'Publish alongside podcast', + ], + '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 comments and posts associated with it and remove it from the podcast's RSS feed.", + 'understand' => 'I understand, I want to unpublish the episode', + 'submit' => 'Unpublish', + ], + '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/gl/EpisodeNavigation.php b/modules/Admin/Language/gl/EpisodeNavigation.php new file mode 100644 index 0000000000000000000000000000000000000000..1406e3010ef4383a6d8ef32ff88497e7bdeb9fa4 --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/Fediverse.php b/modules/Admin/Language/gl/Fediverse.php new file mode 100644 index 0000000000000000000000000000000000000000..9eecfa2af34c2c93515deb174e787ab1dc91af17 --- /dev/null +++ b/modules/Admin/Language/gl/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} foi bloqueado!', + 'unblockDomainSuccess' => '{domain} foi desbloqueado!', + ], + 'blocked_actors' => 'Contas bloqueadas', + 'blocked_domains' => 'Dominios bloqueados', + 'block_lists_form' => [ + 'handle' => 'Alcume da conta', + 'handle_hint' => 'Escribe a conta @usuaria@dominio.', + 'domain' => 'Nome de dominio', + 'submit' => 'Bloqueo!', + ], + 'list' => [ + 'actor' => 'Conta', + 'domain' => 'Nome de dominio', + 'unblock' => 'Desbloquear', + ], +]; diff --git a/modules/Admin/Language/gl/Home.php b/modules/Admin/Language/gl/Home.php new file mode 100644 index 0000000000000000000000000000000000000000..29edd1c7eded604af16b4320d65f16f730fb1466 --- /dev/null +++ b/modules/Admin/Language/gl/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' => 'Tódolos podcast', + 'no_podcast' => 'Non se atopan podcast', +]; diff --git a/modules/Admin/Language/gl/Install.php b/modules/Admin/Language/gl/Install.php new file mode 100644 index 0000000000000000000000000000000000000000..d96f923028cad43fc9aa7d8d0f3fb27a85f47d3d --- /dev/null +++ b/modules/Admin/Language/gl/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' => 'Configuración manual', + 'manual_config_subtitle' => + 'Crear un ficheiro `.env` cos teus axustes e actualizar a páxina para continuar coa instalación.', + 'form' => [ + 'instance_config' => 'Configuración da instancia', + 'hostname' => 'Servidor', + 'media_base_url' => 'URL base do multimedia', + 'media_base_url_hint' => + 'Se usas unha CDN e/ou un servizo externo de análise, debes indicalo aquÃ.', + 'admin_gateway' => 'Pasarela de administración', + 'admin_gateway_hint' => + 'A ruta para acceder á área de administración (ex. https://exemplo.com/cp-admin). Por defecto establécese cp-admin, recomendámosche cambialo por razóns de seguridade.', + 'auth_gateway' => 'Pasarela de autenticación', + 'auth_gateway_hint' => + 'A ruta para acceder á páxina de autenticación (ex. https://exemplo.com/cp-auth). Por defecto establécese como cp-auth, pero recomendámosche cambialo por razóns de seguridade.', + 'database_config' => 'Configuración da base de datos', + '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/gl/MyAccount.php b/modules/Admin/Language/gl/MyAccount.php new file mode 100644 index 0000000000000000000000000000000000000000..6ebbb30ef70a5e3e86a9bab867f7c732ce79db26 --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/Navigation.php b/modules/Admin/Language/gl/Navigation.php new file mode 100644 index 0000000000000000000000000000000000000000..68d4609d5d94a5770f237ee23207ad47d1262c70 --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/Notifications.php b/modules/Admin/Language/gl/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/gl/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/gl/Page.php b/modules/Admin/Language/gl/Page.php new file mode 100644 index 0000000000000000000000000000000000000000..b6f49de57496ec4830246641f0bf8897e7c9a2f9 --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/Pager.php b/modules/Admin/Language/gl/Pager.php new file mode 100644 index 0000000000000000000000000000000000000000..e25ee638108dba1e0bfa602b45969381dd8ebd57 --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/Person.php b/modules/Admin/Language/gl/Person.php new file mode 100644 index 0000000000000000000000000000000000000000..a652be9fda1f4aeb73bcb01c35f13a452a6d4741 --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/Platforms.php b/modules/Admin/Language/gl/Platforms.php new file mode 100644 index 0000000000000000000000000000000000000000..ab17d5999b1626535499464902c12f5c3bcb7aa8 --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/Podcast.php b/modules/Admin/Language/gl/Podcast.php new file mode 100644 index 0000000000000000000000000000000000000000..ed83f7845d8d376da336df1163737193a154e01d --- /dev/null +++ b/modules/Admin/Language/gl/Podcast.php @@ -0,0 +1,307 @@ +<?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', + 'publish' => 'Publish podcast', + 'publish_edit' => 'Edit publication', + 'delete' => 'Delete podcast', + 'see_episodes' => 'See episodes', + 'see_contributors' => 'See contributors', + 'go_to_page' => 'Go to page', + 'latest_episodes' => 'Latest episodes', + 'see_all_episodes' => 'See all episodes', + 'draft' => 'Draft', + 'messages' => [ + 'createSuccess' => 'Podcast successfully created!', + 'editSuccess' => 'Podcast has been successfully updated!', + 'importSuccess' => 'Podcast has been successfully imported!', + 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!', + 'deletePodcastMediaError' => 'Failed to delete podcast {type, select, + cover {cover} + banner {banner} + other {media} + }.', + 'deleteEpisodeMediaError' => 'Fallou a eliminación {type, select, + transcript {da transcrición} + chapters {dos capÃtulos} + image {da imaxe} + audio {do audio} + other {do multimedia} + } do episodio {episode_slug}.', + 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.', + 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural, + one {# episode was} + other {# episodes were} + } added to the podcast!', + 'podcastFeedUpToDate' => 'Podcast is already up to date.', + 'podcastNotImported' => 'Podcast could not be updated as it was not imported.', + 'publishError' => 'This podcast is either already published or scheduled for publication.', + 'publishEditError' => 'This podcast is not scheduled for publication.', + 'publishCancelSuccess' => 'Podcast publication successfully cancelled!', + 'scheduleDateError' => 'Schedule date must be set!', + ], + '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 public catalogues', + 'block_hint' => + 'The podcast show or hide status: toggling this on prevents the entire podcast from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)', + 'complete' => 'Podcast will not be having new episodes', + 'lock' => 'Prevent podcast from being copied', + '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', + ], + 'publish_form' => [ + 'back_to_podcast_dashboard' => 'Back to podcast dashboard', + 'post' => 'Your announcement post', + 'post_hint' => + "Write a message to announce the publication of your podcast. The message will be featured in your podcast's homepage.", + 'message_placeholder' => 'Write your message…', + 'submit' => 'Publish', + 'publication_date' => 'Publication date', + 'publication_method' => [ + 'now' => 'Now', + 'schedule' => 'Schedule', + ], + 'scheduled_publication_date' => 'Scheduled publication date', + 'scheduled_publication_date_hint' => + 'You can schedule the podcast release by setting a future publication date. This field must be formatted as YYYY-MM-DD HH:mm', + 'submit_edit' => 'Edit publication', + 'cancel_publication' => 'Cancel publication', + 'message_warning' => 'You did not write a message for your announcement post!', + 'message_warning_hint' => 'Having a message increases social engagement, resulting in a better visibility for your podcast.', + 'message_warning_submit' => 'Publish anyway', + ], + 'publication_status_banner' => [ + 'draft_mode' => 'draft mode', + 'not_published' => 'This podcast is not yet published.', + 'scheduled' => 'This podcast is scheduled for publication on {publication_date}.', + ], + '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/gl/PodcastImport.php b/modules/Admin/Language/gl/PodcastImport.php new file mode 100644 index 0000000000000000000000000000000000000000..a52003344c93e7db67ad2f9ccf64e8aab612441e --- /dev/null +++ b/modules/Admin/Language/gl/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. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.', + 'old_podcast_section_title' => 'The podcast to import', + 'old_podcast_section_subtitle' => + 'Make sure you own the rights for this podcast before importing it. Copying and broadcasting a podcast without the proper rights is piracy and is liable to prosecution.', + 'imported_feed_url' => 'Feed URL', + 'imported_feed_url_hint' => 'The feed must be in xml or rss format.', + 'new_podcast_section_title' => 'The new podcast', + 'advanced_params_section_title' => 'Advanced parameters', + 'advanced_params_section_subtitle' => + 'Keep the default values if you have no idea of what the fields are for.', + 'slug_field' => 'Campo a utilizar para crear o id de url para o episodio', + '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/gl/PodcastNavigation.php b/modules/Admin/Language/gl/PodcastNavigation.php new file mode 100644 index 0000000000000000000000000000000000000000..b619573154735a9370f5c222b74bf39acc09c8c8 --- /dev/null +++ b/modules/Admin/Language/gl/PodcastNavigation.php @@ -0,0 +1,35 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2020 Ad Aures + * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 + * @link https://castopod.org/ + */ + +return [ + 'go_to_page' => 'Go to podcast page', + 'dashboard' => 'Podcast dashboard', + 'podcast-view' => 'Home', + 'podcast-edit' => 'Edit podcast', + 'podcast-persons-manage' => 'Manage persons', + 'episodes' => 'Episodes', + 'episode-list' => 'All episodes', + 'episode-create' => 'New episode', + 'analytics' => 'Analytics', + 'podcast-analytics' => 'Audience overview', + 'podcast-analytics-webpages' => 'Web pages visits', + 'podcast-analytics-locations' => 'Locations', + 'podcast-analytics-unique-listeners' => 'Unique listeners', + 'podcast-analytics-players' => 'Players', + 'podcast-analytics-listening-time' => 'Listening time', + 'podcast-analytics-time-periods' => 'Time periods', + 'contributors' => 'Contributors', + 'contributor-list' => 'All contributors', + 'contributor-add' => 'Add contributor', + 'platforms' => 'External platforms', + 'platforms-podcasting' => 'Podcasting', + 'platforms-social' => 'Social networks', + 'platforms-funding' => 'Funding', +]; diff --git a/modules/Admin/Language/gl/Settings.php b/modules/Admin/Language/gl/Settings.php new file mode 100644 index 0000000000000000000000000000000000000000..345976be7f307ddd34bb7b3cf1d5a95d62935e6e --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/Soundbite.php b/modules/Admin/Language/gl/Soundbite.php new file mode 100644 index 0000000000000000000000000000000000000000..a3f828fe09fa68f902251e7438bb54a2727ac8cb --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/User.php b/modules/Admin/Language/gl/User.php new file mode 100644 index 0000000000000000000000000000000000000000..86e03557ba79071a5faa3b6523ef5f4ef92ec860 --- /dev/null +++ b/modules/Admin/Language/gl/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' => "Editar os roles de {username}", + 'forcePassReset' => 'Forzar restablecemento do contrasinal', + 'ban' => 'Vetar', + 'unban' => 'Retirar veto', + 'delete' => 'Eliminar', + 'create' => 'Nova usuaria', + 'view' => "Info de {username}", + 'all_users' => 'Tódalas usuarias', + 'list' => [ + 'user' => 'Usuaria', + 'roles' => 'Roles', + 'banned' => 'Vetada?', + ], + 'form' => [ + 'email' => 'Email', + 'username' => 'Identificador', + 'password' => 'Contrasinal', + 'new_password' => 'Novo contrasinal', + 'roles' => 'Roles', + 'permissions' => 'Permisos', + 'submit_create' => 'Crear usuaria', + 'submit_edit' => 'Gardar', + 'submit_password_change' => 'Cambiar!', + ], + 'roles' => [ + 'superadmin' => 'Super admin', + ], + 'messages' => [ + 'createSuccess' => + 'Usuaria creada correctamente! Váiselle pedir a {username} que cambie o seu contrasinal após o primeiro acceso.', + '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/gl/Validation.php b/modules/Admin/Language/gl/Validation.php new file mode 100644 index 0000000000000000000000000000000000000000..750b19688f973df85a6ebdc861745225b28d0c54 --- /dev/null +++ b/modules/Admin/Language/gl/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/gl/VideoClip.php b/modules/Admin/Language/gl/VideoClip.php new file mode 100644 index 0000000000000000000000000000000000000000..638de697bba7f2c0fbc240dace9dd73bfeb77615 --- /dev/null +++ b/modules/Admin/Language/gl/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 d9400ca786ad22820c4bda166f6f11e61a0cb199..24bece0140b8e7cbd6edf835d096f76a43f97e70 100644 --- a/modules/Admin/Language/id/Breadcrumb.php +++ b/modules/Admin/Language/id/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'soundbites', 'video-clips' => 'video clips', 'embed' => 'embeddable player', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/id/Notifications.php b/modules/Admin/Language/id/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/id/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/it/Breadcrumb.php b/modules/Admin/Language/it/Breadcrumb.php index d9400ca786ad22820c4bda166f6f11e61a0cb199..24bece0140b8e7cbd6edf835d096f76a43f97e70 100644 --- a/modules/Admin/Language/it/Breadcrumb.php +++ b/modules/Admin/Language/it/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'soundbites', 'video-clips' => 'video clips', 'embed' => 'embeddable player', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/it/Notifications.php b/modules/Admin/Language/it/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/it/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/nl/Breadcrumb.php b/modules/Admin/Language/nl/Breadcrumb.php index ecb81fc78fedf7dcdb7b42d652b70e34738a68a9..03d3b0aef1a8fb0693fe2912721014fbc020d58d 100644 --- a/modules/Admin/Language/nl/Breadcrumb.php +++ b/modules/Admin/Language/nl/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'geluidsbeet', 'video-clips' => 'video clips', 'embed' => 'integreerbare speler', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/nl/Common.php b/modules/Admin/Language/nl/Common.php index 73136f88a8c60868594ef2c9bf029e9b445a4387..96e45a8ae3b905c920f52a08f61316166c13088c 100644 --- a/modules/Admin/Language/nl/Common.php +++ b/modules/Admin/Language/nl/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'Wordt afgespeeld', ], 'size_limit' => 'Maximale grootte: {0}.', - 'choose_interact' => 'Kies hoe de interactie moet worden', + 'choose_interact' => 'Choose how to interact', 'view' => 'View', ]; diff --git a/modules/Admin/Language/nl/Dashboard.php b/modules/Admin/Language/nl/Dashboard.php index 024e87d9144a02e9153dfe435eb77deccace0f2a..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 100644 --- a/modules/Admin/Language/nl/Dashboard.php +++ b/modules/Admin/Language/nl/Dashboard.php @@ -9,8 +9,8 @@ declare(strict_types=1); */ return [ - 'home' => 'Beheerder overzicht', - 'welcome_message' => 'Welkom bij de beheerder omgeving!', + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', 'podcasts' => [ 'title' => 'Podcasts', 'not_found' => 'No published podcast', diff --git a/modules/Admin/Language/nl/Notifications.php b/modules/Admin/Language/nl/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/nl/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/nn-NO/Breadcrumb.php b/modules/Admin/Language/nn-NO/Breadcrumb.php index c7852453f635f6e6298d8ef6de082c23db0bd719..aed6277aafa6f092eba70c7dadf515459b7c0491 100644 --- a/modules/Admin/Language/nn-NO/Breadcrumb.php +++ b/modules/Admin/Language/nn-NO/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'lydbetar', 'video-clips' => 'videoklypp', 'embed' => 'innbyggbar spelar', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/nn-NO/Common.php b/modules/Admin/Language/nn-NO/Common.php index b4b301888fa3953b6ae96386f9590e7f0a619bf4..db095fd95f20deb2815147af11647459021c0919 100644 --- a/modules/Admin/Language/nn-NO/Common.php +++ b/modules/Admin/Language/nn-NO/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'Spelar', ], 'size_limit' => 'Maks storleik: {0}.', - 'choose_interact' => 'Vel korleis du vil samhandla', + 'choose_interact' => 'Choose how to interact', 'view' => 'View', ]; diff --git a/modules/Admin/Language/nn-NO/Dashboard.php b/modules/Admin/Language/nn-NO/Dashboard.php index 9a51d003cb5b60b5c0cda8e95770e3a3cdd807aa..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 100644 --- a/modules/Admin/Language/nn-NO/Dashboard.php +++ b/modules/Admin/Language/nn-NO/Dashboard.php @@ -9,8 +9,8 @@ declare(strict_types=1); */ return [ - 'home' => 'Styringspanel', - 'welcome_message' => 'Velkomen til styraromrÃ¥det!', + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', 'podcasts' => [ 'title' => 'Podcasts', 'not_found' => 'No published podcast', diff --git a/modules/Admin/Language/nn-NO/Episode.php b/modules/Admin/Language/nn-NO/Episode.php index 733eda6b6acaa14986b34b3dd824caf29217cfb0..c98495f0f898421751fee711f2e206086b3bd7a6 100644 --- a/modules/Admin/Language/nn-NO/Episode.php +++ b/modules/Admin/Language/nn-NO/Episode.php @@ -178,7 +178,7 @@ return [ ], 'unpublish_form' => [ 'disclaimer' => - "Viss du avpubliserer episoden, vil alle innlegga som knytte til han bli sletta, og episoden vil bli fjerna frÃ¥ RSS-straumen til podkasten.", + "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'Eg forstÃ¥r, eg vil avpublisera episoden', 'submit' => 'Avpubliser', ], diff --git a/modules/Admin/Language/nn-NO/Notifications.php b/modules/Admin/Language/nn-NO/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/nn-NO/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/oc/Breadcrumb.php b/modules/Admin/Language/oc/Breadcrumb.php index d9400ca786ad22820c4bda166f6f11e61a0cb199..24bece0140b8e7cbd6edf835d096f76a43f97e70 100644 --- a/modules/Admin/Language/oc/Breadcrumb.php +++ b/modules/Admin/Language/oc/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'soundbites', 'video-clips' => 'video clips', 'embed' => 'embeddable player', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/oc/Notifications.php b/modules/Admin/Language/oc/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/oc/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/pl/Breadcrumb.php b/modules/Admin/Language/pl/Breadcrumb.php index 6ad15119c92a6210f4f368dded98666a796b11d9..0030fb60583bdbc88322dd5c12a742979b24dbaf 100644 --- a/modules/Admin/Language/pl/Breadcrumb.php +++ b/modules/Admin/Language/pl/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'zajawki', 'video-clips' => 'klipy wideo', 'embed' => 'odtwarzacz do osadzenia', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/pl/Common.php b/modules/Admin/Language/pl/Common.php index a2566c262a12fea57bb207e362a8b59c6ddd4316..183399eeec0713ba281a9b7bd71189d017b821f6 100644 --- a/modules/Admin/Language/pl/Common.php +++ b/modules/Admin/Language/pl/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'Odtwarzanie', ], 'size_limit' => 'Limit rozmiaru: {0}.', - 'choose_interact' => 'Wybierz sposób interakcji', + 'choose_interact' => 'Choose how to interact', 'view' => 'View', ]; diff --git a/modules/Admin/Language/pl/Dashboard.php b/modules/Admin/Language/pl/Dashboard.php index 7e2d2e079ccb45d59003f2f128867b0f2a01a018..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 100644 --- a/modules/Admin/Language/pl/Dashboard.php +++ b/modules/Admin/Language/pl/Dashboard.php @@ -9,8 +9,8 @@ declare(strict_types=1); */ return [ - 'home' => 'Pulpit administratora', - 'welcome_message' => 'Witamy w panelu administracyjnym!', + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', 'podcasts' => [ 'title' => 'Podcasts', 'not_found' => 'No published podcast', diff --git a/modules/Admin/Language/pl/Episode.php b/modules/Admin/Language/pl/Episode.php index f874e9febd143484fdea295a5a581d0488b46a1d..f82ccfdab8bf7844306774a7a79f08dd28a7b04a 100644 --- a/modules/Admin/Language/pl/Episode.php +++ b/modules/Admin/Language/pl/Episode.php @@ -179,7 +179,7 @@ return [ ], 'unpublish_form' => [ 'disclaimer' => - "CofniÄ™cie publikacji odcinka spowoduje usuniÄ™cie wszystkich powiÄ…zanych z nim wpisów i usuniÄ™cie go z kanaÅ‚u RSS podcastu.", + "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'Rozumiem, chcÄ™ cofnąć publikacjÄ™ odcinka', 'submit' => 'Cofnij publikacjÄ™', ], diff --git a/modules/Admin/Language/pl/Notifications.php b/modules/Admin/Language/pl/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/pl/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/pt-BR/Breadcrumb.php b/modules/Admin/Language/pt-BR/Breadcrumb.php index ea0d019c4056b0cd802313d878099c7a29949794..42c5e23c1cd35dfae65c8d52872f44f9c1b30c16 100644 --- a/modules/Admin/Language/pt-BR/Breadcrumb.php +++ b/modules/Admin/Language/pt-BR/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'clipes de áudio', 'video-clips' => 'clipes de vÃdeo', 'embed' => 'player incorporável', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/pt-BR/Episode.php b/modules/Admin/Language/pt-BR/Episode.php index 78eaa948980b7288c07c1d15664f8de8787f63ce..cd15c64b3db1d7393faaf44d7e088cfbfebd4ab7 100644 --- a/modules/Admin/Language/pt-BR/Episode.php +++ b/modules/Admin/Language/pt-BR/Episode.php @@ -178,7 +178,7 @@ return [ ], 'unpublish_form' => [ 'disclaimer' => - "Despublicar do episódio irá apagar todas as publicações associadas a ele e removê-lo do feed RSS do podcast.", + "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", 'understand' => 'Eu entendo, eu quero despublicar o episódio', 'submit' => 'Despublicar', ], diff --git a/modules/Admin/Language/pt-BR/Notifications.php b/modules/Admin/Language/pt-BR/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/pt-BR/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/pt/Breadcrumb.php b/modules/Admin/Language/pt/Breadcrumb.php index d9400ca786ad22820c4bda166f6f11e61a0cb199..24bece0140b8e7cbd6edf835d096f76a43f97e70 100644 --- a/modules/Admin/Language/pt/Breadcrumb.php +++ b/modules/Admin/Language/pt/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'soundbites', 'video-clips' => 'video clips', 'embed' => 'embeddable player', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/pt/Notifications.php b/modules/Admin/Language/pt/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/pt/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/ru/Breadcrumb.php b/modules/Admin/Language/ru/Breadcrumb.php index 8f4438fff8ca3cb4299609a485bdf0101c308105..d0ad26ac4d35eae8430f9bb63a7bf140c5059108 100644 --- a/modules/Admin/Language/ru/Breadcrumb.php +++ b/modules/Admin/Language/ru/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'звуковые фрагменты', 'video-clips' => 'видео клипы', 'embed' => 'вÑтроенный плеер', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/ru/Common.php b/modules/Admin/Language/ru/Common.php index 1805eb8fc06b132411ee496af11c29dc84dcb625..596c8bcdec3b75f5c94c63aa7acc35c36537ec9d 100644 --- a/modules/Admin/Language/ru/Common.php +++ b/modules/Admin/Language/ru/Common.php @@ -46,6 +46,6 @@ return [ 'playing' => 'Playing', ], 'size_limit' => 'Size limit: {0}.', - 'choose_interact' => 'Выберите как взаимодейÑтвовать', + 'choose_interact' => 'Choose how to interact', 'view' => 'View', ]; diff --git a/modules/Admin/Language/ru/Dashboard.php b/modules/Admin/Language/ru/Dashboard.php index 8542f43e03d7a831aa2de1292e8e24b37bb262fd..881073fd26316b7d2eda7c52b73ccbfc2c4e76e6 100644 --- a/modules/Admin/Language/ru/Dashboard.php +++ b/modules/Admin/Language/ru/Dashboard.php @@ -9,8 +9,8 @@ declare(strict_types=1); */ return [ - 'home' => 'Панель ÐдминиÑтратора', - 'welcome_message' => 'Добро пожаловать в панель админиÑтрированиÑ!', + 'home' => 'Admin dashboard', + 'welcome_message' => 'Welcome to the admin area!', 'podcasts' => [ 'title' => 'Podcasts', 'not_found' => 'No published podcast', diff --git a/modules/Admin/Language/ru/Notifications.php b/modules/Admin/Language/ru/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/ru/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/sk/Breadcrumb.php b/modules/Admin/Language/sk/Breadcrumb.php index 03f9f35ec1541e601a3c15744745a2061509f4e0..e9a9b17d8b94aec724a250aa9b522cea41c07175 100644 --- a/modules/Admin/Language/sk/Breadcrumb.php +++ b/modules/Admin/Language/sk/Breadcrumb.php @@ -9,40 +9,41 @@ declare(strict_types=1); */ return [ - 'label' => 'breadcrumb', + 'label' => 'omrvinky', config('Admin') - ->gateway => 'Home', - 'podcasts' => 'podcasts', - 'episodes' => 'episodes', - 'contributors' => 'contributors', - 'pages' => 'pages', - 'settings' => 'settings', - 'theme' => 'theme', + ->gateway => 'Úvod', + 'podcasts' => 'podcasty', + 'episodes' => 'epizódy', + 'contributors' => 'prispievatelia', + 'pages' => 'stránky', + 'settings' => 'nastavenia', + 'theme' => 'vzhľad', 'add' => 'pridaÅ¥', - 'new' => 'new', + 'new' => 'pridaÅ¥', 'edit' => 'upraviÅ¥', - 'persons' => 'persons', + 'persons' => 'osobnosti', 'publish' => 'zverejniÅ¥', 'publish-edit' => 'upraviÅ¥ zverejnené', - 'unpublish' => 'unpublish', + 'unpublish' => 'zruÅ¡iÅ¥ zverejnenie', 'delete' => 'vymazaÅ¥', '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', + 'block-lists' => 'zoznamy blokovaných', + 'users' => 'použÃvatelia', + 'my-account' => 'môj úÄet', + 'change-password' => 'zmeniÅ¥ heslo', + 'import' => 'import kanála', + 'platforms' => 'platformy', + 'social' => 'sociálne siete', + 'funding' => 'financovanie', + 'analytics' => 'analytika', + 'locations' => 'miesta', + 'webpages' => 'web stránky', + 'unique-listeners' => 'unikátni poslucháÄi', + 'players' => 'prehrávaÄe', + 'listening-time' => 'Äas poÄúvania', + 'time-periods' => 'Äasové obdobia', + 'soundbites' => 'zvukové ukážky', + 'video-clips' => 'video klipy', + 'embed' => 'vnorený', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/sk/Charts.php b/modules/Admin/Language/sk/Charts.php index 4b33530ef007a6795739959c4553718f22f77941..b205c28677a7faecb3a88d11a60621fdf7efb3eb 100644 --- a/modules/Admin/Language/sk/Charts.php +++ b/modules/Admin/Language/sk/Charts.php @@ -9,32 +9,32 @@ declare(strict_types=1); */ return [ - 'by_service_weekly' => 'Episode downloads by service (for the past week)', - 'by_player_weekly' => 'Episode downloads by player (for the past week)', - 'by_player_yearly' => 'Episode downloads by player (for the past year)', - 'by_device_weekly' => 'Episode downloads by device (for the past week)', - 'by_os_weekly' => 'Episode downloads by O.S. (for the past week)', - 'podcast_by_region' => 'Episode downloads by region (for the past week)', - 'unique_daily_listeners' => 'Daily unique listeners', - 'unique_monthly_listeners' => 'Monthly unique listeners', - 'by_browser' => 'Web pages usage by browser (for the past week)', - 'podcast_by_day' => 'Episode daily downloads', - 'podcast_by_month' => 'Episode monthly downloads', - 'episode_by_day' => 'Episode daily downloads (first 60 days)', - 'episode_by_month' => 'Episode monthly downloads', + 'by_service_weekly' => 'Prevzatia epizód podľa služby (za uplynulý týždeň)', + 'by_player_weekly' => 'Prevzatia epizód podľa prehrávaÄa (za uplynulý týždeň)', + 'by_player_yearly' => 'Prevzatia epizód podľa prehrávaÄa (za uplynulý rok)', + 'by_device_weekly' => 'Prevzatia epizód podľa zariadenia (za uplynulý týždeň)', + 'by_os_weekly' => 'Prevzatia epizód podľa operaÄného systému (za uplynulý týždeň)', + 'podcast_by_region' => 'Prevzatia epizód podľa regiónu (za uplynulý týždeň)', + 'unique_daily_listeners' => 'Denný unikátny poÄet poslucháÄov', + 'unique_monthly_listeners' => 'MesaÄný unikátny poÄet poslucháÄov', + 'by_browser' => 'PoužÃvanie web stránok podľa prehliadaÄa (za uplynulý týždeň)', + 'podcast_by_day' => 'Denné prevzatia epizód', + 'podcast_by_month' => 'MesaÄné prevzatia epizód', + 'episode_by_day' => 'Denné prevzatia epizód (prvých 60 dnÃ)', + 'episode_by_month' => 'MesaÄné prevzatia epizód', '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)', - 'total_storage_by_month' => 'Monthly storage (in MB)', - 'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)', + '5 posledných prevzatà epizód (poÄas ich prvých 60 dnÃ)', + 'by_country_weekly' => 'Prevzatia epizód podľa krajiny (za uplynulý týždeň)', + 'by_country_yearly' => 'Prevzatia epizód podľa krajiny (za uplynulý rok)', + 'by_domain_weekly' => 'NávÅ¡tevy web stránok podľa zdroja (za uplynulý týždeň)', + 'by_domain_yearly' => 'NávÅ¡tevy web stránok podľa zdroja (za uplynulý rok)', + 'by_entry_page' => 'NávÅ¡tevy web stránok podľa prichádzajúcej stránky (za uplynulý týždeň)', + 'podcast_bots' => 'Roboti (crawlers)', + 'daily_listening_time' => 'Súhrnný denný Äas poÄúvania', + 'monthly_listening_time' => 'Súhrnný mesaÄný Äas poÄúvania', + 'by_weekday' => 'Podľa dnà v týždni (za uplynulých 60 dnÃ)', + 'by_hour' => 'Podľa denného Äasu (Za uplynulých 60 dnÃ)', + 'podcast_by_bandwidth' => 'Denný prenos údajov (v MB)', + 'total_storage_by_month' => 'MesaÄné úložisko (v MB)', + 'total_bandwidth_by_month' => 'MesaÄný prenos údajov (v MB)', ]; diff --git a/modules/Admin/Language/sk/Common.php b/modules/Admin/Language/sk/Common.php index f11a1ad4543148a2e5bd2b2b23bed86ff999f939..9572c953797826b7d29f3178c88c92fd37d4a398 100644 --- a/modules/Admin/Language/sk/Common.php +++ b/modules/Admin/Language/sk/Common.php @@ -9,43 +9,43 @@ declare(strict_types=1); */ return [ - 'yes' => 'Yes', - 'no' => 'No', - 'cancel' => 'Cancel', - 'optional' => 'Optional', - 'more' => 'More', - 'no_data' => 'No data found!', + 'yes' => 'Ãno', + 'no' => 'Nie', + 'cancel' => 'ZruÅ¡iÅ¥', + 'optional' => 'Nepovinné', + 'more' => 'Viac', + 'no_data' => 'Žiadne údaje!', 'close' => 'ZavrieÅ¥', 'edit' => 'UpraviÅ¥', - 'copy' => 'Copy', - 'copied' => 'Copied!', + 'copy' => 'KopÃrovaÅ¥', + 'copied' => 'SkopÃrované!', 'home' => 'Domov', 'explicit' => 'Chúlostivé', 'powered_by' => 'Poháňané cez {castopod}', - 'actions' => 'Actions', - 'pageInfo' => 'Page {currentPage} out of {pageCount}', + 'actions' => 'Akcie', + 'pageInfo' => 'Stránka {currentPage} z celkového poÄtu {pageCount}', 'go_back' => 'ÃsÅ¥ späť', 'forms' => [ 'editor' => [ 'write' => 'PÃsaÅ¥', - 'preview' => 'Preview', - 'help' => 'Powered by markdown', + 'preview' => 'Náhľad', + 'help' => 'Podporovaný markdown', ], 'multiSelect' => [ - 'selectText' => 'Press to select', - 'loadingText' => 'Loading…', - 'noResultsText' => 'No results found', - 'noChoicesText' => 'No choices to choose from', - 'maxItemText' => 'Cannot add more items', + 'selectText' => 'Vyberte stlaÄenÃm', + 'loadingText' => 'NaÄÃtanie…', + 'noResultsText' => 'Nenájdené žiadne výsledky', + 'noChoicesText' => 'Žiadne možnosti na výber', + 'maxItemText' => 'Nie je možné pridaÅ¥ viac položiek', ], 'upload_file' => 'NahraÅ¥ súbor', - 'remote_url' => 'Remote URL', + 'remote_url' => 'Vzdialená adresa URL', ], 'play_episode_button' => [ 'play' => 'PrehraÅ¥', 'playing' => 'Prehrávané', ], - 'size_limit' => 'Size limit: {0}.', - 'choose_interact' => 'Choose how to interact', - 'view' => 'View', + 'size_limit' => 'Limit veľkosti: {0}.', + 'choose_interact' => 'Vyberte spôsob interakcie', + 'view' => 'ZobraziÅ¥', ]; diff --git a/modules/Admin/Language/sk/Contributor.php b/modules/Admin/Language/sk/Contributor.php index 94072a9391a35d09f56dd5bfe9db299a3790038c..3f0991fa53e853891a07b0a30c444b7d04a243a8 100644 --- a/modules/Admin/Language/sk/Contributor.php +++ b/modules/Admin/Language/sk/Contributor.php @@ -9,33 +9,33 @@ declare(strict_types=1); */ return [ - 'podcast_contributors' => 'Podcast contributors', - 'view' => "{username}'s contribution to {podcastTitle}", + 'podcast_contributors' => 'Prispievatelia podcastu', + 'view' => "PrÃspevky použÃvateľa {username} do podcastu {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', + 'username' => 'Meno použÃvateľa', 'role' => 'Rola', ], 'form' => [ - 'user' => 'UžÃvateľ', - 'user_placeholder' => 'VybraÅ¥ užÃvateľa…', + 'user' => 'PoužÃvateľ', + 'user_placeholder' => 'VybraÅ¥ použÃvateľa…', 'role' => 'Rola', 'role_placeholder' => 'VybraÅ¥ jeho úlohu…', 'submit_add' => 'PridaÅ¥ prispievateľa', - 'submit_edit' => 'Update role', + 'submit_edit' => 'AktualizovaÅ¥ rolu', ], 'roles' => [ - 'podcast_admin' => 'Podcast admin', + 'podcast_admin' => 'Správca podcastu', ], 'messages' => [ - 'removeOwnerError' => "You can't remove the podcast owner!", + 'removeOwnerError' => "Nemôžete odstrániÅ¥ vlastnÃka podcastu!", 'removeSuccess' => - 'You have successfully removed {username} from {podcastTitle}', + 'ÚspeÅ¡ne ste odstránili použÃvateľa {username} z podcastu {podcastTitle}', 'alreadyAddedError' => - "The contributor you're trying to add has already been added!", + "Prispievateľa, ktorého sa usiľujete pridaÅ¥ je už pridaný!", ], ]; diff --git a/modules/Admin/Language/sk/Countries.php b/modules/Admin/Language/sk/Countries.php index 3febee2613969fa83aca9279d89333271ecb06af..98d7161d264d152436a24f208ef63f60be241310 100644 --- a/modules/Admin/Language/sk/Countries.php +++ b/modules/Admin/Language/sk/Countries.php @@ -68,7 +68,7 @@ return [ 'CY' => 'Cyprus', 'CZ' => 'ÄŒeská republika', 'DE' => 'Nemecko', - 'DJ' => 'Djibouti', + 'DJ' => 'Džibutsko', 'DK' => 'Dánsko', 'DM' => 'Dominica', 'DO' => 'Dominikánska republika', @@ -76,12 +76,12 @@ return [ 'EC' => 'Ekvádor', 'EE' => 'Estónsko', 'EG' => 'Egypt', - 'EH' => 'Western Sahara', + 'EH' => 'Západná Sahara', 'ER' => 'Eritrea', 'ES' => 'Å panielsko', 'ET' => 'Etiópia', 'FI' => 'FÃnsko', - 'FJ' => 'Fiji', + 'FJ' => 'Fidži', 'FK' => 'Falklandské ostrovy (MalvÃny)', 'FM' => 'Micronesia, Federated States of', 'FO' => 'Faroe Islands', @@ -89,7 +89,7 @@ return [ 'GA' => 'Gabon', 'GB' => 'United Kingdom', 'GD' => 'Grenada', - 'GE' => 'Georgia', + 'GE' => 'GruzÃnsko', 'GF' => 'French Guiana', 'GG' => 'Guernsey', 'GH' => 'Ghana', @@ -236,7 +236,7 @@ return [ 'TM' => 'Turkménsko', 'TN' => 'Tunisko', 'TO' => 'Tonga', - 'TR' => 'Turkey', + 'TR' => 'Turecko', 'TT' => 'Trinidad and Tobago', 'TV' => 'Tuvalu', 'TW' => 'Taiwan, provincia ÄŒÃny', diff --git a/modules/Admin/Language/sk/Episode.php b/modules/Admin/Language/sk/Episode.php index f174fc0cb72c064b445ba144a01d9738a024e675..1675c6edf2c358a4715a220f228f42fc934091b2 100644 --- a/modules/Admin/Language/sk/Episode.php +++ b/modules/Admin/Language/sk/Episode.php @@ -9,80 +9,84 @@ declare(strict_types=1); */ return [ - 'season' => 'Season {seasonNumber}', + 'season' => 'Séria {seasonNumber}', 'season_abbr' => 'S{seasonNumber}', - 'number' => 'Episode {episodeNumber}', + 'number' => 'Epizóda {episodeNumber}', 'number_abbr' => 'Ep. {episodeNumber}', - 'season_episode' => 'Season {seasonNumber} episode {episodeNumber}', + 'season_episode' => 'Séria {seasonNumber} epizóda {episodeNumber}', 'season_episode_abbr' => 'S{seasonNumber}E{episodeNumber}', 'number_of_comments' => '{numberOfComments, plural, - one {# comment} - other {# comments} + one {# komentár} + few {# komentáre} + many {# komentárov} + other {# komentárov} }', - 'all_podcast_episodes' => 'All podcast episodes', - 'back_to_podcast' => 'Go back to podcast', - 'edit' => 'Edit', - 'publish' => 'Publish', - 'publish_edit' => 'Edit publication', - 'unpublish' => 'Unpublish', - 'publish_error' => 'Episode is already published.', - 'publish_edit_error' => 'Episode is already published.', - 'publish_cancel_error' => 'Episode is already published.', - 'unpublish_error' => 'Episode is not published.', - 'delete' => 'Delete', - 'go_to_page' => 'Go to page', - 'create' => 'Add an episode', + 'all_podcast_episodes' => 'VÅ¡etky epizódy podcastu', + 'back_to_podcast' => 'Späť na podcast', + 'edit' => 'UpraviÅ¥', + 'publish' => 'ZverejniÅ¥', + 'publish_edit' => 'UpraviÅ¥ zverejnenie', + 'unpublish' => 'ZruÅ¡iÅ¥ zverejnenie', + 'publish_error' => 'Epizóda je už zverejnená.', + 'publish_edit_error' => 'Epizóda je už zverejnená.', + 'publish_cancel_error' => 'Epizóda je už zverejnená.', + 'unpublish_error' => 'Epizóda nie je zverejnená.', + 'delete' => 'VymazaÅ¥', + 'go_to_page' => 'PrejsÅ¥ na stránku', + 'create' => 'PridaÅ¥ epizódu', 'publication_status' => [ - 'published' => 'Published', - 'with_podcast' => 'Published', - 'scheduled' => 'Scheduled', - 'not_published' => 'Not published', + 'published' => 'Zverejnená', + 'with_podcast' => 'Zverejnený', + 'scheduled' => 'Naplánovaná', + 'not_published' => 'Nezverejnená', ], - 'with_podcast_hint' => 'To be published at the same time as the podcast', + 'with_podcast_hint' => 'Bude publikovaná v rovnakom Äase ako podcast', 'list' => [ 'search' => [ - 'placeholder' => 'Search for an episode', - 'clear' => 'Clear search', - 'submit' => 'Search', + 'placeholder' => 'VyhľadaÅ¥ epizódu', + 'clear' => 'VyÄistiÅ¥ hľadanie', + 'submit' => 'HľadaÅ¥', ], 'number_of_episodes' => '{numberOfEpisodes, plural, - one {# episode} - other {# episodes} + one {# epizóda} + few {# epizódy} + many {# epizód} + other {# epizód} }', - 'episode' => 'Episode', + 'episode' => 'Epizóda', 'visibility' => 'ViditeľnosÅ¥', 'comments' => 'Komentáre', 'actions' => 'Úkony', ], 'messages' => [ - 'createSuccess' => 'Episode has been successfully created!', - 'editSuccess' => 'Episode has been successfully updated!', + 'createSuccess' => 'Epizóda je úspeÅ¡ne vytvorená!', + 'editSuccess' => 'Epizóda je úspeÅ¡ne aktualizovaná!', 'publishSuccess' => '{publication_status, select, - published {Episode successfully published!} - scheduled {Episode publication successfully scheduled!} - with_podcast {This episode will be published at the same time as the podcast.} - other {This episode is not published.} + published {Epizóda je úspeÅ¡ne zverejnená!} + scheduled {Zverejnenie epizódy je úspeÅ¡ne naÄasované!} + with_podcast {Táto epizóda bude zverejnená v rovnakom Äase ako podcast.} + other {Táto epizóda nie je zverejnená.} }', - 'publishCancelSuccess' => 'Episode publication successfully cancelled!', - 'unpublishBeforeDeleteTip' => 'You must unpublish the episode before deleting it.', - 'scheduleDateError' => 'Schedule date must be set!', - 'deletePublishedEpisodeError' => 'Please unpublish the episode before deleting it.', - 'deleteSuccess' => 'Episode successfully deleted!', - 'deleteError' => 'Failed to delete episode {type, select, - transcript {transcript} - chapters {chapters} - image {cover} - audio {audio} - other {media} + 'publishCancelSuccess' => 'Zverejnenie epizódy úspeÅ¡ne zruÅ¡ené!', + 'unpublishBeforeDeleteTip' => 'Pred vymazanÃm musÃte zruÅ¡iÅ¥ zverejnenie epizódy.', + 'scheduleDateError' => 'Musà byÅ¥ nastavený plánovaný dátum zverejnenia!', + 'deletePublishedEpisodeError' => 'ProsÃm zruÅ¡te zverejnenie epizódy pred jej vymazanÃm.', + 'deleteSuccess' => 'Epizóda úspeÅ¡ne vymazaná!', + 'deleteError' => 'Nepodarilo sa vymazaÅ¥ epizódu: {type, select, + transcript {prepis} + chapters {kapitoly} + image {obrázok} + audio {zvuk} + other {médiá} }.', - '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.', + 'deleteFileError' => 'Nepodarilo sa vymazaÅ¥ {type, select, + transcript {prepis} + chapters {kapitoly} + image {obrázok} + audio {zvuk} + other {médiá} + } súbor {file_path}. Môžete ho z disku odstrániÅ¥ ruÄne.', + 'sameSlugError' => 'Epizóda s takýmto trvalým odkazom už existuje.', ], 'form' => [ 'file_size_error' => @@ -123,78 +127,78 @@ return [ 'description_footer' => 'Description footer', 'description_footer_hint' => 'This text is added at the end of each episode description, it is a good place to input your social links for example.', - 'additional_files_section_title' => 'Additional files', + 'additional_files_section_title' => 'DodatoÄné súbory', '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.', + 'Tieto súbory sú urÄené na použitie s inými platformami s cieľom poslucháÄom poskytovaÅ¥ bohaÄÅ¡iu skúsenosÅ¥. Pre viac informácià si pozrite {podcastNamespaceLink}.', '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.', + 'location_section_subtitle' => 'O akom mieste / oblasti pojednáva táto epizóda?', + 'location_name' => 'Názov oblasti alebo adresa', + 'location_name_hint' => 'Môže to byÅ¥ skutoÄné alebo vymyslené miesto', + 'transcript' => 'Prepis (titulky / skryté titulky)', + 'transcript_hint' => 'Povolené sú len súbory .srt.', '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', + 'transcript_file' => 'Súbor s prepisom (.srt)', + 'transcript_remote_url' => 'Vzdialená adresa Url s prepisom', + 'transcript_file_delete' => 'VymazaÅ¥ súbor s prepisom', + 'chapters' => 'Kapitoly', + 'chapters_hint' => 'Súbor musà byÅ¥ vo formáte JSON Chapters.', + 'chapters_download' => 'PrevziaÅ¥ kapitoly', + 'chapters_file' => 'Súbor s kapitolami', + 'chapters_remote_url' => 'Vzdialená adresa url súboru s kapitolami', + 'chapters_file_delete' => 'VymazaÅ¥ súbor s kapitolami', + 'advanced_section_title' => 'PokroÄilé vlastnosti', 'advanced_section_subtitle' => - 'If you need RSS tags that Castopod does not handle, set them here.', - 'custom_rss' => 'Custom RSS tags for the episode', - 'custom_rss_hint' => 'This will be injected within the â¬itemâ tag.', - 'block' => 'Episode should be hidden from public catalogues', + 'Ak potrebujete pokroÄilé tagy RSS, ktoré castopod nepodporuje, nastavte ich tu.', + 'custom_rss' => 'Vlastné tagy RSS pre túto epizódu', + 'custom_rss_hint' => 'Toto bude vložené vo vnútri tagu â¬itemâ.', + 'block' => 'Epizóda má byÅ¥ skrytá z verejných katalógov', 'block_hint' => - 'The episode show or hide status: toggling this on prevents the episode from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)', + 'Stav skryÅ¥ / zobraziÅ¥ pre túto epizódu: zapnutÃm zabránite, aby sa epizóda zobrazila v katalógoch Apple Podcasts, Google Podcasts a v ÄalÅ¡Ãch aplikáciách tretÃch strán ktoré zÃskavajú podcasty z týchto služieb. (Negarantované)', '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', + 'back_to_episode_dashboard' => 'Späť na nástenku epizódy', + 'post' => 'PrÃspevok, ktorým oznamujete zverejnenie', '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', + "NapÃÅ¡te správu, v ktorej oznámite zverejnenie tejto epizódy. Správu uvidia vÅ¡etci sledujúci vo fediverse a správa bude zobrazená na úvodnej stránke podcastu.", + 'message_placeholder' => 'NapÃÅ¡te správu…', + 'publication_date' => 'Dátum zverejnenia', 'publication_method' => [ - 'now' => 'Now', - 'schedule' => 'Schedule', - 'with_podcast' => 'Publish alongside podcast', + 'now' => 'HneÄ teraz', + 'schedule' => 'NaplánovaÅ¥', + 'with_podcast' => 'PublikovaÅ¥ spolu s podcastom', ], - 'scheduled_publication_date' => 'Scheduled publication date', - 'scheduled_publication_date_clear' => 'Clear publication date', + 'scheduled_publication_date' => 'Dátum plánovaného zverejnenia', + 'scheduled_publication_date_clear' => 'VyÄistiÅ¥ dátum zverejnenia', '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', + 'Uvedenie epizódy môžete naplánovaÅ¥ nastavenÃm dátumu zverejnenia v budúcnosti. Formát tohoto vstupného poľa je YYYY-MM-DD HH:mm', + 'submit' => 'ZverejniÅ¥', + 'submit_edit' => 'UpraviÅ¥ zverejnenie', + 'cancel_publication' => 'ZruÅ¡iÅ¥ zverejnenie', + 'message_warning' => 'NenapÃsali ste text oznamujúceho prÃspevku!', + 'message_warning_hint' => 'OdoslanÃm uvádzacieho prÃspevku zlepÅ¡ujete sociálnu úÄasÅ¥, ÄÃm môžete eÅ¡te viac zviditeľniÅ¥ váš podcast.', + 'message_warning_submit' => 'Napriek tomu zverejniÅ¥', ], 'unpublish_form' => [ 'disclaimer' => "Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.", - 'understand' => 'I understand, I want to unpublish the episode', - 'submit' => 'Unpublish', + 'understand' => 'Rozumiem, chcem zruÅ¡iÅ¥ zverejnenie epizódy', + 'submit' => 'ZruÅ¡iÅ¥ zverejnenie', ], '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', + "VymazanÃm epizódy odstránite vÅ¡etky prepojené mediálne súbory, komentáre, video klipy a zvukové ukážky.", + 'understand' => 'Rozumiem, chcem vymazaÅ¥ epizódu', + 'submit' => 'VymazaÅ¥', ], 'embed' => [ - 'title' => 'Embeddable player', + 'title' => 'Vnorený prehrávaÄ', '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', + 'Vyberte farbu vzhľadu, skopÃrujte kód prehrávaÄa do schránky a prilepte ho na vaÅ¡ej stránke.', + 'clipboard_iframe' => 'SkopÃrovaÅ¥ kód prehrávaÄa do schránky', + 'clipboard_url' => 'SkopÃrovaÅ¥ adresu do schránky', + 'dark' => 'Tmavý', 'dark-transparent' => 'Dark transparent', 'light' => 'Light', 'light-transparent' => 'Light transparent', diff --git a/modules/Admin/Language/sk/EpisodeNavigation.php b/modules/Admin/Language/sk/EpisodeNavigation.php index 1406e3010ef4383a6d8ef32ff88497e7bdeb9fa4..be3a1e256008131f51190cdcaa3494c27ae5e801 100644 --- a/modules/Admin/Language/sk/EpisodeNavigation.php +++ b/modules/Admin/Language/sk/EpisodeNavigation.php @@ -14,7 +14,7 @@ return [ 'episode-view' => 'Home', 'episode-edit' => 'Edit episode', 'episode-persons-manage' => 'Manage persons', - 'embed-add' => 'Embeddable player', + 'embed-add' => 'Vnorený prehrávaÄ', 'clips' => 'Clips', 'video-clips-list' => 'Video clips', 'video-clips-create' => 'New video clip', diff --git a/modules/Admin/Language/sk/Fediverse.php b/modules/Admin/Language/sk/Fediverse.php index 0e4ca66d89cd7d6191d36c0325647b0b3932ac6e..1a5e0a27e647a817b4cdc7c2fbea2d1ae59239f0 100644 --- a/modules/Admin/Language/sk/Fediverse.php +++ b/modules/Admin/Language/sk/Fediverse.php @@ -10,14 +10,14 @@ declare(strict_types=1); return [ 'messages' => [ - 'actorNotFound' => 'The account could not be found!', + 'actorNotFound' => 'ÚÄet nieje možné nájsÅ¥!', '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', + 'blocked_actors' => 'Zablokované úÄty', + 'blocked_domains' => 'Zablokované domény', 'block_lists_form' => [ 'handle' => 'Account handle', 'handle_hint' => 'Input @username@domain account.', @@ -25,7 +25,7 @@ return [ 'submit' => 'Block!', ], 'list' => [ - 'actor' => 'Account', + 'actor' => 'ÚÄet', 'domain' => 'Domain name', 'unblock' => 'Unblock', ], diff --git a/modules/Admin/Language/sk/Home.php b/modules/Admin/Language/sk/Home.php index 3ff4c04dc8a8f2576b3e04638184ae375f488a54..942992fd42d94fa9c244648103b28970b83184ee 100644 --- a/modules/Admin/Language/sk/Home.php +++ b/modules/Admin/Language/sk/Home.php @@ -9,6 +9,6 @@ declare(strict_types=1); */ return [ - 'all_podcasts' => 'All podcasts', - 'no_podcast' => 'No podcast found', + 'all_podcasts' => 'VÅ¡etky podcasty', + 'no_podcast' => 'Žiadne podcasty nenájdené', ]; diff --git a/modules/Admin/Language/sk/Install.php b/modules/Admin/Language/sk/Install.php index 36e373a2858779a2deb77f1cbc6f629dda223f19..6282e10b9551e4325933634d1c49f0fb0f239834 100644 --- a/modules/Admin/Language/sk/Install.php +++ b/modules/Admin/Language/sk/Install.php @@ -9,7 +9,7 @@ declare(strict_types=1); */ return [ - 'manual_config' => 'Manual configuration', + 'manual_config' => 'VlastnoruÄné nastavenie', 'manual_config_subtitle' => 'Create a `.env` file with your settings and refresh the page to continue installation.', 'form' => [ @@ -37,25 +37,25 @@ return [ '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', + 'cache_handler' => 'Obslužný mechanizmus vyrovnávacej pamäte', 'cacheHandlerOptions' => [ - 'file' => 'File', + 'file' => 'Súbor', 'redis' => 'Redis', 'predis' => 'Predis', ], - 'next' => 'Next', - 'submit' => 'Finish install', - 'create_superadmin' => 'Create your superadmin account', + 'next' => 'ÄŽalej', + 'submit' => 'DokonÄiÅ¥ inÅ¡taláciu', + 'create_superadmin' => 'VytvoriÅ¥ úÄet hlavného správcu', 'email' => 'Email', - 'username' => 'Username', - 'password' => 'Password', + 'username' => 'Meno použÃvateľa', + 'password' => 'Heslo', ], 'messages' => [ 'createSuperAdminSuccess' => - 'Your superadmin account has been created successfully. Login to start podcasting!', + 'ÚÄet hlavného správcu je úspeÅ¡ne vytvorený. Prihláste sa a zaÄnite podcastovaÅ¥!', 'databaseConnectError' => - 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'Castopod sa nedokáže pripojiÅ¥ k databáze. Upravte konfiguráciu a skúste znovu.', 'writeError' => - "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + "Nie je možné vytvoriÅ¥/zapÃsaÅ¥ súbor `.env`. Mali by ste ho vytvoriÅ¥ ruÄne podľa vzoru v súbore `.env.example` v balÃku castopod.", ], ]; diff --git a/modules/Admin/Language/sk/MyAccount.php b/modules/Admin/Language/sk/MyAccount.php index 6ebbb30ef70a5e3e86a9bab867f7c732ce79db26..1e54721eabc7b44d3c4af4c652fb96136be80643 100644 --- a/modules/Admin/Language/sk/MyAccount.php +++ b/modules/Admin/Language/sk/MyAccount.php @@ -9,10 +9,10 @@ declare(strict_types=1); */ return [ - 'info' => 'My account info', - 'changePassword' => 'Change my password', + 'info' => 'Informácie o mojom úÄte', + 'changePassword' => 'ZmeniÅ¥ heslo', 'messages' => [ - 'wrongPasswordError' => "You've entered the wrong password, try again.", - 'passwordChangeSuccess' => 'Password has been successfully changed!', + 'wrongPasswordError' => "Zadali ste nesprávne heslo, skúste znovu.", + 'passwordChangeSuccess' => 'Heslo je úspeÅ¡ne zmenené!', ], ]; diff --git a/modules/Admin/Language/sk/Navigation.php b/modules/Admin/Language/sk/Navigation.php index 68d4609d5d94a5770f237ee23207ad47d1262c70..f2c9e53abf7ed1397ec5354e1576826cd1fad7a5 100644 --- a/modules/Admin/Language/sk/Navigation.php +++ b/modules/Admin/Language/sk/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', - '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', + 'toggle_sidebar' => 'Prepnúť postranný panel', + 'go_to_website' => 'PrejsÅ¥ na webstránku', + 'go_to_admin' => 'SpravovaÅ¥', + 'dashboard' => 'Nástenka', + 'admin' => 'Úvod', + 'podcasts' => 'Podcasty', + 'podcast-list' => 'VÅ¡etky podcasty', + 'podcast-create' => 'Nový podcast', + 'podcast-import' => 'ImportovaÅ¥ podcast', + 'persons' => 'Osobnosti', + 'person-list' => 'VÅ¡etky osobnosti', + 'person-create' => 'Nová osobnosÅ¥', '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' => 'Blokované úÄty', + 'fediverse-blocked-domains' => 'Blokované domény', + 'users' => 'PoužÃvatelia', + 'user-list' => 'VÅ¡etci použÃvatelia', + 'user-create' => 'Nový použÃvateľ', + 'pages' => 'Stránky', + 'page-list' => 'VÅ¡etky stránky', + 'page-create' => 'Nová stránka', + 'settings' => 'Nastavenia', + 'settings-general' => 'VÅ¡eobecné', + 'settings-theme' => 'Vzhľad', 'account' => [ - 'my-account' => 'My account', - 'change-password' => 'Change password', - 'logout' => 'Logout', + 'my-account' => 'Môj úÄet', + 'change-password' => 'ZmeniÅ¥ heslo', + 'logout' => 'OdhlásiÅ¥ sa', ], ]; diff --git a/modules/Admin/Language/sk/Notifications.php b/modules/Admin/Language/sk/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/sk/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Admin/Language/sk/Page.php b/modules/Admin/Language/sk/Page.php index b6f49de57496ec4830246641f0bf8897e7c9a2f9..72892ebf99949646de68e0e98b2fc722c0b7e4cd 100644 --- a/modules/Admin/Language/sk/Page.php +++ b/modules/Admin/Language/sk/Page.php @@ -9,12 +9,12 @@ 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', + 'back_to_home' => 'Späť na úvod', + 'page' => 'Stránka', + 'all_pages' => 'VÅ¡etky stránky', + 'create' => 'Nová stránka', + 'go_to_page' => 'PrejsÅ¥ na stránku', + 'edit' => 'UpraviÅ¥ stránku', 'delete' => 'Delete page', 'form' => [ 'title' => 'Title', diff --git a/modules/Admin/Language/sk/Person.php b/modules/Admin/Language/sk/Person.php index a652be9fda1f4aeb73bcb01c35f13a452a6d4741..b6bf1dc7ed3595b5fcf3efec7e3afd9f509eb96a 100644 --- a/modules/Admin/Language/sk/Person.php +++ b/modules/Admin/Language/sk/Person.php @@ -54,12 +54,12 @@ return [ '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', + 'Môžete vybraÅ¥ jednu alebo viac osôb s tou istou rolou. Najprv by ste mali osobnosti vytvoriÅ¥.', + 'roles' => 'Roly', 'roles_hint' => - 'You may select none, one or several roles for a person.', - 'submit_add' => 'Add person(s)', - 'remove' => 'Remove', + 'Pre jednu osobu môžete vybraÅ¥ žiadnu, jednu alebo viac rolÃ.', + 'submit_add' => 'PridaÅ¥ osob(y)', + 'remove' => 'OdstrániÅ¥', ], - 'credits' => 'Credits', + 'credits' => 'Zásluhy', ]; diff --git a/modules/Admin/Language/sk/Platforms.php b/modules/Admin/Language/sk/Platforms.php index ab17d5999b1626535499464902c12f5c3bcb7aa8..678bdcbf8c55c75de25441b1f5859ae9bf3bca6e 100644 --- a/modules/Admin/Language/sk/Platforms.php +++ b/modules/Admin/Language/sk/Platforms.php @@ -9,11 +9,11 @@ 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?', + 'title' => 'Platformy', + 'home_url' => 'PrejsÅ¥ na stránku {platformName}', + 'submit_url' => 'UverejniÅ¥ podcast na platforme {platformName}', + 'visible' => 'ZobraziÅ¥ na úvodnej stránke podcastu?', + 'on_embed' => 'ZobraziÅ¥ na vnorenom prehrávaÄi?', 'remove' => 'Remove {platformName}', 'submit' => 'Save', 'messages' => [ diff --git a/modules/Admin/Language/sv/Breadcrumb.php b/modules/Admin/Language/sv/Breadcrumb.php index d9400ca786ad22820c4bda166f6f11e61a0cb199..24bece0140b8e7cbd6edf835d096f76a43f97e70 100644 --- a/modules/Admin/Language/sv/Breadcrumb.php +++ b/modules/Admin/Language/sv/Breadcrumb.php @@ -45,4 +45,5 @@ return [ 'soundbites' => 'soundbites', 'video-clips' => 'video clips', 'embed' => 'embeddable player', + 'notifications' => 'notifications', ]; diff --git a/modules/Admin/Language/sv/Notifications.php b/modules/Admin/Language/sv/Notifications.php new file mode 100644 index 0000000000000000000000000000000000000000..1772ba76b290dc6ec713315c062d70e95dcde28a --- /dev/null +++ b/modules/Admin/Language/sv/Notifications.php @@ -0,0 +1,19 @@ +<?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' => 'Notifications', + 'reply' => '{actor_username} replied to your post', + 'favourite' => '{actor_username} favourited your post', + 'reblog' => '{actor_username} shared your post', + 'follow' => '{actor_username} started following {target_actor_username}', + 'no_notifications' => 'No notifications', + 'mark_all_as_read' => 'Mark all as read', +]; diff --git a/modules/Install/Language/br/Install.php b/modules/Install/Language/br/Install.php index 1f66ef118fd188c73e37e5009c5cdd22c7fdd3f2..926c45f98ec6197fa080dbcf3c0f61110f7d3c43 100644 --- a/modules/Install/Language/br/Install.php +++ b/modules/Install/Language/br/Install.php @@ -10,53 +10,53 @@ declare(strict_types=1); return [ 'title' => 'Castopod installer', - 'manual_config' => 'Manual configuration', + 'manual_config' => 'Kefluniañ dre zorn', 'manual_config_subtitle' => - 'Create a `.env` file with your settings and refresh the page to continue installation.', + 'Krouit ur restr `.env` gant hoc’h arventennoù ha hizivait ar bajenn evit kenderc\'hel gant ar staliañ.', 'form' => [ - 'instance_config' => 'Instance configuration', - 'hostname' => 'Hostname', - 'media_base_url' => 'Media base URL', + 'instance_config' => 'Arventennoù an istañs', + 'hostname' => 'Anv an ostiz', + 'media_base_url' => 'Chomlec\'h diazez ar mediaoù', 'media_base_url_hint' => - 'If you use a CDN and/or an external analytics service, you may set them here.', - 'admin_gateway' => 'Admin gateway', + 'Ma \'z implijit ur CDN pe ur servij diavaez evit muzuliañ heklev, e c\'hellit lakaat anezho amañ.', + 'admin_gateway' => 'Chomlec\'h an daolenn-stur', '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', + 'An hent evit mont d\'an daolenn-stur (da sk. https://skouer.bzh/cp-admin). Dre ziouer eo cp-admin, met erbedet oc\'h kemmañ anezhañ evit abegoù a denn d\'an diogelroez.', + 'auth_gateway' => 'Chomlec\'h ar c\'hennaskañ', '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', + 'An hent evit mont d\'ar bajenn gennaskañ (da sk. https://skouer.bzh/cp-auth). Dre ziouer eo cp-auth, met erbedet oc\'h kemmañ anezhañ evit abegoù a denn d\'an diogelroez.', + 'database_config' => 'Arventennoù ar stlennvon', '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 a rank bezañ kennesket ouzh ho stlennvon MySQL (pe MariaDB). Mont e darempred gant merour ho tafariad ma n\'emañ ket ganeoc\'h an titouroù-se.', + 'db_hostname' => 'Anv ostiz ar stlennvon', + 'db_name' => 'Anv ar stlennvon (an diaz)', + 'db_username' => 'Anv implijer ar stlennvon', + 'db_password' => 'Ger-tremen ar stlennvon', + 'db_prefix' => 'Rakger an taolennoù', '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', + "Rakger taolennoù Castopod. Laoskit evel m'emañ ma ne ouzoc'h ket petra a dalv.", + 'cache_config' => 'Arventennoù ar grubuilh (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', + 'Dibabit hoc’h ardoer krubuilh muiañ plijet. Laoskit evel m\'emañ ma ne ouzoc\'h ket petra a dalv.', + 'cache_handler' => 'Aorder krubuilh', 'cacheHandlerOptions' => [ - 'file' => 'File', + 'file' => 'Restroù', 'redis' => 'Redis', 'predis' => 'Predis', ], - 'next' => 'Next', - 'submit' => 'Finish install', - 'create_superadmin' => 'Create your superadmin account', - 'email' => 'Email', - 'username' => 'Username', - 'password' => 'Password', + 'next' => 'War-lerc\'h', + 'submit' => 'Echuiñ ar staliañ', + 'create_superadmin' => 'Krouit ho kont gourverour·ez (superadmin)', + 'email' => 'Postel', + 'username' => 'Anv implijer·ez', + 'password' => 'Ger-tremen', ], 'messages' => [ 'createSuperAdminSuccess' => - 'Your superadmin account has been created successfully. Login to start podcasting!', + 'Ho kont gourverour·ez a zo bet krouet gant berzh. Kevreit ha krogit da bodkastiñ!', 'databaseConnectError' => - 'Castopod could not connect to your database. Edit your database configuration and try again.', + 'N\'en deus ket gellet Castopod kevreañ ouzh ho stlennvon. Kemmit arventennoù ar stlennvon ha klaskit en-dro.', 'writeError' => - "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.", + "N'haller ket krouiñ/skrivañ ar restr `.env`. Deoc'h-c'hwi da grouiñ anezhi dre zorn diwar ar patrom `.env.example` az o e pakad Castopod.", ], ]; diff --git a/modules/Install/Language/gl/Install.php b/modules/Install/Language/gl/Install.php new file mode 100644 index 0000000000000000000000000000000000000000..1f66ef118fd188c73e37e5009c5cdd22c7fdd3f2 --- /dev/null +++ b/modules/Install/Language/gl/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.", + ], +];