diff --git a/docs/src/es/index.md b/docs/src/es/index.md
index b077ddb7..7475549b 100644
--- a/docs/src/es/index.md
+++ b/docs/src/es/index.md
@@ -54,6 +54,7 @@ utilizado por podcasters alrededor del mundo.
- 📲 Anuncios publicitarios del tipo click-para-escuchar
- 🤝 value4value / WebMonetization (criptomonedas para creadores de
contenido).
+ - 💎 Premium podcasts
- 📡 Publica tus episodios en todas partes con RSS:
- 📱 En todos los directorios y aplicaciones: Podcast Index, Apple
Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
diff --git a/docs/src/fa/getting-started/docker.md b/docs/src/fa/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/fa/getting-started/docker.md
+++ b/docs/src/fa/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/fa/getting-started/install.md b/docs/src/fa/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/fa/getting-started/install.md
+++ b/docs/src/fa/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/fa/index.md b/docs/src/fa/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/fa/index.md
+++ b/docs/src/fa/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/fr/getting-started/docker.md b/docs/src/fr/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/fr/getting-started/docker.md
+++ b/docs/src/fr/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/fr/getting-started/install.md b/docs/src/fr/getting-started/install.md
index d9f59c09..f3e19c3e 100644
--- a/docs/src/fr/getting-started/install.md
+++ b/docs/src/fr/getting-started/install.md
@@ -132,22 +132,51 @@ installées :
::: info Note
-Le script d'installation crée un fichier `.env` à la racine du paquet. Si vous
-ne pouvez pas passer par l'assistant d'installation, vous pouvez
-[créer et mettre à jour le fichier `.env` manuellement](#alternative-manual-configuration).
+Le script d'installation crée un fichier `.env` à la racine du paquet. 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"` |
+
## Paquets fournis par la communauté
-Si vous ne voulez pas vous soucier d'installer Castopod manuellement, vous
-pouvez utiliser un des paquets créés et maintenus par la communauté open-source.
+If you don't want to bother with installing Castopod manually, you may use one
+of the packages created and maintained by the open-source community.
-### Installer avec YunoHost
+### Install with YunoHost
-[YunoHost](https://yunohost.org/) est une distribution basée sur Debian
-GNU/Linux composée de paquets logiciels libres et open-source. Il gère les
-difficultés de l'auto-hébergement pour vous.
+[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
+made up of free and open-source software packages. It manages the hardships of
+self-hosting for you.
diff --git a/docs/src/fr/index.md b/docs/src/fr/index.md
index a596d878..73e2a1ae 100644
--- a/docs/src/fr/index.md
+++ b/docs/src/fr/index.md
@@ -51,6 +51,7 @@ et est utilisé par des podcasters autour partout dans le monde !
- 🔗 Liens de financement
- 📲 publicité “listen-to-click”
- 🤝 value4value / WebMonetization
+ - 💎 Premium podcasts
- 📡 Publiez vos épisodes partout avec RSS :
- 📱 Sur tous les index et toutes les applications : Podcast Index,
Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
diff --git a/docs/src/gd/getting-started/docker.md b/docs/src/gd/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/gd/getting-started/docker.md
+++ b/docs/src/gd/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/gd/getting-started/install.md b/docs/src/gd/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/gd/getting-started/install.md
+++ b/docs/src/gd/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/gd/index.md b/docs/src/gd/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/gd/index.md
+++ b/docs/src/gd/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/gl/getting-started/docker.md b/docs/src/gl/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/gl/getting-started/docker.md
+++ b/docs/src/gl/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/gl/getting-started/install.md b/docs/src/gl/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/gl/getting-started/install.md
+++ b/docs/src/gl/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/gl/index.md b/docs/src/gl/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/gl/index.md
+++ b/docs/src/gl/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/id/getting-started/docker.md b/docs/src/id/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/id/getting-started/docker.md
+++ b/docs/src/id/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/id/getting-started/install.md b/docs/src/id/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/id/getting-started/install.md
+++ b/docs/src/id/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/id/index.md b/docs/src/id/index.md
index c78d9b25..234e051f 100644
--- a/docs/src/id/index.md
+++ b/docs/src/id/index.md
@@ -50,6 +50,7 @@ digunakan oleh pembuat siniar di seluruh dunia!
- 🔗 Funding links
- 📲 listen-to-click ads
- 🤝 value4value / WebMonetization
+ - 💎 Premium podcasts
- 📡 Terbitkan episode-episode Anda dimana pun dengan RSS:
- 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
diff --git a/docs/src/it/getting-started/docker.md b/docs/src/it/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/it/getting-started/docker.md
+++ b/docs/src/it/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/it/getting-started/install.md b/docs/src/it/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/it/getting-started/install.md
+++ b/docs/src/it/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/it/index.md b/docs/src/it/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/it/index.md
+++ b/docs/src/it/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/nl/getting-started/docker.md b/docs/src/nl/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/nl/getting-started/docker.md
+++ b/docs/src/nl/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/nl/getting-started/install.md b/docs/src/nl/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/nl/getting-started/install.md
+++ b/docs/src/nl/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/nl/index.md b/docs/src/nl/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/nl/index.md
+++ b/docs/src/nl/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/nn-NO/getting-started/docker.md b/docs/src/nn-NO/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/nn-NO/getting-started/docker.md
+++ b/docs/src/nn-NO/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/nn-NO/getting-started/install.md b/docs/src/nn-NO/getting-started/install.md
index fc838a24..fe65ac10 100644
--- a/docs/src/nn-NO/getting-started/install.md
+++ b/docs/src/nn-NO/getting-started/install.md
@@ -126,17 +126,46 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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"` |
+
## Pakker frå brukarsamfunnet
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
-### Installer med Yunohost
+### 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
diff --git a/docs/src/nn-NO/index.md b/docs/src/nn-NO/index.md
index de7ace6e..38881ecd 100644
--- a/docs/src/nn-NO/index.md
+++ b/docs/src/nn-NO/index.md
@@ -52,6 +52,7 @@ over heile verda bruker det!
- 🔗 Donasjonslenker
- 📲 lytt-for-å-klikka-annonsar
- 🤝 value4value / WebMonetization
+ - 💎 Premium podcasts
- 📡 Kringkast episodane dine kvar som helst med RSS:
- 📱 På alle indeksar og appar: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
diff --git a/docs/src/oc/getting-started/docker.md b/docs/src/oc/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/oc/getting-started/docker.md
+++ b/docs/src/oc/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/oc/getting-started/install.md b/docs/src/oc/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/oc/getting-started/install.md
+++ b/docs/src/oc/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/oc/index.md b/docs/src/oc/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/oc/index.md
+++ b/docs/src/oc/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/pl/getting-started/docker.md b/docs/src/pl/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/pl/getting-started/docker.md
+++ b/docs/src/pl/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/pl/getting-started/install.md b/docs/src/pl/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/pl/getting-started/install.md
+++ b/docs/src/pl/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/pl/index.md b/docs/src/pl/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/pl/index.md
+++ b/docs/src/pl/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/pt-BR/getting-started/docker.md b/docs/src/pt-BR/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/pt-BR/getting-started/docker.md
+++ b/docs/src/pt-BR/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/pt-BR/getting-started/install.md b/docs/src/pt-BR/getting-started/install.md
index 117a78e4..41c0a4a2 100644
--- a/docs/src/pt-BR/getting-started/install.md
+++ b/docs/src/pt-BR/getting-started/install.md
@@ -128,17 +128,46 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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"` |
+
## Pacotes comunitários
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
-### Instalar com YunoHost
+### 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
diff --git a/docs/src/pt-BR/index.md b/docs/src/pt-BR/index.md
index 2b2b0a1f..6152ea69 100644
--- a/docs/src/pt-BR/index.md
+++ b/docs/src/pt-BR/index.md
@@ -50,6 +50,7 @@ podcasters em todo o mundo!
- 🔗 Links de financiamento
- 📲 anúncios clique-para-ouvir
- 🤝 value4value / WebMonetization
+ - 💎 Premium podcasts
- 📡 Publique seus episódios em qualquer lugar com RSS:
- 📱 Em todos os agregadores e aplicativos: Podcast Index, Apple
Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
diff --git a/docs/src/pt/getting-started/docker.md b/docs/src/pt/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/pt/getting-started/docker.md
+++ b/docs/src/pt/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/pt/getting-started/install.md b/docs/src/pt/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/pt/getting-started/install.md
+++ b/docs/src/pt/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/pt/index.md b/docs/src/pt/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/pt/index.md
+++ b/docs/src/pt/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/ru/getting-started/docker.md b/docs/src/ru/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/ru/getting-started/docker.md
+++ b/docs/src/ru/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/ru/getting-started/install.md b/docs/src/ru/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/ru/getting-started/install.md
+++ b/docs/src/ru/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/ru/index.md b/docs/src/ru/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/ru/index.md
+++ b/docs/src/ru/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/sk/getting-started/docker.md b/docs/src/sk/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/sk/getting-started/docker.md
+++ b/docs/src/sk/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/sk/getting-started/install.md b/docs/src/sk/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/sk/getting-started/install.md
+++ b/docs/src/sk/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/sk/index.md b/docs/src/sk/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/sk/index.md
+++ b/docs/src/sk/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/sv/getting-started/docker.md b/docs/src/sv/getting-started/docker.md
index 2a35a8bb..ededc582 100644
--- a/docs/src/sv/getting-started/docker.md
+++ b/docs/src/sv/getting-started/docker.md
@@ -19,8 +19,8 @@ can be added as a cache handler.
## Supported tags
- `develop` [unstable], latest development branch build
-
-// more tags to come!
+- `beta` [stable], latest beta version build
+- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
## Example usage
@@ -33,7 +33,7 @@ can be added as a cache handler.
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -51,7 +51,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -117,26 +117,32 @@ can be added as a cache handler.
- **castopod/app**
- | Variable name | Type (`default`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 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"`) |
+ | Variable name | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/sv/getting-started/install.md b/docs/src/sv/getting-started/install.md
index 1a366f4e..3d73187d 100644
--- a/docs/src/sv/getting-started/install.md
+++ b/docs/src/sv/getting-started/install.md
@@ -126,11 +126,40 @@ want to generate Video Clips. The following extensions must be installed:
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
-through the install wizard, you can
-[create and update the `.env` file manually](#alternative-manual-configuration).
+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
diff --git a/docs/src/sv/index.md b/docs/src/sv/index.md
index 86670d19..d89daccb 100644
--- a/docs/src/sv/index.md
+++ b/docs/src/sv/index.md
@@ -49,6 +49,7 @@ podcasters around the world!
- 🔗 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, …
diff --git a/docs/src/zh-Hans/getting-started/docker.md b/docs/src/zh-Hans/getting-started/docker.md
index 962401a4..9e9135a7 100644
--- a/docs/src/zh-Hans/getting-started/docker.md
+++ b/docs/src/zh-Hans/getting-started/docker.md
@@ -18,8 +18,8 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
## 目前支持的标签
- `develop` [unstable], 最新开发分支版本
-
-更多标签即将到来!
+- `beta` [stable],最新的 beta 版本构建
+- `1.0.0-beta.x` [stable],特定 beta 版本构建 (自 `1.0.0-beta.22` 起)
## 用法示例:
@@ -32,7 +32,7 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
services:
app:
- image: castopod/app:develop
+ image: castopod/app:beta
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@@ -50,7 +50,7 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
restart: unless-stopped
web-server:
- image: castopod/web-server:develop
+ image: castopod/web-server:beta
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@@ -116,26 +116,32 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
- **castopod/app**
- | 变量名称 | 类型 (`默认值`) |
- | -------------------------- | ----------------------------------- |
- | **`CP_BASEURL`** | string (`undefined`) |
- | **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
- | **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
- | **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
- | **`CP_ANALYTICS_SALT`** | string (`undefined`) |
- | **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
- | **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
- | **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
- | **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
- | **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
- | **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
- | **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
- | **`CP_REDIS_PASSWORD`** | ?string (`null`) |
- | **`CP_REDIS_PORT`** | ?number (`6379`) |
- | **`CP_REDIS_DATABASE`** | ?number (`0`) |
+ | 变量名称 | 类型 (`默认值`) | 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"` 或 `"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"` 或 `"ssl"`] | `"tls"` |
- **castopod/web-server**
- | 变量名称 | 类型 (`默认值`) |
- | --------------------- | ----------------- |
- | **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
+ | 变量名称 | Type | Default |
+ | --------------------- | ------- | ------- |
+ | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
diff --git a/docs/src/zh-Hans/getting-started/install.md b/docs/src/zh-Hans/getting-started/install.md
index 6c94a84d..9a4ead83 100644
--- a/docs/src/zh-Hans/getting-started/install.md
+++ b/docs/src/zh-Hans/getting-started/install.md
@@ -118,18 +118,45 @@ Castopod 仅适用于受支持的 MySQL 5.7 或更高版本的兼容数据库。
::: 注意
-安装脚本将会在根目录中创建一个 `.env` 文件并写入数据。 如果无法执行安装向导,可
-以 [手动创建并更新 `.env` 文件](#alternative-manual-configuration)。
+安装脚本将会在根目录中创建一个 `.env` 文件并写入数据。 如果你不能执行安装向导,
+那么可以基于 `.env.example` 文件手动创建和编辑 `.env` 文件。
:::
+### 邮箱/SMTP 设置
+
+某些功能需要电子邮件配置才能正常工作(例如: 找回密码,向高级订阅者发送说明, …)
+
+你可以在实例的 `.env` 中添加你的电子邮件配置,如下所示:
+
+```ini
+# […]
+
+email.fromEmail="你的邮件地址"
+email.SMTPHost="你的邮件主机"
+email.SMTPUser="你的邮件用户名"
+email.SMTPPass="你的邮件密码"
+```
+
+#### 电子邮件配置选项
+
+| 变量名称 | 类型 | 默认 |
+| ---------------- | -------------------- | ------------ |
+| **`fromEmail`** | string | `undefined` |
+| **`fromName`** | string | `"Castopod"` |
+| **`SMTPHost`** | string | `undefined` |
+| **`SMTPUser`** | string | `undefined` |
+| **`SMTPPass`** | string | `undefined` |
+| **`SMTPPort`** | number | `25` |
+| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
+
## 社区套餐
-如果你不想手动安装 Castopod,可以使用开源社区创建和维护的软件包。
+如果你不想手动安装 Castopod,可以使用一个 由开源社区创建和维护的软件包。
### 使用 YunoHost 安装
-[Yunohost](https://yunohost.org/) 是一个基于 Debian GNU/Linux 的发行版,由自由和
+[YunoHost](https://yunohost.org/) 是一个基于 Debian GNU/Linux 的发行版,由免费和
开源软件包组成。 它可以为你解决自托管的困难。
diff --git a/docs/src/zh-Hans/index.md b/docs/src/zh-Hans/index.md
index 4dc24090..20a0b1a0 100644
--- a/docs/src/zh-Hans/index.md
+++ b/docs/src/zh-Hans/index.md
@@ -46,6 +46,7 @@ Castopod 虽然目前处于 **测试阶段** ,但相当稳定,已经被世
- 🔗 资金链接
- 📲 点击收听广告
- 🤝 value4value / 网络货币化
+ - 💎 高级版播客
- 📡 使用 RSS 将你的剧集发布到任何地方
- 📱 支持众多索引和应用程序:Podcast Index,Apple
Podcasts,Spotify,Google Podcasts,Deezer,Podcast Addict,Podfriend...
diff --git a/modules/Admin/Language/ar/Breadcrumb.php b/modules/Admin/Language/ar/Breadcrumb.php
index 10bde7d7..0156d943 100644
--- a/modules/Admin/Language/ar/Breadcrumb.php
+++ b/modules/Admin/Language/ar/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'الرئيسية',
'podcasts' => 'بودكاستات',
'episodes' => 'حلقات',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'مساهمون',
'pages' => 'صفحات',
'settings' => 'الإعدادات',
@@ -24,6 +25,7 @@ return [
'persons' => 'أشخاص',
'publish' => 'نشر',
'publish-edit' => 'تعديل المنشور',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'unpublish',
'delete' => 'احذف',
'fediverse' => 'الفديفرس',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video clips',
'embed' => 'embeddable player',
'notifications' => 'الإشعارات',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/ar/Episode.php b/modules/Admin/Language/ar/Episode.php
index 01124e7e..99eed5ba 100644
--- a/modules/Admin/Language/ar/Episode.php
+++ b/modules/Admin/Language/ar/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'تعديل',
'publish' => 'نشر',
'publish_edit' => 'تعديل المنشور',
+ 'publish_date_edit' => 'Edit publication date',
'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' => 'الحلقة غير منشورة.',
'delete' => 'احذف',
'go_to_page' => 'الانتقال إلى الصفحة',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/ar/Podcast.php b/modules/Admin/Language/ar/Podcast.php
index 644f3a03..bcd6f9dd 100644
--- a/modules/Admin/Language/ar/Podcast.php
+++ b/modules/Admin/Language/ar/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/ar/PodcastNavigation.php b/modules/Admin/Language/ar/PodcastNavigation.php
index 04ee9a93..ad114d10 100644
--- a/modules/Admin/Language/ar/PodcastNavigation.php
+++ b/modules/Admin/Language/ar/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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' => 'المساهمون',
'contributor-list' => 'كل المساهمين',
'contributor-add' => 'إضافة مساهم',
diff --git a/modules/Admin/Language/ar/Settings.php b/modules/Admin/Language/ar/Settings.php
index 6cce90a1..6cd61799 100644
--- a/modules/Admin/Language/ar/Settings.php
+++ b/modules/Admin/Language/ar/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/br/Breadcrumb.php b/modules/Admin/Language/br/Breadcrumb.php
index 8702d4ce..c2eb298a 100644
--- a/modules/Admin/Language/br/Breadcrumb.php
+++ b/modules/Admin/Language/br/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Degemer',
'podcasts' => 'podkastoù',
'episodes' => 'rannoù',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'perzhidi, perzhiadezed',
'pages' => 'pajennoù',
'settings' => 'arventennoù',
@@ -24,6 +25,7 @@ return [
'persons' => 'emellerien·ezed',
'publish' => 'embann',
'publish-edit' => 'kemmañ an embannadur',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'diembannañ',
'delete' => 'dilemel',
'fediverse' => 'kevrebed',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'tennadoù video',
'embed' => 'lenner enkorfet',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/br/Episode.php b/modules/Admin/Language/br/Episode.php
index 800e6459..56e1c93d 100644
--- a/modules/Admin/Language/br/Episode.php
+++ b/modules/Admin/Language/br/Episode.php
@@ -25,10 +25,14 @@ return [
'edit' => 'Kemmañ',
'publish' => 'Embann',
'publish_edit' => 'Kemmañ an embannadur',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Diembannañ',
'publish_error' => 'Embannet eo bet ar rann dija.',
'publish_edit_error' => 'Embannet eo bet ar rann dija.',
'publish_cancel_error' => 'Embannet eo bet ar rann dija.',
+ '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' => 'N\'eo ket bet embannet ar rann.',
'delete' => 'Dilemel',
'go_to_page' => 'Gwelet ar bajenn',
@@ -111,6 +115,8 @@ return [
'bonus' => 'Bonuz',
'bonus_hint' => 'Danvez ouzhpenn ar podkast (da skouer, titouroù diwar-benn kostezioù pe atersadennoù gant an aktourien·ezed), pe bruderezh kroaziet evit ur podkast all',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Kemenn evit ar gerent',
'hint' => 'Hag ar rann-mañ a zo danvez ha ne zlefe ket gwelet gant bugale?',
@@ -178,6 +184,11 @@ return [
'message_warning_hint' => 'Ouzhpennañ ur gemennadenn a lakay muioc\'h a dud er jeu, ha diwar se e vo gwelet muioc\'h ho rann.',
'message_warning_submit' => 'Embann memestra',
],
+ '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' =>
"Diembann ar rann a zilamo an holl gemennadennoù liammet outi ha skarzhet e vo eus lanv RSS ar podkast.",
diff --git a/modules/Admin/Language/br/Podcast.php b/modules/Admin/Language/br/Podcast.php
index 0de9f71b..0ecaa7fb 100644
--- a/modules/Admin/Language/br/Podcast.php
+++ b/modules/Admin/Language/br/Podcast.php
@@ -110,6 +110,9 @@ return [
'monetization_section_title' => 'Moneisaat',
'monetization_section_subtitle' =>
'Dastum arc\'hant a-drugarez d\'ho selaouerien·ezed.',
+ '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' => 'Chomlec\'h paeañ (Payment Poienter) evit Web Monetization',
'payment_pointer_hint' =>
'Ar chomlec\'h ma vo dastumet an arc\'hant ganeoc\'h a-drugarez da Web Monetization',
diff --git a/modules/Admin/Language/br/PodcastNavigation.php b/modules/Admin/Language/br/PodcastNavigation.php
index 56c57578..5c3842ca 100644
--- a/modules/Admin/Language/br/PodcastNavigation.php
+++ b/modules/Admin/Language/br/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => 'Lennerioù',
'podcast-analytics-listening-time' => 'Padelezh ar selaou',
'podcast-analytics-time-periods' => 'Mareoù ar selaou',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
'contributors' => 'Perzhidi, perzhiadezed',
'contributor-list' => 'An holl berzhidi ha perzhiadezed',
'contributor-add' => 'Ouzhpennañ ur perzhiad pe ur berzhiadez',
diff --git a/modules/Admin/Language/br/Settings.php b/modules/Admin/Language/br/Settings.php
index 10c855bf..4929034f 100644
--- a/modules/Admin/Language/br/Settings.php
+++ b/modules/Admin/Language/br/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/ca/Breadcrumb.php b/modules/Admin/Language/ca/Breadcrumb.php
index 797e1817..9fa7362a 100644
--- a/modules/Admin/Language/ca/Breadcrumb.php
+++ b/modules/Admin/Language/ca/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Inici',
'podcasts' => 'podcasts',
'episodes' => 'episodis',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'col·laboradors',
'pages' => 'pàgines',
'settings' => 'preferències',
@@ -24,6 +25,7 @@ return [
'persons' => 'persones',
'publish' => 'publicar',
'publish-edit' => 'editar la publicació',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'desfer la publicació',
'delete' => 'eliminar',
'fediverse' => 'Fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'vídeoclips',
'embed' => 'reproductor incrustable',
'notifications' => 'notificacions',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/ca/Episode.php b/modules/Admin/Language/ca/Episode.php
index 5be116ab..ed05a8d7 100644
--- a/modules/Admin/Language/ca/Episode.php
+++ b/modules/Admin/Language/ca/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Editar',
'publish' => 'Publicar',
'publish_edit' => 'Editar la publicació',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Desfer la publicació',
'publish_error' => 'L\'episodi ja està publicat.',
'publish_edit_error' => 'L\'episodi ja està publicat.',
'publish_cancel_error' => 'L\'episodi ja està publicat.',
+ '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' => 'L\'episodi no està publicat.',
'delete' => 'Eliminar',
'go_to_page' => 'Anar a la pàgina ',
@@ -109,6 +113,8 @@ return [
'bonus' => 'Bonificació',
'bonus_hint' => 'Contingut addicional per al programa (per exemple, informació entre bastidors o entrevistes amb el repartiment) o contingut promocional creuat per a un altre programa',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Avís parental',
'hint' => 'L\'episodi conté contingut explícit?',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => 'Tenir un missatge augmenta la implicació social, donant lloc a una millor visibilitat del vostre episodi.',
'message_warning_submit' => 'Publicar de totes maneres',
],
+ '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' =>
"Si desfeu la publicació de l'episodi, se suprimiran tots els comentaris i publicacions associades amb ell i s'eliminarà del fil RSS del podcast.",
diff --git a/modules/Admin/Language/ca/Podcast.php b/modules/Admin/Language/ca/Podcast.php
index df8a8e3f..71772510 100644
--- a/modules/Admin/Language/ca/Podcast.php
+++ b/modules/Admin/Language/ca/Podcast.php
@@ -107,6 +107,9 @@ return [
'monetization_section_title' => 'Monetització',
'monetization_section_subtitle' =>
'Guanyeu diners gràcies al vostre públic.',
+ '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` per a `Web Monetization`',
'payment_pointer_hint' =>
'Aquí és on rebreu diners gràcies al servei `Web Monetization`',
diff --git a/modules/Admin/Language/ca/PodcastNavigation.php b/modules/Admin/Language/ca/PodcastNavigation.php
index 39bf30ad..e2e57dfb 100644
--- a/modules/Admin/Language/ca/PodcastNavigation.php
+++ b/modules/Admin/Language/ca/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => 'Reproductors',
'podcast-analytics-listening-time' => 'Temps d\'escolta',
'podcast-analytics-time-periods' => 'Períodes de temps',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
'contributors' => 'Col·laboradors',
'contributor-list' => 'Tots els col·laboradors',
'contributor-add' => 'Afegir un col·laborador',
diff --git a/modules/Admin/Language/ca/Settings.php b/modules/Admin/Language/ca/Settings.php
index 9ce4f305..a0ba0476 100644
--- a/modules/Admin/Language/ca/Settings.php
+++ b/modules/Admin/Language/ca/Settings.php
@@ -35,6 +35,8 @@ return [
'reset_counts_helper' => 'Aquesta opció tornarà a calcular i restablir tots els recomptes de dades (nombre de seguidors, publicacions, comentaris, …).',
'rewrite_media' => 'Reescriure les metadades multimèdia',
'rewrite_media_helper' => 'Aquesta opció suprimirà tots els fitxers multimèdia superflus i els recrearà (imatges, fitxers d\'àudio, transcripcions, capítols, ...)',
+ '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' => 'Esborrar tota la memòria cau',
'clear_cache_helper' => 'Aquesta opció esborrarà la memòria cau redis o els fitxers de memòria cau.',
'run' => 'Executar la neteja',
diff --git a/modules/Admin/Language/de/Breadcrumb.php b/modules/Admin/Language/de/Breadcrumb.php
index f8368649..2bf0fc70 100644
--- a/modules/Admin/Language/de/Breadcrumb.php
+++ b/modules/Admin/Language/de/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Startseite',
'podcasts' => 'Podcasts',
'episodes' => 'Folgen',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'Administratoren',
'pages' => 'Seiten',
'settings' => 'Einstellungen',
@@ -24,6 +25,7 @@ return [
'persons' => 'Mitwirkende',
'publish' => 'veröffentlichen',
'publish-edit' => 'Veröffentlichung bearbeiten',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'Veröffentlichung aufheben',
'delete' => 'löschen',
'fediverse' => 'Fediversum',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'Videoclips',
'embed' => 'einbettbarer Spieler',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/de/Episode.php b/modules/Admin/Language/de/Episode.php
index eaa881fd..d20fd716 100644
--- a/modules/Admin/Language/de/Episode.php
+++ b/modules/Admin/Language/de/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Bearbeiten',
'publish' => 'Veröffentllichen',
'publish_edit' => 'Veröffentlichung bearbeiten',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Veröffentlichung zurücknehmen',
'publish_error' => 'Folge ist bereits veröffentlicht.',
'publish_edit_error' => 'Folge ist bereits veröffentlicht.',
'publish_cancel_error' => 'Folge ist bereits veröffentlicht.',
+ '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' => 'Folge ist nicht veröffentlicht.',
'delete' => 'Löschen',
'go_to_page' => 'Gehe zu Seite',
@@ -109,6 +113,8 @@ return [
'bonus' => 'Bonus',
'bonus_hint' => 'Zusätzliche Inhalte für die Sendung (zum Beispiel hinter den Kulissen, Informationen oder Interviews mit dem Team) oder übergreifende Promotionsinhalte für eine andere Show',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Elternberatung',
'hint' => 'Enthält die Folge anstößige Inhalte?',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => 'Eine Nachricht zu haben erhöht das soziale Engagement, was zu einer besseren Sichtbarkeit für Ihre Episode führt.',
'message_warning_submit' => 'Trotzdem veröffentlichen',
],
+ '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.",
diff --git a/modules/Admin/Language/de/Podcast.php b/modules/Admin/Language/de/Podcast.php
index cbc1e109..8cff53a1 100644
--- a/modules/Admin/Language/de/Podcast.php
+++ b/modules/Admin/Language/de/Podcast.php
@@ -107,6 +107,9 @@ return [
'monetization_section_title' => 'Monetarisierung',
'monetization_section_subtitle' =>
'Geld dank der Zuhöhrer verdienen.',
+ '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' => 'Zahlungsadresse (Payment Pointer) für Web-Monetarisierung',
'payment_pointer_hint' =>
'Hier erhalten Sie dank Monetarisierung Geld',
diff --git a/modules/Admin/Language/de/PodcastNavigation.php b/modules/Admin/Language/de/PodcastNavigation.php
index ba35a47d..088887f3 100644
--- a/modules/Admin/Language/de/PodcastNavigation.php
+++ b/modules/Admin/Language/de/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => 'Podcast-Player',
'podcast-analytics-listening-time' => 'Hörzeit',
'podcast-analytics-time-periods' => 'Zeiträume',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
'contributors' => 'Administratoren',
'contributor-list' => 'Alle Unterstützer',
'contributor-add' => 'Administrator hinzufügen',
diff --git a/modules/Admin/Language/de/Settings.php b/modules/Admin/Language/de/Settings.php
index f08af7a6..9484c30e 100644
--- a/modules/Admin/Language/de/Settings.php
+++ b/modules/Admin/Language/de/Settings.php
@@ -35,6 +35,8 @@ return [
'reset_counts_helper' => 'Diese Option wird alle Datenzähler neu berechnen und zurücksetzen (Anzahl der Follower, Beiträge, Kommentare, …).',
'rewrite_media' => 'Medien-Metadaten neu schreiben',
'rewrite_media_helper' => 'Diese Option wird alle überflüssigen Mediendateien löschen und neu erstellen (Bilder, Audiodateien, Transkripte, Kapitel …)',
+ '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' => 'Alle Caches löschen',
'clear_cache_helper' => 'Diese Option leert den redis-Cache oder beschreibbare/cache-Dateien.',
'run' => 'Systempflege starten',
diff --git a/modules/Admin/Language/el/Breadcrumb.php b/modules/Admin/Language/el/Breadcrumb.php
index cad9d1b4..38b8ec92 100644
--- a/modules/Admin/Language/el/Breadcrumb.php
+++ b/modules/Admin/Language/el/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Αρχική σελίδα',
'podcasts' => 'podcasts',
'episodes' => 'επεισόδια',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'συντελεστές',
'pages' => 'σελίδες',
'settings' => 'ρυθμίσεις',
@@ -24,6 +25,7 @@ return [
'persons' => 'άτομα',
'publish' => 'δημοσίευση',
'publish-edit' => 'επεξεργασία δημοσίευσης',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'αναίρεση δημοσίευσης',
'delete' => 'διαγραφή',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'βίντεο κλιπς',
'embed' => 'ενσωματώσιμος αναπαραγωγέας',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/el/Episode.php b/modules/Admin/Language/el/Episode.php
index 8dee5476..53c6ea41 100644
--- a/modules/Admin/Language/el/Episode.php
+++ b/modules/Admin/Language/el/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Επεξεργασία',
'publish' => 'Δημοσίευση',
'publish_edit' => 'Επεξεργασία δημοσίευσης',
+ 'publish_date_edit' => 'Edit publication date',
'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!',
'unpublish_error' => 'Το επεισόδιο δεν έχει δημοσιευθεί.',
'delete' => 'Διαγραφή',
'go_to_page' => 'Μετάβαση στη σελίδα',
@@ -109,6 +113,8 @@ return [
'bonus' => 'Μπόνους',
'bonus_hint' => 'Επιπλέον περιεχόμενο για την παράσταση (για παράδειγμα, πίσω από τις σκηνές πληροφορίες ή συνεντεύξεις με τη cast) ή δια-διαφημιστικό περιεχόμενο για μια άλλη παράσταση',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Γονικός σύμβουλος',
'hint' => 'Μήπως το επεισόδιο περιέχει ακατάλληλο περιεχόμενο;',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => 'Έχοντας ένα μήνυμα αυξάνει την κοινωνική δέσμευση, με αποτέλεσμα μια καλύτερη προβολή για το επεισόδιο σας.',
'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',
+ ],
'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.",
diff --git a/modules/Admin/Language/el/Podcast.php b/modules/Admin/Language/el/Podcast.php
index f851435b..a0f061b4 100644
--- a/modules/Admin/Language/el/Podcast.php
+++ b/modules/Admin/Language/el/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/el/PodcastNavigation.php b/modules/Admin/Language/el/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/el/PodcastNavigation.php
+++ b/modules/Admin/Language/el/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/el/Settings.php b/modules/Admin/Language/el/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/el/Settings.php
+++ b/modules/Admin/Language/el/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/es/Breadcrumb.php b/modules/Admin/Language/es/Breadcrumb.php
index fe47d6e8..621ca94e 100644
--- a/modules/Admin/Language/es/Breadcrumb.php
+++ b/modules/Admin/Language/es/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Inicio',
'podcasts' => 'podcasts',
'episodes' => 'episodios',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'colaboradores',
'pages' => 'páginas',
'settings' => 'configuración',
@@ -24,6 +25,7 @@ return [
'persons' => 'personas',
'publish' => 'publicar',
'publish-edit' => 'editar publicación',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'anular publicación',
'delete' => 'borrar',
'fediverse' => 'fediverso',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'clips de vídeo',
'embed' => 'reproductor embebido',
'notifications' => 'notificaciones',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/es/Episode.php b/modules/Admin/Language/es/Episode.php
index 48040395..4cb492e8 100644
--- a/modules/Admin/Language/es/Episode.php
+++ b/modules/Admin/Language/es/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Editar',
'publish' => 'Publicar',
'publish_edit' => 'Editar publicación',
+ 'publish_date_edit' => 'Edit publication date',
'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!',
'unpublish_error' => 'El episodio no está publicado.',
'delete' => 'Borrar',
'go_to_page' => 'Ir a la página',
@@ -109,6 +113,8 @@ return [
'bonus' => 'Extra',
'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',
'parental_advisory' => [
'label' => 'Aviso parental',
'hint' => '¿El episodio contiene contenido explícito?',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => 'Tener un mensaje aumenta el alcance social, resultando en una mejor visibilidad para tu episodio.',
'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',
+ ],
'unpublish_form' => [
'disclaimer' =>
"Al anular la publicación del episodio se eliminarán todos los comentarios y mensajes asociados a él y el episodio será eliminado del feed RSS del podcast.",
diff --git a/modules/Admin/Language/es/Podcast.php b/modules/Admin/Language/es/Podcast.php
index 33abd9b6..c10b2374 100644
--- a/modules/Admin/Language/es/Podcast.php
+++ b/modules/Admin/Language/es/Podcast.php
@@ -107,6 +107,9 @@ return [
'monetization_section_title' => 'Monetización',
'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.',
'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 6e1a4091..8bbe1733 100644
--- a/modules/Admin/Language/es/PodcastNavigation.php
+++ b/modules/Admin/Language/es/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => 'Reproductores',
'podcast-analytics-listening-time' => 'Tiempo de escucha',
'podcast-analytics-time-periods' => 'Periodos de tiempo',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
'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 0094dada..245ee615 100644
--- a/modules/Admin/Language/es/Settings.php
+++ b/modules/Admin/Language/es/Settings.php
@@ -35,6 +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.',
'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 24bece01..f3269bfa 100644
--- a/modules/Admin/Language/fa/Breadcrumb.php
+++ b/modules/Admin/Language/fa/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Home',
'podcasts' => 'podcasts',
'episodes' => 'episodes',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contributors',
'pages' => 'pages',
'settings' => 'settings',
@@ -24,6 +25,7 @@ return [
'persons' => 'persons',
'publish' => 'publish',
'publish-edit' => 'edit publication',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'unpublish',
'delete' => 'delete',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video clips',
'embed' => 'embeddable player',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/fa/Episode.php b/modules/Admin/Language/fa/Episode.php
index ba0922f5..91313a7c 100644
--- a/modules/Admin/Language/fa/Episode.php
+++ b/modules/Admin/Language/fa/Episode.php
@@ -24,10 +24,14 @@ return [
'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',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/fa/Podcast.php b/modules/Admin/Language/fa/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/fa/Podcast.php
+++ b/modules/Admin/Language/fa/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/fa/PodcastNavigation.php b/modules/Admin/Language/fa/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/fa/PodcastNavigation.php
+++ b/modules/Admin/Language/fa/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/fa/Settings.php b/modules/Admin/Language/fa/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/fa/Settings.php
+++ b/modules/Admin/Language/fa/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/fr/Breadcrumb.php b/modules/Admin/Language/fr/Breadcrumb.php
index 12672727..375caa16 100644
--- a/modules/Admin/Language/fr/Breadcrumb.php
+++ b/modules/Admin/Language/fr/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Accueil',
'podcasts' => 'podcasts',
'episodes' => 'épisodes',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contributeurs',
'pages' => 'pages',
'settings' => 'paramètres',
@@ -24,6 +25,7 @@ return [
'persons' => 'intervenants',
'publish' => 'publier',
'publish-edit' => 'modifier la publication',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'dépublier',
'delete' => 'supprimer',
'fediverse' => 'fédiverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'extraits vidéo',
'embed' => 'lecteur intégré',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/fr/Episode.php b/modules/Admin/Language/fr/Episode.php
index 238c868b..dbdf875c 100644
--- a/modules/Admin/Language/fr/Episode.php
+++ b/modules/Admin/Language/fr/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Modifier',
'publish' => 'Publier',
'publish_edit' => 'Modifier la publication',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Dépublier',
'publish_error' => 'L’épisode est déjà publié.',
'publish_edit_error' => 'L’épisode est déjà publié.',
'publish_cancel_error' => 'L’épisode est déjà publié.',
+ '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' => 'L’épisode n’est pas publié.',
'delete' => 'Supprimer',
'go_to_page' => 'Voir',
@@ -109,6 +113,8 @@ return [
'bonus' => 'Bonus',
'bonus_hint' => 'Contenu supplémentaire pour le podcast (par exemple des informations sur les coulisses ou des interviews avec les acteurs) ou du contenu promotionnel croisé pour un autre podcast',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Avertissement parental',
'hint' => 'L’épisode contient-il un contenu explicite ?',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => 'Ajouter un message augmente l’engagement social, menant à une meilleure visibilité pour votre épisode.',
'message_warning_submit' => 'Publier quand même',
],
+ '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.",
diff --git a/modules/Admin/Language/fr/Podcast.php b/modules/Admin/Language/fr/Podcast.php
index 73ac9e86..41255ff2 100644
--- a/modules/Admin/Language/fr/Podcast.php
+++ b/modules/Admin/Language/fr/Podcast.php
@@ -107,6 +107,9 @@ return [
'monetization_section_title' => 'Monétisation',
'monetization_section_subtitle' =>
'Gagnez de l’argent grâce à votre 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' => 'Adresse de paiement (Payment Pointer) pour Web Monetization',
'payment_pointer_hint' =>
'L’adresse où vous recevrez de l’argent grâce à Web Monetization',
diff --git a/modules/Admin/Language/fr/PodcastNavigation.php b/modules/Admin/Language/fr/PodcastNavigation.php
index ddce3a31..86a1bf52 100644
--- a/modules/Admin/Language/fr/PodcastNavigation.php
+++ b/modules/Admin/Language/fr/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => 'Lecteurs',
'podcast-analytics-listening-time' => 'Durée d’écoute',
'podcast-analytics-time-periods' => 'Périodes',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
'contributors' => 'Contributeurs',
'contributor-list' => 'Tous les contributeurs',
'contributor-add' => 'Ajouter un contributeur',
diff --git a/modules/Admin/Language/fr/Settings.php b/modules/Admin/Language/fr/Settings.php
index dfc917a8..e6b0f547 100644
--- a/modules/Admin/Language/fr/Settings.php
+++ b/modules/Admin/Language/fr/Settings.php
@@ -35,6 +35,8 @@ return [
'reset_counts_helper' => 'Cette option recalcule et réinitialise les compteurs de données (nombre d’abonné·e·s, de publications, de commentaires, …).',
'rewrite_media' => 'Réécrire les métadonnées des fichiers média',
'rewrite_media_helper' => 'Cette option supprimera tous les fichiers média superflus et les recréera (images, fichiers audio, transcripts, chapitrages, …)',
+ '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' => 'Supprimer tout le cache',
'clear_cache_helper' => 'Cette option supprimera l’intégralité du cache redis ou des fichiers cache du dossier writable/cache.',
'run' => 'Faire le ménage',
diff --git a/modules/Admin/Language/gd/Breadcrumb.php b/modules/Admin/Language/gd/Breadcrumb.php
index 24bece01..f3269bfa 100644
--- a/modules/Admin/Language/gd/Breadcrumb.php
+++ b/modules/Admin/Language/gd/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Home',
'podcasts' => 'podcasts',
'episodes' => 'episodes',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contributors',
'pages' => 'pages',
'settings' => 'settings',
@@ -24,6 +25,7 @@ return [
'persons' => 'persons',
'publish' => 'publish',
'publish-edit' => 'edit publication',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'unpublish',
'delete' => 'delete',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video clips',
'embed' => 'embeddable player',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/gd/Episode.php b/modules/Admin/Language/gd/Episode.php
index ba0922f5..91313a7c 100644
--- a/modules/Admin/Language/gd/Episode.php
+++ b/modules/Admin/Language/gd/Episode.php
@@ -24,10 +24,14 @@ return [
'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',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/gd/Podcast.php b/modules/Admin/Language/gd/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/gd/Podcast.php
+++ b/modules/Admin/Language/gd/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/gd/PodcastNavigation.php b/modules/Admin/Language/gd/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/gd/PodcastNavigation.php
+++ b/modules/Admin/Language/gd/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/gd/Settings.php b/modules/Admin/Language/gd/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/gd/Settings.php
+++ b/modules/Admin/Language/gd/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/gl/Breadcrumb.php b/modules/Admin/Language/gl/Breadcrumb.php
index 60f9326f..7aa07fba 100644
--- a/modules/Admin/Language/gl/Breadcrumb.php
+++ b/modules/Admin/Language/gl/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Inicio',
'podcasts' => 'podcasts',
'episodes' => 'episodios',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contribúen',
'pages' => 'páxinas',
'settings' => 'axustes',
@@ -24,6 +25,7 @@ return [
'persons' => 'persoas',
'publish' => 'publicar',
'publish-edit' => 'editar publicación',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'retirar publicación',
'delete' => 'eliminar',
'fediverse' => 'fediverso',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'clips de vídeo',
'embed' => 'reprodutor para incluír',
'notifications' => 'notificacións',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/gl/Episode.php b/modules/Admin/Language/gl/Episode.php
index 71c87d04..9e2da4b4 100644
--- a/modules/Admin/Language/gl/Episode.php
+++ b/modules/Admin/Language/gl/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Editar',
'publish' => 'Publicar',
'publish_edit' => 'Editar publicación',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Retirar publicación',
'publish_error' => 'O episodio xa está publicado.',
'publish_edit_error' => 'O episodio xa está publicado.',
'publish_cancel_error' => 'O episodio xa está publicado.',
+ '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' => 'O episodio non foi publicado.',
'delete' => 'Eliminar',
'go_to_page' => 'Ir á páxina',
@@ -109,6 +113,8 @@ return [
'bonus' => 'Extra',
'bonus_hint' => 'Contido extra para o programa (por exemplo, info sobre a elaboración ou conversa casual cos participantes) ou contido promocional de outras creadoras',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Aviso sobre o contido',
'hint' => 'Contén o episodio elementos explícitos?',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => 'Ao escribir unha mensaxe aumentas o alcance social, resultando en maior visibilidade para o teu episodio.',
'message_warning_submit' => 'Publicar igualmente',
],
+ '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' =>
"Retirando o episodio eliminarás tódolos comentarios e publicacións asociadas con el e tamén o eliminarás da fonte RSS do podcast.",
diff --git a/modules/Admin/Language/gl/Podcast.php b/modules/Admin/Language/gl/Podcast.php
index fa9d797d..80e9d971 100644
--- a/modules/Admin/Language/gl/Podcast.php
+++ b/modules/Admin/Language/gl/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/gl/PodcastNavigation.php b/modules/Admin/Language/gl/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/gl/PodcastNavigation.php
+++ b/modules/Admin/Language/gl/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/gl/Settings.php b/modules/Admin/Language/gl/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/gl/Settings.php
+++ b/modules/Admin/Language/gl/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/id/Breadcrumb.php b/modules/Admin/Language/id/Breadcrumb.php
index 02b21072..676e47b7 100644
--- a/modules/Admin/Language/id/Breadcrumb.php
+++ b/modules/Admin/Language/id/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Home',
'podcasts' => 'podcasts',
'episodes' => 'episodes',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contributors',
'pages' => 'pages',
'settings' => 'settings',
@@ -24,6 +25,7 @@ return [
'persons' => 'persons',
'publish' => 'publish',
'publish-edit' => 'edit publication',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'unpublish',
'delete' => 'delete',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video clips',
'embed' => 'embeddable player',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/id/Episode.php b/modules/Admin/Language/id/Episode.php
index ba0922f5..91313a7c 100644
--- a/modules/Admin/Language/id/Episode.php
+++ b/modules/Admin/Language/id/Episode.php
@@ -24,10 +24,14 @@ return [
'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',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/id/Podcast.php b/modules/Admin/Language/id/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/id/Podcast.php
+++ b/modules/Admin/Language/id/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/id/PodcastNavigation.php b/modules/Admin/Language/id/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/id/PodcastNavigation.php
+++ b/modules/Admin/Language/id/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/id/Settings.php b/modules/Admin/Language/id/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/id/Settings.php
+++ b/modules/Admin/Language/id/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/it/Breadcrumb.php b/modules/Admin/Language/it/Breadcrumb.php
index 24bece01..9876ee9b 100644
--- a/modules/Admin/Language/it/Breadcrumb.php
+++ b/modules/Admin/Language/it/Breadcrumb.php
@@ -13,37 +13,40 @@ return [
config('Admin')
->gateway => 'Home',
'podcasts' => 'podcasts',
- 'episodes' => 'episodes',
- 'contributors' => 'contributors',
- 'pages' => 'pages',
- 'settings' => 'settings',
- 'theme' => 'theme',
- 'add' => 'add',
- 'new' => 'new',
- 'edit' => 'edit',
- 'persons' => 'persons',
- 'publish' => 'publish',
- 'publish-edit' => 'edit publication',
- 'unpublish' => 'unpublish',
- 'delete' => 'delete',
- 'fediverse' => 'fediverse',
- 'block-lists' => 'block lists',
- 'users' => 'users',
- 'my-account' => 'my account',
- 'change-password' => 'change password',
- 'import' => 'feed import',
- 'platforms' => 'platforms',
+ 'episodes' => 'episodi',
+ 'subscriptions' => 'sottoscrizioni',
+ 'contributors' => 'collaboratori',
+ 'pages' => 'pagine',
+ 'settings' => 'impostazioni',
+ 'theme' => 'tema',
+ 'add' => 'aggiungi',
+ 'new' => 'nuovo',
+ 'edit' => 'modifica',
+ 'persons' => 'persone',
+ 'publish' => 'pubblica',
+ 'publish-edit' => 'modifica pubblicazione',
+ 'publish-date-edit' => 'edit publication date',
+ 'unpublish' => 'annulla pubblicazione',
+ 'delete' => 'elimina',
+ 'fediverse' => 'fediverso',
+ 'block-lists' => 'elenco bloccati',
+ 'users' => 'utenti',
+ 'my-account' => 'il mio profilo',
+ 'change-password' => 'cambia la password',
+ 'import' => 'importazione feed',
+ 'platforms' => 'piattaforme',
'social' => 'social networks',
- 'funding' => 'funding',
+ 'funding' => 'finanziamento',
'analytics' => 'analytics',
- 'locations' => 'locations',
- 'webpages' => 'web pages',
- 'unique-listeners' => 'unique listeners',
- 'players' => 'players',
- 'listening-time' => 'listening time',
- 'time-periods' => 'time periods',
+ 'locations' => 'posizioni',
+ 'webpages' => 'pagine web',
+ 'unique-listeners' => 'ascoltatori unici',
+ 'players' => 'partecipanti',
+ 'listening-time' => 'tempo di ascolto',
+ 'time-periods' => 'periodo di tempo',
'soundbites' => 'soundbites',
'video-clips' => 'video clips',
- 'embed' => 'embeddable player',
- 'notifications' => 'notifications',
+ 'embed' => 'player incorporabile',
+ 'notifications' => 'notifiche',
+ 'suspend' => 'sospendi',
];
diff --git a/modules/Admin/Language/it/Charts.php b/modules/Admin/Language/it/Charts.php
index 4b33530e..383d7bf8 100644
--- a/modules/Admin/Language/it/Charts.php
+++ b/modules/Admin/Language/it/Charts.php
@@ -9,7 +9,7 @@ declare(strict_types=1);
*/
return [
- 'by_service_weekly' => 'Episode downloads by service (for the past week)',
+ 'by_service_weekly' => 'Episodi scaricati per servizio (settimana passata)',
'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)',
diff --git a/modules/Admin/Language/it/Common.php b/modules/Admin/Language/it/Common.php
index 596c8bcd..bff79dff 100644
--- a/modules/Admin/Language/it/Common.php
+++ b/modules/Admin/Language/it/Common.php
@@ -9,43 +9,43 @@ declare(strict_types=1);
*/
return [
- 'yes' => 'Yes',
+ 'yes' => 'Si',
'no' => 'No',
'cancel' => 'Cancel',
'optional' => 'Optional',
'more' => 'More',
- 'no_data' => 'No data found!',
- 'close' => 'Close',
- 'edit' => 'Edit',
- 'copy' => 'Copy',
- 'copied' => 'Copied!',
+ 'no_data' => 'Nessun dato trovato!',
+ 'close' => 'Chiudi',
+ 'edit' => 'Modifica',
+ 'copy' => 'Copia',
+ 'copied' => 'Copiato!',
'home' => 'Home',
- 'explicit' => 'Explicit',
- 'powered_by' => 'Powered by {castopod}',
- 'actions' => 'Actions',
- 'pageInfo' => 'Page {currentPage} out of {pageCount}',
- 'go_back' => 'Go back',
+ 'explicit' => 'Esplicito',
+ 'powered_by' => 'Fornito da {castopod}',
+ 'actions' => 'Azioni',
+ 'pageInfo' => 'Pagina {currentPage} di {pageCount}',
+ 'go_back' => 'Torna indietro',
'forms' => [
'editor' => [
- 'write' => 'Write',
- 'preview' => 'Preview',
+ 'write' => 'Scrivi',
+ 'preview' => 'Anteprima',
'help' => 'Powered by markdown',
],
'multiSelect' => [
- 'selectText' => 'Press to select',
- 'loadingText' => 'Loading…',
- 'noResultsText' => 'No results found',
+ 'selectText' => 'Premi per selezionare',
+ 'loadingText' => 'Caricamento…',
+ 'noResultsText' => 'Nessun risultato trovato',
'noChoicesText' => 'No choices to choose from',
- 'maxItemText' => 'Cannot add more items',
+ 'maxItemText' => 'Impossibile aggiungere ulteriori elementi',
],
- 'upload_file' => 'Upload a file',
- 'remote_url' => 'Remote URL',
+ 'upload_file' => 'Carica un file',
+ 'remote_url' => 'URL remoto',
],
'play_episode_button' => [
- 'play' => 'Play',
- 'playing' => 'Playing',
+ 'play' => 'Riproduci',
+ 'playing' => 'In riproduzione',
],
'size_limit' => 'Size limit: {0}.',
- 'choose_interact' => 'Choose how to interact',
- 'view' => 'View',
+ 'choose_interact' => 'Scegli come interagire',
+ 'view' => 'Visualizza',
];
diff --git a/modules/Admin/Language/it/Contributor.php b/modules/Admin/Language/it/Contributor.php
index d0f3b93d..ab685c04 100644
--- a/modules/Admin/Language/it/Contributor.php
+++ b/modules/Admin/Language/it/Contributor.php
@@ -9,33 +9,33 @@ declare(strict_types=1);
*/
return [
- 'podcast_contributors' => 'Podcast contributors',
+ 'podcast_contributors' => 'Collaboratori del podcast',
'view' => "{username}'s contribution to {podcastTitle}",
- 'add' => 'Add contributor',
+ 'add' => 'Aggiungi collaboratore',
'add_contributor' => 'Add a contributor for {0}',
'edit_role' => 'Update role for {0}',
- 'edit' => 'Edit',
- 'remove' => 'Remove',
+ 'edit' => 'Modifica',
+ 'remove' => 'Rimuovi',
'list' => [
- 'username' => 'Username',
+ 'username' => 'Nome Utente',
'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',
+ 'user_placeholder' => 'Seleziona un utente…',
+ 'role' => 'Ruolo',
+ 'role_placeholder' => 'Seleziona il suo ruolo…',
+ 'submit_add' => 'Aggiungi collaboratore',
+ 'submit_edit' => 'Aggiorna Ruolo',
],
'roles' => [
- 'podcast_admin' => 'Podcast admin',
+ 'podcast_admin' => 'Amministratore del podcast',
],
'messages' => [
- 'removeOwnerError' => "You can't remove the podcast owner!",
+ 'removeOwnerError' => "Non puoi rimuovere il proprietario del podcast!",
'removeSuccess' =>
- 'You have successfully removed {username} from {podcastTitle}',
+ 'Hai rimosso con successo {username} da {podcastTitle}',
'alreadyAddedError' =>
- "The contributor you're trying to add has already been added!",
+ "Il collaboratore che stai cercando di aggiungere è già stato aggiunto!",
],
];
diff --git a/modules/Admin/Language/it/Countries.php b/modules/Admin/Language/it/Countries.php
index 4cd5d9c8..185d3c37 100644
--- a/modules/Admin/Language/it/Countries.php
+++ b/modules/Admin/Language/it/Countries.php
@@ -12,25 +12,25 @@ declare(strict_types=1);
return [
'AD' => 'Andorra',
- 'AE' => 'United Arab Emirates',
+ 'AE' => 'Emirati Arabi Uniti',
'AF' => 'Afghanistan',
- 'AG' => 'Antigua and Barbuda',
+ 'AG' => 'Antigua e Barbuda',
'AI' => 'Anguilla',
'AL' => 'Albania',
'AM' => 'Armenia',
'AO' => 'Angola',
- 'AQ' => 'Antarctica',
+ 'AQ' => 'Antartide',
'AR' => 'Argentina',
'AS' => 'American Samoa',
'AT' => 'Austria',
'AU' => 'Australia',
'AW' => 'Aruba',
- 'AX' => 'Åland Islands',
- 'AZ' => 'Azerbaijan',
- 'BA' => 'Bosnia and Herzegovina',
+ 'AX' => 'Isole Åland',
+ 'AZ' => 'Azerbaigian',
+ 'BA' => 'Bosnia-Erzegovina',
'BB' => 'Barbados',
'BD' => 'Bangladesh',
- 'BE' => 'Belgium',
+ 'BE' => 'Belgio',
'BF' => 'Burkina Faso',
'BG' => 'Bulgaria',
'BH' => 'Bahrain',
@@ -38,63 +38,63 @@ return [
'BJ' => 'Benin',
'BL' => 'Saint Barthélemy',
'BM' => 'Bermuda',
- 'BN' => 'Brunei Darussalam',
- 'BO' => 'Bolivia, Plurinational State of',
+ 'BN' => 'Sultanato del Brunei',
+ 'BO' => 'Bolivia, Stato Plurinazionale di',
'BQ' => 'Bonaire, Sint Eustatius and Saba',
- 'BR' => 'Brazil',
+ 'BR' => 'Brasile',
'BS' => 'Bahamas',
'BT' => 'Bhutan',
'BV' => 'Bouvet Island',
'BW' => 'Botswana',
- 'BY' => 'Belarus',
+ 'BY' => 'Bielorussia',
'BZ' => 'Belize',
'CA' => 'Canada',
- 'CC' => 'Cocos (Keeling) Islands',
- 'CD' => 'Congo, the Democratic Republic of the',
+ 'CC' => 'Isole Cocos (Keeling)',
+ 'CD' => 'Repubblica Democratica del Congo',
'CF' => 'Central African Republic',
'CG' => 'Congo',
- 'CH' => 'Switzerland',
- 'CI' => "Côte d'Ivoire",
+ 'CH' => 'Svizzera',
+ 'CI' => "Costa d'Avorio",
'CK' => 'Cook Islands',
- 'CL' => 'Chile',
- 'CM' => 'Cameroon',
- 'CN' => 'China',
+ 'CL' => 'Cile',
+ 'CM' => 'Camerun',
+ 'CN' => 'Cina',
'CO' => 'Colombia',
'CR' => 'Costa Rica',
'CU' => 'Cuba',
- 'CV' => 'Cape Verde',
+ 'CV' => 'Capo Verde',
'CW' => 'Curaçao',
'CX' => 'Christmas Island',
- 'CY' => 'Cyprus',
- 'CZ' => 'Czech Republic',
- 'DE' => 'Germany',
+ 'CY' => 'Cipro',
+ 'CZ' => 'Repubblica Ceca',
+ 'DE' => 'Germania',
'DJ' => 'Djibouti',
- 'DK' => 'Denmark',
+ 'DK' => 'Danimarca',
'DM' => 'Dominica',
- 'DO' => 'Dominican Republic',
+ 'DO' => 'Repubblica Domenicana',
'DZ' => 'Algeria',
'EC' => 'Ecuador',
'EE' => 'Estonia',
- 'EG' => 'Egypt',
- 'EH' => 'Western Sahara',
+ 'EG' => 'Egitto',
+ 'EH' => 'Sahara occidentale',
'ER' => 'Eritrea',
- 'ES' => 'Spain',
- 'ET' => 'Ethiopia',
- 'FI' => 'Finland',
+ 'ES' => 'Spagna',
+ 'ET' => 'Etiopia',
+ 'FI' => 'Finlandia',
'FJ' => 'Fiji',
'FK' => 'Falkland Islands (Malvinas)',
'FM' => 'Micronesia, Federated States of',
'FO' => 'Faroe Islands',
- 'FR' => 'France',
+ 'FR' => 'Francia',
'GA' => 'Gabon',
- 'GB' => 'United Kingdom',
- 'GD' => 'Grenada',
+ 'GB' => 'Regno Unito',
+ 'GD' => 'Granada',
'GE' => 'Georgia',
'GF' => 'French Guiana',
'GG' => 'Guernsey',
'GH' => 'Ghana',
'GI' => 'Gibraltar',
- 'GL' => 'Greenland',
+ 'GL' => 'Groenlandia',
'GM' => 'Gambia',
'GN' => 'Guinea',
'GP' => 'Guadeloupe',
@@ -132,22 +132,22 @@ return [
'KM' => 'Comoros',
'KN' => 'Saint Kitts and Nevis',
'KP' => "Korea, Democratic People's Republic of",
- 'KR' => 'Korea, Republic of',
+ 'KR' => 'Corea del Sud (Repubblica di Corea)',
'KW' => 'Kuwait',
'KY' => 'Cayman Islands',
- 'KZ' => 'Kazakhstan',
+ 'KZ' => 'Kazakistan',
'LA' => "Lao People's Democratic Republic",
- 'LB' => 'Lebanon',
+ 'LB' => 'Libano',
'LC' => 'Saint Lucia',
'LI' => 'Liechtenstein',
'LK' => 'Sri Lanka',
'LR' => 'Liberia',
'LS' => 'Lesotho',
- 'LT' => 'Lithuania',
+ 'LT' => 'Lituania',
'LU' => 'Luxembourg',
- 'LV' => 'Latvia',
+ 'LV' => 'Lettonia',
'LY' => 'Libya',
- 'MA' => 'Morocco',
+ 'MA' => 'Marocco',
'MC' => 'Monaco',
'MD' => 'Moldova, Republic of',
'ME' => 'Montenegro',
@@ -177,8 +177,8 @@ return [
'NF' => 'Norfolk Island',
'NG' => 'Nigeria',
'NI' => 'Nicaragua',
- 'NL' => 'Netherlands',
- 'NO' => 'Norway',
+ 'NL' => 'Paesi Bassi',
+ 'NO' => 'Norvegia',
'NP' => 'Nepal',
'NR' => 'Nauru',
'NU' => 'Niue',
@@ -195,7 +195,7 @@ return [
'PN' => 'Pitcairn',
'PR' => 'Puerto Rico',
'PS' => 'Palestine, State of',
- 'PT' => 'Portugal',
+ 'PT' => 'Portogallo',
'PW' => 'Palau',
'PY' => 'Paraguay',
'QA' => 'Qatar',
@@ -244,7 +244,7 @@ return [
'UA' => 'Ukraine',
'UG' => 'Uganda',
'UM' => 'United States Minor Outlying Islands',
- 'US' => 'United States',
+ 'US' => 'Stati Uniti d\'America',
'UY' => 'Uruguay',
'UZ' => 'Uzbekistan',
'VA' => 'Holy See (Vatican City State)',
diff --git a/modules/Admin/Language/it/Episode.php b/modules/Admin/Language/it/Episode.php
index ba0922f5..6cb572a3 100644
--- a/modules/Admin/Language/it/Episode.php
+++ b/modules/Admin/Language/it/Episode.php
@@ -19,22 +19,26 @@ return [
one {# comment}
other {# comments}
}',
- 'all_podcast_episodes' => 'All podcast episodes',
- 'back_to_podcast' => 'Go back to podcast',
- 'edit' => 'Edit',
- 'publish' => 'Publish',
- 'publish_edit' => 'Edit publication',
- 'unpublish' => 'Unpublish',
- 'publish_error' => 'Episode is already published.',
- 'publish_edit_error' => 'Episode is already published.',
- 'publish_cancel_error' => 'Episode is already published.',
- 'unpublish_error' => 'Episode is not published.',
- 'delete' => 'Delete',
- 'go_to_page' => 'Go to page',
- 'create' => 'Add an episode',
+ 'all_podcast_episodes' => 'Tutti gli episodi del podcast',
+ 'back_to_podcast' => 'Torna a podcast',
+ 'edit' => 'Modifica',
+ 'publish' => 'Pubblica',
+ 'publish_edit' => 'Modifica pubblicazione',
+ 'publish_date_edit' => 'Edit publication date',
+ 'unpublish' => 'Annulla pubblicazione',
+ 'publish_error' => 'L\'episodio è già stato pubblicato.',
+ 'publish_edit_error' => 'L\'episodio è già stato pubblicato.',
+ 'publish_cancel_error' => 'L\'episodio è già stato pubblicato.',
+ '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' => 'Episodio non pubblicato.',
+ 'delete' => 'Elimina',
+ 'go_to_page' => 'Vai alla pagina',
+ 'create' => 'Aggiungi un episodio',
'publication_status' => [
- 'published' => 'Published',
- 'with_podcast' => 'Published',
+ 'published' => 'Pubblicato',
+ 'with_podcast' => 'Pubblicato',
'scheduled' => 'Scheduled',
'not_published' => 'Not published',
],
@@ -43,7 +47,7 @@ return [
'search' => [
'placeholder' => 'Search for an episode',
'clear' => 'Clear search',
- 'submit' => 'Search',
+ 'submit' => 'Cerca',
],
'number_of_episodes' => '{numberOfEpisodes, plural,
one {# episode}
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/it/Podcast.php b/modules/Admin/Language/it/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/it/Podcast.php
+++ b/modules/Admin/Language/it/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/it/PodcastNavigation.php b/modules/Admin/Language/it/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/it/PodcastNavigation.php
+++ b/modules/Admin/Language/it/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/it/Settings.php b/modules/Admin/Language/it/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/it/Settings.php
+++ b/modules/Admin/Language/it/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/nl/Breadcrumb.php b/modules/Admin/Language/nl/Breadcrumb.php
index a7183ac1..a5c08f43 100644
--- a/modules/Admin/Language/nl/Breadcrumb.php
+++ b/modules/Admin/Language/nl/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Hoofdpagina',
'podcasts' => 'podcasts',
'episodes' => 'afleveringen',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'bijdragers',
'pages' => 'paginas',
'settings' => 'instellingen',
@@ -24,6 +25,7 @@ return [
'persons' => 'personen',
'publish' => 'publiceren',
'publish-edit' => 'publicatie aanpassen',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'publicatie ongedaan maken',
'delete' => 'verwijder',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video clips',
'embed' => 'integreerbare speler',
'notifications' => 'meldingen',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/nl/Episode.php b/modules/Admin/Language/nl/Episode.php
index 2fa67126..60845744 100644
--- a/modules/Admin/Language/nl/Episode.php
+++ b/modules/Admin/Language/nl/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Bewerken',
'publish' => 'Publiceren',
'publish_edit' => 'Publicatie bewerken',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Publicatie ongedaan maken',
'publish_error' => 'Aflevering is reeds gepubliceerd.',
'publish_edit_error' => 'Aflevering is reeds gepubliceerd.',
'publish_cancel_error' => 'Aflevering is reeds gepubliceerd.',
+ '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' => 'Aflevering is niet gepubliceerd.',
'delete' => 'Verwijder',
'go_to_page' => 'Ga naar pagina',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/nl/Podcast.php b/modules/Admin/Language/nl/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/nl/Podcast.php
+++ b/modules/Admin/Language/nl/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/nl/PodcastNavigation.php b/modules/Admin/Language/nl/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/nl/PodcastNavigation.php
+++ b/modules/Admin/Language/nl/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/nl/Settings.php b/modules/Admin/Language/nl/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/nl/Settings.php
+++ b/modules/Admin/Language/nl/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/nn-NO/Breadcrumb.php b/modules/Admin/Language/nn-NO/Breadcrumb.php
index aed6277a..d59e34ef 100644
--- a/modules/Admin/Language/nn-NO/Breadcrumb.php
+++ b/modules/Admin/Language/nn-NO/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Heim',
'podcasts' => 'podkastar',
'episodes' => 'episodar',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'bidragsytarar',
'pages' => 'sider',
'settings' => 'innstillingar',
@@ -24,6 +25,7 @@ return [
'persons' => 'personar',
'publish' => 'legg ut',
'publish-edit' => 'rediger publiseringa',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'avpubliser',
'delete' => 'slett',
'fediverse' => 'fødiverset',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'videoklypp',
'embed' => 'innbyggbar spelar',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/nn-NO/Episode.php b/modules/Admin/Language/nn-NO/Episode.php
index c98495f0..12a3672a 100644
--- a/modules/Admin/Language/nn-NO/Episode.php
+++ b/modules/Admin/Language/nn-NO/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Rediger',
'publish' => 'Legg ut',
'publish_edit' => 'Rediger publiseringa',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Avpubliser',
'publish_error' => 'Episoden er allereie publisert.',
'publish_edit_error' => 'Episoden er allereie publisert.',
'publish_cancel_error' => 'Episoden er allereie publisert.',
+ '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' => 'Episoden er ikkje publisert.',
'delete' => 'Slett',
'go_to_page' => 'Gå til side',
@@ -109,6 +113,8 @@ return [
'bonus' => 'Bonus',
'bonus_hint' => 'Ekstra innhald (til dømes bakominfo eller intervju med skodespelarane) eller innhald for å framheva ein annan serie',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Råd til foreldre',
'hint' => 'Inneheld episoden grov prat?',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => 'Viss du skriv ei melding, kan det gje meir sosialt engasjement og syta for at episoden din blir meir synleg.',
'message_warning_submit' => 'Legg ut likevel',
],
+ '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.",
diff --git a/modules/Admin/Language/nn-NO/Podcast.php b/modules/Admin/Language/nn-NO/Podcast.php
index 803a56e6..f18cefc2 100644
--- a/modules/Admin/Language/nn-NO/Podcast.php
+++ b/modules/Admin/Language/nn-NO/Podcast.php
@@ -107,6 +107,9 @@ return [
'monetization_section_title' => 'Kommersialisering',
'monetization_section_subtitle' =>
'Ten pengar med hjelp frå publikummet ditt.',
+ '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' => 'Betalingspunkt for nettkommersialisering',
'payment_pointer_hint' =>
'Det er her du vil få inn pengar frå nettkommersialiseringa',
diff --git a/modules/Admin/Language/nn-NO/PodcastNavigation.php b/modules/Admin/Language/nn-NO/PodcastNavigation.php
index cf628d0e..d62080ae 100644
--- a/modules/Admin/Language/nn-NO/PodcastNavigation.php
+++ b/modules/Admin/Language/nn-NO/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => 'Spelarar',
'podcast-analytics-listening-time' => 'Lyttetid',
'podcast-analytics-time-periods' => 'Tidsperiodar',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
'contributors' => 'Bidragsytarar',
'contributor-list' => 'Alle bidragsytarane',
'contributor-add' => 'Legg til bidragsytar',
diff --git a/modules/Admin/Language/nn-NO/Settings.php b/modules/Admin/Language/nn-NO/Settings.php
index 2ef7b6c9..6d9f6641 100644
--- a/modules/Admin/Language/nn-NO/Settings.php
+++ b/modules/Admin/Language/nn-NO/Settings.php
@@ -35,6 +35,8 @@ return [
'reset_counts_helper' => 'Dette nullstiller alle datateljarar (tal på fylgjarar, innlegg, kommentarar…).',
'rewrite_media' => 'Overskriv metadata for medium',
'rewrite_media_helper' => 'Dette vil sletta alle overflødige mediafiler og laga dei på nytt (bilete, lydfiler, transkriberingar, kapittel, …)',
+ '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' => 'Slett bufferinnhald',
'clear_cache_helper' => 'Dette tømmer redis-mellomlageret eller skrivbare/mellomlagra filer.',
'run' => 'Gjer reinhald',
diff --git a/modules/Admin/Language/oc/Breadcrumb.php b/modules/Admin/Language/oc/Breadcrumb.php
index 24bece01..f3269bfa 100644
--- a/modules/Admin/Language/oc/Breadcrumb.php
+++ b/modules/Admin/Language/oc/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Home',
'podcasts' => 'podcasts',
'episodes' => 'episodes',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contributors',
'pages' => 'pages',
'settings' => 'settings',
@@ -24,6 +25,7 @@ return [
'persons' => 'persons',
'publish' => 'publish',
'publish-edit' => 'edit publication',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'unpublish',
'delete' => 'delete',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video clips',
'embed' => 'embeddable player',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/oc/Episode.php b/modules/Admin/Language/oc/Episode.php
index ba0922f5..91313a7c 100644
--- a/modules/Admin/Language/oc/Episode.php
+++ b/modules/Admin/Language/oc/Episode.php
@@ -24,10 +24,14 @@ return [
'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',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/oc/Podcast.php b/modules/Admin/Language/oc/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/oc/Podcast.php
+++ b/modules/Admin/Language/oc/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/oc/PodcastNavigation.php b/modules/Admin/Language/oc/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/oc/PodcastNavigation.php
+++ b/modules/Admin/Language/oc/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/oc/Settings.php b/modules/Admin/Language/oc/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/oc/Settings.php
+++ b/modules/Admin/Language/oc/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/pl/Breadcrumb.php b/modules/Admin/Language/pl/Breadcrumb.php
index 0030fb60..d472ef10 100644
--- a/modules/Admin/Language/pl/Breadcrumb.php
+++ b/modules/Admin/Language/pl/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Początek',
'podcasts' => 'podcasty',
'episodes' => 'odcinki',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'kontrybutorzy',
'pages' => 'strony',
'settings' => 'ustawienia',
@@ -24,6 +25,7 @@ return [
'persons' => 'osoby',
'publish' => 'publikuj',
'publish-edit' => 'edytuj publikację',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'cofnij publikację',
'delete' => 'usuń',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'klipy wideo',
'embed' => 'odtwarzacz do osadzenia',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/pl/Episode.php b/modules/Admin/Language/pl/Episode.php
index f82ccfda..ee45c805 100644
--- a/modules/Admin/Language/pl/Episode.php
+++ b/modules/Admin/Language/pl/Episode.php
@@ -25,10 +25,14 @@ return [
'edit' => 'Edytuj',
'publish' => 'Publikuj',
'publish_edit' => 'Edytuj publikację',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Cofnij publikację',
'publish_error' => 'Odcinek jest już opublikowany.',
'publish_edit_error' => 'Odcinek jest już opublikowany.',
'publish_cancel_error' => 'Odcinek jest już opublikowany.',
+ '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' => 'Odcinek nie jest opublikowany.',
'delete' => 'Usuń',
'go_to_page' => 'Przejdź do strony',
@@ -110,6 +114,8 @@ return [
'bonus' => 'Bonus',
'bonus_hint' => 'Dodatkowa treść do programu (np. informacje zza kulis lub wywiady z obsadą) albo treści promujące inne programy',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Kontrola rodzicielska',
'hint' => 'Czy odcinek zawiera treści dla dorosłych?',
@@ -177,6 +183,11 @@ return [
'message_warning_hint' => 'Posiadanie wiadomości zwiększa zaangażowanie społeczne, co skutkuje lepszą widocznością Twojego odcinka.',
'message_warning_submit' => 'Opublikuj mimo to',
],
+ '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.",
diff --git a/modules/Admin/Language/pl/Podcast.php b/modules/Admin/Language/pl/Podcast.php
index 2b6ed3f5..5aa92ff8 100644
--- a/modules/Admin/Language/pl/Podcast.php
+++ b/modules/Admin/Language/pl/Podcast.php
@@ -107,6 +107,9 @@ return [
'monetization_section_title' => 'Monetyzacja',
'monetization_section_subtitle' =>
'Zarabiaj dzięki swoim odbiorcom.',
+ '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' => 'Wskaźnik płatności do zarabiania w sieci',
'payment_pointer_hint' =>
'To tutaj otrzymasz pieniądze dzięki Monetyzacji Internetowej',
diff --git a/modules/Admin/Language/pl/PodcastNavigation.php b/modules/Admin/Language/pl/PodcastNavigation.php
index 38b73ffb..7f3327f1 100644
--- a/modules/Admin/Language/pl/PodcastNavigation.php
+++ b/modules/Admin/Language/pl/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => 'Odtwarzacze',
'podcast-analytics-listening-time' => 'Czas odsłuchu',
'podcast-analytics-time-periods' => 'Okresy czasu',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
'contributors' => 'Kontrybutorzy',
'contributor-list' => 'Wszyscy kontrybutorzy',
'contributor-add' => 'Dodaj kontrybutora',
diff --git a/modules/Admin/Language/pl/Settings.php b/modules/Admin/Language/pl/Settings.php
index 308012ae..09bcfde0 100644
--- a/modules/Admin/Language/pl/Settings.php
+++ b/modules/Admin/Language/pl/Settings.php
@@ -35,6 +35,8 @@ return [
'reset_counts_helper' => 'Ta opcja zresetuje i ponownie obliczy wszystkie liczniki danych (liczbę obserwujących, wpisów, komentarzy, …).',
'rewrite_media' => 'Przepisz metadane multimediów',
'rewrite_media_helper' => 'Ta opcja usunie wszystkie zbędne pliki multimedialne i odtworzy je (obrazy, pliki audio, transkrypcje, rozdziały, …)',
+ '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' => 'Wyczyść całą pamięć podręczną',
'clear_cache_helper' => 'Ta opcja opróżni pamięć podręczną (cache) redis lub zapisywalne/buforowane pliki.',
'run' => 'Przeprowadź porządkowanie',
diff --git a/modules/Admin/Language/pt-BR/Breadcrumb.php b/modules/Admin/Language/pt-BR/Breadcrumb.php
index 42c5e23c..028fb11c 100644
--- a/modules/Admin/Language/pt-BR/Breadcrumb.php
+++ b/modules/Admin/Language/pt-BR/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Início',
'podcasts' => 'podcasts',
'episodes' => 'episódios',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contribuidores',
'pages' => 'páginas',
'settings' => 'configurações',
@@ -24,6 +25,7 @@ return [
'persons' => 'pessoas',
'publish' => 'publicar',
'publish-edit' => 'editar publicação',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'despublicar',
'delete' => 'excluir',
'fediverse' => 'fediverso',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'clipes de vídeo',
'embed' => 'player incorporável',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/pt-BR/Episode.php b/modules/Admin/Language/pt-BR/Episode.php
index cd15c64b..b89d4401 100644
--- a/modules/Admin/Language/pt-BR/Episode.php
+++ b/modules/Admin/Language/pt-BR/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => 'Editar',
'publish' => 'Publicar',
'publish_edit' => 'Editar publicação',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Despublicar',
'publish_error' => 'O episódio já está publicado.',
'publish_edit_error' => 'O episódio já está publicado.',
'publish_cancel_error' => 'O episódio já 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!',
'unpublish_error' => 'O episódio não está publicado.',
'delete' => 'Excluir',
'go_to_page' => 'Ir para a página',
@@ -109,6 +113,8 @@ return [
'bonus' => 'Bônus',
'bonus_hint' => 'Conteúdo extra para o podcast (por exemplo, informações nos bastidores ou entrevistas com o elenco) ou conteúdo promocional com outro podcast',
],
+ 'premium_title' => 'Premium',
+ 'premium' => 'Episode must be accessible to premium subscribers only',
'parental_advisory' => [
'label' => 'Aviso aos pais',
'hint' => 'O episódio contém conteúdo explícito?',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => 'Ter uma mensagem aumenta o engajamento social, resultando em uma melhor visibilidade do seu episódio.',
'message_warning_submit' => 'Publicar mesmo assim',
],
+ '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.",
diff --git a/modules/Admin/Language/pt-BR/Podcast.php b/modules/Admin/Language/pt-BR/Podcast.php
index e0815d50..c7e30aa3 100644
--- a/modules/Admin/Language/pt-BR/Podcast.php
+++ b/modules/Admin/Language/pt-BR/Podcast.php
@@ -107,6 +107,9 @@ return [
'monetization_section_title' => 'Monetização',
'monetization_section_subtitle' =>
'Ganhe dinheiro graças à sua audiência.',
+ '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' => 'Endereço de pagamento (Payment Pointer) para web monetização',
'payment_pointer_hint' =>
'Este é o seu lugar onde você receberá dinheiro graças à web monetização',
diff --git a/modules/Admin/Language/pt-BR/PodcastNavigation.php b/modules/Admin/Language/pt-BR/PodcastNavigation.php
index 2214743c..91e41655 100644
--- a/modules/Admin/Language/pt-BR/PodcastNavigation.php
+++ b/modules/Admin/Language/pt-BR/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => 'Players',
'podcast-analytics-listening-time' => 'Tempo de escuta',
'podcast-analytics-time-periods' => 'Períodos de tempo',
+ 'premium' => 'Premium',
+ 'subscription-list' => 'All subscriptions',
+ 'subscription-add' => 'Add subscription',
'contributors' => 'Contribuidores',
'contributor-list' => 'Todos os contribuidores',
'contributor-add' => 'Adicionar contribuidor',
diff --git a/modules/Admin/Language/pt-BR/Settings.php b/modules/Admin/Language/pt-BR/Settings.php
index 23147fee..84146001 100644
--- a/modules/Admin/Language/pt-BR/Settings.php
+++ b/modules/Admin/Language/pt-BR/Settings.php
@@ -35,6 +35,8 @@ return [
'reset_counts_helper' => 'Esta opção irá recalcular e redefinir todas as contagens de dados (número de seguidores, publicações, comentários, …).',
'rewrite_media' => 'Reescrever metadados de mídia',
'rewrite_media_helper' => 'Esta opção apagará todos os arquivos de mídia desnecessários e os recriará (imagens, arquivos de áudio, transcrições, 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.',
'clear_cache' => 'Limpar todo o cache',
'clear_cache_helper' => 'Esta opção irá liberar o cache do redis ou arquivos graváveis/cache.',
'run' => 'Executar manutenção',
diff --git a/modules/Admin/Language/pt/Breadcrumb.php b/modules/Admin/Language/pt/Breadcrumb.php
index 24bece01..f3269bfa 100644
--- a/modules/Admin/Language/pt/Breadcrumb.php
+++ b/modules/Admin/Language/pt/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Home',
'podcasts' => 'podcasts',
'episodes' => 'episodes',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contributors',
'pages' => 'pages',
'settings' => 'settings',
@@ -24,6 +25,7 @@ return [
'persons' => 'persons',
'publish' => 'publish',
'publish-edit' => 'edit publication',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'unpublish',
'delete' => 'delete',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video clips',
'embed' => 'embeddable player',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/pt/Episode.php b/modules/Admin/Language/pt/Episode.php
index ba0922f5..91313a7c 100644
--- a/modules/Admin/Language/pt/Episode.php
+++ b/modules/Admin/Language/pt/Episode.php
@@ -24,10 +24,14 @@ return [
'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',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/pt/Podcast.php b/modules/Admin/Language/pt/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/pt/Podcast.php
+++ b/modules/Admin/Language/pt/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/pt/PodcastNavigation.php b/modules/Admin/Language/pt/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/pt/PodcastNavigation.php
+++ b/modules/Admin/Language/pt/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/pt/Settings.php b/modules/Admin/Language/pt/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/pt/Settings.php
+++ b/modules/Admin/Language/pt/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/ru/Breadcrumb.php b/modules/Admin/Language/ru/Breadcrumb.php
index d0ad26ac..33432cfd 100644
--- a/modules/Admin/Language/ru/Breadcrumb.php
+++ b/modules/Admin/Language/ru/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Главная',
'podcasts' => 'подкасты',
'episodes' => 'выпуски',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'участников',
'pages' => 'страниц',
'settings' => 'настройки',
@@ -24,6 +25,7 @@ return [
'persons' => 'лица',
'publish' => 'публикация',
'publish-edit' => 'редактировать публикацию',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'снять с публикации',
'delete' => 'удалить',
'fediverse' => 'Федивёрс',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'видео клипы',
'embed' => 'встроенный плеер',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/ru/Episode.php b/modules/Admin/Language/ru/Episode.php
index ba0922f5..91313a7c 100644
--- a/modules/Admin/Language/ru/Episode.php
+++ b/modules/Admin/Language/ru/Episode.php
@@ -24,10 +24,14 @@ return [
'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',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/ru/Podcast.php b/modules/Admin/Language/ru/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/ru/Podcast.php
+++ b/modules/Admin/Language/ru/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/ru/PodcastNavigation.php b/modules/Admin/Language/ru/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/ru/PodcastNavigation.php
+++ b/modules/Admin/Language/ru/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/ru/Settings.php b/modules/Admin/Language/ru/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/ru/Settings.php
+++ b/modules/Admin/Language/ru/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/sk/Breadcrumb.php b/modules/Admin/Language/sk/Breadcrumb.php
index 34a69e4a..3c742281 100644
--- a/modules/Admin/Language/sk/Breadcrumb.php
+++ b/modules/Admin/Language/sk/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Úvod',
'podcasts' => 'podcasty',
'episodes' => 'časti',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'prispievatelia',
'pages' => 'stránky',
'settings' => 'nastavenia',
@@ -24,6 +25,7 @@ return [
'persons' => 'osobnosti',
'publish' => 'zverejniť',
'publish-edit' => 'upraviť zverejnené',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'zrušiť zverejnenie',
'delete' => 'vymazať',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video klipy',
'embed' => 'vnorený',
'notifications' => 'oboznámenia',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/sk/Episode.php b/modules/Admin/Language/sk/Episode.php
index 93730ec0..a731c0e2 100644
--- a/modules/Admin/Language/sk/Episode.php
+++ b/modules/Admin/Language/sk/Episode.php
@@ -26,10 +26,14 @@ return [
'edit' => 'Upraviť',
'publish' => 'Zverejniť',
'publish_edit' => 'Upraviť zverejnenie',
+ 'publish_date_edit' => 'Edit publication date',
'unpublish' => 'Zrušiť zverejnenie',
'publish_error' => 'Epizóda je už zverejnená.',
'publish_edit_error' => 'Epizóda je už zverejnená.',
'publish_cancel_error' => 'Epizóda je už zverejnená.',
+ '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' => 'Epizóda nie je zverejnená.',
'delete' => 'Vymazať',
'go_to_page' => 'Prejsť na stránku',
@@ -113,6 +117,8 @@ return [
'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?',
@@ -180,6 +186,11 @@ return [
'message_warning_hint' => 'Odoslaním uvádzacieho príspevku zlepšujete sociálnu účasť, čím môžete ešte viac zviditeľniť váš podcast.',
'message_warning_submit' => 'Napriek tomu zverejniť',
],
+ '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.",
diff --git a/modules/Admin/Language/sk/Podcast.php b/modules/Admin/Language/sk/Podcast.php
index 5585a766..5e65da72 100644
--- a/modules/Admin/Language/sk/Podcast.php
+++ b/modules/Admin/Language/sk/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/sk/PodcastNavigation.php b/modules/Admin/Language/sk/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/sk/PodcastNavigation.php
+++ b/modules/Admin/Language/sk/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/sk/Settings.php b/modules/Admin/Language/sk/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/sk/Settings.php
+++ b/modules/Admin/Language/sk/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/sv/Breadcrumb.php b/modules/Admin/Language/sv/Breadcrumb.php
index 24bece01..f3269bfa 100644
--- a/modules/Admin/Language/sv/Breadcrumb.php
+++ b/modules/Admin/Language/sv/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => 'Home',
'podcasts' => 'podcasts',
'episodes' => 'episodes',
+ 'subscriptions' => 'subscriptions',
'contributors' => 'contributors',
'pages' => 'pages',
'settings' => 'settings',
@@ -24,6 +25,7 @@ return [
'persons' => 'persons',
'publish' => 'publish',
'publish-edit' => 'edit publication',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => 'unpublish',
'delete' => 'delete',
'fediverse' => 'fediverse',
@@ -46,4 +48,5 @@ return [
'video-clips' => 'video clips',
'embed' => 'embeddable player',
'notifications' => 'notifications',
+ 'suspend' => 'suspend',
];
diff --git a/modules/Admin/Language/sv/Episode.php b/modules/Admin/Language/sv/Episode.php
index ba0922f5..91313a7c 100644
--- a/modules/Admin/Language/sv/Episode.php
+++ b/modules/Admin/Language/sv/Episode.php
@@ -24,10 +24,14 @@ return [
'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',
@@ -109,6 +113,8 @@ return [
'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?',
@@ -176,6 +182,11 @@ return [
'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.",
diff --git a/modules/Admin/Language/sv/Podcast.php b/modules/Admin/Language/sv/Podcast.php
index 19a022b5..426b763b 100644
--- a/modules/Admin/Language/sv/Podcast.php
+++ b/modules/Admin/Language/sv/Podcast.php
@@ -107,6 +107,9 @@ return [
'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',
diff --git a/modules/Admin/Language/sv/PodcastNavigation.php b/modules/Admin/Language/sv/PodcastNavigation.php
index b6195731..b4d7ddc0 100644
--- a/modules/Admin/Language/sv/PodcastNavigation.php
+++ b/modules/Admin/Language/sv/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'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',
diff --git a/modules/Admin/Language/sv/Settings.php b/modules/Admin/Language/sv/Settings.php
index 345976be..4a70dcba 100644
--- a/modules/Admin/Language/sv/Settings.php
+++ b/modules/Admin/Language/sv/Settings.php
@@ -35,6 +35,8 @@ return [
'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',
diff --git a/modules/Admin/Language/zh-Hans/Breadcrumb.php b/modules/Admin/Language/zh-Hans/Breadcrumb.php
index b41de54f..80105ec3 100644
--- a/modules/Admin/Language/zh-Hans/Breadcrumb.php
+++ b/modules/Admin/Language/zh-Hans/Breadcrumb.php
@@ -14,6 +14,7 @@ return [
->gateway => '主页',
'podcasts' => '播客',
'episodes' => '剧集',
+ 'subscriptions' => '订阅',
'contributors' => '贡献者',
'pages' => '页',
'settings' => '设置',
@@ -24,6 +25,7 @@ return [
'persons' => '人',
'publish' => '发布',
'publish-edit' => '编辑发布',
+ 'publish-date-edit' => 'edit publication date',
'unpublish' => '取消发布',
'delete' => '删除',
'fediverse' => '联邦宇宙',
@@ -46,4 +48,5 @@ return [
'video-clips' => '视频素材',
'embed' => '嵌入式播放器',
'notifications' => '通知',
+ 'suspend' => '暂停',
];
diff --git a/modules/Admin/Language/zh-Hans/Episode.php b/modules/Admin/Language/zh-Hans/Episode.php
index c6a3f2d0..7a8f335a 100644
--- a/modules/Admin/Language/zh-Hans/Episode.php
+++ b/modules/Admin/Language/zh-Hans/Episode.php
@@ -24,10 +24,14 @@ return [
'edit' => '编辑',
'publish' => '发布',
'publish_edit' => '编辑发布',
+ 'publish_date_edit' => 'Edit publication date',
'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!',
'unpublish_error' => '剧集尚未发布。',
'delete' => '删除',
'go_to_page' => '转到页面',
@@ -109,6 +113,8 @@ return [
'bonus' => '奖金',
'bonus_hint' => '剧集趣闻(例如,幕后信息与对演员的采访)或另一个剧集的推荐',
],
+ 'premium_title' => '高级版',
+ 'premium' => '剧集仅允许高级订阅者访问',
'parental_advisory' => [
'label' => '警告标记',
'hint' => '剧集是否包含限制级内容?',
@@ -176,6 +182,11 @@ return [
'message_warning_hint' => '有消息发送可以增加社交参与度,从而提高你的剧集曝光度。',
'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',
+ ],
'unpublish_form' => [
'disclaimer' =>
"取消发布该剧集将删除相关的所有评论和播文,并将其从播客的订阅源中删除。",
diff --git a/modules/Admin/Language/zh-Hans/Podcast.php b/modules/Admin/Language/zh-Hans/Podcast.php
index 7e231b81..1a145c20 100644
--- a/modules/Admin/Language/zh-Hans/Podcast.php
+++ b/modules/Admin/Language/zh-Hans/Podcast.php
@@ -107,6 +107,9 @@ return [
'monetization_section_title' => '货币化',
'monetization_section_subtitle' =>
'感谢你的听众支持。',
+ 'premium' => '高级版',
+ 'premium_by_default' => '剧集必须默认设置为付费会员订阅。',
+ 'premium_by_default_hint' => '默认情况下,播客剧集将被标记为高级。 你仍然可以选择将某些剧集、预告片等设置为公开。',
'payment_pointer' => '网络货币化支付指南',
'payment_pointer_hint' =>
'借助网络货币化,你可以在此收款',
diff --git a/modules/Admin/Language/zh-Hans/PodcastNavigation.php b/modules/Admin/Language/zh-Hans/PodcastNavigation.php
index ba11a317..75564b13 100644
--- a/modules/Admin/Language/zh-Hans/PodcastNavigation.php
+++ b/modules/Admin/Language/zh-Hans/PodcastNavigation.php
@@ -25,6 +25,9 @@ return [
'podcast-analytics-players' => '播放',
'podcast-analytics-listening-time' => '收听时间',
'podcast-analytics-time-periods' => '时间段',
+ 'premium' => '高级版',
+ 'subscription-list' => '所有订阅',
+ 'subscription-add' => '添加订阅',
'contributors' => '贡献者',
'contributor-list' => '所有贡献者',
'contributor-add' => '添加贡献者',
diff --git a/modules/Admin/Language/zh-Hans/Settings.php b/modules/Admin/Language/zh-Hans/Settings.php
index 8c7768ce..10875b1e 100644
--- a/modules/Admin/Language/zh-Hans/Settings.php
+++ b/modules/Admin/Language/zh-Hans/Settings.php
@@ -35,6 +35,8 @@ return [
'reset_counts_helper' => '此选项将重新计算并重置所有数据统计(关注者数目、帖子、评论、 …)。',
'rewrite_media' => '重写媒体元数据',
'rewrite_media_helper' => '此选项将删除所有多余的媒体文件并重新创建(图像、音频、字幕、章节、 …)',
+ 'rename_episodes_files' => '重命名剧集音频文件',
+ 'rename_episodes_files_hint' => '此选项会将所有剧集音频文件重命名为随机字符串。 如果你的私人剧集链接被泄露,使用此选项可以隐藏。',
'clear_cache' => '清除所有缓存',
'clear_cache_helper' => '此选项将从可写/缓存文件夹中删除整个 redis 缓存或缓存文件。',
'run' => '运行维护任务',
diff --git a/modules/PremiumPodcasts/Language/ar/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/ar/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/ar/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/ar/Subscription.php b/modules/PremiumPodcasts/Language/ar/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/ar/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/br/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/br/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/br/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/br/Subscription.php b/modules/PremiumPodcasts/Language/br/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/br/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/ca/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/ca/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/ca/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/ca/Subscription.php b/modules/PremiumPodcasts/Language/ca/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/ca/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/de/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/de/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/de/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/de/Subscription.php b/modules/PremiumPodcasts/Language/de/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/de/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/el/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/el/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/el/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/el/Subscription.php b/modules/PremiumPodcasts/Language/el/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/el/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/es/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/es/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/es/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/es/Subscription.php b/modules/PremiumPodcasts/Language/es/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/es/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/fa/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/fa/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/fa/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/fa/Subscription.php b/modules/PremiumPodcasts/Language/fa/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/fa/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/fr/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/fr/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/fr/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/fr/Subscription.php b/modules/PremiumPodcasts/Language/fr/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/fr/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/gd/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/gd/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/gd/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/gd/Subscription.php b/modules/PremiumPodcasts/Language/gd/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/gd/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/gl/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/gl/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/gl/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/gl/Subscription.php b/modules/PremiumPodcasts/Language/gl/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/gl/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/id/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/id/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/id/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/id/Subscription.php b/modules/PremiumPodcasts/Language/id/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/id/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/it/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/it/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/it/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/it/Subscription.php b/modules/PremiumPodcasts/Language/it/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/it/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/nl/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/nl/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/nl/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/nl/Subscription.php b/modules/PremiumPodcasts/Language/nl/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/nl/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/nn-NO/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/nn-NO/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/nn-NO/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/nn-NO/Subscription.php b/modules/PremiumPodcasts/Language/nn-NO/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/nn-NO/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/oc/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/oc/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/oc/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/oc/Subscription.php b/modules/PremiumPodcasts/Language/oc/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/oc/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/pl/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/pl/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/pl/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/pl/Subscription.php b/modules/PremiumPodcasts/Language/pl/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/pl/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/pt-BR/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/pt-BR/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/pt-BR/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/pt-BR/Subscription.php b/modules/PremiumPodcasts/Language/pt-BR/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/pt-BR/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/pt/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/pt/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/pt/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/pt/Subscription.php b/modules/PremiumPodcasts/Language/pt/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/pt/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/ru/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/ru/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/ru/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/ru/Subscription.php b/modules/PremiumPodcasts/Language/ru/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/ru/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/sk/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/sk/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/sk/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/sk/Subscription.php b/modules/PremiumPodcasts/Language/sk/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/sk/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/sv/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/sv/PremiumPodcasts.php
new file mode 100644
index 00000000..18c0dd4e
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/sv/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/sv/Subscription.php b/modules/PremiumPodcasts/Language/sv/Subscription.php
new file mode 100644
index 00000000..f8af256f
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/sv/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}',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/zh-Hans/PremiumPodcasts.php b/modules/PremiumPodcasts/Language/zh-Hans/PremiumPodcasts.php
new file mode 100644
index 00000000..8723a611
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/zh-Hans/PremiumPodcasts.php
@@ -0,0 +1,34 @@
+ '播客包含优质剧集',
+ 'episode_is_premium' => '剧集是高级内容,仅适用于高级订阅者',
+ 'unlock_episode' => '本集仅适用于高级订阅者。 点击解锁!',
+ 'banner_unlock' => '此播客包含高级剧集,仅供高级订阅者使用。',
+ 'banner_lock' => '播客已解锁,享受优质剧集!',
+ 'subscribe' => '订阅',
+ 'lock' => '锁定',
+ 'unlock' => '解锁',
+ 'unlock_form' => [
+ 'title' => '高级内容',
+ 'subtitle' => '此播客包含锁定的高级剧集! 你有解锁它们的秘钥吗?',
+ 'token' => '输入你的密钥',
+ 'token_hint' => '如果你订阅了 {podcastTitle},可以复制通过电子邮件发送给你的密钥并将其粘贴到此处。',
+ 'submit' => '解锁所有剧集!',
+ 'call_to_action' => '解锁 {podcastTitle} 的所有剧集:',
+ 'subscribe_cta' => '现在订阅 !',
+ ],
+ 'messages' => [
+ 'unlockSuccess' => '播客已成功解锁! 享受优质剧集!',
+ 'unlockBadAttempt' => '你的密钥似乎不起作用...',
+ 'lockSuccess' => '播客已成功锁定!',
+ ],
+];
diff --git a/modules/PremiumPodcasts/Language/zh-Hans/Subscription.php b/modules/PremiumPodcasts/Language/zh-Hans/Subscription.php
new file mode 100644
index 00000000..ceaeb7df
--- /dev/null
+++ b/modules/PremiumPodcasts/Language/zh-Hans/Subscription.php
@@ -0,0 +1,100 @@
+ 'Podcast subscriptions',
+ 'add' => '新订阅',
+ 'view' => '查看订阅',
+ 'edit' => '编辑订阅',
+ 'regenerate_token' => '重新生成令牌',
+ 'suspend' => '停止订阅',
+ 'resume' => '恢复订阅',
+ 'delete' => '删除订阅',
+ 'status' => [
+ 'active' => '活动',
+ 'suspended' => '已暂停',
+ 'expired' => '已过期',
+ ],
+ 'list' => [
+ 'number' => '编号',
+ 'email' => '邮箱',
+ 'expiration_date' => '到期日',
+ 'unlimited' => '无限制',
+ 'downloads' => '下载',
+ 'status' => '状态',
+ ],
+ 'form' => [
+ 'email' => '邮箱',
+ 'expiration_date' => '到期日',
+ 'expiration_date_hint' => '订阅到期的日期和时间。 留空时没有订阅限制。',
+ 'submit_add' => '添加订阅',
+ 'submit_edit' => '编辑订阅',
+ ],
+ 'form_link_add' => [
+ 'link' => '订阅页面链接',
+ 'link_hint' => '在网站中添加号召性用语,邀请听众订阅播客。',
+ 'submit' => '保存链接',
+ ],
+ 'suspend_form' => [
+ 'disclaimer' => '暂停订阅将限制订阅者访问高级内容。你仍然可以在之后取消暂停。',
+ 'reason' => '原因',
+ 'reason_placeholder' => '您为什么要暂停订阅?',
+ "submit" => '暂停订阅',
+ ],
+ 'delete_form' => [
+ 'disclaimer' => '删除 {subscriber} 的订阅将删除所有相关的分析数据。',
+ 'understand' => '我明白,永久删除订阅',
+ 'submit' => '移除订阅',
+ ],
+ 'messages' => [
+ 'addSuccess' => '添加了新订阅! 欢迎电子邮件已发送给 {subscriber}。',
+ 'addError' => '无法添加订阅。',
+ 'editSuccess' => '订阅到期日期已更新! 一封电子邮件已发送给 {subscriber}。',
+ 'editError' => '无法添加订阅。',
+ 'regenerateTokenSuccess' => '重新生成令牌! 一封带有新令牌的电子邮件已发送给 {subscriber}。',
+ 'regenerateTokenError' => '无法重新生成令牌。',
+ 'deleteSuccess' => '订阅已删除! 一封电子邮件已发送给 {subscriber}。',
+ 'deleteError' => '无法删除订阅。',
+ 'suspendSuccess' => '订阅已暂停! 一封电子邮件已发送给 {subscriber}。',
+ 'suspendError' => '无法暂停订阅。',
+ 'resumeSuccess' => '订阅已恢复! 一封电子邮件已发送给 {subscriber}。',
+ 'resumeError' => '无法恢复订阅。',
+ 'linkSaveSuccess' => '订阅链接保存成功! 它将作为号召性用语出现在网站上!',
+ 'linkRemoveSuccess' => '订阅链接已成功删除!',
+ ],
+ 'emails' => [
+ 'greeting' => '嘿,',
+ 'token' => '你的令牌: {0}',
+ 'unique_feed_link' => '你唯一的源链接:{0}',
+ 'how_to_use' => '如何使用?',
+ 'two_ways' => '你有两种解锁高级剧集的方法:',
+ 'import_into_app' => '在你最喜欢的播客应用程序中复制你唯一的源 URL(将其作为私人源导入以防止暴露你的凭据)。',
+ 'go_to_website' => '访问 {podcastWebsite} 的网站并使用你的令牌解锁播客。',
+ 'welcome_subject' => '欢迎来到 {podcastTitle}',
+ 'welcome' => '你已订阅 {podcastTitle},谢谢,欢迎加入!',
+ 'welcome_token_title' => '这是你解锁播客高级剧集的凭据:',
+ 'welcome_expires' => '你的订阅已设置为在 {0} 到期。',
+ 'welcome_never_expires' => '你的订阅设置为永不过期。',
+ 'reset_subject' => '你的令牌已重置!',
+ 'reset_token' => '你对 {podcastTitle} 的访问权限已重置!',
+ 'reset_token_title' => '已为你生成解锁播客高级剧集的新凭据:',
+ 'edited_subject' => '你的订阅已更新!',
+ 'edited_expires' => '你对 {podcastTitle} 的订阅已设置为在 {expiresAt} 到期。',
+ 'edited_never_expires' => '你对 {podcastTitle} 的订阅设置为永不过期!',
+ 'suspended_subject' => '你的订阅已被暂停!',
+ 'suspended' => '你的 {podcastTitle} 订阅已暂停! 你已无法再访问播客的高级剧集。',
+ 'suspended_reason' => '原因如下:{0}',
+ 'resumed_subject' => '你的订阅已恢复!',
+ 'resumed' => '你对 {podcastTitle} 的订阅已恢复! 你可以再次访问播客的高级剧集。',
+ 'deleted_subject' => '你的订阅已被删除!',
+ 'deleted' => '你对 {podcastTitle} 的订阅已被删除! 你无法再访问播客的高级剧集。',
+ 'footer' => '{castopod} 托管在 {host}',
+ ],
+];