diff --git a/app/Language/br/Comment.php b/app/Language/br/Comment.php
index e46befd1..5ce07ee5 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 2d2e8692..99d3b597 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 4c669ee9..d2b0533a 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 e15951d7..937fa24d 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 00000000..8da20a12
--- /dev/null
+++ b/app/Language/gl/Comment.php
@@ -0,0 +1,34 @@
+ "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 00000000..59a4cc5a
--- /dev/null
+++ b/app/Language/gl/Common.php
@@ -0,0 +1,30 @@
+ '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 00000000..9d228bd9
--- /dev/null
+++ b/app/Language/gl/Episode.php
@@ -0,0 +1,33 @@
+ '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 00000000..c8eb9824
--- /dev/null
+++ b/app/Language/gl/Fediverse.php
@@ -0,0 +1,37 @@
+ '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 00000000..433b7b75
--- /dev/null
+++ b/app/Language/gl/Home.php
@@ -0,0 +1,20 @@
+ '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 00000000..9d061373
--- /dev/null
+++ b/app/Language/gl/Page.php
@@ -0,0 +1,17 @@
+ '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 00000000..f26babe3
--- /dev/null
+++ b/app/Language/gl/Podcast.php
@@ -0,0 +1,53 @@
+ '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 00000000..5cf07f28
--- /dev/null
+++ b/app/Language/gl/Post.php
@@ -0,0 +1,40 @@
+ "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 1463939f..bb54fd28 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 d40c4e5f..5fa9788f 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 993a1ccd..eece433a 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 a4b232b2..d8fe8759 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 33d0e923..a4851bf1 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 60ffc771..8a350c2b 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 a15fe02c..bf3b232f 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 45ec87f6..4292024e 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 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/ar/index.md b/docs/src/ar/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/ar/index.md
+++ b/docs/src/ar/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/br/getting-started/docker.md b/docs/src/br/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..f0a71a3e 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/br/index.md b/docs/src/br/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/br/index.md
+++ b/docs/src/br/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/de/getting-started/docker.md b/docs/src/de/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/de/index.md b/docs/src/de/index.md
index b16a7794..2d1ef450 100644
--- a/docs/src/de/index.md
+++ b/docs/src/de/index.md
@@ -219,7 +219,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/el/getting-started/docker.md b/docs/src/el/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/el/index.md b/docs/src/el/index.md
index 55b2ea3a..c657df59 100644
--- a/docs/src/el/index.md
+++ b/docs/src/el/index.md
@@ -217,7 +217,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/es/getting-started/docker.md b/docs/src/es/getting-started/docker.md
new file mode 100644
index 00000000..5c245a11
--- /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 db0e0e8f..7c2b5cee 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.
@@ -158,19 +156,3 @@ manages the hardships of self-hosting for you.
Repo
-
-### Instalar con Docker
-
-Si desea utilizar Docker para instalar Castopod, ¡es posible gracias a
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Instalar
-con
-Docker
-
-::: 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 f6842362..3c416619 100644
--- a/docs/src/es/index.md
+++ b/docs/src/es/index.md
@@ -219,7 +219,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/fa/getting-started/docker.md b/docs/src/fa/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/fa/index.md b/docs/src/fa/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/fa/index.md
+++ b/docs/src/fa/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/fr/getting-started/docker.md b/docs/src/fr/getting-started/docker.md
index 6e0b0dce..2a35a8bb 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 4d3bd938..dc8e52cf 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
-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.
+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.
:::
@@ -155,19 +156,3 @@ self-hosting for you.
Github
-
-### Installer avec Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Installer
-avec
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/fr/index.md b/docs/src/fr/index.md
index ee458161..1ee8a8e5 100644
--- a/docs/src/fr/index.md
+++ b/docs/src/fr/index.md
@@ -223,7 +223,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/gd/getting-started/docker.md b/docs/src/gd/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/gd/index.md b/docs/src/gd/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/gd/index.md
+++ b/docs/src/gd/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/gl/getting-started/docker.md b/docs/src/gl/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 00000000..05659d73
--- /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.
+
+
diff --git a/docs/src/gl/getting-started/security.md b/docs/src/gl/getting-started/security.md
new file mode 100644
index 00000000..e205698d
--- /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 00000000..1f48e274
--- /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 00000000..cb12ac59
--- /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!
+
+:::
+
+
+
+## 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)):
+
+
+
+
+
+
+
+
+
+
+
+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).
+
+
+
+
+
+
+## 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 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/id/index.md b/docs/src/id/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/id/index.md
+++ b/docs/src/id/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/it/getting-started/docker.md b/docs/src/it/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/it/index.md b/docs/src/it/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/it/index.md
+++ b/docs/src/it/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/nl/getting-started/docker.md b/docs/src/nl/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/nl/index.md b/docs/src/nl/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/nl/index.md
+++ b/docs/src/nl/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/nn-NO/getting-started/docker.md b/docs/src/nn-NO/getting-started/docker.md
index 1a057fe4..2a35a8bb 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 ea1ffea6..f58f9cb0 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
-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.
+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.
:::
@@ -151,19 +152,3 @@ self-hosting for you.
class="text-xl"> Github-arkiv
-
-### Installer med Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Installer
-med
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/nn-NO/index.md b/docs/src/nn-NO/index.md
index fa83927d..9ead96ba 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
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/oc/getting-started/docker.md b/docs/src/oc/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/oc/index.md b/docs/src/oc/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/oc/index.md
+++ b/docs/src/oc/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/pl/getting-started/docker.md b/docs/src/pl/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/pl/index.md b/docs/src/pl/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/pl/index.md
+++ b/docs/src/pl/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/pt-BR/getting-started/docker.md b/docs/src/pt-BR/getting-started/docker.md
index 1a057fe4..2a35a8bb 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 468f4359..04f8f4ff 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.
@@ -156,19 +155,3 @@ dificuldades de auto-hospedagem para você.
Repo
-
-### Instalar com o Docker
-
-Se você deseja usar o Docker para instalar o Castopod, é possível graças a
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Instalar
-com o
-Docker
-
-::: info Nota
-
-Dado o alto nível de demanda por docker, planejamos manter uma imagem oficial do
-Castopod Docker diretamente no repositório do Castopod.
-
-:::
diff --git a/docs/src/pt-BR/index.md b/docs/src/pt-BR/index.md
index df6ea095..24204271 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
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/pt/getting-started/docker.md b/docs/src/pt/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/pt/index.md b/docs/src/pt/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/pt/index.md
+++ b/docs/src/pt/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/ru/getting-started/docker.md b/docs/src/ru/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/ru/index.md b/docs/src/ru/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/ru/index.md
+++ b/docs/src/ru/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/sk/getting-started/docker.md b/docs/src/sk/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/sk/index.md b/docs/src/sk/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/sk/index.md
+++ b/docs/src/sk/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/docs/src/sv/getting-started/docker.md b/docs/src/sv/getting-started/docker.md
new file mode 100644
index 00000000..2a35a8bb
--- /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 c63d2fe1..05659d73 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
-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.
+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.
:::
@@ -152,19 +153,3 @@ self-hosting for you.
Repo
-
-### Install with Docker
-
-If you wish to use Docker to install Castopod, it is possible thanks to
-[Romain de Laage](https://mamot.fr/@rdelaage)!
-
-Install
-with
-Docker
-
-::: info Note
-
-Given high demand for docker, we plan on maintaining an official Castopod Docker
-image directly into the Castopod repository.
-
-:::
diff --git a/docs/src/sv/index.md b/docs/src/sv/index.md
index 94dca165..cb12ac59 100644
--- a/docs/src/sv/index.md
+++ b/docs/src/sv/index.md
@@ -216,7 +216,7 @@ Thanks goes to these wonderful people
glottis0q 🌍
- ButterflyOfFire 🌍
+ ButterflyOfFire 🌍
Lucian I. Last 🌍
LuuzViir 🌍
CTHTC 🌍
diff --git a/modules/Admin/Language/ar/Breadcrumb.php b/modules/Admin/Language/ar/Breadcrumb.php
index 396ae474..2a562d7d 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 ce8a29f1..9dff13c6 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 3d963a7e..881073fd 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/ar/Notifications.php
@@ -0,0 +1,19 @@
+ '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 c3ea93ff..8702d4ce 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 1d70b13b..7de3c6ac 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 e9305d4e..1cb6c3b2 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 0b7c784f..881073fd 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 611955d3..800e6459 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}
+ 'deleteError' => 'C\'hwitadenn war dilemel {type, select,
+ transcript {treuzskrivadur}
+ chapters {chabistroù}
+ image {golo}
+ audio {aodio}
other {media}
- }.',
- 'deleteFileError' => 'Failed to delete {type, select,
- transcript {transcript}
- chapters {chapters}
- image {cover}
- audio {audio}
- other {media}
- } file {file_path}. You may manually remove it from your disk.',
+ } 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/br/Notifications.php
@@ -0,0 +1,19 @@
+ '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 4cfefec6..dccaa097 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 c28087d8..9a1d0f69 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 ab17d599..71d04168 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 61a53119..0de9f71b 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 7c3ef67d..7ba8d909 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 b6195731..56c57578 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 345976be..10c855bf 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 a3f828fe..85d3ce58 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 8b2e478b..2684206f 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 638de697..fa2adf21 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 01449c4a..b54c9c8e 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 a4447027..f9b6a99c 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 7dc34ad8..881073fd 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 4ccb1d94..eaa881fd 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/de/Notifications.php
@@ -0,0 +1,19 @@
+ '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 c235a34f..cad9d1b4 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 2ec4cac1..13b75af4 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 906b255b..8dee5476 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/el/Notifications.php
@@ -0,0 +1,19 @@
+ '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 ee7001fc..e06fe657 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 0502f776..91d41dc1 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 7a15ab34..7c7c7047 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/es/Notifications.php
@@ -0,0 +1,19 @@
+ '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 d9400ca7..24bece01 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/fa/Notifications.php
@@ -0,0 +1,19 @@
+ '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 814b02c0..12672727 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 0a12d861..f66f2a29 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 c47c901b..881073fd 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 d74545a1..a65e0234 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/fr/Notifications.php
@@ -0,0 +1,19 @@
+ '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 d9400ca7..24bece01 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/gd/Notifications.php
@@ -0,0 +1,19 @@
+ '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 00000000..93ead034
--- /dev/null
+++ b/modules/Admin/Language/gl/Breadcrumb.php
@@ -0,0 +1,49 @@
+ '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 00000000..edd2f8af
--- /dev/null
+++ b/modules/Admin/Language/gl/Charts.php
@@ -0,0 +1,40 @@
+ '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 00000000..66a6f8d2
--- /dev/null
+++ b/modules/Admin/Language/gl/Common.php
@@ -0,0 +1,51 @@
+ '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 00000000..a09021cd
--- /dev/null
+++ b/modules/Admin/Language/gl/Contributor.php
@@ -0,0 +1,41 @@
+ '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 00000000..cf34b15f
--- /dev/null
+++ b/modules/Admin/Language/gl/Countries.php
@@ -0,0 +1,264 @@
+ 'Andorra',
+ 'AE' => 'United Arab Emirates',
+ 'AF' => 'Afghanistan',
+ 'AG' => 'Antigua and Barbuda',
+ 'AI' => 'Anguilla',
+ 'AL' => 'Albania',
+ 'AM' => 'Armenia',
+ 'AO' => 'Angola',
+ 'AQ' => 'Antarctica',
+ 'AR' => 'Argentina',
+ 'AS' => 'American Samoa',
+ 'AT' => 'Austria',
+ 'AU' => 'Australia',
+ 'AW' => 'Aruba',
+ 'AX' => 'Åland Islands',
+ 'AZ' => 'Azerbaijan',
+ 'BA' => 'Bosnia and Herzegovina',
+ 'BB' => 'Barbados',
+ 'BD' => 'Bangladesh',
+ 'BE' => 'Belgium',
+ 'BF' => 'Burkina Faso',
+ 'BG' => 'Bulgaria',
+ 'BH' => 'Bahrain',
+ 'BI' => 'Burundi',
+ 'BJ' => 'Benin',
+ 'BL' => 'Saint Barthélemy',
+ 'BM' => 'Bermuda',
+ 'BN' => 'Brunei Darussalam',
+ 'BO' => 'Bolivia, Plurinational State of',
+ 'BQ' => 'Bonaire, Sint Eustatius and Saba',
+ 'BR' => '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 00000000..881073fd
--- /dev/null
+++ b/modules/Admin/Language/gl/Dashboard.php
@@ -0,0 +1,28 @@
+ '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 00000000..bfc6647a
--- /dev/null
+++ b/modules/Admin/Language/gl/Episode.php
@@ -0,0 +1,202 @@
+ '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 00000000..1406e301
--- /dev/null
+++ b/modules/Admin/Language/gl/EpisodeNavigation.php
@@ -0,0 +1,23 @@
+ 'View episode page',
+ 'dashboard' => 'Episode dashboard',
+ 'episode-view' => 'Home',
+ 'episode-edit' => 'Edit episode',
+ 'episode-persons-manage' => 'Manage persons',
+ 'embed-add' => 'Embeddable player',
+ 'clips' => 'Clips',
+ 'video-clips-list' => 'Video clips',
+ 'video-clips-create' => 'New video clip',
+ 'soundbites-list' => 'Soundbites',
+ 'soundbites-create' => 'New soundbite',
+];
diff --git a/modules/Admin/Language/gl/Fediverse.php b/modules/Admin/Language/gl/Fediverse.php
new file mode 100644
index 00000000..9eecfa2a
--- /dev/null
+++ b/modules/Admin/Language/gl/Fediverse.php
@@ -0,0 +1,32 @@
+ [
+ 'actorNotFound' => 'The account could not be found!',
+ 'blockActorSuccess' => '{actor} has been blocked!',
+ 'unblockActorSuccess' => 'Actor has been unblocked!',
+ 'blockDomainSuccess' => '{domain} 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 00000000..29edd1c7
--- /dev/null
+++ b/modules/Admin/Language/gl/Home.php
@@ -0,0 +1,14 @@
+ '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 00000000..d96f9230
--- /dev/null
+++ b/modules/Admin/Language/gl/Install.php
@@ -0,0 +1,61 @@
+ '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 00000000..6ebbb30e
--- /dev/null
+++ b/modules/Admin/Language/gl/MyAccount.php
@@ -0,0 +1,18 @@
+ 'My account info',
+ 'changePassword' => 'Change my password',
+ 'messages' => [
+ 'wrongPasswordError' => "You've entered the wrong password, try again.",
+ 'passwordChangeSuccess' => 'Password has been successfully changed!',
+ ],
+];
diff --git a/modules/Admin/Language/gl/Navigation.php b/modules/Admin/Language/gl/Navigation.php
new file mode 100644
index 00000000..68d4609d
--- /dev/null
+++ b/modules/Admin/Language/gl/Navigation.php
@@ -0,0 +1,41 @@
+ 'Toggle sidebar',
+ 'go_to_website' => 'Go to website',
+ 'go_to_admin' => 'Go to admin',
+ 'dashboard' => 'Dashboard',
+ 'admin' => 'Home',
+ 'podcasts' => 'Podcasts',
+ 'podcast-list' => 'All podcasts',
+ 'podcast-create' => 'New podcast',
+ 'podcast-import' => 'Import a podcast',
+ 'persons' => 'Persons',
+ 'person-list' => 'All persons',
+ 'person-create' => 'New person',
+ 'fediverse' => 'Fediverse',
+ 'fediverse-blocked-actors' => 'Blocked accounts',
+ 'fediverse-blocked-domains' => 'Blocked domains',
+ 'users' => 'Users',
+ 'user-list' => 'All users',
+ 'user-create' => 'New user',
+ 'pages' => 'Pages',
+ 'page-list' => 'All pages',
+ 'page-create' => 'New Page',
+ 'settings' => 'Settings',
+ 'settings-general' => 'General',
+ 'settings-theme' => 'Theme',
+ 'account' => [
+ 'my-account' => 'My account',
+ 'change-password' => 'Change password',
+ 'logout' => 'Logout',
+ ],
+];
diff --git a/modules/Admin/Language/gl/Notifications.php b/modules/Admin/Language/gl/Notifications.php
new file mode 100644
index 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/gl/Notifications.php
@@ -0,0 +1,19 @@
+ '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 00000000..b6f49de5
--- /dev/null
+++ b/modules/Admin/Language/gl/Page.php
@@ -0,0 +1,30 @@
+ 'Back to home',
+ 'page' => 'Page',
+ 'all_pages' => 'All pages',
+ 'create' => 'New page',
+ 'go_to_page' => 'Go to page',
+ 'edit' => 'Edit page',
+ 'delete' => 'Delete page',
+ 'form' => [
+ 'title' => 'Title',
+ 'permalink' => 'Permalink',
+ 'content' => 'Content',
+ 'submit_create' => 'Create page',
+ 'submit_edit' => 'Save',
+ ],
+ 'messages' => [
+ 'createSuccess' => 'The page “{pageTitle}” was created successfully!',
+ 'editSuccess' => 'The page was successfully updated!',
+ ],
+];
diff --git a/modules/Admin/Language/gl/Pager.php b/modules/Admin/Language/gl/Pager.php
new file mode 100644
index 00000000..e25ee638
--- /dev/null
+++ b/modules/Admin/Language/gl/Pager.php
@@ -0,0 +1,21 @@
+ 'Page navigation',
+ 'first' => 'First',
+ 'previous' => 'Previous',
+ 'next' => 'Next',
+ 'last' => 'Last',
+ 'older' => 'Older',
+ 'newer' => 'Newer',
+ 'invalidTemplate' => '{0} is not a valid Pager template.',
+ 'invalidPaginationGroup' => '{0} is not a valid Pagination group.',
+];
diff --git a/modules/Admin/Language/gl/Person.php b/modules/Admin/Language/gl/Person.php
new file mode 100644
index 00000000..a652be9f
--- /dev/null
+++ b/modules/Admin/Language/gl/Person.php
@@ -0,0 +1,65 @@
+ 'Persons',
+ 'all_persons' => 'All persons',
+ 'no_person' => 'Nobody found!',
+ 'create' => 'Create a person',
+ 'view' => 'View person',
+ 'edit' => 'Edit person',
+ 'delete' => 'Delete person',
+ 'messages' => [
+ 'createSuccess' => 'Person has been successfully created!',
+ 'editSuccess' => 'Person has been successfully updated!',
+ 'deleteSuccess' => 'Person has been removed!',
+ ],
+ 'form' => [
+ 'avatar' => 'Avatar',
+ 'avatar_size_hint' =>
+ 'Avatar must be squared 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 00000000..ab17d599
--- /dev/null
+++ b/modules/Admin/Language/gl/Platforms.php
@@ -0,0 +1,30 @@
+ 'Platforms',
+ 'home_url' => 'Go to {platformName} website',
+ 'submit_url' => 'Submit your podcast on {platformName}',
+ 'visible' => 'Display in podcast homepage?',
+ 'on_embed' => 'Display on embeddable player?',
+ 'remove' => 'Remove {platformName}',
+ 'submit' => 'Save',
+ 'messages' => [
+ 'updateSuccess' => 'Platform links have been successfully updated!',
+ 'removeLinkSuccess' => 'The platform link has been removed.',
+ 'removeLinkError' =>
+ 'The platform link could not be removed. Try again.',
+ ],
+ 'description' => [
+ 'podcasting' => 'The podcast ID on this platform',
+ 'social' => 'The podcast account ID on this platform',
+ 'funding' => 'Call to action message',
+ ],
+];
diff --git a/modules/Admin/Language/gl/Podcast.php b/modules/Admin/Language/gl/Podcast.php
new file mode 100644
index 00000000..ed83f784
--- /dev/null
+++ b/modules/Admin/Language/gl/Podcast.php
@@ -0,0 +1,307 @@
+ '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 00000000..a5200334
--- /dev/null
+++ b/modules/Admin/Language/gl/PodcastImport.php
@@ -0,0 +1,37 @@
+
+ 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.',
+ 'old_podcast_section_title' => 'The podcast to import',
+ 'old_podcast_section_subtitle' =>
+ 'Make sure you own the rights for this podcast before importing it. Copying and broadcasting a podcast without the proper rights is piracy and is liable to prosecution.',
+ 'imported_feed_url' => 'Feed URL',
+ 'imported_feed_url_hint' => 'The feed must be in xml or rss format.',
+ 'new_podcast_section_title' => 'The new podcast',
+ 'advanced_params_section_title' => 'Advanced parameters',
+ 'advanced_params_section_subtitle' =>
+ 'Keep the default values if you have no idea of what the fields are for.',
+ 'slug_field' => '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 00000000..b6195731
--- /dev/null
+++ b/modules/Admin/Language/gl/PodcastNavigation.php
@@ -0,0 +1,35 @@
+ 'Go to podcast page',
+ 'dashboard' => 'Podcast dashboard',
+ 'podcast-view' => 'Home',
+ 'podcast-edit' => 'Edit podcast',
+ 'podcast-persons-manage' => 'Manage persons',
+ 'episodes' => 'Episodes',
+ 'episode-list' => 'All episodes',
+ 'episode-create' => 'New episode',
+ 'analytics' => 'Analytics',
+ 'podcast-analytics' => 'Audience overview',
+ 'podcast-analytics-webpages' => 'Web pages visits',
+ 'podcast-analytics-locations' => 'Locations',
+ 'podcast-analytics-unique-listeners' => 'Unique listeners',
+ 'podcast-analytics-players' => 'Players',
+ 'podcast-analytics-listening-time' => 'Listening time',
+ 'podcast-analytics-time-periods' => 'Time periods',
+ 'contributors' => 'Contributors',
+ 'contributor-list' => 'All contributors',
+ 'contributor-add' => 'Add contributor',
+ 'platforms' => 'External platforms',
+ 'platforms-podcasting' => 'Podcasting',
+ 'platforms-social' => 'Social networks',
+ 'platforms-funding' => 'Funding',
+];
diff --git a/modules/Admin/Language/gl/Settings.php b/modules/Admin/Language/gl/Settings.php
new file mode 100644
index 00000000..345976be
--- /dev/null
+++ b/modules/Admin/Language/gl/Settings.php
@@ -0,0 +1,56 @@
+ 'General settings',
+ 'instance' => [
+ 'title' => 'Instance',
+ 'site_icon' => 'Site icon',
+ 'site_icon_delete' => 'Delete site icon',
+ 'site_icon_hint' => 'Site icons are what you see on your browser tabs, bookmarks bar, and when you add a website as a shortcut on mobile devices.',
+ 'site_icon_helper' => 'Icon must be squared 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 00000000..a3f828fe
--- /dev/null
+++ b/modules/Admin/Language/gl/Soundbite.php
@@ -0,0 +1,31 @@
+ [
+ 'title' => 'Soundbites',
+ 'soundbite' => 'Soundbite',
+ ],
+ 'messages' => [
+ 'createSuccess' => 'Soundbite has been successfully created!',
+ 'deleteSuccess' => 'Soundbite has been successfully removed!',
+ ],
+ 'form' => [
+ 'title' => 'New soundbite',
+ 'soundbite_title' => 'Soundbite title',
+ 'start_time' => 'Start at',
+ 'duration' => 'Duration',
+ 'submit' => 'Create soundbite',
+ ],
+ 'play' => 'Play soundbite',
+ 'stop' => 'Stop soundbite',
+ 'create' => 'New soundbite',
+ 'delete' => 'Delete soundbite',
+];
diff --git a/modules/Admin/Language/gl/User.php b/modules/Admin/Language/gl/User.php
new file mode 100644
index 00000000..86e03557
--- /dev/null
+++ b/modules/Admin/Language/gl/User.php
@@ -0,0 +1,54 @@
+ "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 00000000..750b1968
--- /dev/null
+++ b/modules/Admin/Language/gl/Validation.php
@@ -0,0 +1,18 @@
+
+ '{field} is either not an image, or it is not wide or tall enough.',
+ 'is_image_ratio' =>
+ '{field} is either not an image or not of the right ratio.',
+ 'validate_url' =>
+ 'The {field} field must be a valid URL (eg. https://example.com/).',
+];
diff --git a/modules/Admin/Language/gl/VideoClip.php b/modules/Admin/Language/gl/VideoClip.php
new file mode 100644
index 00000000..638de697
--- /dev/null
+++ b/modules/Admin/Language/gl/VideoClip.php
@@ -0,0 +1,72 @@
+ [
+ 'title' => 'Video clips',
+ 'status' => [
+ 'label' => 'Status',
+ 'queued' => 'queued',
+ 'queued_hint' => 'Clip is waiting to be processed.',
+ 'pending' => 'pending',
+ 'pending_hint' => 'Clip will be generated shortly.',
+ 'running' => 'running',
+ 'running_hint' => 'Clip is being generated.',
+ 'failed' => 'failed',
+ 'failed_hint' => 'Clip could not be generated: script failure.',
+ 'passed' => 'passed',
+ 'passed_hint' => 'Clip was generated successfully!',
+ ],
+ 'clip' => 'Clip',
+ 'duration' => 'Job duration',
+ ],
+ 'title' => 'Video clip: {videoClipLabel}',
+ 'download_clip' => 'Download clip',
+ 'create' => 'New video clip',
+ 'go_to_page' => 'Go to clip page',
+ 'retry' => 'Retry clip generation',
+ 'delete' => 'Delete clip',
+ 'logs' => 'Job logs',
+ 'messages' => [
+ 'alreadyExistingError' => 'The video clip you are trying to create already exists!',
+ 'addToQueueSuccess' => 'Video clip has been added to queue, awaiting to be created!',
+ 'deleteSuccess' => 'Video clip has been successfully removed!',
+ ],
+ 'format' => [
+ 'landscape' => 'Landscape',
+ 'portrait' => 'Portrait',
+ 'squared' => 'Squared',
+ ],
+ 'form' => [
+ 'title' => 'New video clip',
+ 'params_section_title' => 'Video clip parameters',
+ 'clip_title' => 'Clip title',
+ 'format' => [
+ 'label' => 'Choose a format',
+ 'landscape_hint' => 'With a 16:9 ratio, landscape videos are great for PeerTube, Youtube and Vimeo.',
+ 'portrait_hint' => 'With a 9:16 ratio, portrait videos are great for TikTok, Youtube shorts and Instagram stories.',
+ 'squared_hint' => 'With a 1:1 ratio, squared videos are great for Mastodon, Facebook, Twitter and LinkedIn.',
+ ],
+ 'theme' => 'Select a theme',
+ 'start_time' => 'Start at',
+ 'duration' => 'Duration',
+ 'trim_start' => 'Trim start',
+ 'trim_end' => 'Trim end',
+ 'submit' => 'Create video clip',
+ ],
+ 'requirements' => [
+ 'title' => 'Missing requirements',
+ 'missing' => 'You have missing requirements. Make sure to add all the required items to be allowed creating a video for this episode!',
+ 'ffmpeg' => 'FFmpeg',
+ 'gd' => 'Graphics Draw (GD)',
+ 'freetype' => 'Freetype library for GD',
+ 'transcript' => 'Transcript file (.srt)',
+ ],
+];
diff --git a/modules/Admin/Language/id/Breadcrumb.php b/modules/Admin/Language/id/Breadcrumb.php
index d9400ca7..24bece01 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/id/Notifications.php
@@ -0,0 +1,19 @@
+ '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 d9400ca7..24bece01 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/it/Notifications.php
@@ -0,0 +1,19 @@
+ '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 ecb81fc7..03d3b0ae 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 73136f88..96e45a8a 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 024e87d9..881073fd 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/nl/Notifications.php
@@ -0,0 +1,19 @@
+ '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 c7852453..aed6277a 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 b4b30188..db095fd9 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 9a51d003..881073fd 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 733eda6b..c98495f0 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/nn-NO/Notifications.php
@@ -0,0 +1,19 @@
+ '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 d9400ca7..24bece01 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/oc/Notifications.php
@@ -0,0 +1,19 @@
+ '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 6ad15119..0030fb60 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 a2566c26..183399ee 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 7e2d2e07..881073fd 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 f874e9fe..f82ccfda 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/pl/Notifications.php
@@ -0,0 +1,19 @@
+ '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 ea0d019c..42c5e23c 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 78eaa948..cd15c64b 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/pt-BR/Notifications.php
@@ -0,0 +1,19 @@
+ '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 d9400ca7..24bece01 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/pt/Notifications.php
@@ -0,0 +1,19 @@
+ '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 8f4438ff..d0ad26ac 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 1805eb8f..596c8bcd 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 8542f43e..881073fd 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/ru/Notifications.php
@@ -0,0 +1,19 @@
+ '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 03f9f35e..e9a9b17d 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 4b33530e..b205c286 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 f11a1ad4..9572c953 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 94072a93..3f0991fa 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 3febee26..98d7161d 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 f174fc0c..1675c6ed 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 1406e301..be3a1e25 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 0e4ca66d..1a5e0a27 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 3ff4c04d..942992fd 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 36e373a2..6282e10b 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 6ebbb30e..1e54721e 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 68d4609d..f2c9e53a 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/sk/Notifications.php
@@ -0,0 +1,19 @@
+ '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 b6f49de5..72892ebf 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 a652be9f..b6bf1dc7 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 ab17d599..678bdcbf 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 d9400ca7..24bece01 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 00000000..1772ba76
--- /dev/null
+++ b/modules/Admin/Language/sv/Notifications.php
@@ -0,0 +1,19 @@
+ '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 1f66ef11..926c45f9 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 00000000..1f66ef11
--- /dev/null
+++ b/modules/Install/Language/gl/Install.php
@@ -0,0 +1,62 @@
+ 'Castopod installer',
+ 'manual_config' => 'Manual configuration',
+ 'manual_config_subtitle' =>
+ 'Create a `.env` file with your settings and refresh the page to continue installation.',
+ 'form' => [
+ 'instance_config' => 'Instance configuration',
+ 'hostname' => 'Hostname',
+ 'media_base_url' => 'Media base URL',
+ 'media_base_url_hint' =>
+ 'If you use a CDN and/or an external analytics service, you may set them here.',
+ 'admin_gateway' => 'Admin gateway',
+ 'admin_gateway_hint' =>
+ 'The route to access the admin area (eg. https://example.com/cp-admin). It is set by default as cp-admin, we recommend you change it for security reasons.',
+ 'auth_gateway' => 'Auth gateway',
+ 'auth_gateway_hint' =>
+ 'The route to access the authentication pages (eg. https://example.com/cp-auth). It is set by default as cp-auth, we recommend you change it for security reasons.',
+ 'database_config' => 'Database configuration',
+ 'database_config_hint' =>
+ 'Castopod needs to connect to your MySQL (or MariaDB) database. If you do not have these required info, please contact your server administrator.',
+ 'db_hostname' => 'Database hostname',
+ 'db_name' => 'Database name',
+ 'db_username' => 'Database username',
+ 'db_password' => 'Database password',
+ 'db_prefix' => 'Database prefix',
+ 'db_prefix_hint' =>
+ "The prefix of the Castopod table names, leave as is if you don't know what it means.",
+ 'cache_config' => 'Cache configuration',
+ 'cache_config_hint' =>
+ 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.',
+ 'cache_handler' => 'Cache handler',
+ 'cacheHandlerOptions' => [
+ 'file' => 'File',
+ 'redis' => 'Redis',
+ 'predis' => 'Predis',
+ ],
+ 'next' => 'Next',
+ 'submit' => 'Finish install',
+ 'create_superadmin' => 'Create your superadmin account',
+ 'email' => 'Email',
+ 'username' => 'Username',
+ 'password' => 'Password',
+ ],
+ 'messages' => [
+ 'createSuperAdminSuccess' =>
+ 'Your superadmin account has been created successfully. Login to start podcasting!',
+ 'databaseConnectError' =>
+ 'Castopod could not connect to your database. Edit your database configuration and try again.',
+ 'writeError' =>
+ "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.",
+ ],
+];