diff --git a/app/Language/el/Common.php b/app/Language/el/Common.php
index a74dced0..e66241cb 100644
--- a/app/Language/el/Common.php
+++ b/app/Language/el/Common.php
@@ -26,5 +26,5 @@ return [
'read_less' => 'Διαβάστε λιγότερα',
'see_more' => 'Εμφάνιση περισσότερων',
'see_less' => 'Δείτε λιγότερα',
- 'legal_notice' => 'Legal notice',
+ 'legal_notice' => 'Νομικές επισημάνσεις',
];
diff --git a/app/Language/gd/Common.php b/app/Language/gd/Common.php
index 7bb494e9..e16dc6e6 100644
--- a/app/Language/gd/Common.php
+++ b/app/Language/gd/Common.php
@@ -26,5 +26,5 @@ return [
'read_less' => 'Leugh nas lugha dheth',
'see_more' => 'Seall barrachd dheth',
'see_less' => 'Seall nas lugha dheth',
- 'legal_notice' => 'Legal notice',
+ 'legal_notice' => 'Sanas laghail',
];
diff --git a/app/Language/gd/Fediverse.php b/app/Language/gd/Fediverse.php
index d1dbaaef..1811f926 100644
--- a/app/Language/gd/Fediverse.php
+++ b/app/Language/gd/Fediverse.php
@@ -12,12 +12,12 @@ return [
'your_handle' => 'An t-aithnichear agad',
'your_handle_hint' => 'Cuir a-steach an @ainm_cleachdaiche@àrainn leis a ghabhas tu gnìomh.',
'follow' => [
- 'label' => 'Lean air',
- 'title' => 'Lean air {actorDisplayName}',
- 'subtitle' => 'Tha thu gu bhith leantainn air:',
+ 'label' => 'Lean',
+ 'title' => 'Lean {actorDisplayName}',
+ 'subtitle' => 'Tha thu gu bhith leantainn:',
'accountNotFound' => 'Cha deach an cunntas a lorg.',
'remoteFollowNotAllowed' => 'Tha coltas nach gabh am frithealaiche ri leantainn chèin…',
- 'submit' => 'Lean air adhart gus leantainn air',
+ 'submit' => 'Lean air adhart gus a leantainn',
],
'favourite' => [
'title' => "Cuir am post aig {actorDisplayName} ris na h-annsachdan",
diff --git a/app/Language/gd/Podcast.php b/app/Language/gd/Podcast.php
index 5fb7d3e8..c9e6c962 100644
--- a/app/Language/gd/Podcast.php
+++ b/app/Language/gd/Podcast.php
@@ -15,8 +15,8 @@ return [
'list_of_episodes_season' =>
'Eapasodan seusan {seasonNumber} ({episodeCount})',
'no_episode' => 'Cha deach eapasod a lorg!',
- 'follow' => 'Lean air',
- 'followTitle' => 'Lean air {actorDisplayName} sa cho-shaoghal!',
+ 'follow' => 'Lean',
+ 'followTitle' => 'Lean {actorDisplayName} sa cho-shaoghal!',
'followers' => '{numberOfFollowers, plural,
one {# neach-leantainn}
two {# luchd-leantainn}
diff --git a/app/Language/ro/Comment.php b/app/Language/ro/Comment.php
new file mode 100644
index 00000000..ab16710c
--- /dev/null
+++ b/app/Language/ro/Comment.php
@@ -0,0 +1,35 @@
+ "Comentariul lui {actorDisplayName} pentru {episodeTitle}",
+ 'back_to_comments' => 'Înapoi la comentarii',
+ 'form' => [
+ 'episode_message_placeholder' => 'Scrieți un comentariu…',
+ 'reply_to_placeholder' => 'Răspundeți lui @{actorUsername}',
+ 'submit' => 'Trimiteți',
+ 'submit_reply' => 'Răspundeți',
+ ],
+ 'likes' => '{numberOfLikes, plural,
+ one {# apreciere}
+ other {# aprecieri}
+ }',
+ 'replies' => '{numberOfReplies, plural,
+ one {# răspuns}
+ few {# răspunsuri}
+ other {# răspunsuri}
+ }',
+ 'like' => 'Apreciază',
+ 'reply' => 'Răspundeți',
+ 'view_replies' => 'Vizualizați răspunsurile ({numberOfReplies})',
+ 'block_actor' => 'Blocați utilizatorul @{actorUsername}',
+ 'block_domain' => 'Blocați domeniul @{actorDomain}',
+ 'delete' => 'Ștergeți comentariul',
+];
diff --git a/app/Language/ro/Common.php b/app/Language/ro/Common.php
new file mode 100644
index 00000000..96742cbd
--- /dev/null
+++ b/app/Language/ro/Common.php
@@ -0,0 +1,30 @@
+ 'Da',
+ 'no' => 'Nu',
+ 'cancel' => 'Anulare',
+ 'optional' => 'Opțional',
+ 'close' => 'Închideți',
+ 'home' => 'Acasă',
+ 'explicit' => 'Conținut explicit',
+ 'powered_by' => 'Dezvoltat de {castopod}',
+ 'go_back' => 'Înapoi',
+ 'play_episode_button' => [
+ 'play' => 'Redare',
+ 'playing' => 'În desfășurare',
+ ],
+ 'read_more' => 'Informații suplimentare',
+ 'read_less' => 'Citește mai puţin',
+ 'see_more' => 'Vizualizați mai mult',
+ 'see_less' => 'Vizualizați mai puțin',
+ 'legal_notice' => 'Mențiuni legale',
+];
diff --git a/app/Language/ro/Episode.php b/app/Language/ro/Episode.php
new file mode 100644
index 00000000..b59401f3
--- /dev/null
+++ b/app/Language/ro/Episode.php
@@ -0,0 +1,35 @@
+ 'Sezonul {seasonNumber}',
+ 'season_abbr' => 'Sezonul {seasonNumber}',
+ 'number' => 'Episod {episodeNumber}',
+ 'number_abbr' => 'Ep. {episodeNumber}',
+ 'season_episode' => 'Sezonul {seasonNumber} episod {episodeNumber}',
+ 'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}',
+ 'persons' => '{personsCount, plural,
+ one {# răspuns}
+ few {# răspunsuri}
+ other {# răspunsuri}
+ }',
+ 'persons_list' => 'Persoane',
+ 'back_to_episodes' => 'Înapoi la episoadele {podcast}',
+ 'comments' => 'Comentarii',
+ 'activity' => 'Activitate',
+ 'description' => 'Descrierea episodului',
+ 'number_of_comments' => '{numberOfComments, plural,
+ one {# răspuns}
+ few {# răspunsuri}
+ other {# răspunsuri}
+ }',
+ 'all_podcast_episodes' => 'Toate episoadele podcastului',
+ 'back_to_podcast' => 'Înapoi la podcast',
+];
diff --git a/app/Language/ro/Fediverse.php b/app/Language/ro/Fediverse.php
new file mode 100644
index 00000000..e2337656
--- /dev/null
+++ b/app/Language/ro/Fediverse.php
@@ -0,0 +1,37 @@
+ 'ID-ul tău',
+ 'your_handle_hint' => 'Introduceți numele@domeniu din care doriți să acționați',
+ 'follow' => [
+ 'label' => 'Urmăriţi',
+ 'title' => 'Urmărește pe {actorDisplayName}',
+ 'subtitle' => 'Îl veți urmări pe:',
+ 'accountNotFound' => 'Contul nu a putut fi găsit.',
+ 'remoteFollowNotAllowed' => 'Se pare că serverul nu permite urmărirea...',
+ 'submit' => 'Continuați să urmăriți',
+ ],
+ 'favourite' => [
+ 'title' => "Postarea favorită a lui {actorDisplayName}",
+ 'subtitle' => 'Veți adăuga la favoriți:',
+ 'submit' => 'Continuați să adăugați la favoriți',
+ ],
+ 'reblog' => [
+ 'title' => "Distribuie postarea lui {actorDisplayName}",
+ 'subtitle' => 'Veți distribui:',
+ 'submit' => 'Continuați să distribuiți',
+ ],
+ 'reply' => [
+ 'title' => "Răspundeți lui {actorDisplayName}",
+ 'subtitle' => 'Îi veți răspunde lui:',
+ 'submit' => 'Continuați să răspundeți',
+ ],
+];
diff --git a/app/Language/ro/Home.php b/app/Language/ro/Home.php
new file mode 100644
index 00000000..a0c01594
--- /dev/null
+++ b/app/Language/ro/Home.php
@@ -0,0 +1,20 @@
+ 'Toate podcasturile',
+ 'sort_by' => 'Sortați după',
+ 'sort_options' => [
+ 'activity' => 'Activitate recentă',
+ 'created_desc' => 'Întâi cele mai noi',
+ 'created_asc' => 'Întâi cele mai vechi',
+ ],
+ 'no_podcast' => 'Nu s-a găsit nici un podcast',
+];
diff --git a/app/Language/ro/Page.php b/app/Language/ro/Page.php
new file mode 100644
index 00000000..47352fd6
--- /dev/null
+++ b/app/Language/ro/Page.php
@@ -0,0 +1,17 @@
+ 'Înapoi la pagina de start',
+ 'map' => [
+ 'title' => 'Hartă',
+ 'description' => 'Descoperă episoadele podcastului pe {siteName} ce sunt plasate pe hartă! Navighează pe hartă și ascultă episoade ce vorbesc despre locații specifice.',
+ ],
+];
diff --git a/app/Language/ro/Podcast.php b/app/Language/ro/Podcast.php
new file mode 100644
index 00000000..f5134251
--- /dev/null
+++ b/app/Language/ro/Podcast.php
@@ -0,0 +1,58 @@
+ 'Flux RSS Podcast',
+ 'season' => 'Sezonul {seasonNumber}',
+ 'list_of_episodes_year' => '{year} episoade ({episodeCount})',
+ 'list_of_episodes_season' =>
+ 'Sezonul {seasonNumber} episoadele ({episodeCount})',
+ 'no_episode' => 'Nici un episod găsit!',
+ 'follow' => 'Urmăriţi',
+ 'followTitle' => 'Urmărește pe {actorDisplayName} în fediverse!',
+ 'followers' => '{numberOfFollowers, plural,
+ one {# follower}
+ few {# followeri}
+ other {# followeri}
+ }',
+ 'posts' => '{numberOfPosts, plural,
+ one {# postare}
+ few {# postări}
+ other {# postări}
+ }',
+ 'activity' => 'Activitate',
+ 'episodes' => 'Episoade',
+ 'episodes_title' => 'Episoadele podcastului {podcastTitle}',
+ 'about' => 'Despre noi',
+ 'stats' => [
+ 'title' => 'Statistici',
+ 'number_of_seasons' => '{0, plural,
+ one {# sezon}
+ few {# sezoane}
+ other {# sezoane}
+ }',
+ 'number_of_episodes' => '{0, plural,
+ one {# episod}
+ few {# episoade}
+ other {# episoade}
+ }',
+ 'first_published_at' => 'Primul episod publicat pe {0, date, medium}',
+ ],
+ 'sponsor' => 'Sponsor',
+ 'funding_links' => 'Link-uri de finanțare pentru {podcastTitle}',
+ 'find_on' => 'Găsește {podcastTitle} pe',
+ 'listen_on' => 'Ascultă pe',
+ 'persons' => '{personsCount, plural,
+ one {# persoană}
+ few {# persoane}
+ other {# persoane}
+ }',
+ 'persons_list' => 'Persoane',
+];
diff --git a/app/Language/ro/Post.php b/app/Language/ro/Post.php
new file mode 100644
index 00000000..87e497fe
--- /dev/null
+++ b/app/Language/ro/Post.php
@@ -0,0 +1,40 @@
+ "Postarea lui {actorDisplayName}",
+ 'back_to_actor_posts' => 'Înapoi la postările lui {actor}',
+ 'actor_shared' => '{actor} a distribuit',
+ 'reply_to' => 'Răspundeți lui @{actorUsername}',
+ 'form' => [
+ 'message_placeholder' => 'Scrie un mesaj...',
+ 'episode_message_placeholder' => 'Scrie un mesaj pentru episodul…',
+ 'episode_url_placeholder' => 'URL episod',
+ 'reply_to_placeholder' => 'Răspundeți lui @{actorUsername}',
+ 'submit' => 'Trimiteți',
+ 'submit_reply' => 'Răspundeți',
+ ],
+ 'favourites' => '{numberOfFavourites, plural,
+ one {# favorit}
+ other {# favoriți}
+ }',
+ 'reblogs' => '{numberOfReblogs, plural,
+ one {# distribuire}
+ other {# distribuiri}
+ }',
+ 'replies' => '{numberOfReplies, plural,
+ one {# răspuns}
+ other {# răspunsuri}
+ }',
+ 'expand' => 'Expandați postarea',
+ 'block_actor' => 'Blocați utilizatorul @{actorUsername}',
+ 'block_domain' => 'Blocați domeniul @{actorDomain}',
+ 'delete' => 'Șterge postarea',
+];
diff --git a/docs/src/ar/getting-started/docker.md b/docs/src/ar/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/ar/getting-started/docker.md
+++ b/docs/src/ar/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/br/getting-started/docker.md b/docs/src/br/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/br/getting-started/docker.md
+++ b/docs/src/br/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/ca/getting-started/docker.md b/docs/src/ca/getting-started/docker.md
index d1aea27f..1134fd98 100644
--- a/docs/src/ca/getting-started/docker.md
+++ b/docs/src/ca/getting-started/docker.md
@@ -89,7 +89,7 @@ una base de dades Redis com a gestor de memòria cau.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/de/getting-started/docker.md b/docs/src/de/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/de/getting-started/docker.md
+++ b/docs/src/de/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/el/getting-started/auth.md b/docs/src/el/getting-started/auth.md
index 7e2d5947..b517b107 100644
--- a/docs/src/el/getting-started/auth.md
+++ b/docs/src/el/getting-started/auth.md
@@ -5,23 +5,24 @@ sidebarDepth: 3
# Ταυτοποίηση & εξουσιοδότηση
-Castopod handles authentication and authorization using `codeigniter/shield`
-coupled with custom rules. Roles and permissions are defined at two levels:
+Ο Castopod χειρίζεται τον έλεγχο ταυτότητας και την έγκριση χρησιμοποιώντας
+`codeigniter/shield` σε συνδυασμό με προσαρμοσμένους κανόνες. Οι ρόλοι και τα
+δικαιώματα καθορίζονται σε δύο επίπεδα:
-1. [instance wide](#1-instance-wide-roles-and-permissions)
-2. [per podcast](#2-per-podcast-roles-and-permissions)
+1. [ευρεία παρουσία](#1-instance-wide-roles-and-permissions)
+2. [ανά podcast](#2-per-podcast-roles-and-permissions)
-## 1. Instance wide roles and permissions
+## 1. Διαχείριση ρόλων και δικαιωμάτων
-### Instance roles
+### Ρόλοι εμφάνισης
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| ρόλος | περιγραφή | δικαιώματα |
+| ---------------- | ------------------------------------- | ------------------------------------------------------------------------------------------ |
+| Υπερδιαχειριστής | Έχει πλήρη έλεγχο του Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Διαχειριστής | Διαχείριση περιεχομένου του Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Γενικοί χρήστες του Castopod. | admin.access |
diff --git a/docs/src/el/getting-started/docker.md b/docs/src/el/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/el/getting-started/docker.md
+++ b/docs/src/el/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/es/getting-started/auth.md b/docs/src/es/getting-started/auth.md
index 6c0ccd75..b8276b2e 100644
--- a/docs/src/es/getting-started/auth.md
+++ b/docs/src/es/getting-started/auth.md
@@ -1,87 +1,88 @@
---
-title: Authentication & Authorization
+title: Autenticación & Autenticación
sidebarDepth: 3
---
-# Authentication & Authorization
+# Autenticación & Autenticación
-Castopod handles authentication and authorization using `codeigniter/shield`
-coupled with custom rules. Roles and permissions are defined at two levels:
+Castopod gestiona la autenticación y autorización usando `codeignitor/escudo`
+emparejado con reglas personalizadas. Los roles y permisos se definen en dos
+niveles:
-1. [instance wide](#1-instance-wide-roles-and-permissions)
-2. [per podcast](#2-per-podcast-roles-and-permissions)
+1. [por instancia](#1-instance-wide-roles-and-permissions)
+2. [por podcast](#2-per-podcast-roles-and-permissions)
-## 1. Instance wide roles and permissions
+## 1. Roles por instancia y permisos
-### Instance roles
+### Roles de instancia
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| roles | descripción | permisos |
+| ------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------ |
+| Super administrador | Tiene control completo sobre Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Administrador | Gestiona el contenido de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Usuarios generales de Castopod. | admin.access |
-### Instance permissions
+### Permisos de instancia
-| permission | description |
-| ----------------------- | ------------------------------------------------------------------ |
-| admin.access | Can access the Castopod admin area. |
-| admin.settings | Can access the Castopod settings. |
-| users.manage | Can manage Castopod users. |
-| persons.manage | Can manage persons. |
-| pages.manage | Can manage pages. |
-| podcasts.view | Can view all podcasts. |
-| podcasts.create | Can create new podcasts. |
-| podcasts.import | Can import podcasts. |
-| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
+| permisos | descripción |
+| ----------------------- | ------------------------------------------------------------------------------ |
+| admin.access | Puedes acceder al área de administración de Castopod. |
+| admin.settings | Puede acceder a la configuración de Castopod. |
+| users.manage | Puede administrar usuarios de Castopod. |
+| persons.manage | Puede administrar personas. |
+| pages.manage | Puede administrar páginas. |
+| podcasts.view | Puede ver todos los podcasts. |
+| podcasts.create | Puede crear nuevos podcasts. |
+| podcasts.import | Puede importar podcasts. |
+| fediverse.manage-blocks | Puedes bloquear la interacción de actores/dominios del fediverso con Castopod. |
-## 2. Per podcast roles and permissions
+## 2. Permisos y roles por podcast
-### Per podcast roles
+### Roles por podcast
-| role | description | permissions |
-| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Admin | Has complete control of podcast #{id}. | \* |
-| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
-| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
-| Guest | General contributor of the podcast #{id}. | view, episodes.view |
+| roles | descripción | permisos |
+| ------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Administrador | Tiene el control completo del podcast #{id}. | \* |
+| Editor | Gestiona el contenido y las publicaciones del podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
+| Autor | Gestiona el contenido del podcast #{id} pero no puede publicarlo. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
+| Invitado | Colaborador general del podcast #{id}. | view, episodes.view |
-### Per podcast permissions
+### Permisos por podcast
-| permission | description |
-| ---------------------------- | ------------------------------------------------------------------------ |
-| view | Can view dashboard and analytics of podcast #{id}. |
-| edit | Can edit podcast #{id}. |
-| delete | Can delete podcast #{id}. |
-| manage-import | Can synchronize imported podcast #{id}. |
-| manage-persons | Can manage subscriptions of podcast #{id}. |
-| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
-| manage-contributors | Can manage contributors of podcast #{id}. |
-| manage-platforms | Can set/remove platform links of podcast #{id}. |
-| manage-publications | Can publish podcast #{id}. |
-| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
-| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
-| episodes.view | Can view dashboard and analytics of podcast #{id}. |
-| episodes.create | Can create episodes for podcast #{id}. |
-| episodes.edit | Can edit podcast #{id}. |
-| episodes.delete | Can delete podcast #{id}. |
-| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
-| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
-| episodes.manage-publications | Can publish podcast #{id}. |
-| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
+| permisos | descripción |
+| ---------------------------- | -------------------------------------------------------------------------------------------------- |
+| view | Puede ver el panel de control y análisis del podcast #{id}. |
+| edit | Puede editar podcast #{id}. |
+| delete | Puede borrar el podcast #{id}. |
+| manage-import | Puede sincronizar el podcast importado #{id}. |
+| manage-persons | Puede administrar las suscripciones del podcast #{id}. |
+| manage-subscriptions | Puede administrar las suscripciones del podcast #{id}. |
+| manage-contributors | Puede administrar colaboradores del podcast #{id}. |
+| manage-platforms | Puede establecer/eliminar enlaces a la plataforma del podcast #{id}. |
+| manage-publications | Puede publicar el podcast #{id}. |
+| manage-notifications | Puede ver y marcar las notificaciones como leídas para podcast #{id}. |
+| interact-as | Puede interactuar como el podcast #{id} para favoritar, compartir o responder a las publicaciones. |
+| episodes.view | Puede ver el panel de control y analíticas del episodio #{id}. |
+| episodes.create | Puede crear episodios para el podcast #{id}. |
+| episodes.edit | Puede editar episodios #{id}. |
+| episodes.delete | Puede borrar el podcast #{id}. |
+| episodes.manage-persons | Puede administrar las suscripciones del podcast #{id}. |
+| episodes.manage-clips | Puedes administrar video clips o sonidos del podcast #{id}. |
+| episodes.manage-publications | Puede publicar el podcast #{id}. |
+| episodes.manage-comments | Puede crear/eliminar los comentarios de episodio del podcast #{id}. |
diff --git a/docs/src/es/getting-started/docker.md b/docs/src/es/getting-started/docker.md
index 849b2478..6c2a5083 100644
--- a/docs/src/es/getting-started/docker.md
+++ b/docs/src/es/getting-started/docker.md
@@ -5,15 +5,15 @@ sidebarDepth: 3
# Imágenes oficiales de Docker
-Castopod pushes 3 Docker images to the Docker Hub during its automated build
-process:
+Castopod lanza 3 imágenes Docker al DockerHub durante su proceso de construcción
+automatizada:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquete
completo de Castopod con todas las dependencias.
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una
configuración Nginx para Castopod
-- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
- an optional image building videoclips thanks to ffmpeg
+- [**`castopod/videoclipper`**](https://hub.docker.com/r/castopod/video-clipper):
+ una imagen opcional de creación de videoclips gracias a ffmpeg
Adicionalmente, Castopod requiere una base de datos compatible con MySQL.
También se puede añadir una base de datos Redis como gestor de caché.
@@ -21,10 +21,10 @@ También se puede añadir una base de datos Redis como gestor de caché.
## Etiquetas admitidas
- `develop` [unstable], última rama de desarrollo construida
-- `beta` [stable], latest beta version build
-- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
-- `latest` [stable], latest version build
-- `1.x.x` [stable], specific version build (since `1.0.0`)
+- `beta` [stable], última versión beta
+- `1.0.0-beta.x` [stable], versión beta específica (desde `1.0.0-beta.22`)
+- `latest` [stable], última versión
+- `1.x.x` [stable], versión específica de compilación (desde `1.0.0`)
## Ejemplo de uso
@@ -87,9 +87,9 @@ También se puede añadir una base de datos Redis como gestor de caché.
networks:
- castopod-app
- # this container is optional
- # add this if you want to use the videoclips feature
- ffmpeg:
+ # este contenedor es opcional
+ # agregue esto si desea usar la funcionalidad de videoclips
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
@@ -138,7 +138,7 @@ También se puede añadir una base de datos Redis como gestor de caché.
- **castopod/video-clipper**
- | Nombre de la Variable | Tipo (`predeterminado`) | Default |
+ | Nombre de la Variable | Tipo (`predeterminado`) | Por defecto |
| -------------------------- | ----------------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
@@ -148,9 +148,9 @@ También se puede añadir una base de datos Redis como gestor de caché.
- **castopod/app**
- | Nombre de la variable | Type (`default`) | Default |
+ | Nombre de la variable | Tipo (`por defecto`) | Por defecto |
| ---------------------------- | ----------------------- | ---------------- |
- | **`CP_URLBASE`** | string | `undefined` |
+ | **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_URLBASE`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
@@ -174,6 +174,6 @@ También se puede añadir una base de datos Redis como gestor de caché.
- **castopod/web-server**
- | Variable name | Type | Default |
- | --------------------- | ------- | ------- |
- | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
+ | Nombre de la variable | Tipo | Por defecto |
+ | --------------------- | ------- | ----------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/fa/getting-started/docker.md b/docs/src/fa/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/fa/getting-started/docker.md
+++ b/docs/src/fa/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/fr/getting-started/docker.md b/docs/src/fr/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/fr/getting-started/docker.md
+++ b/docs/src/fr/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/gd/getting-started/docker.md b/docs/src/gd/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/gd/getting-started/docker.md
+++ b/docs/src/gd/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/gl/getting-started/docker.md b/docs/src/gl/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/gl/getting-started/docker.md
+++ b/docs/src/gl/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/id/getting-started/docker.md b/docs/src/id/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/id/getting-started/docker.md
+++ b/docs/src/id/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/it/getting-started/docker.md b/docs/src/it/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/it/getting-started/docker.md
+++ b/docs/src/it/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/ko/getting-started/docker.md b/docs/src/ko/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/ko/getting-started/docker.md
+++ b/docs/src/ko/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/nl/getting-started/docker.md b/docs/src/nl/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/nl/getting-started/docker.md
+++ b/docs/src/nl/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/nn-NO/getting-started/docker.md b/docs/src/nn-NO/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/nn-NO/getting-started/docker.md
+++ b/docs/src/nn-NO/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/oc/getting-started/docker.md b/docs/src/oc/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/oc/getting-started/docker.md
+++ b/docs/src/oc/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/pl/getting-started/docker.md b/docs/src/pl/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/pl/getting-started/docker.md
+++ b/docs/src/pl/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/pt-BR/getting-started/docker.md b/docs/src/pt-BR/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/pt-BR/getting-started/docker.md
+++ b/docs/src/pt-BR/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/pt/getting-started/docker.md b/docs/src/pt/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/pt/getting-started/docker.md
+++ b/docs/src/pt/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/ro/getting-started/auth.md b/docs/src/ro/getting-started/auth.md
new file mode 100644
index 00000000..7688ee1d
--- /dev/null
+++ b/docs/src/ro/getting-started/auth.md
@@ -0,0 +1,88 @@
+---
+title: Autentificare & Autorizare
+sidebarDepth: 3
+---
+
+# Autentificare & Autorizare
+
+Castopod folosește pentru autentificare și autorizare `codeigniter/shield`
+cuplat la reguli personalizate. Rolurile și permisiunile sunt definite la două
+niveluri:
+
+1. [întreaga instanță](#1-instance-wide-roles-and-permissions)
+2. [per podcast](#2-per-podcast-roles-and-permissions)
+
+## 1. Gestionați roluri şi permisiuni pe întreaga instanță
+
+### Rolurile instanței
+
+
+
+| rol | descriere | permisiuni |
+| ----------- | ----------------------------------------- | ------------------------------------------------------------------------------------------ |
+| Super admin | Deține controlul complet asupra Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Gestionează conținutul Castopodului. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Utilizatorii generali ai Castopod. | admin.access |
+
+
+
+### Permisiuni instanță
+
+
+
+| permisiune | descriere |
+| ----------------------- | -------------------------------------------------------------------------- |
+| admin.access | Poate accesa zona de administrare Castopod. |
+| admin.settings | Poate accesa setările Castopod. |
+| users.manage | Poate gestiona utilizatorii Castopod. |
+| persons.manage | Poate gestiona persoane. |
+| pages.manage | Poate gestiona pagini. |
+| podcasts.view | Poate vedea toate podcast-urile. |
+| podcasts.create | Poate crea noi podcast-uri. |
+| podcasts.import | Poate importa podcast-uri. |
+| fediverse.manage-blocks | Poate bloca actorilor/domenii din fediverse să interacționeze cu Castopod. |
+
+
+
+## 2. Roluri și permisiuni per podcast
+
+### Roluri per podcast
+
+
+
+| rol | descriere | permisiuni |
+| ------ | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Admin | Deține controlul complet asupra podcastului #{id}. | \* |
+| Editor | Gestionează conținutul și publicațiile podcastului #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
+| Author | Gestionează conținutul podcastului #{id} dar nu poate publica. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
+| Guest | Contribuitor al podcastului #{id}. | view, episodes.view |
+
+
+
+### Permisiuni per podcast
+
+
+
+| permisiune | descriere |
+| ---------------------------- | ------------------------------------------------------------------------------------------------------- |
+| view | Poate vedea panoul de control și analiticele podcastului #{id}. |
+| edit | Poate edita podcastul #{id}. |
+| delete | Poate șterge podcastul #{id}. |
+| manage-import | Poate sincroniza podcastul importat #{id}. |
+| manage-persons | Poate administra abonamentele podcastului #{id}. |
+| manage-subscriptions | Poate administra abonamentele podcastului #{id}. |
+| manage-contributors | Poate administra colaboratorii podcastului #{id}. |
+| manage-platforms | Poate seta/elimina link-urile podcastului #{id}. |
+| manage-publications | Poate publica podcastul #{id}. |
+| manage-notifications | Poate vizualiza și marca notificările ca fiind citite pentru podcastul #{id}. |
+| interact-as | Poate interacționa ca podcastul #{id} pentru adăuga la favorite, a distribui sau a răspunde la postări. |
+| episodes.view | Poate vizualiza panoul de control și analiticile podcastului #{id}. |
+| episodes.create | Poate crea episoade pentru podcastul #{id}. |
+| episodes.edit | Poate edita podcastul #{id}. |
+| episodes.delete | Poate șterge podcastul #{id}. |
+| episodes.manage-persons | Poate administra abonamentele podcastului #{id}. |
+| episodes.manage-clips | Poate administra clipuri video sau biții de sunet ai podcastului #{id}. |
+| episodes.manage-publications | Poate publica podcastul #{id}. |
+| episodes.manage-comments | Poate crea/elimina comentariile episodului podcastului #{id}. |
+
+
diff --git a/docs/src/ro/getting-started/docker.md b/docs/src/ro/getting-started/docker.md
new file mode 100644
index 00000000..68557942
--- /dev/null
+++ b/docs/src/ro/getting-started/docker.md
@@ -0,0 +1,177 @@
+---
+title: Imagini oficiale Docker
+sidebarDepth: 3
+---
+
+# Imagini oficiale Docker
+
+Castopod dă push la 3 imagini Docker pe Docker Hub pe parcursul procesului de
+compilare automată
+
+- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): pachetul
+ aplicației cu toate dependințele Castopod
+- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): o
+ configurație Nginx pentru Castopod
+- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
+ o imagine opțională ce compilează videoclipuri cu ajutorul ffmpeg
+
+În plus, Castopod necesită o bază de date compatibilă cu MySQL. O bază de date
+Redis poate fi adăugată pentru cache.
+
+## Tag-uri acceptate
+
+- `develop` [unstable], latest development branch build
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
+- `latest` [stable], latest version build
+- `1.x.x` [stable], specific version build (since `1.0.0`)
+
+## 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:latest
+ 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:latest
+ 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
+
+ # this container is optional
+ # add this if you want to use the videoclips feature
+ video-clipper:
+ image: castopod/video-clipper:latest
+ container_name: "castopod-video-clipper"
+ volumes:
+ - castopod-media:/opt/castopod/public/media
+ environment:
+ MYSQL_DATABASE: castopod
+ MYSQL_USER: castopod
+ MYSQL_PASSWORD: changeme
+ networks:
+ - castopod-db
+ restart: unless-stopped
+
+ 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/video-clipper**
+
+ | Variable name | Type (`default`) | Default |
+ | -------------------------- | ---------------- | ---------------- |
+ | **`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_"` |
+
+- **castopod/app**
+
+ | Variable name | Type (`default`) | Default |
+ | ---------------------------- | ----------------------- | ---------------- |
+ | **`CP_BASEURL`** | string | `undefined` |
+ | **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
+ | **`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` |
+ | **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
+ | **`CP_EMAIL_FROM`** | ?string | `undefined` |
+ | **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
+ | **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
+ | **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
+ | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
+
+- **castopod/web-server**
+
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/ro/getting-started/install.md b/docs/src/ro/getting-started/install.md
new file mode 100644
index 00000000..c68be846
--- /dev/null
+++ b/docs/src/ro/getting-started/install.md
@@ -0,0 +1,185 @@
+---
+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.1 or higher
+- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- HTTPS support
+
+### PHP v8.1 or higher
+
+PHP version 8.1 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`,
+`REFERENCES`, `CREATE VIEW`.
+
+### (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 edit the `.env` file manually
+based on the `.env.example` file.
+
+:::
+
+### Email/SMTP setup
+
+Email configuration is required for some features to work properly (eg.
+retrieving your forgotten password, sending instructions to premium subscribers,
+…)
+
+You may add your email configuration in your instance's `.env` like so:
+
+```ini
+# […]
+
+email.fromEmail="your_email_address"
+email.SMTPHost="your_smtp_host"
+email.SMTPUser="your_smtp_user"
+email.SMTPPass="your_smtp_password"
+```
+
+#### Email config options
+
+| Variable name | Type | Default |
+| ---------------- | -------------------- | ------------ |
+| **`fromEmail`** | string | `undefined` |
+| **`fromName`** | string | `"Castopod"` |
+| **`SMTPHost`** | string | `undefined` |
+| **`SMTPUser`** | string | `undefined` |
+| **`SMTPPass`** | string | `undefined` |
+| **`SMTPPort`** | number | `25` |
+| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
+
+## 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/ro/getting-started/security.md b/docs/src/ro/getting-started/security.md
new file mode 100644
index 00000000..e205698d
--- /dev/null
+++ b/docs/src/ro/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/ro/getting-started/update.md b/docs/src/ro/getting-started/update.md
new file mode 100644
index 00000000..98e019fb
--- /dev/null
+++ b/docs/src/ro/getting-started/update.md
@@ -0,0 +1,109 @@
+---
+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 ⚡.
+
+## Update instructions
+
+0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
+ database.
+
+ - cf.
+ [Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
+
+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
+ - Note that you can also download the latest package from
+ [castopod.org](https://castopod.org/)
+
+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. Update your database schema from your `Castopod Admin` > `About` page or by
+ running:
+
+ ```bash
+ php spark castopod:database-update
+ ```
+
+5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
+ `Housekeeping`
+6. ✨ Enjoy your fresh instance, you're all done!
+
+::: info Note
+
+Releases may come with additional update instructions (see
+[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
+
+- 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)
+
+:::
+
+## Fully Automated updates
+
+> Coming soon... 👀
+
+## 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/ro/index.md b/docs/src/ro/index.md
new file mode 100644
index 00000000..6e04835b
--- /dev/null
+++ b/docs/src/ro/index.md
@@ -0,0 +1,303 @@
+---
+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
+ - 💎 Premium podcasts
+- 📡 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/ru/getting-started/docker.md b/docs/src/ru/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/ru/getting-started/docker.md
+++ b/docs/src/ru/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/sk/getting-started/docker.md b/docs/src/sk/getting-started/docker.md
index e19320f2..c6e6cb7e 100644
--- a/docs/src/sk/getting-started/docker.md
+++ b/docs/src/sk/getting-started/docker.md
@@ -89,7 +89,7 @@ can be added as a cache handler.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/sv/getting-started/docker.md b/docs/src/sv/getting-started/docker.md
index c6fabe52..4b2f94cf 100644
--- a/docs/src/sv/getting-started/docker.md
+++ b/docs/src/sv/getting-started/docker.md
@@ -89,7 +89,7 @@ läggas till som cachehanterare.
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/docs/src/zh-Hans/getting-started/docker.md b/docs/src/zh-Hans/getting-started/docker.md
index e68fc89d..9e5d20ad 100644
--- a/docs/src/zh-Hans/getting-started/docker.md
+++ b/docs/src/zh-Hans/getting-started/docker.md
@@ -88,7 +88,7 @@ Castopod 在其自动构建期间会将 3 个 Docker 映像推送到 Docker Hub
# this container is optional
# add this if you want to use the videoclips feature
- ffmpeg:
+ video-clipper:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
diff --git a/modules/Admin/Language/ar/Breadcrumb.php b/modules/Admin/Language/ar/Breadcrumb.php
index f557a2ec..12263f98 100644
--- a/modules/Admin/Language/ar/Breadcrumb.php
+++ b/modules/Admin/Language/ar/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'احذف',
'remove' => 'remove',
'fediverse' => 'الفديفرس',
- 'block-lists' => 'قوائم حجب',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'مستخدمون',
'my-account' => 'حسابي',
'change-password' => 'تغيير الكلمة السرية',
diff --git a/modules/Admin/Language/br/Breadcrumb.php b/modules/Admin/Language/br/Breadcrumb.php
index 46a4350b..8bcec91f 100644
--- a/modules/Admin/Language/br/Breadcrumb.php
+++ b/modules/Admin/Language/br/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'dilemel',
'remove' => 'remove',
'fediverse' => 'kevrebed',
- 'block-lists' => 'roll ar re stanket',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'implijerien·ezed',
'my-account' => 'ma c\'hont',
'change-password' => 'kemmañ ar ger-tremen',
diff --git a/modules/Admin/Language/ca/Breadcrumb.php b/modules/Admin/Language/ca/Breadcrumb.php
index 5115dc04..18056225 100644
--- a/modules/Admin/Language/ca/Breadcrumb.php
+++ b/modules/Admin/Language/ca/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'eliminar',
'remove' => 'remove',
'fediverse' => 'Fediverse',
- 'block-lists' => 'llista de bloquejats',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'usuaris',
'my-account' => 'el meu compte',
'change-password' => 'canviar la contrasenya',
diff --git a/modules/Admin/Language/de/Breadcrumb.php b/modules/Admin/Language/de/Breadcrumb.php
index 037c53f5..12474dc2 100644
--- a/modules/Admin/Language/de/Breadcrumb.php
+++ b/modules/Admin/Language/de/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'löschen',
'remove' => 'Entfernen',
'fediverse' => 'Fediversum',
- 'block-lists' => 'Sperrlisten',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'Benutzer',
'my-account' => 'Mein Konto',
'change-password' => 'Passwort ändern',
diff --git a/modules/Admin/Language/el/AboutCastopod.php b/modules/Admin/Language/el/AboutCastopod.php
index 3fb62aff..df1c81f4 100644
--- a/modules/Admin/Language/el/AboutCastopod.php
+++ b/modules/Admin/Language/el/AboutCastopod.php
@@ -9,14 +9,14 @@ declare(strict_types=1);
*/
return [
- 'title' => 'About Castopod',
- 'host_name' => 'Host name',
- 'version' => 'Castopod version',
- 'php_version' => 'PHP version',
- 'os' => 'Operating System',
- 'languages' => 'Languages',
- 'update_database' => 'Update database',
+ 'title' => 'Περί Του Castopod',
+ 'host_name' => 'Όνομα εξυπηρετητή',
+ 'version' => 'Έκδοση Castopod',
+ 'php_version' => 'Έκδοση PHP',
+ 'os' => 'Λειτουργικό σύστημα',
+ 'languages' => 'Γλώσσες',
+ 'update_database' => 'Ενημέρωση Βάσης Δεδομένων',
'messages' => [
- 'databaseUpdateSuccess' => 'Database is up to date!',
+ 'databaseUpdateSuccess' => 'Η βάση δεδομένων είναι ενημερωμένη!',
],
];
diff --git a/modules/Admin/Language/el/Breadcrumb.php b/modules/Admin/Language/el/Breadcrumb.php
index 25c2cb6d..78a071a7 100644
--- a/modules/Admin/Language/el/Breadcrumb.php
+++ b/modules/Admin/Language/el/Breadcrumb.php
@@ -14,24 +14,25 @@ return [
->gateway => 'Αρχική σελίδα',
'podcasts' => 'podcasts',
'episodes' => 'επεισόδια',
- 'subscriptions' => 'subscriptions',
+ 'subscriptions' => 'συνδρομές',
'contributors' => 'συντελεστές',
'pages' => 'σελίδες',
'settings' => 'ρυθμίσεις',
'theme' => 'θέμα',
- 'about' => 'about',
+ 'about' => 'σχετικά',
'add' => 'προσθήκη',
'new' => 'νέο',
'edit' => 'επεξεργασία',
'persons' => 'άτομα',
'publish' => 'δημοσίευση',
'publish-edit' => 'επεξεργασία δημοσίευσης',
- 'publish-date-edit' => 'edit publication date',
+ 'publish-date-edit' => 'επεξεργασία ημερομηνίας δημοσίευσης',
'unpublish' => 'αναίρεση δημοσίευσης',
'delete' => 'διαγραφή',
- 'remove' => 'remove',
+ 'remove' => 'αφαίρεση',
'fediverse' => 'fediverse',
- 'block-lists' => 'λίστες αποκλεισμένων',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'χρήστες',
'my-account' => 'ο λογαριασμός μου',
'change-password' => 'αλλαγή κωδικού πρόσβασης',
@@ -49,6 +50,6 @@ return [
'soundbites' => 'ήχοι',
'video-clips' => 'βίντεο κλιπς',
'embed' => 'ενσωματώσιμος αναπαραγωγέας',
- 'notifications' => 'notifications',
- 'suspend' => 'suspend',
+ 'notifications' => 'ειδοποιήσεις',
+ 'suspend' => 'αναστολή',
];
diff --git a/modules/Admin/Language/el/Charts.php b/modules/Admin/Language/el/Charts.php
index be7ed2ee..4575d14d 100644
--- a/modules/Admin/Language/el/Charts.php
+++ b/modules/Admin/Language/el/Charts.php
@@ -35,6 +35,6 @@ return [
'by_weekday' => 'Την ημέρα της εβδομάδας (για τις τελευταίες 60 ημέρες)',
'by_hour' => 'Κατά την ώρα της ημέρας (για τις τελευταίες 60 ημέρες)',
'podcast_by_bandwidth' => 'Ημερήσιο χρησιμοποιούμενο bandwidth (σε MB)',
- 'total_storage_by_month' => 'Monthly storage (in MB)',
- 'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)',
+ 'total_storage_by_month' => 'Μηνιαία αποθήκευση (σε MB)',
+ 'total_bandwidth_by_month' => 'Μηνιαίο χρησιμοποιούμενο εύρος ζώνης (σε MB)',
];
diff --git a/modules/Admin/Language/el/Common.php b/modules/Admin/Language/el/Common.php
index 13b75af4..4652e2a3 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 how to interact',
- 'view' => 'View',
+ 'choose_interact' => 'Επιλέξτε τον τρόπο αλληλεπίδρασης',
+ 'view' => 'Προβολή',
];
diff --git a/modules/Admin/Language/el/Dashboard.php b/modules/Admin/Language/el/Dashboard.php
index 881073fd..b780ea20 100644
--- a/modules/Admin/Language/el/Dashboard.php
+++ b/modules/Admin/Language/el/Dashboard.php
@@ -9,20 +9,20 @@ declare(strict_types=1);
*/
return [
- 'home' => 'Admin dashboard',
- 'welcome_message' => 'Welcome to the admin area!',
+ 'home' => 'Πίνακας ελέγχου διαχειριστή',
+ 'welcome_message' => 'Καλώς ήρθατε στην περιοχή διαχείρισης!',
'podcasts' => [
'title' => 'Podcasts',
- 'not_found' => 'No published podcast',
- 'last_published' => 'Last published on {lastPublicationDate}',
+ 'not_found' => 'Δεν υπάρχει δημοσιευμένο podcast',
+ 'last_published' => 'Τελευταία δημοσίευση στις {lastPublicationDate}',
],
'episodes' => [
- 'title' => 'Episodes',
- 'not_found' => 'No published episode',
- 'last_published' => 'Last published on {lastPublicationDate}',
+ 'title' => 'Επεισόδια',
+ 'not_found' => 'Κανένα δημοσιευμένο επεισόδιο',
+ 'last_published' => 'Τελευταία δημοσίευση στις {lastPublicationDate}',
],
'storage' => [
- 'title' => 'Storage',
- 'subtitle' => '{totalUploaded} out of {totalStorage}',
+ 'title' => 'Αποθηκευτικός χώρος',
+ 'subtitle' => '{totalUploaded} από {totalStorage}',
],
];
diff --git a/modules/Admin/Language/el/Episode.php b/modules/Admin/Language/el/Episode.php
index 53c6ea41..6bd5c6a1 100644
--- a/modules/Admin/Language/el/Episode.php
+++ b/modules/Admin/Language/el/Episode.php
@@ -24,34 +24,34 @@ return [
'edit' => 'Επεξεργασία',
'publish' => 'Δημοσίευση',
'publish_edit' => 'Επεξεργασία δημοσίευσης',
- 'publish_date_edit' => 'Edit publication date',
+ 'publish_date_edit' => 'Επεξεργασία ημερομηνίας δημοσίευσης',
'unpublish' => 'Αναίρεση δημοσίευσης',
'publish_error' => 'Το επεισόδιο έχει ήδη δημοσιευθεί.',
'publish_edit_error' => 'Το επεισόδιο έχει ήδη δημοσιευθεί.',
'publish_cancel_error' => 'Το επεισόδιο έχει ήδη δημοσιευθεί.',
- 'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.',
- 'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.',
- 'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!',
+ 'publish_date_edit_error' => 'Το επεισόδιο δεν έχει δημοσιευθεί ακόμα, δεν μπορείτε να επεξεργαστείτε την ημερομηνία έκδοσής του.',
+ 'publish_date_edit_future_error' => 'Η ημερομηνία δημοσίευσης του επεισοδίου μπορεί να οριστεί μόνο σε μια προηγούμενη ημερομηνία! Αν θέλετε να την προγραμματίσετε εκ νέου, αποδημοσιεύστε την πρώτα.',
+ 'publish_date_edit_success' => 'Η ημερομηνία δημοσίευσης του επεισοδίου έχει ενημερωθεί με επιτυχία!',
'unpublish_error' => 'Το επεισόδιο δεν έχει δημοσιευθεί.',
'delete' => 'Διαγραφή',
'go_to_page' => 'Μετάβαση στη σελίδα',
'create' => 'Προσθήκη επεισοδίου',
'publication_status' => [
'published' => 'Δημοσιευμένο',
- 'with_podcast' => 'Published',
+ 'with_podcast' => 'Δημοσιευμένο',
'scheduled' => 'Προγραμματισμένο',
'not_published' => 'Δεν έχει δημοσιευτεί',
],
- 'with_podcast_hint' => 'To be published at the same time as the podcast',
+ 'with_podcast_hint' => 'Να δημοσιευτεί ταυτόχρονα με το podcast',
'list' => [
'search' => [
- 'placeholder' => 'Search for an episode',
- 'clear' => 'Clear search',
- 'submit' => 'Search',
+ 'placeholder' => 'Αναζήτηση ενός επεισοδίου',
+ 'clear' => 'Καθαρισμός αναζήτησης',
+ 'submit' => 'Αναζήτηση',
],
'number_of_episodes' => '{numberOfEpisodes, plural,
- one {# episode}
- other {# episodes}
+ one {# επισόδειο}
+ other {# επισόδεια}
}',
'episode' => 'Επεισόδιο',
'visibility' => 'Ορατότητα',
@@ -62,31 +62,31 @@ return [
'createSuccess' => 'Το επεισόδιο δημιουργήθηκε με επιτυχία!',
'editSuccess' => 'Το επεισόδιο ενημερώθηκε με επιτυχία!',
'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 {Το επεισόδιο δημοσιεύτηκε με επιτυχία!}
+ scheduled {Η έκδοση για το επεισόδιο έχει προγραμματιστεί επιτυχώς!}
+ with_podcast {Αυτό το επεισόδιο θα δημοσιευθεί ταυτόχρονα με το podcast.}
+ other {Αυτό το επεισόδιο δεν έχει δημοσιευθεί.}
}',
'publishCancelSuccess' => 'Η δημοσίευση του επεισοδίου ακυρώθηκε επιτυχώς!',
- '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,
+ 'unpublishBeforeDeleteTip' => 'Πρέπει να καταργήσετε τη δημοσίευση του επεισοδίου πριν τη διαγραφή.',
+ 'scheduleDateError' => 'Η ημερομηνία πρέπει να οριστεί!',
+ 'deletePublishedEpisodeError' => 'Πρέπει να καταργήσετε τη δημοσίευση του επεισοδίου πριν τη διαγραφή.',
+ 'deleteSuccess' => 'Το επεισόδιο διαγράφτηκε με επιτυχία!',
+ 'deleteError' => 'Αποτυχία διαγραφής επεισοδίου {type, select,
transcript {transcript}
- chapters {chapters}
- image {cover}
- audio {audio}
- other {media}
+ chapters {κεφάλαια}
+ image {καλύπτουν}
+ audio {ήχος}
+ other {πολυμέσα}
}.',
- 'deleteFileError' => 'Failed to delete {type, select,
+ 'deleteFileError' => 'Αποτυχία διαγραφής {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.',
+ chapters {κεφάλαια}
+ image {καλύψτε}
+ audio {ήχος}
+ other {πολυμέσα}
+ } αρχείο {file_path}. Μπορείτε να το αφαιρέσετε χειροκίνητα από το δίσκο σας.',
+ 'sameSlugError' => 'Ένα επεισόδιο με το επιλεγμένο slug υπάρχει ήδη.',
],
'form' => [
'file_size_error' =>
@@ -97,7 +97,7 @@ return [
'cover' => 'Εξώφυλλο επισοδίου',
'cover_hint' =>
'Εάν δεν ορίσετε ένα εξώφυλλο, το εξώφυλλο του podcast θα χρησιμοποιηθεί αντ \'αυτού.',
- 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.',
+ 'cover_size_hint' => 'Το εξώφυλλο πρέπει να είναι τουλάχιστον 1400px πλάτος και ύψος.',
'title' => 'Τίτλος',
'title_hint' =>
'Θα πρέπει να υπάρχει ένα σαφές και συνοπτικό όνομα επεισοδίου. Μην καθορίσετε εδώ το επεισόδιο ή τους αριθμούς της σεζόν.',
@@ -114,7 +114,7 @@ return [
'bonus_hint' => 'Επιπλέον περιεχόμενο για την παράσταση (για παράδειγμα, πίσω από τις σκηνές πληροφορίες ή συνεντεύξεις με τη cast) ή δια-διαφημιστικό περιεχόμενο για μια άλλη παράσταση',
],
'premium_title' => 'Premium',
- 'premium' => 'Episode must be accessible to premium subscribers only',
+ 'premium' => 'Το επεισόδιο πρέπει να είναι προσβάσιμο μόνο σε συνδρομητές premium',
'parental_advisory' => [
'label' => 'Γονικός σύμβουλος',
'hint' => 'Μήπως το επεισόδιο περιέχει ακατάλληλο περιεχόμενο;',
@@ -153,9 +153,9 @@ return [
'Αν χρειάζεστε ετικέτες RSS που δεν χειρίζεται το Castopod, ορίστε τις εδώ.',
'custom_rss' => 'Προσαρμοσμένες ετικέτες RSS για το επεισόδιο',
'custom_rss_hint' => 'Αυτό θα ενεθεί εντός της ετικέτας "item".',
- 'block' => 'Episode should be hidden from public catalogues',
+ 'block' => 'Το επεισόδιο πρέπει να είναι κρυμμένο από όλες τις πλατφόρμες',
'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)',
+ 'H κατάσταση εμφάνιση ή απόκρυψη επισοδείου: Η εναλλαγή αποτρέπει την εμφάνιση του επεισοδίου στο Apple Podcast Google Podcasts, και σε οποιεσδήποτε εφαρμογή τρίτων που τραβούν τις εμφανίσεις από αυτούς τους καταλόγους. (Μη εγγυημένη)',
'submit_create' => 'Δημιουργία επεισοδίου',
'submit_edit' => 'Αποθήκευση επεισοδίου',
],
@@ -169,7 +169,7 @@ return [
'publication_method' => [
'now' => 'Τώρα',
'schedule' => 'Προγραμματισμός',
- 'with_podcast' => 'Publish alongside podcast',
+ 'with_podcast' => 'Δημοσίευση παράλληλα με podcast',
],
'scheduled_publication_date' => 'Ημερομηνία προγραμματισμένης δημοσίευσης',
'scheduled_publication_date_clear' => 'Εκκαθάριση ημερομηνίας δημοσίευσης',
@@ -183,21 +183,21 @@ return [
'message_warning_submit' => 'Δημοσίευση ούτως ή άλλως',
],
'publish_date_edit_form' => [
- 'new_publication_date' => 'New publication date',
- 'new_publication_date_hint' => 'Must be set to a past date.',
- 'submit' => 'Edit publication date',
+ 'new_publication_date' => 'Ημερομηνία νέας δημοσίευσης',
+ 'new_publication_date_hint' => 'Πρέπει να οριστεί σε μια προηγούμενη ημερομηνία.',
+ 'submit' => 'Επεξεργασία ημερομηνίας δημοσίευσης',
],
'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.",
+ "Η κατάργηση της δημοσίευσης του επεισοδίου θα διαγράψει όλα τα σχόλια και τις δημοσιεύσεις που σχετίζονται με αυτό και θα τα αφαιρέσει από τη ροή RSS του podcast.",
'understand' => 'Καταλαβαίνω, θέλω να αποδημοσιεύσει το επεισόδιο',
'submit' => 'Αναίρεση δημοσίευσης',
],
'delete_form' => [
'disclaimer' =>
- "Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.",
+ "Διαγράφοντας το επεισόδιο θα διαγράψετε όλα τα αρχεία πολυμέσων, τα σχόλια, τα βίντεο κλιπ και τα ηχητικά δεδομένα που σχετίζονται με αυτό.",
'understand' => 'Καταλαβαίνω, θέλω να διαγράψω το επεισόδιο',
- 'submit' => 'Delete',
+ 'submit' => 'Διαγραφή',
],
'embed' => [
'title' => 'Ενσωματώσιμος αναπαραγωγέας',
diff --git a/modules/Admin/Language/el/Notifications.php b/modules/Admin/Language/el/Notifications.php
index 2b139d51..3e87ddba 100644
--- a/modules/Admin/Language/el/Notifications.php
+++ b/modules/Admin/Language/el/Notifications.php
@@ -9,11 +9,11 @@ declare(strict_types=1);
*/
return [
- 'title' => 'Notifications',
- 'reply' => '{actor_username} replied to your post',
- 'favourite' => '{actor_username} favourited your post',
- 'reblog' => '{actor_username} shared your post',
- 'follow' => '{actor_username} started following you',
- 'no_notifications' => 'No notifications',
- 'mark_all_as_read' => 'Mark all as read',
+ 'title' => 'Ειδοποιήσεις',
+ 'reply' => '{actor_username} απάντησε στο post σας',
+ 'favourite' => '{actor_username} έβαλε αγαπημένη τη δημοσίευσή σας',
+ 'reblog' => '{actor_username} κοινοποίησε τη δημοσίευσή σας',
+ 'follow' => '{actor_username} ξεκίνησε να σας ακολουθεί',
+ 'no_notifications' => 'Καμία ειδοποίηση',
+ 'mark_all_as_read' => 'Σήμανση όλων ως αναγνωσμένα',
];
diff --git a/modules/Admin/Language/el/Podcast.php b/modules/Admin/Language/el/Podcast.php
index a0f061b4..070e2443 100644
--- a/modules/Admin/Language/el/Podcast.php
+++ b/modules/Admin/Language/el/Podcast.php
@@ -16,103 +16,103 @@ return [
'new_episode' => 'Νέο Επεισόδιο',
'view' => 'Προβολή podcast',
'edit' => 'Επεξεργασία podcast',
- 'publish' => 'Publish podcast',
- 'publish_edit' => 'Edit publication',
+ 'publish' => 'Δημοσίευση podcast',
+ 'publish_edit' => 'Επεξεργασία δημοσίευσης',
'delete' => 'Διαγραφή podcast',
'see_episodes' => 'Δείτε επεισόδια',
'see_contributors' => 'Βλέπε συντελεστές',
'go_to_page' => 'Μετάβαση στη σελίδα',
'latest_episodes' => 'Τελευταία επεισόδια',
'see_all_episodes' => 'Δείτε όλα τα επεισόδια',
- 'draft' => 'Draft',
+ 'draft' => 'Πρόχειρο',
'messages' => [
- 'createSuccess' => 'Podcast successfully created!',
+ 'createSuccess' => 'Το επεισόδιο δημιουργήθηκε με επιτυχία!',
'editSuccess' => 'Το Podcast ενημερώθηκε με επιτυχία!',
'importSuccess' => 'Το Podcast εισήχθη με επιτυχία!',
- 'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!',
- 'deletePodcastMediaError' => 'Failed to delete podcast {type, select,
- cover {cover}
+ 'deleteSuccess' => 'Το Podcast @{podcast_handle} διαγράφηκε επιτυχώς!',
+ 'deletePodcastMediaError' => 'Αποτυχία διαγραφής podcast {type, select,
+ cover {εξώφυλλο}
banner {banner}
- other {media}
+ other {πολυμέσα}
}.',
- 'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select,
+ 'deleteEpisodeMediaError' => 'Αποτυχία διαγραφής του podcast επεισοδίου {episode_slug} {type, select,
transcript {transcript}
- chapters {chapters}
- image {cover}
- audio {audio}
- other {media}
+ chapters {κεφάλαια}
+ image {κάλυμμα}
+ audio {ήχος}
+ other {πολυμέσα}
}.',
- '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!',
+ 'deletePodcastMediaFolderError' => 'Αποτυχία διαγραφής του φακέλου μέσων podcast {folder_path}. Μπορείτε να τον αφαιρέσετε χειροκίνητα από το δίσκο σας.',
+ 'podcastFeedUpdateSuccess' => 'Επιτυχημένη ενημέρωση: {number_of_new_episodes, plural,
+ one {# επεισόδιο ήταν}
+ other {# επεισόδια ήταν}
+ } προστέθηκαν στο podcast!',
+ 'podcastFeedUpToDate' => 'Το Podcast είναι ήδη ενημερωμένο.',
+ 'podcastNotImported' => 'Το Podcast δεν μπόρεσε να ενημερωθεί καθώς δεν εισήχθη.',
+ 'publishError' => 'Αυτό το podcast είτε έχει ήδη δημοσιευθεί είτε έχει προγραμματιστεί για δημοσίευση.',
+ 'publishEditError' => 'Αυτό το podcast δεν έχει προγραμματιστεί για δημοσίευση.',
+ 'publishCancelSuccess' => 'Η δημοσίευση του επεισοδίου ακυρώθηκε επιτυχώς!',
+ 'scheduleDateError' => 'Η ημερομηνία πρέπει να οριστεί!',
],
'form' => [
'identity_section_title' => 'Αναγνωριστικό Podcast',
'identity_section_subtitle' => 'Αυτά τα πεδία σας επιτρέπουν να ξεχωρίσει το podcast σας.',
- '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',
+ 'cover' => 'Εξώφυλο podcast',
+ 'cover_size_hint' => 'Το εξώφυλλο πρέπει να είναι τουλάχιστον 1400px πλάτος και ύψος.',
+ 'banner' => 'Banner podcast',
+ 'banner_size_hint' => 'Το Banner πρέπει να έχει αναλογία 3:1 και να είναι τουλάχιστον 1500px πλάτος.',
+ 'banner_delete' => 'Διαγραφή του podcast banner',
+ 'title' => 'Τίτλος',
'handle' => 'Handle',
'handle_hint' =>
- 'Used to identify the podcast. Uppercase, lowercase, numbers and underscores are accepted.',
+ 'Χρησιμοποιείται για τον προσδιορισμό του podcast. Τα κεφαλαία, τα πεζά, οι αριθμοί και οι κάτω παύλες γίνονται αποδεκτές.',
'type' => [
- 'label' => 'Type',
+ 'label' => 'Είδος',
'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_hint' => 'Εάν τα επεισόδια προορίζονται να καταναλωθούν χωρίς καμία συγκεκριμένη σειρά.',
+ 'serial' => 'Σειριακός Αριθμός',
+ 'serial_hint' => 'Εάν τα επεισόδια προορίζονται να καταναλωθούν με διαδοχική σειρά. Τα παλαιότερα επεισόδια θα παρουσιαστούν πρώτα.',
],
- 'description' => 'Description',
- 'classification_section_title' => 'Classification',
+ 'description' => 'Περιγραφή',
+ 'classification_section_title' => 'Χαρακτηρισμός',
'classification_section_subtitle' =>
- 'These fields will impact your audience and competition.',
- 'language' => 'Language',
- 'category' => 'Category',
- 'category_placeholder' => 'Select a category…',
- 'other_categories' => 'Other categories',
+ 'Αυτά τα πεδία θα επηρεάσουν το κοινό και τον ανταγωνισμό σας.',
+ 'language' => 'Γλώσσα',
+ 'category' => 'Κατηγορία',
+ 'category_placeholder' => 'Επιλέξτε μια κατηγορία…',
+ 'other_categories' => 'Άλλες κατηγορίες',
'parental_advisory' => [
- 'label' => 'Parental advisory',
- 'hint' => 'Does it contain explicit content?',
- 'undefined' => 'undefined',
- 'clean' => 'Clean',
- 'explicit' => 'Explicit',
+ 'label' => 'Γονικός σύμβουλος',
+ 'hint' => 'Μήπως το επεισόδιο περιέχει ακατάλληλο περιεχόμενο;',
+ 'undefined' => 'απροσδιόριστο',
+ 'clean' => 'Καθαρισμός',
+ 'explicit' => 'Άσεμνο περιεχόμενο',
],
- 'author_section_title' => 'Author',
- 'author_section_subtitle' => 'Who is managing the podcast?',
- 'owner_name' => 'Owner name',
+ 'author_section_title' => 'Συντάκτης',
+ 'author_section_subtitle' => 'Ποιος διαχειρίζεται το podcast;',
+ 'owner_name' => 'Όνομα κατόχου',
'owner_name_hint' =>
- 'For administrative use only. Visible in the public RSS feed.',
- 'owner_email' => 'Owner email',
+ 'Μόνο για διοικητική χρήση. Ορατό στη δημόσια τροφοδοσία RSS.',
+ 'owner_email' => 'Email ιδιοκτήτη',
'owner_email_hint' =>
- 'Will be used by most platforms to verify the podcast ownership. Visible in the public RSS feed.',
- 'publisher' => 'Publisher',
+ 'Θα χρησιμοποιηθεί από τις περισσότερες πλατφόρμες για να επαληθεύσει την ιδιοκτησία του podcast. Ορατό στη δημόσια τροφοδοσία RSS.',
+ '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',
+ 'Η ομάδα που είναι υπεύθυνη για τη δημιουργία της παράστασης. Συχνά αναφέρεται στη μητρική εταιρεία ή στο δίκτυο ενός podcast. Αυτό το πεδίο μερικές φορές χαρακτηρίζεται ως \'Συγγραφέας\'.',
+ 'copyright' => 'Πνευματικά δικαιώματα',
+ 'location_section_title' => 'Τοποθεσία',
+ 'location_section_subtitle' => 'Σε ποιο μέρος είναι αυτό το επεισόδιο;',
+ 'location_name' => 'Όνομα τοποθεσίας ή διεύθυνση',
+ 'location_name_hint' => 'Αυτό μπορεί να είναι ένα πραγματικό μέρος ή φανταστικό',
'monetization_section_title' => 'Monetization',
'monetization_section_subtitle' =>
- 'Earn money thanks to your audience.',
+ 'Κερδίστε χρήματα χάρη στο κοινό σας.',
'premium' => 'Premium',
- 'premium_by_default' => 'Episodes must be set as premium by default',
- 'premium_by_default_hint' => 'Podcast episodes will be marked as premium by default. You can still choose to set some episodes, trailers or bonuses as public.',
- 'payment_pointer' => 'Payment Pointer for Web Monetization',
+ 'premium_by_default' => 'Τα επεισόδια πρέπει να ορίζονται ως premium από προεπιλογή',
+ 'premium_by_default_hint' => 'Τα επεισόδια Podcast θα επισημανθούν ως premium από προεπιλογή. Μπορείτε ακόμα να επιλέξετε να ορίσετε κάποια επεισόδια, trailers ή μπόνους ως δημόσια.',
+ 'payment_pointer' => 'Δείκτης πληρωμής για Monetization Web',
'payment_pointer_hint' =>
- 'This is your where you will receive money thanks to Web Monetization',
+ 'Αυτό είναι το πού θα λάβετε χρήματα χάρη στην Monetization Web',
'advanced_section_title' => 'Advanced Parameters',
'advanced_section_subtitle' =>
'If you need RSS tags that Castopod does not handle, set them here.',
@@ -168,56 +168,56 @@ return [
'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',
+ 'careers' => 'Καριέρες',
+ 'entrepreneurship' => 'Επιχειρηματικότητα',
+ 'investing' => 'Επενδύσεις',
+ 'management' => 'Διαχείριση',
+ 'marketing' => 'Μάρκετινγκ',
+ 'non_profit' => 'Μη κερδοσκοπικού χαρακτήρα',
+ 'comedy_interviews' => 'Συνεντεύξεις Κωμωδίας',
+ 'improv' => 'Βελτίωση',
'stand_up' => 'Stand-Up',
- 'courses' => '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',
+ 'language_learning' => 'Εκμάθηση γλωσσών',
+ 'self_improvement' => 'Αυτοβελτίωση',
+ 'comedy_fiction' => 'Φαντασία Κωμωδίας',
+ 'drama' => 'Δράμα',
+ 'science_fiction' => 'Επιστημονικής φαντασίας',
+ 'alternative_health' => 'Εναλλακτική Υγεία',
+ 'fitness' => 'Γυμναστική',
+ 'medicine' => 'Ιατρική',
+ 'mental_health' => 'Ψυχική Υγεία',
+ 'nutrition' => 'Διατροφή',
+ 'sexuality' => 'Σεξουαλικότητα',
+ 'education_for_kids' => 'Εκπαίδευση για παιδιά',
+ 'parenting' => 'Γονείς',
+ 'pets_and_animals' => 'Κατοικίδια & Ζώα',
+ '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',
+ 'automotive' => 'Αυτοκίνητα',
+ 'aviation' => 'Αεροπορία',
+ 'crafts' => 'Χειροτεχνίες',
+ 'games' => 'Παιχνίδια',
+ 'hobbies' => 'Χόμπι',
+ 'home_and_garden' => 'Σπίτι & Κήπος',
+ 'video_games' => 'Βιντεοπαιχνίδια',
+ 'music_commentary' => 'Σχολιασμός Μουσικής',
+ 'music_history' => 'Ιστορία Μουσικής',
+ 'music_interviews' => 'Συνεντεύξεις Μουσικής',
+ 'business_news' => 'Επιχειρηματικά Νέα',
+ 'daily_news' => 'Καθημερινές Ειδήσεις',
+ 'entertainment_news' => 'Ειδήσεις ψυχαγωγίας',
'news_commentary' => 'News Commentary',
- 'politics' => 'Politics',
- 'sports_news' => 'Sports News',
- 'tech_news' => 'Tech News',
- 'buddhism' => 'Buddhism',
- 'christianity' => 'Christianity',
+ 'politics' => 'Πολιτική',
+ 'sports_news' => 'Αθλητικά νέα',
+ 'tech_news' => 'Ειδήσεις Τεχνολογίας',
+ 'buddhism' => 'Βουδισμός',
+ 'christianity' => 'Χριστιανισμός',
'hinduism' => 'Hinduism',
- 'islam' => 'Islam',
- 'judaism' => 'Judaism',
- 'religion' => 'Religion',
+ 'islam' => 'Ισλαμισμός',
+ 'judaism' => 'Ιουδαϊσμός',
+ 'religion' => 'Θρησκεία',
'spirituality' => 'Spirituality',
'astronomy' => 'Astronomy',
'chemistry' => 'Chemistry',
@@ -272,39 +272,39 @@ return [
'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',
+ 'message_warning_hint' => 'Έχοντας ένα μήνυμα αυξάνει την κοινωνική δέσμευση, με αποτέλεσμα μια καλύτερη ορατότητα για το podcast σας.',
+ 'message_warning_submit' => 'Δημοσίευση ούτως ή άλλως',
],
'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}.',
+ 'draft_mode' => 'λειτουργία πρόχειρου',
+ 'not_published' => 'Αυτό το podcast δεν έχει ακόμη δημοσιευθεί.',
+ 'scheduled' => 'Αυτό το podcast έχει προγραμματιστεί για δημοσίευση στις {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',
+ "Διαγράφοντας το podcast θα διαγράψει όλα τα επεισόδια, τα αρχεία πολυμέσων, τις δημοσιεύσεις και τα αναλυτικά στοιχεία που σχετίζονται με αυτό. Αυτή η ενέργεια είναι μη αναστρέψιμη, δεν θα είστε σε θέση να τις ανακτήσετε αργότερα.",
+ 'understand' => 'Καταλαβαίνω, θέλω το podcast να διαγραφεί οριστικά',
+ 'submit' => 'Διαγραφή',
],
- 'by' => 'By {publisher}',
- 'season' => 'Season {seasonNumber}',
- 'list_of_episodes_year' => '{year} episodes ({episodeCount})',
+ 'by' => 'Από {publisher}',
+ 'season' => 'Σεζόν {seasonNumber}',
+ 'list_of_episodes_year' => '{year} επεισόδια ({episodeCount})',
'list_of_episodes_season' =>
- 'Season {seasonNumber} episodes ({episodeCount})',
- 'no_episode' => 'No episode found!',
- 'follow' => 'Follow',
+ 'Σεζόν {seasonNumber} επεισόδεια ({episodeCount})',
+ 'no_episode' => 'Δεν βρέθηκε επεισόδιο!',
+ 'follow' => 'Ακολουθήστε',
'followers' => '{numberOfFollowers, plural,
- one {# follower}
- other {# followers}
+ one {# ακόλουθος}
+ other {# ακόλουθοι}
}',
'posts' => '{numberOfPosts, plural,
- one {# post}
- other {# posts}
+ one {# δημοσίευση}
+ other {# δημοσιεύσεις}
}',
- 'activity' => 'Activity',
- 'episodes' => 'Episodes',
- 'sponsor' => 'Sponsor',
- 'funding_links' => 'Funding links for {podcastTitle}',
- 'find_on' => 'Find {podcastTitle} on',
- 'listen_on' => 'Listen on',
+ 'activity' => 'Δραστηριότητα',
+ 'episodes' => 'Επεισόδια',
+ 'sponsor' => 'Χορηγός',
+ 'funding_links' => 'Σύνδεσμοι χρηματοδότησης για το {podcastTitle}',
+ 'find_on' => 'Βρείτε το {podcastTitle} στο',
+ 'listen_on' => 'Ακούστε το',
];
diff --git a/modules/Admin/Language/el/PodcastImport.php b/modules/Admin/Language/el/PodcastImport.php
index 7c3ef67d..fbae4b3e 100644
--- a/modules/Admin/Language/el/PodcastImport.php
+++ b/modules/Admin/Language/el/PodcastImport.php
@@ -10,28 +10,28 @@ declare(strict_types=1);
return [
'warning' =>
- 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.',
- 'old_podcast_section_title' => 'The podcast to import',
+ 'Αυτή η διαδικασία μπορεί να διαρκέσει πολύ. Καθώς η τρέχουσα έκδοση δεν εμφανίζει καμία πρόοδο ενώ εκτελείται, δεν θα δείτε τίποτα να ενημερώνεται μέχρι να ολοκληρωθεί. Σε περίπτωση σφάλματος χρονικού ορίου, αυξήστε την τιμή `max_execution_time`.',
+ 'old_podcast_section_title' => 'Το podcast για εισαγωγή',
'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',
+ 'Βεβαιωθείτε ότι έχετε τα δικαιώματα για αυτό το podcast πριν από την εισαγωγή του. Η αντιγραφή και μετάδοση ενός podcast χωρίς τα κατάλληλα δικαιώματα είναι πειρατεία και μπορεί να διωχθεί.',
+ 'imported_feed_url' => 'Διεύθυνση URL Ροής',
+ 'imported_feed_url_hint' => 'To Url πρέπει να είναι σε μορφή xml ή rss.',
+ 'new_podcast_section_title' => 'Το νέο podcast',
+ 'advanced_params_section_title' => 'Παράμετροι για προχωρημένους',
'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',
+ 'Διατηρήστε τις προεπιλεγμένες τιμές αν δεν έχετε ιδέα για το ποια είναι τα πεδία.',
+ 'slug_field' => 'Πεδίο που πρέπει να χρησιμοποιείται για τον υπολογισμό του slug του επεισοδίου',
'description_field' =>
- 'Source field used for episode description / show notes',
+ 'Πεδίο πηγής που χρησιμοποιείται για την περιγραφή επεισοδίου / εμφάνιση σημειώσεων',
'force_renumber' => 'Force episodes renumbering',
'force_renumber_hint' =>
'Use this if your podcast does not have episode numbers but wish to set them during import.',
- 'season_number' => 'Season number',
+ 'season_number' => 'Αριθμός σεζόν',
'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',
+ 'Χρησιμοποιήστε αυτό αν το podcast σας δεν έχει αριθμό σεζόν αλλά επιθυμεί να ορίσει έναν κατά την εισαγωγή. Αφήστε κενό διαφορετικά.',
+ 'max_episodes' => 'Μέγιστος αριθμός επεισοδίων εισαγωγής',
+ 'max_episodes_hint' => 'Αφήστε κενό για την εισαγωγή όλων των επεισοδίων',
'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' => 'Εισαγωγή podcast',
];
diff --git a/modules/Admin/Language/el/PodcastNavigation.php b/modules/Admin/Language/el/PodcastNavigation.php
index b4d7ddc0..213a52af 100644
--- a/modules/Admin/Language/el/PodcastNavigation.php
+++ b/modules/Admin/Language/el/PodcastNavigation.php
@@ -9,30 +9,30 @@ 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',
- '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',
+ 'go_to_page' => 'Μετάβαση στη σελίδα podcast',
+ 'dashboard' => 'Πίνακας ελέγχου Podcast',
+ 'podcast-view' => 'Αρχική σελίδα',
+ 'podcast-edit' => 'Επεξεργασία podcast',
+ 'podcast-persons-manage' => 'Διαχείριση ατόμων',
+ 'episodes' => 'Επεισόδια',
+ 'episode-list' => 'Όλα τα επεισόδια',
+ 'episode-create' => 'Νέο Επεισόδιο',
+ 'analytics' => 'Στατιστικά',
+ 'podcast-analytics' => 'Επισκόπηση κοινού',
+ 'podcast-analytics-webpages' => 'Επίσκεψη ιστοσελίδων',
+ 'podcast-analytics-locations' => 'Τοποθεσίες',
+ 'podcast-analytics-unique-listeners' => 'Μοναδικοί ακροατές',
+ 'podcast-analytics-players' => 'Αναπαραγωγές',
+ 'podcast-analytics-listening-time' => 'Χρόνος ακρόασης',
+ 'podcast-analytics-time-periods' => 'Χρονικές περίοδοι',
'premium' => 'Premium',
- 'subscription-list' => 'All subscriptions',
- 'subscription-add' => 'Add subscription',
- 'contributors' => 'Contributors',
- 'contributor-list' => 'All contributors',
- 'contributor-add' => 'Add contributor',
- 'platforms' => 'External platforms',
+ 'subscription-list' => 'Όλες οι συνδρομές',
+ 'subscription-add' => 'Προσθέστε συνδρομή',
+ 'contributors' => 'Συντελεστές',
+ 'contributor-list' => 'Όλοι οι συντελεστές',
+ 'contributor-add' => 'Προσθήκη συντελεστή',
+ 'platforms' => 'Εξωτερικές πλατφόρμες',
'platforms-podcasting' => 'Podcasting',
- 'platforms-social' => 'Social networks',
- 'platforms-funding' => 'Funding',
+ 'platforms-social' => 'Κοινωνικά δίκτυα',
+ 'platforms-funding' => 'Χρηματοδότηση',
];
diff --git a/modules/Admin/Language/el/Settings.php b/modules/Admin/Language/el/Settings.php
index 4a70dcba..d4ff241b 100644
--- a/modules/Admin/Language/el/Settings.php
+++ b/modules/Admin/Language/el/Settings.php
@@ -9,50 +9,50 @@ declare(strict_types=1);
*/
return [
- 'title' => 'General settings',
+ 'title' => 'Γενικές ρυθμίσεις',
'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!',
+ 'title' => 'Διακομιστής',
+ 'site_icon' => 'Εικονίδιο ιστοσελίδας',
+ 'site_icon_delete' => 'Διαγραφή εικονιδίου ιστότοπου',
+ 'site_icon_hint' => 'Τα εικονίδια της ιστοσελίδας είναι αυτά που βλέπετε στις καρτέλες του προγράμματος περιήγησης, στη γραμμή σελιδοδεικτών, και όταν προσθέτετε μια ιστοσελίδα ως συντόμευση σε κινητές συσκευές.',
+ 'site_icon_helper' => 'Το εικονίδιο πρέπει να είναι τετράγωνο και τουλάχιστον 512px πλάτος και ψηλό.',
+ 'site_name' => 'Όνομα ιστοτόπου',
+ 'site_description' => 'Περιγραφή ιστοτόπου',
+ 'submit' => 'Αποθήκευση',
+ 'editSuccess' => 'Ο Διακομιστής έχει ενημερωθεί με επιτυχία!',
+ 'deleteIconSuccess' => 'Το εικονίδιο της ιστοσελίδας έχει καταργηθεί με επιτυχία!',
],
'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!',
+ 'title' => 'Εικόνες',
+ 'subtitle' => 'Εδώ μπορείτε να επαναδημιουργήσετε όλες τις εικόνες με βάση τα πρωτότυπα που φορτώθηκαν. Για να χρησιμοποιηθεί αν βρείτε κάποιες εικόνες που λείπουν. Αυτή η εργασία μπορεί να διαρκέσει λίγο.',
+ 'regenerate' => 'Αναδημιουργία εικόνων',
+ 'regenerationSuccess' => 'Όλες οι εικόνες έχουν δημιουργηθεί επιτυχώς!',
],
'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, …)',
- 'rename_episodes_files' => 'Rename episode audio files',
- 'rename_episodes_files_hint' => 'This option will rename all episodes audio files to a random string of characters. Use this if one of your private episodes link was leaked as this will effectively hide it.',
- 'clear_cache' => 'Clear all cache',
- 'clear_cache_helper' => 'This option will flush redis cache or writable/cache files.',
+ 'reset_counts' => 'Επαναφορά μετρήσεων',
+ 'reset_counts_helper' => 'Αυτή η επιλογή θα επαναϋπολογίσει και θα επαναφέρει όλους τους αριθμούς δεδομένων (αριθμός των ακολούθων, αναρτήσεις, σχόλια, …).',
+ 'rewrite_media' => 'Επανεγγραφή μεταδεδομένων πολυμέσων',
+ 'rewrite_media_helper' => 'Αυτή η επιλογή θα διαγράψει όλα τα περιττά αρχεία πολυμέσων και θα τα αναπαράγει (εικόνες, αρχεία ήχου, μεταγραφές, κεφάλαια, …)',
+ 'rename_episodes_files' => 'Μετονομασία αρχείων ήχου επεισοδίου',
+ 'rename_episodes_files_hint' => 'Αυτή η επιλογή θα μετονομάσει όλα τα αρχεία ήχου επεισόδια σε μια τυχαία συμβολοσειρά χαρακτήρων. Χρησιμοποιήστε αυτό αν διαρρεύσει ένας από τους ιδιωτικούς συνδέσμους επεισοδίων σας, καθώς αυτό θα τον αποκρύψει αποτελεσματικά.',
+ 'clear_cache' => 'Εκκαθάριση συνολικού cache',
+ 'clear_cache_helper' => 'Αυτή η επιλογή θα εκκαθαρίσει αρχεία cache redis ή εγγράψιμο/cache.',
'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',
+ 'title' => 'Θέμα',
+ 'accent_section_title' => 'Χρώμα έμφασης',
+ 'accent_section_subtitle' => 'Επιλέξτε το χρώμα για να καθορίσετε την εμφάνιση και την αίσθηση όλων των δημόσιων σελίδων.',
+ 'pine' => 'Πεύκο',
+ 'crimson' => 'Βυσσινί',
+ 'amber' => 'Κεχριμπάρι',
+ 'lake' => 'Λίμνη',
'jacaranda' => 'Jacaranda',
- 'onyx' => 'Onyx',
- 'submit' => 'Save',
- 'setInstanceThemeSuccess' => 'Theme has been updated successfully!',
+ 'onyx' => 'Όνυξ',
+ 'submit' => 'Αποθήκευση',
+ 'setInstanceThemeSuccess' => 'Το θέμα έχει ενημερωθεί με επιτυχία!',
],
];
diff --git a/modules/Admin/Language/el/Soundbite.php b/modules/Admin/Language/el/Soundbite.php
index a3f828fe..122bdb1d 100644
--- a/modules/Admin/Language/el/Soundbite.php
+++ b/modules/Admin/Language/el/Soundbite.php
@@ -10,22 +10,22 @@ declare(strict_types=1);
return [
'list' => [
- 'title' => 'Soundbites',
- 'soundbite' => 'Soundbite',
+ 'title' => 'Ήχοι',
+ 'soundbite' => 'Ήχος',
],
'messages' => [
- 'createSuccess' => 'Soundbite has been successfully created!',
- 'deleteSuccess' => 'Soundbite has been successfully removed!',
+ 'createSuccess' => 'Το Soundbite δημιουργήθηκε με επιτυχία!',
+ 'deleteSuccess' => 'Το Soundbite αφαιρέθηκε με επιτυχία!',
],
'form' => [
- 'title' => 'New soundbite',
- 'soundbite_title' => 'Soundbite title',
- 'start_time' => 'Start at',
- 'duration' => 'Duration',
- 'submit' => 'Create soundbite',
+ 'title' => 'Νέο soundbite',
+ 'soundbite_title' => 'Τίτλος Soundbite',
+ 'start_time' => 'Έναρξη από',
+ 'duration' => 'Διάρκεια',
+ 'submit' => 'Δημιουργία soundbite',
],
- 'play' => 'Play soundbite',
- 'stop' => 'Stop soundbite',
- 'create' => 'New soundbite',
- 'delete' => 'Delete soundbite',
+ 'play' => 'Αναπαραγωγή soundbite',
+ 'stop' => 'Σταμάτημα soundbite',
+ 'create' => 'Νέο soundbite',
+ 'delete' => 'Διαγραφή soundbite',
];
diff --git a/modules/Admin/Language/el/Validation.php b/modules/Admin/Language/el/Validation.php
index 3bc78cfe..642f195d 100644
--- a/modules/Admin/Language/el/Validation.php
+++ b/modules/Admin/Language/el/Validation.php
@@ -10,7 +10,7 @@ declare(strict_types=1);
return [
'min_dims' =>
- '{field} is either not an image, or it is not wide or tall enough.',
+ '{field} είτε δεν είναι μια εικόνα, είτε δεν είναι αρκετά ευρεία ή ψηλή.',
'is_image_ratio' =>
- '{field} is either not an image or not of the right ratio.',
+ '{field} είτε δεν είναι εικόνα είτε όχι της σωστής αναλογίας.',
];
diff --git a/modules/Admin/Language/el/VideoClip.php b/modules/Admin/Language/el/VideoClip.php
index 638de697..64388b13 100644
--- a/modules/Admin/Language/el/VideoClip.php
+++ b/modules/Admin/Language/el/VideoClip.php
@@ -10,63 +10,63 @@ declare(strict_types=1);
return [
'list' => [
- 'title' => 'Video clips',
+ 'title' => 'Βίντεο κλιπ',
'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.',
+ 'label' => 'Κατάσταση',
+ 'queued' => 'στην ουρά',
+ 'queued_hint' => 'Το κλιπ περιμένει να υποβληθεί σε επεξεργασία.',
+ 'pending' => 'εκκρεμεί',
+ 'pending_hint' => 'Το κλιπ θα δημιουργηθεί σύντομα.',
+ 'running' => 'εκτελείται',
+ 'running_hint' => 'Το κλιπ δημιουργείται.',
+ 'failed' => 'απέτυχε',
+ 'failed_hint' => 'Το κλιπ δεν μπόρεσε να δημιουργηθεί: αποτυχία δέσμης ενεργειών.',
'passed' => 'passed',
- 'passed_hint' => 'Clip was generated successfully!',
+ 'passed_hint' => 'Το κλιπ δημιουργήθηκε με επιτυχία!',
],
- 'clip' => 'Clip',
- 'duration' => 'Job duration',
+ 'clip' => 'Αποσπάσματα',
+ 'duration' => 'Διάρκεια εργασίας',
],
- 'title' => 'Video clip: {videoClipLabel}',
- 'download_clip' => 'Download clip',
- 'create' => 'New video clip',
+ 'title' => 'Βίντεο κλιπ: {videoClipLabel}',
+ 'download_clip' => 'Κατεβάστε το κλιπ',
+ 'create' => 'Νέο βίντεο κλιπ',
'go_to_page' => 'Go to clip page',
'retry' => 'Retry clip generation',
- 'delete' => 'Delete clip',
- 'logs' => 'Job logs',
+ 'delete' => 'Διαγραφή κλιπ',
+ '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!',
+ 'alreadyExistingError' => 'Το βίντεο κλιπ που προσπαθείτε να δημιουργήσετε υπάρχει ήδη!',
+ 'addToQueueSuccess' => 'Το βίντεο κλιπ έχει προστεθεί στην ουρά αναμονής, αναμένοντας να δημιουργηθεί!',
+ 'deleteSuccess' => 'Το βίντεο κλιπ αφαιρέθηκε με επιτυχία!',
],
'format' => [
- 'landscape' => 'Landscape',
- 'portrait' => 'Portrait',
- 'squared' => 'Squared',
+ 'landscape' => 'Οριζόντια',
+ 'portrait' => 'Κατακόρυφα',
+ 'squared' => 'Τετράγωνα',
],
'form' => [
- 'title' => 'New video clip',
- 'params_section_title' => 'Video clip parameters',
- 'clip_title' => 'Clip title',
+ 'title' => 'Νέο βίντεο κλιπ',
+ 'params_section_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.',
+ 'label' => 'Επιλογή μορφής',
+ 'landscape_hint' => 'Με αναλογία 16:9, τα βίντεο τοπίου είναι υπέροχα για το PeerTube, το Youtube και το Vimeo.',
+ 'portrait_hint' => 'Με αναλογία 9:16, πορτρέτο βίντεο είναι μεγάλη για TikTok, shorts Youtube και ιστορίες Instagram.',
+ 'squared_hint' => 'Με αναλογία 1:1, τα τετράγωνα βίντεο είναι υπέροχα για Mastodon, Facebook, Twitter και LinkedIn.',
],
- 'theme' => 'Select a theme',
- 'start_time' => 'Start at',
- 'duration' => 'Duration',
- 'trim_start' => 'Trim start',
- 'trim_end' => 'Trim end',
- 'submit' => 'Create video clip',
+ 'theme' => 'Επιλογή θέματος',
+ 'start_time' => 'Έναρξη από',
+ 'duration' => 'Διάρκεια',
+ 'trim_start' => 'Περικοπή έναρξης',
+ 'trim_end' => 'Περικοπή τέλους',
+ 'submit' => 'Δημιουργία βίντεο κλιπ',
],
'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!',
+ 'title' => 'Λείπουν προαπαιτούμενα',
+ 'missing' => 'Έχετε απαιτήσεις που λείπουν. Σιγουρευτείτε ότι προσθέστε όλα τα απαιτούμενα στοιχεία για να μπορέσετε να δημιουργήσετε ένα βίντεο για αυτό το επεισόδιο!',
'ffmpeg' => 'FFmpeg',
- 'gd' => 'Graphics Draw (GD)',
- 'freetype' => 'Freetype library for GD',
- 'transcript' => 'Transcript file (.srt)',
+ 'gd' => 'Σχεδίαση Γραφικών (GD)',
+ 'freetype' => 'Βιβλιοθήκη Freetype για GD',
+ 'transcript' => 'Αρχείο απομαγνητοφώνησης (.srt)',
],
];
diff --git a/modules/Admin/Language/es/AboutCastopod.php b/modules/Admin/Language/es/AboutCastopod.php
index 3fb62aff..93d4142b 100644
--- a/modules/Admin/Language/es/AboutCastopod.php
+++ b/modules/Admin/Language/es/AboutCastopod.php
@@ -9,14 +9,14 @@ declare(strict_types=1);
*/
return [
- 'title' => 'About Castopod',
- 'host_name' => 'Host name',
- 'version' => 'Castopod version',
- 'php_version' => 'PHP version',
- 'os' => 'Operating System',
- 'languages' => 'Languages',
- 'update_database' => 'Update database',
+ 'title' => 'Acerca de Castopod',
+ 'host_name' => 'Nombre del host',
+ 'version' => 'Versión de Castopod',
+ 'php_version' => 'Versión de PHP',
+ 'os' => 'Sistema Operativo',
+ 'languages' => 'Idiomas',
+ 'update_database' => 'Actualizar base de datos',
'messages' => [
- 'databaseUpdateSuccess' => 'Database is up to date!',
+ 'databaseUpdateSuccess' => 'La base de datos esta actualizada!',
],
];
diff --git a/modules/Admin/Language/es/Breadcrumb.php b/modules/Admin/Language/es/Breadcrumb.php
index 63fc38d9..74bf0ec7 100644
--- a/modules/Admin/Language/es/Breadcrumb.php
+++ b/modules/Admin/Language/es/Breadcrumb.php
@@ -14,24 +14,25 @@ return [
->gateway => 'Inicio',
'podcasts' => 'podcasts',
'episodes' => 'episodios',
- 'subscriptions' => 'subscriptions',
+ 'subscriptions' => 'suscripciones',
'contributors' => 'colaboradores',
'pages' => 'páginas',
'settings' => 'configuración',
'theme' => 'tema',
- 'about' => 'about',
+ 'about' => 'acerca de',
'add' => 'añadir',
'new' => 'nuevo',
'edit' => 'editar',
'persons' => 'personas',
'publish' => 'publicar',
'publish-edit' => 'editar publicación',
- 'publish-date-edit' => 'edit publication date',
+ 'publish-date-edit' => 'editar fecha de publicación',
'unpublish' => 'anular publicación',
'delete' => 'borrar',
- 'remove' => 'remove',
+ 'remove' => 'eliminar',
'fediverse' => 'fediverso',
- 'block-lists' => 'listas de bloqueo',
+ 'blocked-actors' => 'actores bloqueado',
+ 'blocked-domains' => 'dominios bloqueados',
'users' => 'usuarios',
'my-account' => 'mi cuenta',
'change-password' => 'cambiar contraseña',
@@ -50,5 +51,5 @@ return [
'video-clips' => 'clips de vídeo',
'embed' => 'reproductor embebido',
'notifications' => 'notificaciones',
- 'suspend' => 'suspend',
+ 'suspend' => 'suspender',
];
diff --git a/modules/Admin/Language/es/Episode.php b/modules/Admin/Language/es/Episode.php
index 4cb492e8..574759e9 100644
--- a/modules/Admin/Language/es/Episode.php
+++ b/modules/Admin/Language/es/Episode.php
@@ -24,14 +24,14 @@ return [
'edit' => 'Editar',
'publish' => 'Publicar',
'publish_edit' => 'Editar publicación',
- 'publish_date_edit' => 'Edit publication date',
+ 'publish_date_edit' => 'Editar fecha de publicación',
'unpublish' => 'Anular publicación',
'publish_error' => 'El episodio ya está publicado.',
'publish_edit_error' => 'El episodio ya está publicado.',
'publish_cancel_error' => 'El episodio ya está publicado.',
- 'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.',
- 'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.',
- 'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!',
+ 'publish_date_edit_error' => 'El episodio no ha sido publicado todavía, no puede editar su fecha de publicación.',
+ 'publish_date_edit_future_error' => '¡La fecha de publicación del episodio sólo puede establecerse a una fecha pasada! Si desea reprogramarla, despublicarla primero.',
+ 'publish_date_edit_success' => '¡La fecha de publicación del episodio se ha actualizado con éxito!',
'unpublish_error' => 'El episodio no está publicado.',
'delete' => 'Borrar',
'go_to_page' => 'Ir a la página',
@@ -114,7 +114,7 @@ return [
'bonus_hint' => 'Contenido extra para la serie (por ejemplo, detrás de escenas o entrevistas con el elenco) o contenido promocional para otra serie',
],
'premium_title' => 'Premium',
- 'premium' => 'Episode must be accessible to premium subscribers only',
+ 'premium' => 'El episodio debe ser accesible solamente para los suscriptores premium',
'parental_advisory' => [
'label' => 'Aviso parental',
'hint' => '¿El episodio contiene contenido explícito?',
@@ -183,9 +183,9 @@ return [
'message_warning_submit' => 'Publicar de todos modos',
],
'publish_date_edit_form' => [
- 'new_publication_date' => 'New publication date',
- 'new_publication_date_hint' => 'Must be set to a past date.',
- 'submit' => 'Edit publication date',
+ 'new_publication_date' => 'Nueva fecha de publicación',
+ 'new_publication_date_hint' => 'Debe establecerse en una fecha pasada.',
+ 'submit' => 'Editar fecha de publicación',
],
'unpublish_form' => [
'disclaimer' =>
diff --git a/modules/Admin/Language/es/Navigation.php b/modules/Admin/Language/es/Navigation.php
index fefb73e5..8e59c56e 100644
--- a/modules/Admin/Language/es/Navigation.php
+++ b/modules/Admin/Language/es/Navigation.php
@@ -33,7 +33,7 @@ return [
'settings' => 'Configuración',
'settings-general' => 'General',
'settings-theme' => 'Tema',
- 'about' => 'About',
+ 'about' => 'Acerca de',
'account' => [
'my-account' => 'Mi cuenta',
'change-password' => 'Cambiar contraseña',
diff --git a/modules/Admin/Language/es/Notifications.php b/modules/Admin/Language/es/Notifications.php
index d6c93ba9..70e375fb 100644
--- a/modules/Admin/Language/es/Notifications.php
+++ b/modules/Admin/Language/es/Notifications.php
@@ -13,7 +13,7 @@ return [
'reply' => '{actor_username} respondió a tu publicación',
'favourite' => '{actor_username} ha marcado como favorita tu publicación',
'reblog' => '{actor_username} ha compartido tu publicación',
- 'follow' => '{actor_username} started following you',
+ 'follow' => '{actor_username} ha empezado a seguirte',
'no_notifications' => 'No hay notificaciones',
'mark_all_as_read' => 'Marcar todas como leídas',
];
diff --git a/modules/Admin/Language/es/Podcast.php b/modules/Admin/Language/es/Podcast.php
index c10b2374..4d87a5fd 100644
--- a/modules/Admin/Language/es/Podcast.php
+++ b/modules/Admin/Language/es/Podcast.php
@@ -108,8 +108,8 @@ return [
'monetization_section_subtitle' =>
'Gana dinero gracias a tu audiencia.',
'premium' => 'Premium',
- 'premium_by_default' => 'Episodes must be set as premium by default',
- 'premium_by_default_hint' => 'Podcast episodes will be marked as premium by default. You can still choose to set some episodes, trailers or bonuses as public.',
+ 'premium_by_default' => 'Los episodios deben establecerse como premium por defecto',
+ 'premium_by_default_hint' => 'Los episodios Podcast se marcarán como premium de forma predeterminada. Todavía puedes elegir establecer algunos episodios, trailers o bonificaciones como públicos.',
'payment_pointer' => 'Puntero de pago para Monetización web',
'payment_pointer_hint' =>
'Aquí es donde usted recibirá dinero gracias a la Monetización Web',
diff --git a/modules/Admin/Language/es/PodcastNavigation.php b/modules/Admin/Language/es/PodcastNavigation.php
index 8bbe1733..afa57101 100644
--- a/modules/Admin/Language/es/PodcastNavigation.php
+++ b/modules/Admin/Language/es/PodcastNavigation.php
@@ -26,8 +26,8 @@ return [
'podcast-analytics-listening-time' => 'Tiempo de escucha',
'podcast-analytics-time-periods' => 'Periodos de tiempo',
'premium' => 'Premium',
- 'subscription-list' => 'All subscriptions',
- 'subscription-add' => 'Add subscription',
+ 'subscription-list' => 'Todas las suscripciones',
+ 'subscription-add' => 'Añadir suscripción',
'contributors' => 'Colaboradores',
'contributor-list' => 'Todos los colaboradores',
'contributor-add' => 'Añadir colaborador',
diff --git a/modules/Admin/Language/es/Settings.php b/modules/Admin/Language/es/Settings.php
index 245ee615..6c63c82d 100644
--- a/modules/Admin/Language/es/Settings.php
+++ b/modules/Admin/Language/es/Settings.php
@@ -35,8 +35,8 @@ return [
'reset_counts_helper' => 'Esta opción recalculará y restablecerá todos los conteos de datos (número de seguidores, publicaciones, comentarios, …).',
'rewrite_media' => 'Reescribir metadatos de medios',
'rewrite_media_helper' => 'Esta opción eliminará todos los archivos multimedia superfluos y los volverá a crear (imágenes, archivos de audio, transcripciones, capítulos, …)',
- 'rename_episodes_files' => 'Rename episode audio files',
- 'rename_episodes_files_hint' => 'This option will rename all episodes audio files to a random string of characters. Use this if one of your private episodes link was leaked as this will effectively hide it.',
+ 'rename_episodes_files' => 'Renombrar archivos de audio del episodio',
+ 'rename_episodes_files_hint' => 'Esta opción renombrará todos los archivos de audio de episodios a una cadena aleatoria de caracteres. Usa esto si uno de tus episodios privados fue filtrado ya que esto lo ocultará efectivamente.',
'clear_cache' => 'Borrar toda la caché',
'clear_cache_helper' => 'Esta opción eliminará la caché de redis o archivos de escritura/caché.',
'run' => 'Ejecutar tareas de mantenimiento',
diff --git a/modules/Admin/Language/fa/Breadcrumb.php b/modules/Admin/Language/fa/Breadcrumb.php
index b1742abf..558b90f7 100644
--- a/modules/Admin/Language/fa/Breadcrumb.php
+++ b/modules/Admin/Language/fa/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'delete',
'remove' => 'remove',
'fediverse' => 'fediverse',
- 'block-lists' => 'block lists',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'users',
'my-account' => 'my account',
'change-password' => 'change password',
diff --git a/modules/Admin/Language/fr/Breadcrumb.php b/modules/Admin/Language/fr/Breadcrumb.php
index 54a5ab23..a72289fd 100644
--- a/modules/Admin/Language/fr/Breadcrumb.php
+++ b/modules/Admin/Language/fr/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'supprimer',
'remove' => 'retirer',
'fediverse' => 'fédiverse',
- 'block-lists' => 'listes de blocage',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'utilisateurs',
'my-account' => 'mon compte',
'change-password' => 'changer le mot de passe',
diff --git a/modules/Admin/Language/gd/Breadcrumb.php b/modules/Admin/Language/gd/Breadcrumb.php
index b1742abf..558b90f7 100644
--- a/modules/Admin/Language/gd/Breadcrumb.php
+++ b/modules/Admin/Language/gd/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'delete',
'remove' => 'remove',
'fediverse' => 'fediverse',
- 'block-lists' => 'block lists',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'users',
'my-account' => 'my account',
'change-password' => 'change password',
diff --git a/modules/Admin/Language/gl/Breadcrumb.php b/modules/Admin/Language/gl/Breadcrumb.php
index 60a9c487..2e687171 100644
--- a/modules/Admin/Language/gl/Breadcrumb.php
+++ b/modules/Admin/Language/gl/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'eliminar',
'remove' => 'eliminar',
'fediverse' => 'fediverso',
- 'block-lists' => 'listas de bloqueo',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'usuarias',
'my-account' => 'a miña conta',
'change-password' => 'cambiar contrasinal',
diff --git a/modules/Admin/Language/id/Breadcrumb.php b/modules/Admin/Language/id/Breadcrumb.php
index 371cdea5..d4623ff9 100644
--- a/modules/Admin/Language/id/Breadcrumb.php
+++ b/modules/Admin/Language/id/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'delete',
'remove' => 'remove',
'fediverse' => 'fediverse',
- 'block-lists' => 'block lists',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'pengguna',
'my-account' => 'akun saya',
'change-password' => 'ubah kata sandi',
diff --git a/modules/Admin/Language/it/Breadcrumb.php b/modules/Admin/Language/it/Breadcrumb.php
index d1922c5e..05a72562 100644
--- a/modules/Admin/Language/it/Breadcrumb.php
+++ b/modules/Admin/Language/it/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'elimina',
'remove' => 'remove',
'fediverse' => 'fediverso',
- 'block-lists' => 'elenco bloccati',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'utenti',
'my-account' => 'il mio profilo',
'change-password' => 'cambia la password',
diff --git a/modules/Admin/Language/ko/Breadcrumb.php b/modules/Admin/Language/ko/Breadcrumb.php
index b1742abf..558b90f7 100644
--- a/modules/Admin/Language/ko/Breadcrumb.php
+++ b/modules/Admin/Language/ko/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'delete',
'remove' => 'remove',
'fediverse' => 'fediverse',
- 'block-lists' => 'block lists',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'users',
'my-account' => 'my account',
'change-password' => 'change password',
diff --git a/modules/Admin/Language/nl/Breadcrumb.php b/modules/Admin/Language/nl/Breadcrumb.php
index f7821de4..a91d3bc5 100644
--- a/modules/Admin/Language/nl/Breadcrumb.php
+++ b/modules/Admin/Language/nl/Breadcrumb.php
@@ -14,7 +14,7 @@ return [
->gateway => 'Hoofdpagina',
'podcasts' => 'podcasts',
'episodes' => 'afleveringen',
- 'subscriptions' => 'subscriptions',
+ 'subscriptions' => 'abonnementen',
'contributors' => 'bijdragers',
'pages' => 'paginas',
'settings' => 'instellingen',
@@ -29,9 +29,10 @@ return [
'publish-date-edit' => 'edit publication date',
'unpublish' => 'publicatie ongedaan maken',
'delete' => 'verwijder',
- 'remove' => 'remove',
+ 'remove' => 'verwijder',
'fediverse' => 'fediverse',
- 'block-lists' => 'blokkeerlijst',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'gebruikers',
'my-account' => 'mijn account',
'change-password' => 'wachtwoord wijzigen',
diff --git a/modules/Admin/Language/nl/Countries.php b/modules/Admin/Language/nl/Countries.php
index 7652b137..12c41f95 100644
--- a/modules/Admin/Language/nl/Countries.php
+++ b/modules/Admin/Language/nl/Countries.php
@@ -94,12 +94,12 @@ return [
'GG' => 'Guernsey',
'GH' => 'Ghana',
'GI' => 'Gibraltar',
- 'GL' => 'Greenland',
+ 'GL' => 'Groenland',
'GM' => 'Gambia',
'GN' => 'Guinea',
'GP' => 'Guadeloupe',
'GQ' => 'Equatorial Guinea',
- 'GR' => 'Greece',
+ 'GR' => 'Griekenland',
'GS' => 'South Georgia and the South Sandwich Islands',
'GT' => 'Guatemala',
'GU' => 'Guam',
@@ -110,7 +110,7 @@ return [
'HN' => 'Honduras',
'HR' => 'Croatia',
'HT' => 'Haiti',
- 'HU' => 'Hungary',
+ 'HU' => 'Hongarije',
'ID' => 'Indonesia',
'IE' => 'Ireland',
'IL' => 'Israel',
diff --git a/modules/Admin/Language/nn-NO/Breadcrumb.php b/modules/Admin/Language/nn-NO/Breadcrumb.php
index c191408e..b7f9485f 100644
--- a/modules/Admin/Language/nn-NO/Breadcrumb.php
+++ b/modules/Admin/Language/nn-NO/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'slett',
'remove' => 'remove',
'fediverse' => 'fødiverset',
- 'block-lists' => 'blokkeringslister',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'brukarar',
'my-account' => 'kontoen min',
'change-password' => 'endre passord',
diff --git a/modules/Admin/Language/oc/Breadcrumb.php b/modules/Admin/Language/oc/Breadcrumb.php
index b1742abf..558b90f7 100644
--- a/modules/Admin/Language/oc/Breadcrumb.php
+++ b/modules/Admin/Language/oc/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'delete',
'remove' => 'remove',
'fediverse' => 'fediverse',
- 'block-lists' => 'block lists',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'users',
'my-account' => 'my account',
'change-password' => 'change password',
diff --git a/modules/Admin/Language/pl/Breadcrumb.php b/modules/Admin/Language/pl/Breadcrumb.php
index 3d906747..ba120541 100644
--- a/modules/Admin/Language/pl/Breadcrumb.php
+++ b/modules/Admin/Language/pl/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'usuń',
'remove' => 'remove',
'fediverse' => 'fediverse',
- 'block-lists' => 'listy blokowanych',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'użytkownicy',
'my-account' => 'moje konto',
'change-password' => 'zmień hasło',
diff --git a/modules/Admin/Language/pt-BR/Breadcrumb.php b/modules/Admin/Language/pt-BR/Breadcrumb.php
index 47646fdd..434876eb 100644
--- a/modules/Admin/Language/pt-BR/Breadcrumb.php
+++ b/modules/Admin/Language/pt-BR/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'excluir',
'remove' => 'remove',
'fediverse' => 'fediverso',
- 'block-lists' => 'listas de bloqueio',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'usuários',
'my-account' => 'minha conta',
'change-password' => 'alterar senha',
diff --git a/modules/Admin/Language/pt/Breadcrumb.php b/modules/Admin/Language/pt/Breadcrumb.php
index b1742abf..558b90f7 100644
--- a/modules/Admin/Language/pt/Breadcrumb.php
+++ b/modules/Admin/Language/pt/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'delete',
'remove' => 'remove',
'fediverse' => 'fediverse',
- 'block-lists' => 'block lists',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'users',
'my-account' => 'my account',
'change-password' => 'change password',
diff --git a/modules/Admin/Language/ro/AboutCastopod.php b/modules/Admin/Language/ro/AboutCastopod.php
new file mode 100644
index 00000000..3fb62aff
--- /dev/null
+++ b/modules/Admin/Language/ro/AboutCastopod.php
@@ -0,0 +1,22 @@
+ 'About Castopod',
+ 'host_name' => 'Host name',
+ 'version' => 'Castopod version',
+ 'php_version' => 'PHP version',
+ 'os' => 'Operating System',
+ 'languages' => 'Languages',
+ 'update_database' => 'Update database',
+ 'messages' => [
+ 'databaseUpdateSuccess' => 'Database is up to date!',
+ ],
+];
diff --git a/modules/Admin/Language/ro/Breadcrumb.php b/modules/Admin/Language/ro/Breadcrumb.php
new file mode 100644
index 00000000..558b90f7
--- /dev/null
+++ b/modules/Admin/Language/ro/Breadcrumb.php
@@ -0,0 +1,55 @@
+ 'breadcrumb',
+ config('Admin')
+ ->gateway => 'Home',
+ 'podcasts' => 'podcasts',
+ 'episodes' => 'episodes',
+ 'subscriptions' => 'subscriptions',
+ 'contributors' => 'contributors',
+ 'pages' => 'pages',
+ 'settings' => 'settings',
+ 'theme' => 'theme',
+ 'about' => 'about',
+ 'add' => 'add',
+ 'new' => 'new',
+ 'edit' => 'edit',
+ 'persons' => 'persons',
+ 'publish' => 'publish',
+ 'publish-edit' => 'edit publication',
+ 'publish-date-edit' => 'edit publication date',
+ 'unpublish' => 'unpublish',
+ 'delete' => 'delete',
+ 'remove' => 'remove',
+ 'fediverse' => 'fediverse',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
+ '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',
+ 'notifications' => 'notifications',
+ 'suspend' => 'suspend',
+];
diff --git a/modules/Admin/Language/ro/Charts.php b/modules/Admin/Language/ro/Charts.php
new file mode 100644
index 00000000..4b33530e
--- /dev/null
+++ b/modules/Admin/Language/ro/Charts.php
@@ -0,0 +1,40 @@
+ 'Episode downloads by service (for the past week)',
+ 'by_player_weekly' => 'Episode downloads by player (for the past week)',
+ 'by_player_yearly' => 'Episode downloads by player (for the past year)',
+ 'by_device_weekly' => 'Episode downloads by device (for the past week)',
+ 'by_os_weekly' => 'Episode downloads by O.S. (for the past week)',
+ 'podcast_by_region' => 'Episode downloads by region (for the past week)',
+ 'unique_daily_listeners' => 'Daily unique listeners',
+ 'unique_monthly_listeners' => 'Monthly unique listeners',
+ 'by_browser' => 'Web pages usage by browser (for the past week)',
+ 'podcast_by_day' => 'Episode daily downloads',
+ 'podcast_by_month' => 'Episode monthly downloads',
+ 'episode_by_day' => 'Episode daily downloads (first 60 days)',
+ 'episode_by_month' => 'Episode monthly downloads',
+ 'episodes_by_day' =>
+ '5 latest episodes downloads (during their first 60 days)',
+ 'by_country_weekly' => 'Episode downloads by country (for the past week)',
+ 'by_country_yearly' => 'Episode downloads by country (for the past year)',
+ 'by_domain_weekly' => 'Web pages visits by source (for the past week)',
+ 'by_domain_yearly' => 'Web pages visits by source (for the past year)',
+ 'by_entry_page' => 'Web pages visits by landing page (for the past week)',
+ 'podcast_bots' => 'Bots (crawlers)',
+ 'daily_listening_time' => 'Daily cumulative listening time',
+ 'monthly_listening_time' => 'Monthly cumulative listening time',
+ 'by_weekday' => 'By week day (for the past 60 days)',
+ 'by_hour' => 'By time of day (for the past 60 days)',
+ 'podcast_by_bandwidth' => 'Daily used bandwidth (in MB)',
+ 'total_storage_by_month' => 'Monthly storage (in MB)',
+ 'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)',
+];
diff --git a/modules/Admin/Language/ro/Common.php b/modules/Admin/Language/ro/Common.php
new file mode 100644
index 00000000..596c8bcd
--- /dev/null
+++ b/modules/Admin/Language/ro/Common.php
@@ -0,0 +1,51 @@
+ 'Yes',
+ 'no' => 'No',
+ 'cancel' => 'Cancel',
+ 'optional' => 'Optional',
+ 'more' => 'More',
+ 'no_data' => 'No data found!',
+ 'close' => 'Close',
+ 'edit' => 'Edit',
+ 'copy' => 'Copy',
+ 'copied' => 'Copied!',
+ 'home' => 'Home',
+ 'explicit' => 'Explicit',
+ 'powered_by' => 'Powered by {castopod}',
+ 'actions' => 'Actions',
+ 'pageInfo' => 'Page {currentPage} out of {pageCount}',
+ 'go_back' => 'Go back',
+ 'forms' => [
+ 'editor' => [
+ 'write' => 'Write',
+ 'preview' => 'Preview',
+ 'help' => 'Powered by markdown',
+ ],
+ 'multiSelect' => [
+ 'selectText' => 'Press to select',
+ 'loadingText' => 'Loading…',
+ 'noResultsText' => 'No results found',
+ 'noChoicesText' => 'No choices to choose from',
+ 'maxItemText' => 'Cannot add more items',
+ ],
+ 'upload_file' => 'Upload a file',
+ 'remote_url' => 'Remote URL',
+ ],
+ 'play_episode_button' => [
+ 'play' => 'Play',
+ 'playing' => 'Playing',
+ ],
+ 'size_limit' => 'Size limit: {0}.',
+ 'choose_interact' => 'Choose how to interact',
+ 'view' => 'View',
+];
diff --git a/modules/Admin/Language/ro/Countries.php b/modules/Admin/Language/ro/Countries.php
new file mode 100644
index 00000000..4cd5d9c8
--- /dev/null
+++ b/modules/Admin/Language/ro/Countries.php
@@ -0,0 +1,264 @@
+ 'Andorra',
+ 'AE' => 'United Arab Emirates',
+ 'AF' => 'Afghanistan',
+ 'AG' => 'Antigua and Barbuda',
+ 'AI' => 'Anguilla',
+ 'AL' => 'Albania',
+ 'AM' => 'Armenia',
+ 'AO' => 'Angola',
+ 'AQ' => 'Antarctica',
+ 'AR' => 'Argentina',
+ 'AS' => 'American Samoa',
+ 'AT' => 'Austria',
+ 'AU' => 'Australia',
+ 'AW' => 'Aruba',
+ 'AX' => 'Åland Islands',
+ 'AZ' => 'Azerbaijan',
+ 'BA' => 'Bosnia and Herzegovina',
+ 'BB' => 'Barbados',
+ 'BD' => 'Bangladesh',
+ 'BE' => 'Belgium',
+ 'BF' => 'Burkina Faso',
+ 'BG' => 'Bulgaria',
+ 'BH' => 'Bahrain',
+ 'BI' => 'Burundi',
+ 'BJ' => 'Benin',
+ 'BL' => 'Saint Barthélemy',
+ 'BM' => 'Bermuda',
+ 'BN' => 'Brunei Darussalam',
+ 'BO' => 'Bolivia, Plurinational State of',
+ 'BQ' => 'Bonaire, Sint Eustatius and Saba',
+ 'BR' => 'Brazil',
+ 'BS' => 'Bahamas',
+ 'BT' => 'Bhutan',
+ 'BV' => 'Bouvet Island',
+ 'BW' => 'Botswana',
+ 'BY' => 'Belarus',
+ 'BZ' => 'Belize',
+ 'CA' => 'Canada',
+ 'CC' => 'Cocos (Keeling) Islands',
+ 'CD' => 'Congo, the Democratic Republic of the',
+ 'CF' => 'Central African Republic',
+ 'CG' => 'Congo',
+ 'CH' => 'Switzerland',
+ 'CI' => "Côte d'Ivoire",
+ 'CK' => 'Cook Islands',
+ 'CL' => 'Chile',
+ 'CM' => 'Cameroon',
+ 'CN' => 'China',
+ 'CO' => 'Colombia',
+ 'CR' => 'Costa Rica',
+ 'CU' => 'Cuba',
+ 'CV' => 'Cape Verde',
+ 'CW' => 'Curaçao',
+ 'CX' => 'Christmas Island',
+ 'CY' => 'Cyprus',
+ 'CZ' => 'Czech Republic',
+ 'DE' => 'Germany',
+ 'DJ' => 'Djibouti',
+ 'DK' => 'Denmark',
+ 'DM' => 'Dominica',
+ 'DO' => 'Dominican Republic',
+ 'DZ' => 'Algeria',
+ 'EC' => 'Ecuador',
+ 'EE' => 'Estonia',
+ 'EG' => 'Egypt',
+ 'EH' => 'Western Sahara',
+ 'ER' => 'Eritrea',
+ 'ES' => 'Spain',
+ 'ET' => 'Ethiopia',
+ 'FI' => 'Finland',
+ 'FJ' => 'Fiji',
+ 'FK' => 'Falkland Islands (Malvinas)',
+ 'FM' => 'Micronesia, Federated States of',
+ 'FO' => 'Faroe Islands',
+ 'FR' => 'France',
+ 'GA' => 'Gabon',
+ 'GB' => 'United Kingdom',
+ 'GD' => 'Grenada',
+ 'GE' => 'Georgia',
+ 'GF' => 'French Guiana',
+ 'GG' => 'Guernsey',
+ 'GH' => 'Ghana',
+ 'GI' => 'Gibraltar',
+ 'GL' => 'Greenland',
+ 'GM' => 'Gambia',
+ 'GN' => 'Guinea',
+ 'GP' => 'Guadeloupe',
+ 'GQ' => 'Equatorial Guinea',
+ 'GR' => 'Greece',
+ 'GS' => 'South Georgia and the South Sandwich Islands',
+ 'GT' => 'Guatemala',
+ 'GU' => 'Guam',
+ 'GW' => 'Guinea-Bissau',
+ 'GY' => 'Guyana',
+ 'HK' => 'Hong Kong',
+ 'HM' => 'Heard Island and McDonald Islands',
+ 'HN' => 'Honduras',
+ 'HR' => 'Croatia',
+ 'HT' => 'Haiti',
+ 'HU' => 'Hungary',
+ 'ID' => 'Indonesia',
+ 'IE' => 'Ireland',
+ 'IL' => 'Israel',
+ 'IM' => 'Isle of Man',
+ 'IN' => 'India',
+ 'IO' => 'British Indian Ocean Territory',
+ 'IQ' => 'Iraq',
+ 'IR' => 'Iran, Islamic Republic of',
+ 'IS' => 'Iceland',
+ 'IT' => 'Italy',
+ 'JE' => 'Jersey',
+ 'JM' => 'Jamaica',
+ 'JO' => 'Jordan',
+ 'JP' => 'Japan',
+ 'KE' => 'Kenya',
+ 'KG' => 'Kyrgyzstan',
+ 'KH' => 'Cambodia',
+ 'KI' => 'Kiribati',
+ 'KM' => 'Comoros',
+ 'KN' => 'Saint Kitts and Nevis',
+ 'KP' => "Korea, Democratic People's Republic of",
+ 'KR' => 'Korea, Republic of',
+ 'KW' => 'Kuwait',
+ 'KY' => 'Cayman Islands',
+ 'KZ' => 'Kazakhstan',
+ 'LA' => "Lao People's Democratic Republic",
+ 'LB' => 'Lebanon',
+ 'LC' => 'Saint Lucia',
+ 'LI' => 'Liechtenstein',
+ 'LK' => 'Sri Lanka',
+ 'LR' => 'Liberia',
+ 'LS' => 'Lesotho',
+ 'LT' => 'Lithuania',
+ 'LU' => 'Luxembourg',
+ 'LV' => 'Latvia',
+ 'LY' => 'Libya',
+ 'MA' => 'Morocco',
+ 'MC' => 'Monaco',
+ 'MD' => 'Moldova, Republic of',
+ 'ME' => 'Montenegro',
+ 'MF' => 'Saint Martin (French part)',
+ 'MG' => 'Madagascar',
+ 'MH' => 'Marshall Islands',
+ 'MK' => 'Macedonia, the Former Yugoslav Republic of',
+ 'ML' => 'Mali',
+ 'MM' => 'Myanmar',
+ 'MN' => 'Mongolia',
+ 'MO' => 'Macao',
+ 'MP' => 'Northern Mariana Islands',
+ 'MQ' => 'Martinique',
+ 'MR' => 'Mauritania',
+ 'MS' => 'Montserrat',
+ 'MT' => 'Malta',
+ 'MU' => 'Mauritius',
+ 'MV' => 'Maldives',
+ 'MW' => 'Malawi',
+ 'MX' => 'Mexico',
+ 'MY' => 'Malaysia',
+ 'MZ' => 'Mozambique',
+ 'N/A' => 'Not Applicable (local IP…)',
+ 'NA' => 'Namibia',
+ 'NC' => 'New Caledonia',
+ 'NE' => 'Niger',
+ 'NF' => 'Norfolk Island',
+ 'NG' => 'Nigeria',
+ 'NI' => 'Nicaragua',
+ 'NL' => 'Netherlands',
+ 'NO' => 'Norway',
+ 'NP' => 'Nepal',
+ 'NR' => 'Nauru',
+ 'NU' => 'Niue',
+ 'NZ' => 'New Zealand',
+ 'OM' => 'Oman',
+ 'PA' => 'Panama',
+ 'PE' => 'Peru',
+ 'PF' => 'French Polynesia',
+ 'PG' => 'Papua New Guinea',
+ 'PH' => 'Philippines',
+ 'PK' => 'Pakistan',
+ 'PL' => 'Poland',
+ 'PM' => 'Saint Pierre and Miquelon',
+ 'PN' => 'Pitcairn',
+ 'PR' => 'Puerto Rico',
+ 'PS' => 'Palestine, State of',
+ 'PT' => 'Portugal',
+ 'PW' => 'Palau',
+ 'PY' => 'Paraguay',
+ 'QA' => 'Qatar',
+ 'RE' => 'Réunion',
+ 'RO' => 'Romania',
+ 'RS' => 'Serbia',
+ 'RU' => 'Russian Federation',
+ 'RW' => 'Rwanda',
+ 'SA' => 'Saudi Arabia',
+ 'SB' => 'Solomon Islands',
+ 'SC' => 'Seychelles',
+ 'SD' => 'Sudan',
+ 'SE' => 'Sweden',
+ 'SG' => 'Singapore',
+ 'SH' => 'Saint Helena, Ascension and Tristan da Cunha',
+ 'SI' => 'Slovenia',
+ 'SJ' => 'Svalbard and Jan Mayen',
+ 'SK' => 'Slovakia',
+ 'SL' => 'Sierra Leone',
+ 'SM' => 'San Marino',
+ 'SN' => 'Senegal',
+ 'SO' => 'Somalia',
+ 'SR' => 'Suriname',
+ 'SS' => 'South Sudan',
+ 'ST' => 'Sao Tome and Principe',
+ 'SV' => 'El Salvador',
+ 'SX' => 'Sint Maarten (Dutch part)',
+ 'SY' => 'Syrian Arab Republic',
+ 'SZ' => 'Swaziland',
+ 'TC' => 'Turks and Caicos Islands',
+ 'TD' => 'Chad',
+ 'TF' => 'French Southern Territories',
+ 'TG' => 'Togo',
+ 'TH' => 'Thailand',
+ 'TJ' => 'Tajikistan',
+ 'TK' => 'Tokelau',
+ 'TL' => 'Timor-Leste',
+ 'TM' => 'Turkmenistan',
+ 'TN' => 'Tunisia',
+ 'TO' => 'Tonga',
+ 'TR' => 'Turkey',
+ 'TT' => 'Trinidad and Tobago',
+ 'TV' => 'Tuvalu',
+ 'TW' => 'Taiwan, Province of China',
+ 'TZ' => 'Tanzania, United Republic of',
+ 'UA' => 'Ukraine',
+ 'UG' => 'Uganda',
+ 'UM' => 'United States Minor Outlying Islands',
+ 'US' => 'United States',
+ 'UY' => 'Uruguay',
+ 'UZ' => 'Uzbekistan',
+ 'VA' => 'Holy See (Vatican City State)',
+ 'VC' => 'Saint Vincent and the Grenadines',
+ 'VE' => 'Venezuela, Bolivarian Republic of',
+ 'VG' => 'Virgin Islands, British',
+ 'VI' => 'Virgin Islands, U.S.',
+ 'VN' => 'Viet Nam',
+ 'VU' => 'Vanuatu',
+ 'WF' => 'Wallis and Futuna',
+ 'WS' => 'Samoa',
+ 'YE' => 'Yemen',
+ 'YT' => 'Mayotte',
+ 'ZA' => 'South Africa',
+ 'ZM' => 'Zambia',
+ 'ZW' => 'Zimbabwe',
+];
diff --git a/modules/Admin/Language/ro/Dashboard.php b/modules/Admin/Language/ro/Dashboard.php
new file mode 100644
index 00000000..881073fd
--- /dev/null
+++ b/modules/Admin/Language/ro/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/ro/Episode.php b/modules/Admin/Language/ro/Episode.php
new file mode 100644
index 00000000..91313a7c
--- /dev/null
+++ b/modules/Admin/Language/ro/Episode.php
@@ -0,0 +1,213 @@
+ 'Season {seasonNumber}',
+ 'season_abbr' => 'S{seasonNumber}',
+ 'number' => 'Episode {episodeNumber}',
+ 'number_abbr' => 'Ep. {episodeNumber}',
+ 'season_episode' => 'Season {seasonNumber} episode {episodeNumber}',
+ 'season_episode_abbr' => 'S{seasonNumber}E{episodeNumber}',
+ 'number_of_comments' => '{numberOfComments, plural,
+ one {# comment}
+ other {# comments}
+ }',
+ 'all_podcast_episodes' => 'All podcast episodes',
+ 'back_to_podcast' => 'Go back to podcast',
+ 'edit' => 'Edit',
+ 'publish' => 'Publish',
+ 'publish_edit' => 'Edit publication',
+ 'publish_date_edit' => 'Edit publication date',
+ 'unpublish' => 'Unpublish',
+ 'publish_error' => 'Episode is already published.',
+ 'publish_edit_error' => 'Episode is already published.',
+ 'publish_cancel_error' => 'Episode is already published.',
+ 'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.',
+ 'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.',
+ 'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!',
+ 'unpublish_error' => 'Episode is not published.',
+ 'delete' => 'Delete',
+ 'go_to_page' => 'Go to page',
+ 'create' => 'Add an episode',
+ 'publication_status' => [
+ 'published' => 'Published',
+ 'with_podcast' => 'Published',
+ 'scheduled' => 'Scheduled',
+ 'not_published' => 'Not published',
+ ],
+ 'with_podcast_hint' => 'To be published at the same time as the podcast',
+ 'list' => [
+ 'search' => [
+ 'placeholder' => 'Search for an episode',
+ 'clear' => 'Clear search',
+ 'submit' => 'Search',
+ ],
+ 'number_of_episodes' => '{numberOfEpisodes, plural,
+ one {# episode}
+ other {# episodes}
+ }',
+ 'episode' => 'Episode',
+ 'visibility' => 'Visibility',
+ 'comments' => 'Comments',
+ 'actions' => 'Actions',
+ ],
+ 'messages' => [
+ 'createSuccess' => 'Episode has been successfully created!',
+ 'editSuccess' => 'Episode has been successfully updated!',
+ '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.}
+ }',
+ '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}
+ }.',
+ 'deleteFileError' => 'Failed to delete {type, select,
+ transcript {transcript}
+ chapters {chapters}
+ image {cover}
+ audio {audio}
+ other {media}
+ } file {file_path}. You may manually remove it from your disk.',
+ 'sameSlugError' => 'An episode with the chosen slug already exists.',
+ ],
+ 'form' => [
+ 'file_size_error' =>
+ 'Your file size is too big! Max size is {0}. Increase the `memory_limit`, `upload_max_filesize` and `post_max_size` values in your php configuration file then restart your web server to upload your file.',
+ 'audio_file' => 'Audio file',
+ 'audio_file_hint' => 'Choose an .mp3 or .m4a audio file.',
+ 'info_section_title' => 'Episode info',
+ 'cover' => 'Episode cover',
+ 'cover_hint' =>
+ 'If you do not set a cover, the podcast cover will be used instead.',
+ 'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.',
+ 'title' => 'Title',
+ 'title_hint' =>
+ 'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.',
+ 'permalink' => 'Permalink',
+ 'season_number' => 'Season',
+ 'episode_number' => 'Episode',
+ 'type' => [
+ 'label' => 'Type',
+ 'full' => 'Full',
+ 'full_hint' => 'Complete content (the episode)',
+ 'trailer' => 'Trailer',
+ 'trailer_hint' => 'Short, promotional piece of content that represents a preview of the current show',
+ 'bonus' => 'Bonus',
+ 'bonus_hint' => 'Extra content for the show (for example, behind the scenes info or interviews with the cast) or cross-promotional content for another show',
+ ],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
+ 'parental_advisory' => [
+ 'label' => 'Parental advisory',
+ 'hint' => 'Does the episode contain explicit content?',
+ 'undefined' => 'undefined',
+ 'clean' => 'Clean',
+ 'explicit' => 'Explicit',
+ ],
+ 'show_notes_section_title' => 'Show notes',
+ 'show_notes_section_subtitle' =>
+ 'Up to 4000 characters, be clear and concise. Show notes help potential listeners in finding the episode.',
+ 'description' => 'Description',
+ 'description_footer' => 'Description footer',
+ 'description_footer_hint' =>
+ 'This text is added at the end of each episode description, it is a good place to input your social links for example.',
+ 'additional_files_section_title' => 'Additional files',
+ 'additional_files_section_subtitle' =>
+ 'These files may be used by other platforms to provide better experience to your audience. See the {podcastNamespaceLink} for more information.',
+ 'location_section_title' => 'Location',
+ 'location_section_subtitle' => 'What place is this episode about?',
+ 'location_name' => 'Location name or address',
+ 'location_name_hint' => 'This can be a real or fictional location',
+ 'transcript' => 'Transcript (subtitles / closed captions)',
+ 'transcript_hint' => 'Only .srt are allowed.',
+ 'transcript_download' => 'Download transcript',
+ 'transcript_file' => 'Transcript file (.srt)',
+ 'transcript_remote_url' => 'Remote url for transcript',
+ 'transcript_file_delete' => 'Delete transcript file',
+ 'chapters' => 'Chapters',
+ 'chapters_hint' => 'File must be in JSON Chapters format.',
+ 'chapters_download' => 'Download chapters',
+ 'chapters_file' => 'Chapters file',
+ 'chapters_remote_url' => 'Remote url for chapters file',
+ 'chapters_file_delete' => 'Delete chapters file',
+ 'advanced_section_title' => 'Advanced Parameters',
+ 'advanced_section_subtitle' =>
+ 'If you need RSS tags that Castopod does not handle, set them here.',
+ 'custom_rss' => 'Custom RSS tags for the episode',
+ 'custom_rss_hint' => 'This will be injected within the ❬item❭ tag.',
+ 'block' => 'Episode should be hidden from 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',
+ ],
+ 'publish_date_edit_form' => [
+ 'new_publication_date' => 'New publication date',
+ 'new_publication_date_hint' => 'Must be set to a past date.',
+ 'submit' => 'Edit publication date',
+ ],
+ '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/ro/EpisodeNavigation.php b/modules/Admin/Language/ro/EpisodeNavigation.php
new file mode 100644
index 00000000..1406e301
--- /dev/null
+++ b/modules/Admin/Language/ro/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/ro/Fediverse.php b/modules/Admin/Language/ro/Fediverse.php
new file mode 100644
index 00000000..0e4ca66d
--- /dev/null
+++ b/modules/Admin/Language/ro/Fediverse.php
@@ -0,0 +1,32 @@
+ [
+ 'actorNotFound' => 'The account could not be found!',
+ 'blockActorSuccess' => '{actor} has been blocked!',
+ 'unblockActorSuccess' => 'Actor has been unblocked!',
+ 'blockDomainSuccess' => '{domain} has been blocked!',
+ 'unblockDomainSuccess' => '{domain} has been unblocked!',
+ ],
+ 'blocked_actors' => 'Blocked accounts',
+ 'blocked_domains' => 'Blocked domains',
+ 'block_lists_form' => [
+ 'handle' => 'Account handle',
+ 'handle_hint' => 'Input @username@domain account.',
+ 'domain' => 'Domain name',
+ 'submit' => 'Block!',
+ ],
+ 'list' => [
+ 'actor' => 'Account',
+ 'domain' => 'Domain name',
+ 'unblock' => 'Unblock',
+ ],
+];
diff --git a/modules/Admin/Language/ro/Home.php b/modules/Admin/Language/ro/Home.php
new file mode 100644
index 00000000..3ff4c04d
--- /dev/null
+++ b/modules/Admin/Language/ro/Home.php
@@ -0,0 +1,14 @@
+ 'All podcasts',
+ 'no_podcast' => 'No podcast found',
+];
diff --git a/modules/Admin/Language/ro/Install.php b/modules/Admin/Language/ro/Install.php
new file mode 100644
index 00000000..36e373a2
--- /dev/null
+++ b/modules/Admin/Language/ro/Install.php
@@ -0,0 +1,61 @@
+ 'Manual configuration',
+ 'manual_config_subtitle' =>
+ 'Create a `.env` file with your settings and refresh the page to continue installation.',
+ 'form' => [
+ 'instance_config' => 'Instance configuration',
+ 'hostname' => 'Hostname',
+ 'media_base_url' => 'Media base URL',
+ 'media_base_url_hint' =>
+ 'If you use a CDN and/or an external analytics service, you may set them here.',
+ 'admin_gateway' => 'Admin gateway',
+ 'admin_gateway_hint' =>
+ 'The route to access the admin area (eg. https://example.com/cp-admin). It is set by default as cp-admin, we recommend you change it for security reasons.',
+ 'auth_gateway' => 'Auth gateway',
+ 'auth_gateway_hint' =>
+ 'The route to access the authentication pages (eg. https://example.com/cp-auth). It is set by default as cp-auth, we recommend you change it for security reasons.',
+ 'database_config' => 'Database configuration',
+ 'database_config_hint' =>
+ 'Castopod needs to connect to your MySQL (or MariaDB) database. If you do not have these required info, please contact your server administrator.',
+ 'db_hostname' => 'Database hostname',
+ 'db_name' => 'Database name',
+ 'db_username' => 'Database username',
+ 'db_password' => 'Database password',
+ 'db_prefix' => 'Database prefix',
+ 'db_prefix_hint' =>
+ "The prefix of the Castopod table names, leave as is if you don't know what it means.",
+ 'cache_config' => 'Cache configuration',
+ 'cache_config_hint' =>
+ 'Choose your preferred cache handler. Leave it as the default value if you have no clue what it means.',
+ 'cache_handler' => 'Cache handler',
+ 'cacheHandlerOptions' => [
+ 'file' => 'File',
+ 'redis' => 'Redis',
+ 'predis' => 'Predis',
+ ],
+ 'next' => 'Next',
+ 'submit' => 'Finish install',
+ 'create_superadmin' => 'Create your superadmin account',
+ 'email' => 'Email',
+ 'username' => 'Username',
+ 'password' => 'Password',
+ ],
+ 'messages' => [
+ 'createSuperAdminSuccess' =>
+ 'Your superadmin account has been created successfully. Login to start podcasting!',
+ 'databaseConnectError' =>
+ 'Castopod could not connect to your database. Edit your database configuration and try again.',
+ 'writeError' =>
+ "Couldn't create/write the `.env` file. You must create it manually by following the `.env.example` file template in the Castopod package.",
+ ],
+];
diff --git a/modules/Admin/Language/ro/Navigation.php b/modules/Admin/Language/ro/Navigation.php
new file mode 100644
index 00000000..610f1434
--- /dev/null
+++ b/modules/Admin/Language/ro/Navigation.php
@@ -0,0 +1,42 @@
+ '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',
+ 'about' => 'About',
+ 'account' => [
+ 'my-account' => 'My account',
+ 'change-password' => 'Change password',
+ 'logout' => 'Logout',
+ ],
+];
diff --git a/modules/Admin/Language/ro/Notifications.php b/modules/Admin/Language/ro/Notifications.php
new file mode 100644
index 00000000..2b139d51
--- /dev/null
+++ b/modules/Admin/Language/ro/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 you',
+ 'no_notifications' => 'No notifications',
+ 'mark_all_as_read' => 'Mark all as read',
+];
diff --git a/modules/Admin/Language/ro/Page.php b/modules/Admin/Language/ro/Page.php
new file mode 100644
index 00000000..b6f49de5
--- /dev/null
+++ b/modules/Admin/Language/ro/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/ro/Pager.php b/modules/Admin/Language/ro/Pager.php
new file mode 100644
index 00000000..e25ee638
--- /dev/null
+++ b/modules/Admin/Language/ro/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/ro/Person.php b/modules/Admin/Language/ro/Person.php
new file mode 100644
index 00000000..a652be9f
--- /dev/null
+++ b/modules/Admin/Language/ro/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/ro/Platforms.php b/modules/Admin/Language/ro/Platforms.php
new file mode 100644
index 00000000..ab17d599
--- /dev/null
+++ b/modules/Admin/Language/ro/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/ro/Podcast.php b/modules/Admin/Language/ro/Podcast.php
new file mode 100644
index 00000000..426b763b
--- /dev/null
+++ b/modules/Admin/Language/ro/Podcast.php
@@ -0,0 +1,310 @@
+ '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' => 'Failed to delete podcast episode {episode_slug} {type, select,
+ transcript {transcript}
+ chapters {chapters}
+ image {cover}
+ audio {audio}
+ other {media}
+ }.',
+ 'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.',
+ 'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural,
+ one {# episode was}
+ other {# episodes were}
+ } added to the podcast!',
+ 'podcastFeedUpToDate' => 'Podcast is already up to date.',
+ 'podcastNotImported' => 'Podcast could not be updated as it was not imported.',
+ '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.',
+ 'premium' => 'Premium',
+ 'premium_by_default' => 'Episodes must be set as premium by default',
+ 'premium_by_default_hint' => 'Podcast episodes will be marked as premium by default. You can still choose to set some episodes, trailers or bonuses as public.',
+ '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/ro/PodcastImport.php b/modules/Admin/Language/ro/PodcastImport.php
new file mode 100644
index 00000000..7c3ef67d
--- /dev/null
+++ b/modules/Admin/Language/ro/PodcastImport.php
@@ -0,0 +1,37 @@
+
+ 'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.',
+ 'old_podcast_section_title' => 'The podcast to import',
+ 'old_podcast_section_subtitle' =>
+ 'Make sure you own the rights for this podcast before importing it. Copying and broadcasting a podcast without the proper rights is piracy and is liable to prosecution.',
+ 'imported_feed_url' => 'Feed URL',
+ 'imported_feed_url_hint' => 'The feed must be in xml or rss format.',
+ 'new_podcast_section_title' => 'The new podcast',
+ 'advanced_params_section_title' => 'Advanced parameters',
+ 'advanced_params_section_subtitle' =>
+ 'Keep the default values if you have no idea of what the fields are for.',
+ 'slug_field' => 'Field to be used to calculate episode slug',
+ 'description_field' =>
+ 'Source field used for episode description / show notes',
+ 'force_renumber' => 'Force episodes renumbering',
+ 'force_renumber_hint' =>
+ 'Use this if your podcast does not have episode numbers but wish to set them during import.',
+ 'season_number' => 'Season number',
+ 'season_number_hint' =>
+ 'Use this if your podcast does not have a season number but wish to set one during import. Leave blank otherwise.',
+ 'max_episodes' => 'Maximum number of episodes to import',
+ 'max_episodes_hint' => 'Leave blank to import all episodes',
+ 'lock_import' =>
+ 'This feed is protected. You cannot import it. If you are the owner, unprotect it on the origin platform.',
+ 'submit' => 'Import podcast',
+];
diff --git a/modules/Admin/Language/ro/PodcastNavigation.php b/modules/Admin/Language/ro/PodcastNavigation.php
new file mode 100644
index 00000000..b4d7ddc0
--- /dev/null
+++ b/modules/Admin/Language/ro/PodcastNavigation.php
@@ -0,0 +1,38 @@
+ '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',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
+ '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/ro/Settings.php b/modules/Admin/Language/ro/Settings.php
new file mode 100644
index 00000000..4a70dcba
--- /dev/null
+++ b/modules/Admin/Language/ro/Settings.php
@@ -0,0 +1,58 @@
+ '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, …)',
+ 'rename_episodes_files' => 'Rename episode audio files',
+ 'rename_episodes_files_hint' => 'This option will rename all episodes audio files to a random string of characters. Use this if one of your private episodes link was leaked as this will effectively hide it.',
+ '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/ro/Soundbite.php b/modules/Admin/Language/ro/Soundbite.php
new file mode 100644
index 00000000..a3f828fe
--- /dev/null
+++ b/modules/Admin/Language/ro/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/ro/Validation.php b/modules/Admin/Language/ro/Validation.php
new file mode 100644
index 00000000..3bc78cfe
--- /dev/null
+++ b/modules/Admin/Language/ro/Validation.php
@@ -0,0 +1,16 @@
+
+ '{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.',
+];
diff --git a/modules/Admin/Language/ro/VideoClip.php b/modules/Admin/Language/ro/VideoClip.php
new file mode 100644
index 00000000..638de697
--- /dev/null
+++ b/modules/Admin/Language/ro/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/ru/Breadcrumb.php b/modules/Admin/Language/ru/Breadcrumb.php
index 72874de6..8383e4c7 100644
--- a/modules/Admin/Language/ru/Breadcrumb.php
+++ b/modules/Admin/Language/ru/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'удалить',
'remove' => 'remove',
'fediverse' => 'Федивёрс',
- 'block-lists' => 'список блокируемых',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'пользователи',
'my-account' => 'мой аккаунт',
'change-password' => 'сменить пароль',
diff --git a/modules/Admin/Language/sk/Breadcrumb.php b/modules/Admin/Language/sk/Breadcrumb.php
index e9daf15e..64473454 100644
--- a/modules/Admin/Language/sk/Breadcrumb.php
+++ b/modules/Admin/Language/sk/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'vymazať',
'remove' => 'odstrániť',
'fediverse' => 'fediverse',
- 'block-lists' => 'zoznamy blokovaných',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'používatelia',
'my-account' => 'môj účet',
'change-password' => 'zmeniť heslo',
diff --git a/modules/Admin/Language/sv/Breadcrumb.php b/modules/Admin/Language/sv/Breadcrumb.php
index 84778eaa..7cc65c0b 100644
--- a/modules/Admin/Language/sv/Breadcrumb.php
+++ b/modules/Admin/Language/sv/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => 'radera',
'remove' => 'ta bort',
'fediverse' => 'fediverse',
- 'block-lists' => 'block listor',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => 'användare',
'my-account' => 'mitt konto',
'change-password' => 'ändra lösenord',
diff --git a/modules/Admin/Language/zh-Hans/Breadcrumb.php b/modules/Admin/Language/zh-Hans/Breadcrumb.php
index 3bf06845..b360c8b8 100644
--- a/modules/Admin/Language/zh-Hans/Breadcrumb.php
+++ b/modules/Admin/Language/zh-Hans/Breadcrumb.php
@@ -31,7 +31,8 @@ return [
'delete' => '删除',
'remove' => '移除',
'fediverse' => '联邦宇宙',
- 'block-lists' => '封禁列表',
+ 'blocked-actors' => 'blocked actors',
+ 'blocked-domains' => 'blocked domains',
'users' => '用户',
'my-account' => '我的帐户',
'change-password' => '修改密码',
diff --git a/modules/Auth/Language/el/Auth.php b/modules/Auth/Language/el/Auth.php
index a47932e3..9dc498fa 100644
--- a/modules/Auth/Language/el/Auth.php
+++ b/modules/Auth/Language/el/Auth.php
@@ -11,53 +11,53 @@ declare(strict_types=1);
return [
'instance_groups' => [
'owner' => [
- 'title' => 'Instance Owner',
- 'description' => 'The Castopod owner.',
+ 'title' => 'Ιδιοκτήτης Διακομιστή',
+ 'description' => 'Ο ιδιοκτήτης του Castopod.',
],
'superadmin' => [
- 'title' => 'Super admin',
- 'description' => 'Has complete control over Castopod.',
+ 'title' => 'Υπερδιαχειριστής',
+ 'description' => 'Έχει πλήρη έλεγχο του Castopod.',
],
'manager' => [
- 'title' => 'Manager',
- 'description' => 'Manages Castopod\'s content.',
+ 'title' => 'Διαχειριστής',
+ 'description' => 'Διαχείριση περιεχομένου του Castopod.',
],
'podcaster' => [
'title' => 'Podcaster',
- 'description' => 'General users of Castopod.',
+ 'description' => 'Γενικοί χρήστες του Castopod.',
],
],
'instance_permissions' => [
- 'admin.access' => 'Can access the Castopod admin area.',
- 'admin.settings' => 'Can access the Castopod settings.',
- 'users.manage' => 'Can manage Castopod users.',
- 'persons.manage' => 'Can manage persons.',
- 'pages.manage' => 'Can manage pages.',
- 'podcasts.view' => 'Can view all podcasts.',
- 'podcasts.create' => 'Can create new podcasts.',
- 'podcasts.import' => 'Can import podcasts.',
- 'fediverse.manage-blocks' => 'Can block fediverse actors/domains from interacting with Castopod.',
+ 'admin.access' => 'Μπορεί να έχει πρόσβαση στην περιοχή διαχείρισης Castopod.',
+ 'admin.settings' => 'Μπορεί να έχει πρόσβαση στις ρυθμίσεις Castopod.',
+ 'users.manage' => 'Μπορεί να διαχειριστεί τους χρήστες Castopod.',
+ 'persons.manage' => 'Μπορεί να διαχειριστεί τα άτομα.',
+ 'pages.manage' => 'Μπορεί να διαχειριστεί τις σελίδες.',
+ 'podcasts.view' => 'Μπορεί να δει όλα τα podcasts.',
+ 'podcasts.create' => 'Μπορεί να δημιουργήσει νέα podcasts.',
+ 'podcasts.import' => 'Μπορεί να εισάγει podcasts.',
+ 'fediverse.manage-blocks' => 'Μπορεί να εμποδίσει τους ψευτογενείς ηθοποιούς/τομείς να αλληλεπιδρούν με το Castopod.',
],
'podcast_groups' => [
'owner' => [
- 'title' => 'Podcast Owner',
- 'description' => 'The podcast owner.',
+ 'title' => 'Ιδιοκτήτης Podcast',
+ 'description' => 'Ο ιδιοκτήτης του podcast.',
],
'admin' => [
- 'title' => 'Admin',
- 'description' => 'Has complete control of podcast #{id}.',
+ 'title' => 'Διαχειριστής',
+ 'description' => 'Έχει πλήρη έλεγχο του podcast #{id}.',
],
'editor' => [
- 'title' => 'Editor',
- 'description' => 'Manages content and publications of podcast #{id}.',
+ 'title' => 'Εκδότης',
+ 'description' => 'Διαχειρίζεται περιεχόμενο και δημοσιεύσεις του podcast #{id}.',
],
'author' => [
- 'title' => 'Author',
+ 'title' => 'Συντάκτης',
'description' => 'Manages content of podcast #{id} but cannot publish them.',
],
'guest' => [
- 'title' => 'Guest',
- 'description' => 'General contributor of the podcast #{id}.',
+ 'title' => 'Επισκέπτης',
+ 'description' => 'Γενικός συντελεστής του podcast #{id}.',
],
],
'podcast_permissions' => [
diff --git a/modules/Auth/Language/el/User.php b/modules/Auth/Language/el/User.php
index e7908f5b..05bc0e1d 100644
--- a/modules/Auth/Language/el/User.php
+++ b/modules/Auth/Language/el/User.php
@@ -9,43 +9,43 @@ declare(strict_types=1);
*/
return [
- 'edit_role' => "Edit {username}'s role",
- 'ban' => 'Ban',
- 'unban' => 'Unban',
- 'delete' => 'Delete',
- 'create' => 'New user',
- 'view' => "{username}'s info",
- 'all_users' => 'All users',
+ 'edit_role' => "Επεξεργασία ρόλων {username}",
+ 'ban' => 'Αποκλεισμός',
+ 'unban' => 'Κατάργηση αποκλεισμού',
+ 'delete' => 'Διαγραφή',
+ 'create' => 'Νέος χρήστης',
+ 'view' => "πληροφορίες του {username}",
+ 'all_users' => 'Όλοι οι χρήστες',
'list' => [
- 'user' => 'User',
- 'role' => 'Role',
- 'banned' => 'Banned?',
+ 'user' => 'Χρήστης',
+ 'role' => 'Ρόλος',
+ 'banned' => 'Αποκλεισμένος;',
],
'form' => [
- 'email' => 'Email',
- 'username' => 'Username',
- 'password' => 'Password',
- 'new_password' => 'New Password',
- 'role' => 'Role',
- 'roles' => 'Roles',
- 'permissions' => 'Permissions',
- 'submit_create' => 'Create user',
- 'submit_edit' => 'Save',
- 'submit_password_change' => 'Change!',
+ 'email' => 'Ηλεκτρονικό ταχυδρομείο',
+ 'username' => 'Όνομα Χρήστη',
+ 'password' => 'Κωδικόs πρόσβασης',
+ 'new_password' => 'Νέος Κωδικός Πρόσβασης',
+ 'role' => 'Ρόλος',
+ 'roles' => 'Ρόλοι',
+ 'permissions' => 'Δικαιώματα',
+ 'submit_create' => 'Δημιουργία χρήστη',
+ 'submit_edit' => 'Αποθήκευση',
+ 'submit_password_change' => 'Αλλαγή!',
],
'delete_form' => [
- 'title' => 'Delete {user}',
+ 'title' => 'Διαγραφή {user}',
'disclaimer' =>
- "You are about to delete {user} permanently. They will not be able to access the admin area anymore.",
- 'understand' => 'I understand, I want to delete {user} permanently',
- 'submit' => 'Delete',
+ "Πρόκειται να διαγράψετε το {user} οριστικά. Δεν θα μπορούν πλέον να έχουν πρόσβαση στην περιοχή διαχείρισης.",
+ 'understand' => 'Καταλαβαίνω, θέλω να διαγράψω {user} μόνιμα',
+ 'submit' => 'Διαγραφή',
],
'messages' => [
'createSuccess' =>
'User created successfully! {username} will be prompted with a password reset upon first authentication.',
'roleEditSuccess' =>
- "{username}'s roles have been successfully updated.",
- 'banSuccess' => '{username} has been banned.',
+ "οι ρόλοι του {username} έχουν ενημερωθεί με επιτυχία.",
+ 'banSuccess' => 'Ο/Η {username} έχει αποκλειστεί.',
'unbanSuccess' => '{username} has been unbanned.',
'editOwnerError' =>
'{username} is the instance owner, you cannot edit its roles.',
diff --git a/modules/Auth/Language/es/Auth.php b/modules/Auth/Language/es/Auth.php
index a47932e3..d1adf102 100644
--- a/modules/Auth/Language/es/Auth.php
+++ b/modules/Auth/Language/es/Auth.php
@@ -11,84 +11,84 @@ declare(strict_types=1);
return [
'instance_groups' => [
'owner' => [
- 'title' => 'Instance Owner',
- 'description' => 'The Castopod owner.',
+ 'title' => 'Propietario de Instancia',
+ 'description' => 'Propietario de Castopod.',
],
'superadmin' => [
- 'title' => 'Super admin',
- 'description' => 'Has complete control over Castopod.',
+ 'title' => 'Super administrador',
+ 'description' => 'Tiene control completo sobre Castopod.',
],
'manager' => [
- 'title' => 'Manager',
- 'description' => 'Manages Castopod\'s content.',
+ 'title' => 'Administrador',
+ 'description' => 'Administrar contenido de Castopod.',
],
'podcaster' => [
'title' => 'Podcaster',
- 'description' => 'General users of Castopod.',
+ 'description' => 'Usuarios generales de Castopod.',
],
],
'instance_permissions' => [
- 'admin.access' => 'Can access the Castopod admin area.',
- 'admin.settings' => 'Can access the Castopod settings.',
- 'users.manage' => 'Can manage Castopod users.',
- 'persons.manage' => 'Can manage persons.',
- 'pages.manage' => 'Can manage pages.',
- 'podcasts.view' => 'Can view all podcasts.',
- 'podcasts.create' => 'Can create new podcasts.',
- 'podcasts.import' => 'Can import podcasts.',
- 'fediverse.manage-blocks' => 'Can block fediverse actors/domains from interacting with Castopod.',
+ 'admin.access' => 'Puedes acceder al área de administración de Castopod.',
+ 'admin.settings' => 'Puede acceder a la configuración de Castopod.',
+ 'users.manage' => 'Puede administrar usuarios de Castopod.',
+ 'persons.manage' => 'Puede administrar personas.',
+ 'pages.manage' => 'Puede administrar páginas.',
+ 'podcasts.view' => 'Puede ver todos los podcasts.',
+ 'podcasts.create' => 'Puede crear nuevos podcasts.',
+ 'podcasts.import' => 'Puede importar podcasts.',
+ 'fediverse.manage-blocks' => 'Puedes bloquear la interacción de actores/dominios del fediverso con Castopod.',
],
'podcast_groups' => [
'owner' => [
- 'title' => 'Podcast Owner',
- 'description' => 'The podcast owner.',
+ 'title' => 'Propietario de Podcast',
+ 'description' => 'El propietario del podcast.',
],
'admin' => [
- 'title' => 'Admin',
- 'description' => 'Has complete control of podcast #{id}.',
+ 'title' => 'Administrador',
+ 'description' => 'Tiene el control completo del podcast #{id}.',
],
'editor' => [
'title' => 'Editor',
- 'description' => 'Manages content and publications of podcast #{id}.',
+ 'description' => 'Gestiona el contenido y las publicaciones del podcast #{id}.',
],
'author' => [
- 'title' => 'Author',
- 'description' => 'Manages content of podcast #{id} but cannot publish them.',
+ 'title' => 'Autor',
+ 'description' => 'Gestiona el contenido del podcast #{id} pero no puede publicarlo.',
],
'guest' => [
- 'title' => 'Guest',
- 'description' => 'General contributor of the podcast #{id}.',
+ 'title' => 'Invitado',
+ 'description' => 'Colaborador general del podcast #{id}.',
],
],
'podcast_permissions' => [
- 'view' => 'Can view dashboard and analytics of podcast #{id}.',
- 'edit' => 'Can edit podcast #{id}.',
- 'delete' => 'Can delete podcast #{id}.',
- 'manage-import' => 'Can synchronize imported podcast #{id}.',
- 'manage-persons' => 'Can manage subscriptions of podcast #{id}.',
- 'manage-subscriptions' => 'Can manage subscriptions of podcast #{id}.',
- 'manage-contributors' => 'Can manage contributors of podcast #{id}.',
- 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.',
- 'manage-publications' => 'Can publish podcast #{id}.',
- 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.',
- 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.',
- 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.',
- 'episodes.create' => 'Can create episodes for podcast #{id}.',
- 'episodes.edit' => 'Can edit episodes of podcast #{id}.',
- 'episodes.delete' => 'Can delete episodes of podcast #{id}.',
- 'episodes.manage-persons' => 'Can manage episode persons of podcast #{id}.',
- 'episodes.manage-clips' => 'Can manage video clips or soundbites of podcast #{id}.',
- 'episodes.manage-publications' => 'Can publish/unpublish episodes and posts of podcast #{id}.',
- 'episodes.manage-comments' => 'Can create/remove episode comments of podcast #{id}.',
+ 'view' => 'Puede ver el panel de control y analíticas del episodio #{id}.',
+ 'edit' => 'Puede editar el podcast #{id}.',
+ 'delete' => 'Puede borrar el podcast #{id}.',
+ 'manage-import' => 'Puede sincronizar el podcast importado #{id}.',
+ 'manage-persons' => 'Puede administrar las suscripciones del podcast #{id}.',
+ 'manage-subscriptions' => 'Puede administrar las suscripciones del podcast #{id}.',
+ 'manage-contributors' => 'Puede administrar colaboradores del podcast #{id}.',
+ 'manage-platforms' => 'Puede establecer/eliminar enlaces a la plataforma del podcast #{id}.',
+ 'manage-publications' => 'Puede publicar el podcast #{id}.',
+ 'manage-notifications' => 'Puede ver y marcar las notificaciones como leídas para podcast #{id}.',
+ 'interact-as' => 'Puede interactuar como el podcast #{id} para marcar como favarito, compartir o responder a las publicaciones.',
+ 'episodes.view' => 'Puede ver el panel de control y analíticas del episodio #{id}.',
+ 'episodes.create' => 'Puede crear episodios para el podcast #{id}.',
+ 'episodes.edit' => 'Puede editar episodios del podcast #{id}.',
+ 'episodes.delete' => 'Puede borrar episodios del podcast #{id}.',
+ 'episodes.manage-persons' => 'Puede administrar las personas de los episodios del podcast #{id}.',
+ 'episodes.manage-clips' => 'Puedes administrar video clips o sonidos del podcast #{id}.',
+ 'episodes.manage-publications' => 'Puede publicar/despublicar episodios y publicaciones del podcast #{id}.',
+ 'episodes.manage-comments' => 'Puede crear/eliminar los comentarios de episodio del podcast #{id}.',
],
// missing keys
- 'code' => 'Your 6-digit code',
+ 'code' => 'Introduce un código de 6 dígitos',
- 'notEnoughPrivilege' => 'You do not have sufficient permissions to access that page.',
- 'set_password' => 'Set your password',
+ 'notEnoughPrivilege' => 'No tiene permisos suficientes para acceder a esa página.',
+ 'set_password' => 'Establece tu contraseña',
// Welcome email
- 'welcomeSubject' => 'You\'ve been invited to {siteName}',
+ 'welcomeSubject' => 'Has sido invitado a {siteName}',
'emailWelcomeMailBody' => 'An account was created for you on {domain}, click on the login link below to set your password. The link is valid for {numberOfHours} hours after this email was sent.',
];
diff --git a/modules/Auth/Language/ro/Auth.php b/modules/Auth/Language/ro/Auth.php
new file mode 100644
index 00000000..a47932e3
--- /dev/null
+++ b/modules/Auth/Language/ro/Auth.php
@@ -0,0 +1,94 @@
+ [
+ 'owner' => [
+ 'title' => 'Instance Owner',
+ 'description' => 'The Castopod owner.',
+ ],
+ 'superadmin' => [
+ 'title' => 'Super admin',
+ 'description' => 'Has complete control over Castopod.',
+ ],
+ 'manager' => [
+ 'title' => 'Manager',
+ 'description' => 'Manages Castopod\'s content.',
+ ],
+ 'podcaster' => [
+ 'title' => 'Podcaster',
+ 'description' => 'General users of Castopod.',
+ ],
+ ],
+ 'instance_permissions' => [
+ 'admin.access' => 'Can access the Castopod admin area.',
+ 'admin.settings' => 'Can access the Castopod settings.',
+ 'users.manage' => 'Can manage Castopod users.',
+ 'persons.manage' => 'Can manage persons.',
+ 'pages.manage' => 'Can manage pages.',
+ 'podcasts.view' => 'Can view all podcasts.',
+ 'podcasts.create' => 'Can create new podcasts.',
+ 'podcasts.import' => 'Can import podcasts.',
+ 'fediverse.manage-blocks' => 'Can block fediverse actors/domains from interacting with Castopod.',
+ ],
+ 'podcast_groups' => [
+ 'owner' => [
+ 'title' => 'Podcast Owner',
+ 'description' => 'The podcast owner.',
+ ],
+ 'admin' => [
+ 'title' => 'Admin',
+ 'description' => 'Has complete control of podcast #{id}.',
+ ],
+ 'editor' => [
+ 'title' => 'Editor',
+ 'description' => 'Manages content and publications of podcast #{id}.',
+ ],
+ 'author' => [
+ 'title' => 'Author',
+ 'description' => 'Manages content of podcast #{id} but cannot publish them.',
+ ],
+ 'guest' => [
+ 'title' => 'Guest',
+ 'description' => 'General contributor of the podcast #{id}.',
+ ],
+ ],
+ 'podcast_permissions' => [
+ 'view' => 'Can view dashboard and analytics of podcast #{id}.',
+ 'edit' => 'Can edit podcast #{id}.',
+ 'delete' => 'Can delete podcast #{id}.',
+ 'manage-import' => 'Can synchronize imported podcast #{id}.',
+ 'manage-persons' => 'Can manage subscriptions of podcast #{id}.',
+ 'manage-subscriptions' => 'Can manage subscriptions of podcast #{id}.',
+ 'manage-contributors' => 'Can manage contributors of podcast #{id}.',
+ 'manage-platforms' => 'Can set/remove platform links of podcast #{id}.',
+ 'manage-publications' => 'Can publish podcast #{id}.',
+ 'manage-notifications' => 'Can view and mark notifications as read for podcast #{id}.',
+ 'interact-as' => 'Can interact as the podcast #{id} to favourite, share or reply to posts.',
+ 'episodes.view' => 'Can view dashboards and analytics of podcast #{id}\'s episodes.',
+ 'episodes.create' => 'Can create episodes for podcast #{id}.',
+ 'episodes.edit' => 'Can edit episodes of podcast #{id}.',
+ 'episodes.delete' => 'Can delete episodes of podcast #{id}.',
+ 'episodes.manage-persons' => 'Can manage episode persons of podcast #{id}.',
+ 'episodes.manage-clips' => 'Can manage video clips or soundbites of podcast #{id}.',
+ 'episodes.manage-publications' => 'Can publish/unpublish episodes and posts of podcast #{id}.',
+ 'episodes.manage-comments' => 'Can create/remove episode comments of podcast #{id}.',
+ ],
+
+ // missing keys
+ 'code' => 'Your 6-digit code',
+
+ 'notEnoughPrivilege' => 'You do not have sufficient permissions to access that page.',
+ 'set_password' => 'Set your password',
+
+ // Welcome email
+ 'welcomeSubject' => 'You\'ve been invited to {siteName}',
+ 'emailWelcomeMailBody' => 'An account was created for you on {domain}, click on the login link below to set your password. The link is valid for {numberOfHours} hours after this email was sent.',
+];
diff --git a/modules/Auth/Language/ro/Contributor.php b/modules/Auth/Language/ro/Contributor.php
new file mode 100644
index 00000000..c70badc0
--- /dev/null
+++ b/modules/Auth/Language/ro/Contributor.php
@@ -0,0 +1,47 @@
+ 'Podcast contributors',
+ 'view' => "{username}'s contribution to {podcastTitle}",
+ 'add' => 'Add contributor',
+ 'add_contributor' => 'Add a contributor for {0}',
+ 'edit_role' => 'Update role for {0}',
+ 'edit' => 'Edit',
+ 'remove' => 'Remove',
+ 'list' => [
+ 'username' => 'Username',
+ 'role' => 'Role',
+ ],
+ 'form' => [
+ 'user' => 'User',
+ 'user_placeholder' => 'Select a user…',
+ 'role' => 'Role',
+ 'role_placeholder' => 'Select its role…',
+ 'submit_add' => 'Add contributor',
+ 'submit_edit' => 'Update role',
+ ],
+ 'delete_form' => [
+ 'title' => 'Remove {contributor}',
+ 'disclaimer' =>
+ 'You are about to remove {contributor} from contributors. They will not be able to access "{podcastTitle}" anymore.',
+ 'understand' => 'I understand, I want to remove {contributor} from "{podcastTitle}"',
+ 'submit' => 'Remove',
+ ],
+ 'messages' => [
+ 'editSuccess' => 'Role successfully changed!',
+ 'editOwnerError' => "You can't edit the podcast owner!",
+ 'removeOwnerError' => "You can't remove the podcast owner!",
+ 'removeSuccess' =>
+ 'You have successfully removed {username} from {podcastTitle}',
+ 'alreadyAddedError' =>
+ "The contributor you're trying to add has already been added!",
+ ],
+];
diff --git a/modules/Auth/Language/ro/MyAccount.php b/modules/Auth/Language/ro/MyAccount.php
new file mode 100644
index 00000000..6ebbb30e
--- /dev/null
+++ b/modules/Auth/Language/ro/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/Auth/Language/ro/User.php b/modules/Auth/Language/ro/User.php
new file mode 100644
index 00000000..32ec560c
--- /dev/null
+++ b/modules/Auth/Language/ro/User.php
@@ -0,0 +1,60 @@
+ "Edit {username}'s role",
+ 'ban' => 'Ban',
+ 'unban' => 'Unban',
+ 'delete' => 'Delete',
+ 'create' => 'New user',
+ 'view' => "{username}'s info",
+ 'all_users' => 'All users',
+ 'list' => [
+ 'user' => 'User',
+ 'role' => 'Role',
+ 'banned' => 'Banned?',
+ ],
+ 'form' => [
+ 'email' => 'Email',
+ 'username' => 'Username',
+ 'password' => 'Password',
+ 'new_password' => 'New Password',
+ 'role' => 'Role',
+ 'roles' => 'Roles',
+ 'permissions' => 'Permissions',
+ 'submit_create' => 'Create user',
+ 'submit_edit' => 'Save',
+ 'submit_password_change' => 'Change!',
+ ],
+ 'delete_form' => [
+ 'title' => 'Delete {user}',
+ 'disclaimer' =>
+ "You are about to delete {user} permanently. They will not be able to access the admin area anymore.",
+ 'understand' => 'I understand, I want to delete {user} permanently',
+ 'submit' => 'Delete',
+ ],
+ 'messages' => [
+ 'createSuccess' =>
+ 'User created successfully! A welcome email was sent to {username} with a login link, they will be prompted with a password reset upon first authentication.',
+ 'roleEditSuccess' =>
+ "{username}'s roles have been successfully updated.",
+ 'banSuccess' => '{username} has been banned.',
+ 'unbanSuccess' => '{username} has been unbanned.',
+ 'editOwnerError' =>
+ '{username} is the instance owner, one does not simply touch the owner…',
+ 'banSuperAdminError' =>
+ '{username} is a superadmin, one does not simply ban a superadmin…',
+ 'deleteOwnerError' =>
+ '{username} is the instance owner, one does not simply delete the owner…',
+ 'deleteSuperAdminError' =>
+ '{username} is a superadmin, one does not simply delete a superadmin…',
+ 'deleteSuccess' => '{username} has been deleted.',
+ ],
+];
diff --git a/modules/Install/Language/ro/Install.php b/modules/Install/Language/ro/Install.php
new file mode 100644
index 00000000..45d26085
--- /dev/null
+++ b/modules/Install/Language/ro/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 Super Admin 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/PremiumPodcasts/Language/de/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/de/PremiumPodcasts.php
index 18c0dd4e..c62a97fa 100644
--- a/modules/PremiumPodcasts/Language/de/PremiumPodcasts.php
+++ b/modules/PremiumPodcasts/Language/de/PremiumPodcasts.php
@@ -9,7 +9,7 @@ declare(strict_types=1);
*/
return [
- 'podcast_is_premium' => 'Podcast contains premium episodes',
+ 'podcast_is_premium' => 'Podcast enthält Premium-Episoden',
'episode_is_premium' => 'Episode is premium, only available to premium subscribers',
'unlock_episode' => 'This episode is for premium subscribers only. Click to unlock it!',
'banner_unlock' => 'This podcast contains premium episodes, only available to premium subscribers.',
diff --git a/modules/PremiumPodcasts/Language/el/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/el/PremiumPodcasts.php
index 18c0dd4e..2cdc8702 100644
--- a/modules/PremiumPodcasts/Language/el/PremiumPodcasts.php
+++ b/modules/PremiumPodcasts/Language/el/PremiumPodcasts.php
@@ -9,26 +9,26 @@ declare(strict_types=1);
*/
return [
- 'podcast_is_premium' => 'Podcast contains premium episodes',
- 'episode_is_premium' => 'Episode is premium, only available to premium subscribers',
- 'unlock_episode' => 'This episode is for premium subscribers only. Click to unlock it!',
+ 'podcast_is_premium' => 'Το Podcast περιέχει premium επεισόδια',
+ 'episode_is_premium' => 'Το επεισόδιο είναι premium, μόνο διαθέσιμο σε συνδρομητές premium',
+ 'unlock_episode' => 'Αυτό το επεισόδιο είναι μόνο για premium συνδρομητές. Κάντε κλικ για να το ξεκλειδώσετε!',
'banner_unlock' => 'This podcast contains premium episodes, only available to premium subscribers.',
- 'banner_lock' => 'Podcast is unlocked, enjoy the premium episodes!',
- 'subscribe' => 'Subscribe',
- 'lock' => 'Lock',
- 'unlock' => 'Unlock',
+ 'banner_lock' => 'Το Podcast είναι ξεκλειδωμένο, απολαύστε τα premium επεισόδια!',
+ 'subscribe' => 'Συνδρομή',
+ 'lock' => 'Κλείδωμα',
+ 'unlock' => 'Ξεκλείδωμα',
'unlock_form' => [
- 'title' => 'Premium content',
- 'subtitle' => 'This podcast contains locked premium episodes! Do you have the key to unlock them?',
- 'token' => 'Enter your key',
+ 'title' => 'Premium περιεχόμενο',
+ 'subtitle' => 'Αυτό το podcast περιέχει κλειδωμένα premium επεισόδια! Έχεις το κλειδί για να τα ξεκλειδώσεις;',
+ 'token' => 'Δώστε το κλειδί',
'token_hint' => 'If you are subscribed to {podcastTitle}, you may copy the key that was sent to you via email and paste it here.',
- 'submit' => 'Unlock all episodes!',
- 'call_to_action' => 'Unlock all episodes of {podcastTitle}:',
- 'subscribe_cta' => 'Subscribe now!',
+ 'submit' => 'Ξεκλείδωμα όλων των επεισοδίων!',
+ 'call_to_action' => 'Ξεκλειδώστε όλα τα επεισόδια του {podcastTitle}:',
+ 'subscribe_cta' => 'Εγγραφείτε τώρα!',
],
'messages' => [
- 'unlockSuccess' => 'Podcast was successfully unlocked! Enjoy the premium episodes!',
- 'unlockBadAttempt' => 'Your key does not seem to be working…',
- 'lockSuccess' => 'Podcast was successfully locked!',
+ 'unlockSuccess' => 'Το Podcast ξεκλειδώθηκε με επιτυχία! Απολαύστε τα premium επεισόδια!',
+ 'unlockBadAttempt' => 'Το κλειδί σας δεν φαίνεται να λειτουργεί…',
+ 'lockSuccess' => 'Το Podcast κλειδώθηκε με επιτυχία!',
],
];
diff --git a/modules/PremiumPodcasts/Language/el/Subscription.php b/modules/PremiumPodcasts/Language/el/Subscription.php
index f8af256f..af4ae3db 100644
--- a/modules/PremiumPodcasts/Language/el/Subscription.php
+++ b/modules/PremiumPodcasts/Language/el/Subscription.php
@@ -9,30 +9,30 @@ declare(strict_types=1);
*/
return [
- 'podcast_subscriptions' => 'Podcast subscriptions',
- 'add' => 'New subscription',
- 'view' => 'View subscription',
- 'edit' => 'Edit subscription',
- 'regenerate_token' => 'Regenerate token',
- 'suspend' => 'Suspend subscription',
- 'resume' => 'Resume subscription',
- 'delete' => 'Delete subscription',
+ 'podcast_subscriptions' => 'Συνδρομές Podcast',
+ 'add' => 'Νέα συνδρομή',
+ 'view' => 'Προβολή συνδρομής',
+ 'edit' => 'Τροποποίηση συνδρομής',
+ 'regenerate_token' => 'Αναδημιουργία token',
+ 'suspend' => 'Αναστολή συνδρομής',
+ 'resume' => 'Συνέχιση συνδρομής',
+ 'delete' => 'Διαγραφή συνδρομής',
'status' => [
- 'active' => 'Active',
- 'suspended' => 'Suspended',
- 'expired' => 'Expired',
+ 'active' => 'Ενεργή',
+ 'suspended' => 'Έχει ανασταλεί',
+ 'expired' => 'Έληξε',
],
'list' => [
- 'number' => 'Number',
- 'email' => 'Email',
- 'expiration_date' => 'Expiration date',
- 'unlimited' => 'Unlimited',
- 'downloads' => 'Downloads',
- 'status' => 'Status',
+ 'number' => 'Αριθμός',
+ 'email' => 'Ηλεκτρονική διεύθυνση',
+ 'expiration_date' => 'Ημερομηνία λήξης',
+ 'unlimited' => 'Απεριόριστα',
+ 'downloads' => 'Λήψεις',
+ 'status' => 'Κατάσταση',
],
'form' => [
'email' => 'Email',
- 'expiration_date' => 'Expiration date',
+ 'expiration_date' => 'Ημερομηνία λήξης',
'expiration_date_hint' => 'The date and time at which the subscription expires. Leave empty for an unlimited subscription.',
'submit_add' => 'Add subscription',
'submit_edit' => 'Edit subscription',
diff --git a/modules/PremiumPodcasts/Language/es/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/es/PremiumPodcasts.php
index 18c0dd4e..e7beaae7 100644
--- a/modules/PremiumPodcasts/Language/es/PremiumPodcasts.php
+++ b/modules/PremiumPodcasts/Language/es/PremiumPodcasts.php
@@ -9,26 +9,26 @@ declare(strict_types=1);
*/
return [
- 'podcast_is_premium' => 'Podcast contains premium episodes',
- 'episode_is_premium' => 'Episode is premium, only available to premium subscribers',
- 'unlock_episode' => 'This episode is for premium subscribers only. Click to unlock it!',
- 'banner_unlock' => 'This podcast contains premium episodes, only available to premium subscribers.',
- 'banner_lock' => 'Podcast is unlocked, enjoy the premium episodes!',
- 'subscribe' => 'Subscribe',
- 'lock' => 'Lock',
- 'unlock' => 'Unlock',
+ 'podcast_is_premium' => 'Podcast contiene episodios premium',
+ 'episode_is_premium' => 'El episodio es premium, sólo disponible para los suscriptores premium',
+ 'unlock_episode' => 'Este episodio es sólo para suscriptores premium. ¡Haz clic para desbloquearlo!',
+ 'banner_unlock' => 'Este podcast contiene episodios premium, sólo disponible para los suscriptores premium.',
+ 'banner_lock' => 'Podcast desbloqueado, ¡disfruta de los episodios premium!',
+ 'subscribe' => 'Suscríbete',
+ 'lock' => 'Bloquear',
+ 'unlock' => 'Desbloquear',
'unlock_form' => [
- 'title' => 'Premium content',
- 'subtitle' => 'This podcast contains locked premium episodes! Do you have the key to unlock them?',
- 'token' => 'Enter your key',
- 'token_hint' => 'If you are subscribed to {podcastTitle}, you may copy the key that was sent to you via email and paste it here.',
- 'submit' => 'Unlock all episodes!',
- 'call_to_action' => 'Unlock all episodes of {podcastTitle}:',
- 'subscribe_cta' => 'Subscribe now!',
+ 'title' => 'Contenido premium',
+ 'subtitle' => '¡Este podcast contiene episodios premium bloqueados! ¿Tienes la clave para desbloquearlos?',
+ 'token' => 'Introduzca su clave',
+ 'token_hint' => 'Si está suscrito a {podcastTitle}, puede copiar la clave que le fue enviada por correo electrónico y pegarla aquí.',
+ 'submit' => '¡Desbloquea todos los episodios!',
+ 'call_to_action' => 'Desbloquea todos los episodios de {podcastTitle}:',
+ 'subscribe_cta' => '¡Suscríbete ahora!',
],
'messages' => [
- 'unlockSuccess' => 'Podcast was successfully unlocked! Enjoy the premium episodes!',
- 'unlockBadAttempt' => 'Your key does not seem to be working…',
- 'lockSuccess' => 'Podcast was successfully locked!',
+ 'unlockSuccess' => '¡Podcast desbloqueado con éxito! ¡Disfruta de los episodios premium!',
+ 'unlockBadAttempt' => 'Parece que tu clave no está funcionando…',
+ 'lockSuccess' => 'El Podcast fue bloqueado con éxito!',
],
];
diff --git a/modules/PremiumPodcasts/Language/es/Subscription.php b/modules/PremiumPodcasts/Language/es/Subscription.php
index f8af256f..4d81bc70 100644
--- a/modules/PremiumPodcasts/Language/es/Subscription.php
+++ b/modules/PremiumPodcasts/Language/es/Subscription.php
@@ -9,92 +9,92 @@ declare(strict_types=1);
*/
return [
- 'podcast_subscriptions' => 'Podcast subscriptions',
- 'add' => 'New subscription',
- 'view' => 'View subscription',
- 'edit' => 'Edit subscription',
- 'regenerate_token' => 'Regenerate token',
- 'suspend' => 'Suspend subscription',
- 'resume' => 'Resume subscription',
- 'delete' => 'Delete subscription',
+ 'podcast_subscriptions' => 'Suscripciones de Podcast',
+ 'add' => 'Nueva suscripción',
+ 'view' => 'Ver suscripción',
+ 'edit' => 'Editar la suscripción',
+ 'regenerate_token' => 'Regenerar token',
+ 'suspend' => 'Suspender suscripción',
+ 'resume' => 'Reanudar suscripción',
+ 'delete' => 'Eliminar suscripción',
'status' => [
- 'active' => 'Active',
- 'suspended' => 'Suspended',
- 'expired' => 'Expired',
+ 'active' => 'Activo',
+ 'suspended' => 'Suspendido',
+ 'expired' => 'Caducado',
],
'list' => [
- 'number' => 'Number',
- 'email' => 'Email',
- 'expiration_date' => 'Expiration date',
- 'unlimited' => 'Unlimited',
- 'downloads' => 'Downloads',
- 'status' => 'Status',
+ 'number' => 'Número',
+ 'email' => 'Correo electrónico',
+ 'expiration_date' => 'Fecha de expiración',
+ 'unlimited' => 'Ilimitado',
+ 'downloads' => 'Descargas',
+ 'status' => 'Estado',
],
'form' => [
- 'email' => 'Email',
- 'expiration_date' => 'Expiration date',
- 'expiration_date_hint' => 'The date and time at which the subscription expires. Leave empty for an unlimited subscription.',
- 'submit_add' => 'Add subscription',
- 'submit_edit' => 'Edit subscription',
+ 'email' => 'Correo electrónico',
+ 'expiration_date' => 'Fecha de expiración',
+ 'expiration_date_hint' => 'La fecha y hora en que caduca la suscripción. Dejar en blanco para una suscripción ilimitada.',
+ 'submit_add' => 'Añadir suscripción',
+ 'submit_edit' => 'Editar la suscripción',
],
'form_link_add' => [
- 'link' => 'Subscription page link',
- 'link_hint' => 'This will add a call to action in the website inviting listeners to subscribe to the podcast.',
- 'submit' => 'Save link',
+ 'link' => 'Enlace de página de suscripción',
+ 'link_hint' => 'Esto añadirá una llamada a la acción en el sitio web invitando a los oyentes a suscribirse al podcast.',
+ 'submit' => 'Guardar enlace',
],
'suspend_form' => [
- 'disclaimer' => 'Suspending the subscription will restrict the subscriber from having access to the premium content. You will still be able to lift the suspension afterwards.',
- 'reason' => 'Reason',
- 'reason_placeholder' => 'Why are you suspending the subscription?',
- "submit" => 'Suspend subscription',
+ 'disclaimer' => 'Suspender la suscripción restringirá que el suscriptor tenga acceso al contenido premium. Aún podrá levantar la suspensión después.',
+ 'reason' => 'Motivo',
+ 'reason_placeholder' => '¿Por qué quieres detener tu suscripción?',
+ "submit" => 'Suspender suscripción',
],
'delete_form' => [
- 'disclaimer' => 'Deleting {subscriber}\'s subscription will remove all analytics data associated with it.',
- 'understand' => 'I understand, remove the subscription permanently',
- 'submit' => 'Remove subscription',
+ 'disclaimer' => 'Eliminar la suscripción de {subscriber} eliminará todos los datos analíticos asociados a ella.',
+ 'understand' => 'Entiendo, eliminar la suscripción permanentemente',
+ 'submit' => 'Eliminar Suscripción',
],
'messages' => [
- 'addSuccess' => 'New subscription added! A welcome email was sent to {subscriber}.',
- 'addError' => 'Subscription could not be added.',
- 'editSuccess' => 'Subscription expiry date was updated! An email was sent to {subscriber}.',
- 'editError' => 'Subscription could not be edited.',
- 'regenerateTokenSuccess' => 'Token regenerated! An email was sent to {subscriber} with the new token.',
- 'regenerateTokenError' => 'Token could not be regenerated.',
- 'deleteSuccess' => 'Subscription was removed! An email was sent to {subscriber}.',
- 'deleteError' => 'Subscription could not be removed.',
- 'suspendSuccess' => 'Subscription was suspended! An email was sent to {subscriber}.',
- 'suspendError' => 'Subscription could not be suspended.',
- 'resumeSuccess' => 'Subscription was resumed! An email was sent to {subscriber}.',
- 'resumeError' => 'Subscription could not be resumed.',
- 'linkSaveSuccess' => 'Subscription link was saved successfully! It will appear in the website as a Call To Action!',
- 'linkRemoveSuccess' => 'Subscription link was removed successfully!',
+ 'addSuccess' => '¡Nueva suscripción añadida! Se ha enviado un correo electrónico de bienvenida a {subscriber}.',
+ 'addError' => 'La suscripción no pudo ser añadida.',
+ 'editSuccess' => '¡La fecha de caducidad de la suscripción ha sido actualizada! Se ha enviado un correo electrónico a {subscriber}.',
+ 'editError' => 'No se pudo editar la suscripción.',
+ 'regenerateTokenSuccess' => '¡Token regenerado! Un correo electrónico fue enviado a {subscriber} con el nuevo token.',
+ 'regenerateTokenError' => 'El token no se pudo regenerar.',
+ 'deleteSuccess' => '¡La suscripción ha sido eliminada! Se ha enviado un correo electrónico a {subscriber}.',
+ 'deleteError' => 'La suscripción no pudo ser eliminada.',
+ 'suspendSuccess' => '¡La suscripción ha sido suspendida! Se ha enviado un correo electrónico a {subscriber}.',
+ 'suspendError' => 'La suscripción no pudo ser suspendida.',
+ 'resumeSuccess' => 'La suscripción se ha reanudado! Se ha enviado un correo electrónico a {subscriber}.',
+ 'resumeError' => 'No se pudo reanudar la suscripción.',
+ 'linkSaveSuccess' => '¡El enlace de suscripción se ha guardado correctamente! ¡Aparecerá en el sitio web como una acción de llamada!',
+ 'linkRemoveSuccess' => '¡El enlace de suscripción se eliminó correctamente!',
],
'emails' => [
- 'greeting' => 'Hey,',
- 'token' => 'Your token: {0}',
- 'unique_feed_link' => 'Your unique feed link: {0}',
- 'how_to_use' => 'How to use?',
- 'two_ways' => 'You have two ways of unlocking the premium episodes:',
- 'import_into_app' => 'Copy your unique feed url inside your favourite podcast app (import it as a private feed to prevent exposing your credentials).',
- 'go_to_website' => 'Go to {podcastWebsite}\'s website and unlock the podcast with your token.',
- 'welcome_subject' => 'Welcome to {podcastTitle}',
- 'welcome' => 'You have subscribed to {podcastTitle}, thank you and welcome aboard!',
- 'welcome_token_title' => 'Here are your credentials to unlock the podcast\'s premium episodes:',
- 'welcome_expires' => 'Your subscription was set to expire on {0}.',
- 'welcome_never_expires' => 'Your subscription was set to never expire.',
- 'reset_subject' => 'Your token was reset!',
- 'reset_token' => 'Your access to {podcastTitle} has been reset!',
- 'reset_token_title' => 'New credentials have been generated for you to unlock the podcast\'s premium episodes:',
- 'edited_subject' => 'Your subscription has been updated!',
- 'edited_expires' => 'Your subscription for {podcastTitle} was set to expire on {expiresAt}.',
- 'edited_never_expires' => 'Your subscription for {podcastTitle} was set to never expire!',
- 'suspended_subject' => 'Your subscription has been suspended!',
- 'suspended' => 'Your subscription for {podcastTitle} has been suspended! You can no longer access the podcast\'s premium episodes.',
- 'suspended_reason' => 'That is for the following reason: {0}',
- 'resumed_subject' => 'Your subscription has been resumed!',
- 'resumed' => 'Your subscription for {podcastTitle} has been resumed! You may access the podcast\'s premium episodes again.',
- 'deleted_subject' => 'Your subscription has been removed!',
- 'deleted' => 'Your subscription for {podcastTitle} has been removed! You no longer have access to the podcast\'s premium episodes.',
- 'footer' => '{castopod} hosted on {host}',
+ 'greeting' => 'Hola,',
+ 'token' => 'Tu token: {0}',
+ 'unique_feed_link' => 'Tu enlace de feed único: {0}',
+ 'how_to_use' => '¿Cómo se usa?',
+ 'two_ways' => 'Tienes dos maneras de desbloquear los episodios premium:',
+ 'import_into_app' => 'Copie su Url única dentro de su aplicación de podcast favorita (importe como un feed privado para evitar exponer sus credenciales).',
+ 'go_to_website' => 'Ve a la página web de {podcastWebsite} y desbloquea el podcast con tu token.',
+ 'welcome_subject' => 'Bienvenido a {podcastTitle}',
+ 'welcome' => 'Te has suscrito a {podcastTitle}, ¡gracias y bienvenido!',
+ 'welcome_token_title' => 'Aquí están tus credenciales para desbloquear los episodios premium del podcast:',
+ 'welcome_expires' => 'Sus suscripción caducará en {0}.',
+ 'welcome_never_expires' => 'Tu suscripción nunca expirará.',
+ 'reset_subject' => '¡Tu token ha sido restablecido!',
+ 'reset_token' => '¡Tu acceso a {podcastTitle} ha sido restablecido!',
+ 'reset_token_title' => 'Se han generado nuevas credenciales para desbloquear los episodios premium del podcast:',
+ 'edited_subject' => 'Su suscripción ha sido actualizada!',
+ 'edited_expires' => 'Su suscripción para {podcastTitle} caducará el {expiresAt}.',
+ 'edited_never_expires' => '¡Tu suscripción para {podcastTitle} nunca caducará!',
+ 'suspended_subject' => 'Tu suscripción ha sido suspendida!',
+ 'suspended' => '¡Tu suscripción para {podcastTitle} ha sido suspendida! Ya no puedes acceder a los episodios premium del podcast.',
+ 'suspended_reason' => 'Este es el siguiente motivo: {0}',
+ 'resumed_subject' => 'Hemos reactivado tu suscripción!',
+ 'resumed' => '¡Tu suscripción para {podcastTitle} ha sido reanudada! Puedes acceder de nuevo a los episodios premium del podcast.',
+ 'deleted_subject' => 'La suscripción ha sido eliminada!',
+ 'deleted' => '¡Tu suscripción para {podcastTitle} ha sido eliminada! Ya no tienes acceso a los episodios premium del podcast.',
+ 'footer' => '{castopod} alojado en {host}',
],
];
diff --git a/modules/PremiumPodcasts/Language/ro/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/ro/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/ro/PremiumPodcasts.php
@@ -0,0 +1,34 @@
+ 'Podcast contains premium episodes',
+ 'episode_is_premium' => 'Episode is premium, only available to premium subscribers',
+ 'unlock_episode' => 'This episode is for premium subscribers only. Click to unlock it!',
+ 'banner_unlock' => 'This podcast contains premium episodes, only available to premium subscribers.',
+ 'banner_lock' => 'Podcast is unlocked, enjoy the premium episodes!',
+ 'subscribe' => 'Subscribe',
+ 'lock' => 'Lock',
+ 'unlock' => 'Unlock',
+ 'unlock_form' => [
+ 'title' => 'Premium content',
+ 'subtitle' => 'This podcast contains locked premium episodes! Do you have the key to unlock them?',
+ 'token' => 'Enter your key',
+ 'token_hint' => 'If you are subscribed to {podcastTitle}, you may copy the key that was sent to you via email and paste it here.',
+ 'submit' => 'Unlock all episodes!',
+ 'call_to_action' => 'Unlock all episodes of {podcastTitle}:',
+ 'subscribe_cta' => 'Subscribe now!',
+ ],
+ 'messages' => [
+ 'unlockSuccess' => 'Podcast was successfully unlocked! Enjoy the premium episodes!',
+ 'unlockBadAttempt' => 'Your key does not seem to be working…',
+ 'lockSuccess' => 'Podcast was successfully locked!',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/ro/Subscription.php b/modules/PremiumPodcasts/Language/ro/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/ro/Subscription.php
@@ -0,0 +1,100 @@
+ 'Podcast subscriptions',
+ 'add' => 'New subscription',
+ 'view' => 'View subscription',
+ 'edit' => 'Edit subscription',
+ 'regenerate_token' => 'Regenerate token',
+ 'suspend' => 'Suspend subscription',
+ 'resume' => 'Resume subscription',
+ 'delete' => 'Delete subscription',
+ 'status' => [
+ 'active' => 'Active',
+ 'suspended' => 'Suspended',
+ 'expired' => 'Expired',
+ ],
+ 'list' => [
+ 'number' => 'Number',
+ 'email' => 'Email',
+ 'expiration_date' => 'Expiration date',
+ 'unlimited' => 'Unlimited',
+ 'downloads' => 'Downloads',
+ 'status' => 'Status',
+ ],
+ 'form' => [
+ 'email' => 'Email',
+ 'expiration_date' => 'Expiration date',
+ 'expiration_date_hint' => 'The date and time at which the subscription expires. Leave empty for an unlimited subscription.',
+ 'submit_add' => 'Add subscription',
+ 'submit_edit' => 'Edit subscription',
+ ],
+ 'form_link_add' => [
+ 'link' => 'Subscription page link',
+ 'link_hint' => 'This will add a call to action in the website inviting listeners to subscribe to the podcast.',
+ 'submit' => 'Save link',
+ ],
+ 'suspend_form' => [
+ 'disclaimer' => 'Suspending the subscription will restrict the subscriber from having access to the premium content. You will still be able to lift the suspension afterwards.',
+ 'reason' => 'Reason',
+ 'reason_placeholder' => 'Why are you suspending the subscription?',
+ "submit" => 'Suspend subscription',
+ ],
+ 'delete_form' => [
+ 'disclaimer' => 'Deleting {subscriber}\'s subscription will remove all analytics data associated with it.',
+ 'understand' => 'I understand, remove the subscription permanently',
+ 'submit' => 'Remove subscription',
+ ],
+ 'messages' => [
+ 'addSuccess' => 'New subscription added! A welcome email was sent to {subscriber}.',
+ 'addError' => 'Subscription could not be added.',
+ 'editSuccess' => 'Subscription expiry date was updated! An email was sent to {subscriber}.',
+ 'editError' => 'Subscription could not be edited.',
+ 'regenerateTokenSuccess' => 'Token regenerated! An email was sent to {subscriber} with the new token.',
+ 'regenerateTokenError' => 'Token could not be regenerated.',
+ 'deleteSuccess' => 'Subscription was removed! An email was sent to {subscriber}.',
+ 'deleteError' => 'Subscription could not be removed.',
+ 'suspendSuccess' => 'Subscription was suspended! An email was sent to {subscriber}.',
+ 'suspendError' => 'Subscription could not be suspended.',
+ 'resumeSuccess' => 'Subscription was resumed! An email was sent to {subscriber}.',
+ 'resumeError' => 'Subscription could not be resumed.',
+ 'linkSaveSuccess' => 'Subscription link was saved successfully! It will appear in the website as a Call To Action!',
+ 'linkRemoveSuccess' => 'Subscription link was removed successfully!',
+ ],
+ 'emails' => [
+ 'greeting' => 'Hey,',
+ 'token' => 'Your token: {0}',
+ 'unique_feed_link' => 'Your unique feed link: {0}',
+ 'how_to_use' => 'How to use?',
+ 'two_ways' => 'You have two ways of unlocking the premium episodes:',
+ 'import_into_app' => 'Copy your unique feed url inside your favourite podcast app (import it as a private feed to prevent exposing your credentials).',
+ 'go_to_website' => 'Go to {podcastWebsite}\'s website and unlock the podcast with your token.',
+ 'welcome_subject' => 'Welcome to {podcastTitle}',
+ 'welcome' => 'You have subscribed to {podcastTitle}, thank you and welcome aboard!',
+ 'welcome_token_title' => 'Here are your credentials to unlock the podcast\'s premium episodes:',
+ 'welcome_expires' => 'Your subscription was set to expire on {0}.',
+ 'welcome_never_expires' => 'Your subscription was set to never expire.',
+ 'reset_subject' => 'Your token was reset!',
+ 'reset_token' => 'Your access to {podcastTitle} has been reset!',
+ 'reset_token_title' => 'New credentials have been generated for you to unlock the podcast\'s premium episodes:',
+ 'edited_subject' => 'Your subscription has been updated!',
+ 'edited_expires' => 'Your subscription for {podcastTitle} was set to expire on {expiresAt}.',
+ 'edited_never_expires' => 'Your subscription for {podcastTitle} was set to never expire!',
+ 'suspended_subject' => 'Your subscription has been suspended!',
+ 'suspended' => 'Your subscription for {podcastTitle} has been suspended! You can no longer access the podcast\'s premium episodes.',
+ 'suspended_reason' => 'That is for the following reason: {0}',
+ 'resumed_subject' => 'Your subscription has been resumed!',
+ 'resumed' => 'Your subscription for {podcastTitle} has been resumed! You may access the podcast\'s premium episodes again.',
+ 'deleted_subject' => 'Your subscription has been removed!',
+ 'deleted' => 'Your subscription for {podcastTitle} has been removed! You no longer have access to the podcast\'s premium episodes.',
+ 'footer' => '{castopod} hosted on {host}',
+ ],
+];