add signer user forms translations
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ApplicationController < ActionController::Base
|
||||
BROWSER_LOCALE_REGEXP = /\A\w{2}(?:-\w{2})?/
|
||||
|
||||
include ActiveStorage::SetCurrent
|
||||
include Pagy::Backend
|
||||
|
||||
@@ -32,6 +34,21 @@ class ApplicationController < ActionController::Base
|
||||
|
||||
private
|
||||
|
||||
def with_browser_locale(&)
|
||||
locale = request.env['HTTP_ACCEPT_LANGUAGE'].to_s[BROWSER_LOCALE_REGEXP].to_s
|
||||
|
||||
locale =
|
||||
if locale.starts_with?('en-') && locale != 'en-US'
|
||||
'en-GB'
|
||||
else
|
||||
locale.split('-').first.presence || 'en-GB'
|
||||
end
|
||||
|
||||
locale = 'en-GB' unless I18n.locale_available?(locale)
|
||||
|
||||
I18n.with_locale(locale, &)
|
||||
end
|
||||
|
||||
def sign_in_for_demo
|
||||
sign_in(User.active.order('random()').take) unless signed_in?
|
||||
end
|
||||
|
||||
@@ -6,6 +6,7 @@ class StartFormController < ApplicationController
|
||||
skip_before_action :authenticate_user!
|
||||
skip_authorization_check
|
||||
|
||||
around_action :with_browser_locale, only: %i[show completed]
|
||||
before_action :load_template
|
||||
|
||||
def show
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
class SubmitFormController < ApplicationController
|
||||
layout 'form'
|
||||
|
||||
around_action :with_browser_locale, only: %i[show completed]
|
||||
skip_before_action :authenticate_user!
|
||||
skip_authorization_check
|
||||
|
||||
|
||||
@@ -453,7 +453,7 @@ const he = {
|
||||
use_international_format: 'השתמש בפורמט בינלאומי: +1xxx',
|
||||
six_digits_code: 'קוד משתמש שש ספרות',
|
||||
change_phone_number: 'שינוי מספר טלפון',
|
||||
sending: 'שולח...',
|
||||
sending: 'שולח',
|
||||
resend_code: 'שלח מחדש קוד',
|
||||
verification_code_has_been_resent: 'קוד האימות נשלח מחדש בSMS',
|
||||
please_fill_all_required_fields: 'אנא מלא את כל השדות הדרושים',
|
||||
|
||||
@@ -10,23 +10,23 @@
|
||||
<%= svg_icon('writing_sign', class: 'w-10 h-10') %>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-lg font-bold mb-1"><%= @submitter.submission.template.name %></p>
|
||||
<p class="text-sm">Signed on <%= l(@submitter.completed_at.to_date, format: :long, locale: @submitter.submission.template.account.locale) %></p>
|
||||
<p dir="auto" class="text-lg font-bold mb-1"><%= @submitter.submission.template.name %></p>
|
||||
<p dir="auto" class="text-sm"><%= t('signed_on_time', time: l(@submitter.completed_at.to_date, format: :long)) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center text-2xl font-semibold">
|
||||
Form has been submitted already
|
||||
<div dir="auto" class="text-center text-2xl font-semibold">
|
||||
<%= t('form_has_been_submitted_already') %>
|
||||
</div>
|
||||
<% if Accounts.can_send_emails?(@submitter.submission.template.account) %>
|
||||
<div>
|
||||
<%= button_to button_title(title: 'Send copy to Email', disabled_with: 'Sending', icon: svg_icon('mail_forward', class: 'w-6 h-6')), send_submission_email_index_path, params: { submitter_slug: @submitter.slug }, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'base-button w-full' %>
|
||||
<%= button_to button_title(title: t('send_copy_to_email'), disabled_with: t('sending'), icon: svg_icon('mail_forward', class: 'w-6 h-6')), send_submission_email_index_path, params: { submitter_slug: @submitter.slug }, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'base-button w-full' %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% if @template.submitters.to_a.size == 1 %>
|
||||
<div>
|
||||
<%= button_to button_title(title: 'Resubmit', disabled_with: 'Resubmit', icon: svg_icon('reload', class: 'w-6 h-6')), start_form_path(@template.slug), params: { submitter: { email: params[:email] }, resubmit: @submitter.slug }, method: :put, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
|
||||
<%= button_to button_title(title: t('resubmit'), disabled_with: t('resubmit'), icon: svg_icon('reload', class: 'w-6 h-6')), start_form_path(@template.slug), params: { submitter: { email: params[:email] }, resubmit: @submitter.slug }, method: :put, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="text-center w-full space-y-6">
|
||||
<%= render 'banner' %>
|
||||
<% unless @template.archived_at? %>
|
||||
<p class="text-xl font-semibold text-center">You have been invited to submit a form</p>
|
||||
<p class="text-xl font-semibold text-center"><%= t('you_have_been_invited_to_submit_a_form') %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="flex items-center bg-base-200 rounded-xl p-4 mb-4">
|
||||
@@ -15,9 +15,9 @@
|
||||
<div>
|
||||
<p class="text-lg font-bold mb-1"><%= @template.name %></p>
|
||||
<% if @template.archived_at? %>
|
||||
<p class="text-sm">Form has been deleted by <span class="font-semibold"><%= @template.account.name %></span>.</p>
|
||||
<p dir="auto" class="text-sm"><%= t('form_has_been_deleted_by_html', name: @template.account.name) %></p>
|
||||
<% else %>
|
||||
<p class="text-sm">Invited by <span class="font-semibold"><%= @template.account.name %></span></p>
|
||||
<p dir="auto" class="text-sm"><%= t('invited_by_html', name: @template.account.name) %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -25,13 +25,13 @@
|
||||
</div>
|
||||
<% unless @template.archived_at? %>
|
||||
<%= form_for @submitter, url: start_form_path(@template.slug), data: { turbo_frame: :_top }, method: :put, html: { class: 'space-y-4', onsubmit: 'event.submitter.disabled = true' } do |f| %>
|
||||
<div class="form-control !mt-0">
|
||||
<%= f.label :email, class: 'label' %>
|
||||
<%= f.email_field :email, value: current_user&.email || params[:email] || @submitter.email, required: true, class: 'base-input', placeholder: 'Provide your email to start' %>
|
||||
<div dir="auto" class="form-control !mt-0">
|
||||
<%= f.label :email, t('email'), class: 'label' %>
|
||||
<%= f.email_field :email, value: current_user&.email || params[:email] || @submitter.email, required: true, class: 'base-input', placeholder: t('provide_your_email_to_start') %>
|
||||
<%= @error_message %>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<%= f.button button_title(title: 'Start', disabled_with: 'Starting'), class: 'base-button' %>
|
||||
<div dir="auto" class="form-control">
|
||||
<%= f.button button_title(title: t('start'), disabled_with: t('starting')), class: 'base-button' %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
<div class="mr-3">
|
||||
<%= svg_icon('writing_sign', class: 'w-10 h-10') %>
|
||||
</div>
|
||||
<div>
|
||||
<div dir="auto">
|
||||
<p class="text-lg font-bold mb-1"><%= @submitter.submission.template.name %></p>
|
||||
<p class="text-sm">Form has been deleted by <span class="font-semibold"><%= @submitter.submission.template.account.name %></span>.</p>
|
||||
<p class="text-sm"><%= t('form_has_been_deleted_by', name: @submitter.submission.template.account.name %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -10,17 +10,17 @@
|
||||
<%= svg_icon('writing_sign', class: 'w-10 h-10') %>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-lg font-bold mb-1"><%= @submitter.submission.template.name %></p>
|
||||
<p class="text-sm">Signed on <%= l(@submitter.completed_at.to_date, format: :long, locale: @submitter.submission.template.account.locale) %></p>
|
||||
<p dir="auto" class="text-lg font-bold mb-1"><%= @submitter.submission.template.name %></p>
|
||||
<p dir="auto" class="text-sm"><%= t('signed_on_time', time: l(@submitter.completed_at.to_date, format: :long)) %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<% if Accounts.can_send_emails?(@submitter.submission.template.account) && @submitter.email.present? %>
|
||||
<%= button_to button_title(title: 'Send copy to Email', disabled_with: 'Sending', icon: svg_icon('mail_forward', class: 'w-6 h-6')), send_submission_email_index_path, params: { submitter_slug: @submitter.slug }, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
|
||||
<%= button_to button_title(title: t('send_copy_to_email'), disabled_with: t('sending'), icon: svg_icon('mail_forward', class: 'w-6 h-6')), send_submission_email_index_path, params: { submitter_slug: @submitter.slug }, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
|
||||
<% if @submitter.submission.template.submitters.size != 1 %>
|
||||
<div class="divider">OR</div>
|
||||
<div class="divider uppercase"><%= t('or') %></div>
|
||||
<% else %>
|
||||
<div class="py-2"></div>
|
||||
<% end %>
|
||||
@@ -28,18 +28,18 @@
|
||||
<download-button data-src="<%= submitter_download_index_path(@submitter.slug) %>" class="base-button w-full">
|
||||
<span class="flex items-center justify-center space-x-2" data-target="download-button.defaultButton">
|
||||
<%= svg_icon('download', class: 'w-6 h-6') %>
|
||||
<span>Download documents</span>
|
||||
<span><%= t('download_documents') %></span>
|
||||
</span>
|
||||
<span class="flex items-center justify-center space-x-2 hidden" data-target="download-button.loadingButton">
|
||||
<%= svg_icon('loader', class: 'w-6 h-6 animate-spin') %>
|
||||
<span>Downloading</span>
|
||||
<span><%= t('downloading') %></span>
|
||||
</span>
|
||||
</download-button>
|
||||
</div>
|
||||
<% if @submitter.submission.template.submitters.size == 1 %>
|
||||
<div class="divider">OR</div>
|
||||
<div class="divider uppercase"><%= t('or') %></div>
|
||||
<div>
|
||||
<%= button_to button_title(title: 'Resubmit', disabled_with: 'Resubmit', icon: svg_icon('reload', class: 'w-6 h-6')), start_form_path(@submitter.submission.template.slug), params: { submitter: { email: @submitter.email, phone: @submitter.phone, name: @submitter.name }, resubmit: @submitter.slug }, method: :put, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
|
||||
<%= button_to button_title(title: t('resubmit'), disabled_with: t('resubmit'), icon: svg_icon('reload', class: 'w-6 h-6')), start_form_path(@submitter.submission.template.slug), params: { submitter: { email: @submitter.email, phone: @submitter.phone, name: @submitter.name }, resubmit: @submitter.slug }, method: :put, form: { onsubmit: 'event.submitter.disabled = true' }, class: 'white-button w-full' %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,7 @@ module DocuSeal
|
||||
|
||||
config.active_storage.routes_prefix = ''
|
||||
|
||||
config.i18n.available_locales = %i[en en-US en-GB es-ES fr-FR pt-PT de-DE pt]
|
||||
config.i18n.available_locales = %i[en en-US en-GB es-ES fr-FR pt-PT de-DE es it de fr pl uk cs pt he]
|
||||
config.i18n.fallbacks = [:en]
|
||||
|
||||
config.exceptions_app = ->(env) { ErrorsController.action(:show).call(env) }
|
||||
|
||||
@@ -82,7 +82,7 @@ Rails.application.configure do
|
||||
ActiveRecord::Encryption.configure(**config.active_record.encryption)
|
||||
|
||||
# Raises error for missing translations.
|
||||
# config.i18n.raise_on_missing_translations = true
|
||||
config.i18n.raise_on_missing_translations = true
|
||||
|
||||
# Annotate rendered view with file names.
|
||||
# config.action_view.annotate_rendered_view_with_filenames = true
|
||||
|
||||
+204
-11
@@ -1,29 +1,222 @@
|
||||
en-US:
|
||||
en: &en
|
||||
email: Email
|
||||
digitally_signed_by: Digitally signed by
|
||||
role: Role
|
||||
provide_your_email_to_start: Provide your email to start
|
||||
start: Start
|
||||
starting: Starting
|
||||
form_has_been_deleted_by_html: 'Form has been deleted by <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'Invited by <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: You have been invited to submit a form
|
||||
signed_on_time: 'Signed on %{time}'
|
||||
form_has_been_submitted_already: Form has been submitted already
|
||||
send_copy_to_email: Send copy to Email
|
||||
sending: Sending
|
||||
resubmit: Resubmit
|
||||
form_has_been_deleted_by_html: 'Form has been deleted by <span class="font-semibold">%{name}</span>.'
|
||||
or: or
|
||||
download_documents: Download documents
|
||||
downloading: Downloading
|
||||
|
||||
es: &es
|
||||
digitally_signed_by: Firmado digitalmente por
|
||||
role: Rol
|
||||
email: Correo electrónico
|
||||
digitally_signed_by: Firmado digitalmente por
|
||||
role: Rol
|
||||
provide_your_email_to_start: Proporciona tu correo electrónico para comenzar
|
||||
start: Comenzar
|
||||
starting: Comenzando
|
||||
form_has_been_deleted_by_html: 'El formulario ha sido eliminado por <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'Invitado por <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: Has sido invitado/a a enviar un formulario
|
||||
signed_on_time: 'Firmado en %{time}'
|
||||
form_has_been_submitted_already: El formulario ya ha sido enviado
|
||||
send_copy_to_email: Enviar copia a Correo electrónico
|
||||
sending: Enviando
|
||||
resubmit: Reenviar
|
||||
or: o
|
||||
download_documents: Descargar documentos
|
||||
downloading: Descargando
|
||||
|
||||
it:
|
||||
digitally_signed_by: Signé numériquement par
|
||||
role: Rôle
|
||||
email: Email
|
||||
digitally_signed_by: Firmato digitalmente da
|
||||
role: Ruolo
|
||||
provide_your_email_to_start: Fornisci la tua email per iniziare
|
||||
start: Inizia
|
||||
starting: Iniziando
|
||||
form_has_been_deleted_by_html: 'Il modulo è stato eliminato da <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'Invitato da <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: Sei stato invitato a inviare un modulo
|
||||
signed_on_time: 'Firmato alle %{time}'
|
||||
form_has_been_submitted_already: Il modulo è già stato inviato
|
||||
send_copy_to_email: Invia copia via email
|
||||
sending: Inviando
|
||||
resubmit: Reinvia
|
||||
or: o
|
||||
download_documents: Scarica documenti
|
||||
downloading: Scaricamento
|
||||
|
||||
fr: &fr
|
||||
email: Email
|
||||
digitally_signed_by: Signé numériquement par
|
||||
role: Rôle
|
||||
provide_your_email_to_start: Entrez votre email pour commencer
|
||||
start: Démarrer
|
||||
starting: Démarrage
|
||||
form_has_been_deleted_by_html: 'Le formulaire a été supprimé par <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'Invité par <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: Vous avez été invité à soumettre un formulaire
|
||||
signed_on_time: 'Signé à %{time}'
|
||||
form_has_been_submitted_already: Le formulaire a déjà été soumis
|
||||
send_copy_to_email: Envoyer une copie par email
|
||||
sending: Envoi
|
||||
resubmit: Soumettre à nouveau
|
||||
or: ou
|
||||
download_documents: Télécharger des documents
|
||||
downloading: Téléchargement
|
||||
|
||||
pt: &pt
|
||||
digitally_signed_by: Assinado digitalmente por
|
||||
role: Função
|
||||
email: Email
|
||||
digitally_signed_by: Assinado digitalmente por
|
||||
role: Função
|
||||
provide_your_email_to_start: Forneça o seu email para começar
|
||||
start: Iniciar
|
||||
starting: Iniciando
|
||||
form_has_been_deleted_by_html: 'O formulário foi eliminado por <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'Convidado por <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: Foi convidado a submeter um formulário
|
||||
signed_on_time: 'Assinado em %{time}'
|
||||
form_has_been_submitted_already: O formulário já foi submetido
|
||||
send_copy_to_email: Enviar cópia para Email
|
||||
sending: Enviando
|
||||
resubmit: Reenviar
|
||||
or: ou
|
||||
download_documents: Baixar documentos
|
||||
downloading: Baixando
|
||||
|
||||
de: &de
|
||||
digitally_signed_by: Digital signiert von
|
||||
role: Rolle
|
||||
email: E-Mail
|
||||
digitally_signed_by: Digital unterzeichnet von
|
||||
role: Rolle
|
||||
provide_your_email_to_start: Gib deine E-Mail-Adresse ein, um zu starten
|
||||
start: Starten
|
||||
starting: Starten
|
||||
form_has_been_deleted_by_html: 'Das Formular wurde von <span class="font-semibold">%{name}</span> gelöscht.'
|
||||
invited_by_html: 'Eingeladen von <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: Du wurdest eingeladen, ein Formular einzureichen
|
||||
signed_on_time: 'Unterzeichnet um %{time}'
|
||||
form_has_been_submitted_already: Formular wurde bereits eingereicht
|
||||
send_copy_to_email: Kopie per E-Mail senden
|
||||
sending: Senden
|
||||
resubmit: Erneut einreichen
|
||||
or: oder
|
||||
download_documents: Dokumente herunterladen
|
||||
downloading: Herunterladen
|
||||
|
||||
pl:
|
||||
email: Email
|
||||
digitally_signed_by: Podpis cyfrowy przez
|
||||
role: Rola
|
||||
provide_your_email_to_start: Podaj swój adres email, aby rozpocząć
|
||||
start: Rozpocznij
|
||||
starting: Rozpoczynanie
|
||||
form_has_been_deleted_by_html: 'Formularz został usunięty przez <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'Zaproszony przez <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: Zostałeś zaproszony do przesłania formularza
|
||||
signed_on_time: 'Podpisano %{time}'
|
||||
form_has_been_submitted_already: Formularz został już przesłany
|
||||
send_copy_to_email: Wyślij kopię na Email
|
||||
sending: Wysyłanie
|
||||
resubmit: Prześlij ponownie
|
||||
or: lub
|
||||
download_documents: Pobierz dokumenty
|
||||
downloading: Pobieranie
|
||||
|
||||
uk:
|
||||
email: Email
|
||||
digitally_signed_by: Цифровий підпис від
|
||||
role: Роль
|
||||
provide_your_email_to_start: Введіть свій email, щоб почати
|
||||
start: Почати
|
||||
starting: Початок
|
||||
form_has_been_deleted_by_html: 'Форму було видалено користувачем <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'Запрошений користувачем <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: Вас запросили подати форму
|
||||
signed_on_time: 'Підписаний %{time}'
|
||||
form_has_been_submitted_already: Форма вже була подана
|
||||
send_copy_to_email: Надіслати копію на Email
|
||||
sending: Надсилання
|
||||
resubmit: Подати знову
|
||||
or: або
|
||||
download_documents: Завантажити документи
|
||||
downloading: Завантаження
|
||||
|
||||
cs:
|
||||
email: Email
|
||||
digitally_signed_by: Digitálně podepsáno uživatelem
|
||||
role: Role
|
||||
provide_your_email_to_start: Zadejte svůj email pro zahájení
|
||||
start: Zahájit
|
||||
starting: Zahajování
|
||||
form_has_been_deleted_by_html: 'Formulář byl smazán uživatelem <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'Pozván uživatelem <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: Byli jste pozváni k odeslání formuláře
|
||||
signed_on_time: 'Podepsáno %{time}'
|
||||
form_has_been_submitted_already: Formulář již byl odeslán
|
||||
send_copy_to_email: Odeslat kopii na Email
|
||||
sending: Odesílání
|
||||
resubmit: Odeslat znovu
|
||||
or: nebo
|
||||
download_documents: Stáhnout dokumenty
|
||||
downloading: Stahování
|
||||
|
||||
he:
|
||||
email: דוא"ל
|
||||
digitally_signed_by: חתום דיגיטלית על ידי
|
||||
role: תפקיד
|
||||
provide_your_email_to_start: ספק את כתובת הדוא"ל שלך כדי להתחיל
|
||||
start: התחל
|
||||
starting: מתחיל
|
||||
form_has_been_deleted_by_html: 'הטופס נמחק על ידי <span class="font-semibold">%{name}</span>.'
|
||||
invited_by_html: 'הוזמן על ידי <span class="font-semibold">%{name}</span>'
|
||||
you_have_been_invited_to_submit_a_form: הוזמנת להגיש טופס
|
||||
signed_on_time: 'חתום ב-%{time}'
|
||||
form_has_been_submitted_already: הטופס כבר נשלח
|
||||
send_copy_to_email: שלח עותק לדוא"ל
|
||||
sending: שולח
|
||||
resubmit: שלח מחדש
|
||||
or: או
|
||||
download_documents: הורד מסמכים
|
||||
downloading: מוריד
|
||||
|
||||
en-US:
|
||||
<<: *en
|
||||
date:
|
||||
formats:
|
||||
default: "%m/%d/%Y"
|
||||
|
||||
en-GB:
|
||||
digitally_signed_by: Digitally signed by
|
||||
role: Role
|
||||
<<: *en
|
||||
date:
|
||||
formats:
|
||||
default: "%d/%m/%Y"
|
||||
|
||||
es-ES:
|
||||
digitally_signed_by: Firmado digitalmente por
|
||||
role: Rol
|
||||
<<: *es
|
||||
|
||||
fr-FR:
|
||||
digitally_signed_by: Signé numériquement par
|
||||
role: Rôle
|
||||
<<: *fr
|
||||
|
||||
pt-PT:
|
||||
digitally_signed_by: Assinado digitalmente por
|
||||
role: Função
|
||||
<<: *pt
|
||||
|
||||
de-DE:
|
||||
digitally_signed_by: Digital signiert von
|
||||
role: Rolle
|
||||
<<: *de
|
||||
|
||||
Reference in New Issue
Block a user