+
Skip to content

Validate single quotes in themes #37931

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions docs/translation.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ To ensure consistency and quality across translations, please adhere to the foll
- Maintain consistency with existing translations.
- Translate text accurately, ensuring that the meaning is preserved.

### Handling of single quotes (`'`)

Whenever messages are formatted in the backend, Keycloak uses Java's MessageFormat to replace placeholders. This uses single quotes (`'`) as an escape mechanism.

Therefore, use typographic quotes like `‘` and `’` where possible.

To avoid problems, automatic checks ensure the following:

* In all "base" themes, where message keys are evaluated in the backend, no single quote (`'`) must be used standalone as it would not print when used in Java's MessageFormat. For legacy messages, a double single quote (`''`) can be used to print a single quote.

* In all UI themes, where message keys are evaluated in the frontend, a single quote (`'`) must only be used standalone, and a double single (`''`) must not be used.

### Spanish translations

- Use the formal "usted" form instead of the informal "vos or tu" (i.e., avoid tuteo), ensuring a more formal tone.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#Tue Jan 09 09:05:12 CET 2024
cancel=Cancel·la
backTo=Torna a {{app}}
applicationType=Tipus d''aplicació
applicationType=Tipus d'aplicació
noGroupsText=No us heu unit a cap grup
path=Camí
password=Contrasenya
Expand All @@ -11,29 +11,29 @@ lastAccessedOn=Últim accés
permissions=Permisos
credentialCreatedAt=<0>Creada</0> el {{date}}.
error-username-invalid-character=«{{0}}» conté un caràcter no vàlid.
infoMessage=Fent clic en «Elimina l''accés», eliminareu els permisos concedits a aquesta aplicació. Aquesta aplicació ja no podrà utilitzar la vostra informació.
infoMessage=Fent clic en «Elimina l'accés», eliminareu els permisos concedits a aquesta aplicació. Aquesta aplicació ja no podrà utilitzar la vostra informació.
unknownOperatingSystem=Sistema operatiu desconegut
edit=Edita
otp-display-name=aplicació d''autenticació
otp-display-name=aplicació d'autenticació
linkedEmpty=No hi ha cap proveïdor enllaçat
directMembership=Pertinença directa
error-invalid-length-too-short=L''atribut {0} ha de tindre una llargària mínima de {1}.
error-number-out-of-range-too-big=L''atribut {0} ha de tindre valor màxim de {2}.
error-invalid-length-too-short=L'atribut {0} ha de tindre una llargària mínima de {1}.
error-number-out-of-range-too-big=L'atribut {0} ha de tindre valor màxim de {2}.
updateEmail=Actualitza el correu electrònic
two-factor=Autenticació de doble factor
signedInDevicesExplanation=Desconnecteu qualsevol dispositiu que no us siga familiar.
status=Estat
error-number-out-of-range-too-small=L''atribut {0} ha de tindre valor mínim de {1}.
removeModalMessage=Això eliminarà els permisos d''accés actualment concedits a {{name}}. Haureu de tornar a concedir accés si voleu utilitzar aquesta aplicació.
error-number-out-of-range-too-small=L'atribut {0} ha de tindre valor mínim de {1}.
removeModalMessage=Això eliminarà els permisos d'accés actualment concedits a {{name}}. Haureu de tornar a concedir accés si voleu utilitzar aquesta aplicació.
lastName=Cognoms
invalidEmailMessage=«{{0}}»: l''adreça de correu electrònic no és vàlida.
invalidEmailMessage=«{{0}}»: l'adreça de correu electrònic no és vàlida.
clients=Clients
filterByName=Filtra per nom…
refreshPage=Refresca la pàgina
error-user-attribute-required=Especifiqueu l''atribut «{0}».
error-user-attribute-required=Especifiqueu l'atribut «{0}».
currentSession=Sessió actual
error-empty=Especifiqueu el valor de «{{0}}».
error-invalid-uri-fragment=«{{0}}» és un fragment d''URL invàlid.
error-invalid-uri-fragment=«{{0}}» és un fragment d'URL invàlid.
error-invalid-blank=Especifiqueu el valor de «{{0}}».
missingFirstNameMessage=«{{0}}»: Indiqueu el nom.
signedOutSession=Desconnectat {{browser}}/{{os}}
Expand All @@ -42,24 +42,24 @@ close=Tanca
email=Correu electrònic
signOutWarning=Voleu sortir de la sessió?
signOutAllDevicesWarning=Aquesta acció desconnectarà tots els dispositius que han entrat al vostre compte, inclòs el dispositiu que esteu utilitzant ara mateix.
unShareSuccess=S''ha deixat de compartir el recurs correctament.
unShareSuccess=S'ha deixat de compartir el recurs correctament.
signingIn=Identificació
stopUsingCred=Voleu deixar d''utilitzar {{name}}?
error-number-out-of-range=L''atribut {0} ha de ser un número entre {1} i {2}.
stopUsingCred=Voleu deixar d'utilitzar {{name}}?
error-number-out-of-range=L'atribut {0} ha de ser un número entre {1} i {2}.
thirdPartyApp=De tercers
started=Iniciat
updateSuccess=S''ha actualitzat el recurs correctament.
updateSuccess=S'ha actualitzat el recurs correctament.
unShare=Deixa de compartir-ho tot
removeAccess=Elimina l''accés
removeAccess=Elimina l'accés
removeCred=Elimina {{name}}
signOutAllDevices=Desconnecta tots els dispositius
error-invalid-email=L''adreça de correu electrònic no és vàlida.
error-invalid-email=L'adreça de correu electrònic no és vàlida.
myResources=Els meus recursos
linkedAccountsIntroMessage=Gestiona les entrades a través de comptes de tercers.
groupDescriptionLabel=Visualitzeu els grups als quals esteu associat
resourceAlreadyShared=El recurs ja està compartit amb aquest usuari.
error-invalid-length-too-long=L''atribut {0} ha de tindre una llargària màxima de {2}.
accountUpdatedMessage=S''ha actualitzat el vostre compte.
error-invalid-length-too-long=L'atribut {0} ha de tindre una llargària màxima de {2}.
accountUpdatedMessage=S'ha actualitzat el vostre compte.
logo=Logotip
password-help-text=Entreu introduint la vostra contrasenya.
deleteAccount=Elimina el compte
Expand Down Expand Up @@ -87,24 +87,24 @@ description=Descripció
update=Actualitza
signedInDevices=Dispositius identificats
missingPasswordMessage=«{{0}}»: Indiqueu la contrasenya.
otp-help-text=Introduïu el codi de verificació de l''aplicació d''autenticació.
error-invalid-uri-scheme=«{{0}} té un esquema d''URL invàlid.
otp-help-text=Introduïu el codi de verificació de l'aplicació d'autenticació.
error-invalid-uri-scheme=«{{0}} té un esquema d'URL invàlid.
error-user-attribute-read-only=El camp {0} és només de lectura.
error-invalid-date=La data «{0}» no és vàlida.
missingEmailMessage=«{0}»: Indiqueu una adreça electrònica.
applicationsIntroMessage=Feu seguiment i gestioneu els permisos de les aplicacions per a accedir al vostre compte
error-invalid-length=L''atribut {0} ha de tindre una llargària d''entre {1} i {2}.
error-invalid-length=L'atribut {0} ha de tindre una llargària d'entre {1} i {2}.
missingLastNameMessage=«{0}»: Indiqueu els vostres cognoms.
linkedLoginProviders=Proveïdors d''entrada enllaçats
linkedLoginProviders=Proveïdors d'entrada enllaçats
inUse=En ús
client=Client
error-invalid-uri=L''URL «{0}» no és vàlid.
error-invalid-uri=L'URL «{0}» no és vàlid.
systemDefined=Definit pel sistema
internalApp=Internes
accessGrantedOn=Accés concedit el:
permissionRequests=Peticions de permís
shareSuccess=S''ha compartit el recurs correctament.
missingUsernameMessage=«{0}»: Indiqueu el vostre nom d''usuari.
shareSuccess=S'ha compartit el recurs correctament.
missingUsernameMessage=«{0}»: Indiqueu el vostre nom d'usuari.
fullName={{givenName}} {{familyName}}
resources=Recursos
resourceIntroMessage=Compartiu recursos entre membres del vostre equip
Expand All @@ -115,14 +115,14 @@ shareWith=Comparteix amb
updateCredAriaLabel=Actualitza la credencial
error-pattern-no-match=«{0}» no té el format requerit.
application=Aplicació
unlinkedLoginProviders=Proveïdors d''entrada no enllaçats
applicationDetails=Detalls de l''aplicació
successRemovedMessage={{userLabel}} s''ha eliminat.
unlinkedLoginProviders=Proveïdors d'entrada no enllaçats
applicationDetails=Detalls de l'aplicació
successRemovedMessage={{userLabel}} s'ha eliminat.
deleteAccountWarning=Això és irreversible. Totes les vostres dades es destruiran permanentment i no seran accessibles.
error-person-name-invalid-character=«{0}» conté un caràcter no vàlid.
user=Usuari
applications=Aplicacions
username=Nom d''usuari
username=Nom d'usuari
removeConsentSuccess=S'ha eliminat el consentiment amb èxit
required=Requerit
deviceActivity=Activitat dels aparells
Expand Down Expand Up @@ -215,5 +215,5 @@ errorSignOutMessage=No s'ha pogut sortir: {{error}}
errorRemovedMessage=No s'ha pogut suprimir {{userLabel}} a causa de: {{error}}
resourceSharedWith_other=El recurs està compartit amb <0>{{username}}</0> i <1>{{other}}</1> altres usuaris
shareUser=Afegeix usuaris amb qui compartir el recurs
error-invalid-multivalued-size=L''atribut {{0}} ha de tenir almenys {{1}} i com a mot {{2}} valors.
error-invalid-multivalued-size=L'atribut {{0}} ha de tenir almenys {{1}} i com a mot {{2}} valors.
termsAndConditionsDeclined=Cal que accepteu els Termes i Condicions per a continuar
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ setUpNew=Impostazione {{name}}
lastAccessedOn=Ultimo accesso
permissions=Permessi
credentialCreatedAt=<0>Creato</0> {{date}}.
error-username-invalid-character=''{0}'' contiene caratteri non validi.
infoMessage=Cliccando su ''Rimuovi accesso'', rimuoverai le autorizzazioni concesse a questa applicazione. Questa applicazione non utilizzerà più le tue informazioni.
error-username-invalid-character='{0}' contiene caratteri non validi.
infoMessage=Cliccando su 'Rimuovi accesso', rimuoverai le autorizzazioni concesse a questa applicazione. Questa applicazione non utilizzerà più le tue informazioni.
unknownOperatingSystem=Sistema operativo sconosciuto
edit=Modifica
otp-display-name=Applicazione Authenticator (OTP)
Expand All @@ -20,35 +20,35 @@ signOut=Esci
linkedEmpty=Nessun provider collegato
directMembership=Membri diretti
accept=Accetta
error-invalid-length-too-short=''{0}'' deve avere una lunghezza minima di {1}.
error-number-out-of-range-too-big=''{0}'' deve avere un valore massimo di {2}.
error-invalid-length-too-short='{0}' deve avere una lunghezza minima di {1}.
error-number-out-of-range-too-big='{0}' deve avere un valore massimo di {2}.
updateEmail=Aggiorna email
two-factor=Autenticazione a due fattori
signedInDevicesExplanation=Uscire da tutti i dispositivi sconosciuti.
status=Stato
error-number-out-of-range-too-small=''{0}'' deve avere un valore minimo di {1}.
removeModalMessage=Questo rimuoverà l''autorizzazione di accesso attualmente concessa per {{name}}. Dovrai concedere nuovamente l''accesso se vuoi utilizzare questa applicazione.
error-number-out-of-range-too-small='{0}' deve avere un valore minimo di {1}.
removeModalMessage=Questo rimuoverà lautorizzazione di accesso attualmente concessa per {{name}}. Dovrai concedere nuovamente laccesso se vuoi utilizzare questa applicazione.
lastName=Cognome
invalidEmailMessage='{{0}}': indirizzo email non valido.
clients=Client
filterByName=Filtra per nome ...
refreshPage=Aggiornare la pagina
error-user-attribute-required=Specificare ''{0}''.
error-user-attribute-required=Specificare '{0}'.
currentSession=Sessione in corso
error-empty=Specificare il valore di ''{0}''.
error-invalid-uri-fragment=''{0}'' è un frammento URL non valido.
error-empty=Specificare il valore di '{0}'.
error-invalid-uri-fragment='{0}' è un frammento URL non valido.
signedOutSession=Disconnesso {{browser}}/{{os}}
missingFirstNameMessage='{{0}}': inserisci il nome.
error-invalid-blank=Specificare il valore di ''{0}''.
error-invalid-blank=Specificare il valore di '{0}'.
share=Condiviso
close=Chiudi
email=Email
signOutWarning=Chiudere la sessione?
signOutAllDevicesWarning=Quest''azione disconnetterà tutti i dispositivi che hanno effettuato l''accesso al tuo utente, compreso il dispositivo attualmente in uso.
signOutAllDevicesWarning=Quest'azione disconnetterà tutti i dispositivi che hanno effettuato l'accesso al tuo utente, compreso il dispositivo attualmente in uso.
unShareSuccess=La condivisione della risorsa è stata rimossa.
signingIn=Impostazioni di accesso
stopUsingCred=Smettere di usare {{name}}?
error-number-out-of-range=''{0}'' deve essere un numero compreso tra {1} e {2}.
error-number-out-of-range='{0}' deve essere un numero compreso tra {1} e {2}.
thirdPartyApp=Applicazioni di terze parti
started=Iniziato
updateSuccess=Risorsa aggiornata con successo.
Expand All @@ -61,13 +61,13 @@ myResources=Le mie risorse
linkedAccountsIntroMessage=Gestire gli accessi tramite utenze di terzi.
groupDescriptionLabel=Visualizza i gruppi con cui sei associato/a
resourceAlreadyShared=La risorsa è già condivisa con questo utente.
error-invalid-length-too-long=''{0}'' deve avere una lunghezza massima di {2}.
error-invalid-length-too-long='{0}' deve avere una lunghezza massima di {2}.
accountUpdatedMessage=Il tuo utente è stato aggiornato.
logo=Logo
password-help-text=Accedere inserendo la password.
deleteAccount=Elimina utente
add=Aggiungi
error-invalid-value=''{0}'' ha un valore non valido.
error-invalid-value='{0}' ha un valore non valido.
ipAddress=Indirizzo IP
resourceName=Nome della risorsa
unlinkedEmpty=Nessun provider scollegato
Expand All @@ -84,23 +84,23 @@ password-display-name=Password
expires=Scade
noGroups=Nessun gruppo
notSetUp={{name}} non è impostato.
error-invalid-number=''{0}'' non è un numero valido.
error-invalid-number='{0}' non è un numero valido.
link=Account collegato
description=Descrizione
update=Aggiorna
signedInDevices=Dispositivi registrati
missingPasswordMessage='{{0}}': inserisci la password.
otp-help-text=Immettere un codice di verifica dall''applicazione Authenticator.
error-invalid-uri-scheme=''{0}'' ha uno schema URL non valido.
error-invalid-date=''{0}'' è una data non valida.
missingEmailMessage='{{0}}': inserisci l''indirizzo email.
applicationsIntroMessage=Traccia e gestisci i permessi delle applicazioni nell''accesso al tuo account
error-invalid-length=''{0}'' deve avere una lunghezza compresa tra {1} e {2}.
otp-help-text=Immettere un codice di verifica dallapplicazione Authenticator.
error-invalid-uri-scheme='{0}' ha uno schema URL non valido.
error-invalid-date='{0}' è una data non valida.
missingEmailMessage='{{0}}': inserisci lindirizzo email.
applicationsIntroMessage=Traccia e gestisci i permessi delle applicazioni nellaccesso al tuo account
error-invalid-length='{0}' deve avere una lunghezza compresa tra {1} e {2}.
missingLastNameMessage='{{0}}': inserisci il cognome.
linkedLoginProviders=Provider di accesso collegati
inUse=In uso
client=Client
error-invalid-uri=''{0}'' è un URL non valido.
error-invalid-uri='{0}' è un URL non valido.
systemDefined=SSistema definito
internalApp=Interna
accessGrantedOn=Accesso concesso il:
Expand All @@ -115,13 +115,13 @@ termsOfService=Termini di servizio
requestor=Richiedente
shareWith=Condividi con
updateCredAriaLabel=Aggiorna credenziali
error-pattern-no-match=''{0}'' non corrisponde al formato richiesto.
error-pattern-no-match='{0}' non corrisponde al formato richiesto.
application=Applicazione
unlinkedLoginProviders=Provider di accesso scollegati
applicationDetails=Dettagli dell''applicazione
applicationDetails=Dettagli dellapplicazione
successRemovedMessage={{userLabel}} è stato rimosso.
deleteAccountWarning=Questa operazione è irreversibile. Tutti i tuoi dati saranno distrutti in modo permanente e non potranno essere recuperati.
error-person-name-invalid-character=''{0}'' contiene caratteri non validi.
error-person-name-invalid-character='{0}' contiene caratteri non validi.
user=Utente
applications=Applicazioni
username=Nome utente
Expand All @@ -139,7 +139,7 @@ avatar=Avatar
personalInfoDescription=Gestisci le tue informazioni di base
personalInfo=Informazioni personali
flowTypeHelp=Che tipo di modulo è
accountSecurity=Sicurezza dell''utente
accountSecurity=Sicurezza dell'utente
manageAccount=Gestione utente
shareError=Non è possibile condividere la risorsa a causa di: {{error}}
somethingWentWrongDescription=Ci dispiace, si è verificato un errore imprevisto.
Expand All @@ -166,7 +166,7 @@ recovery-codes-generate-new-codes=Genera nuovi codici per assicurarti l'accesso
oid4vci=Credenziali verificabili
verifiableCredentialsTitle=Credenziali verificabili
verifiableCredentialsIssuerAlert=Non è stato possibile ottenere informazioni sull'emittente.
verifiableCredentialsOfferAlert=Non è stato possibile ottenere un''offerta.
verifiableCredentialsOfferAlert=Non è stato possibile ottenere unofferta.
verifiableCredentialsSelectionDefault=Seleziona la configurazione di una credenziale.
phoneScopeConsentText=Numero di telefono
offlineAccessScopeConsentText=Accesso offline
Expand Down Expand Up @@ -201,19 +201,19 @@ addressScopeConsentText=Indirizzo
rolesScopeConsentText=Ruoli dell'utente
somethingWentWrong=Qualcosa è andato storto
emptyUserOrganizationsInstructions=Non sei ancora membro di alcuna organizzazione.
searchOrganization=Cerca un''organizzazione
searchOrganization=Cerca unorganizzazione
organizationList=Elenco delle organizzazioni
termsAndConditionsDeclined=Per poter continuare devi accettare i termini e le condizioni
permissionRequest=Richieste di permesso - {{name}}
general=Generale
rolesScope=Se non è stata definita alcuna mappatura dell''ambito (scope) su un ruolo, ogni utente è autorizzato a utilizzare questo ambito client. Se sono state definite mappature dell''ambito su un ruolo, l''utente deve essere membro di almeno uno dei ruoli.
rolesScope=Se non è stata definita alcuna mappatura dell'ambito (scope) su un ruolo, ogni utente è autorizzato a utilizzare questo ambito client. Se sono state definite mappature dell'ambito su un ruolo, l'utente deve essere membro di almeno uno dei ruoli.
unLinkError=Non è possibile togliere il collegamento: {{error}}
recovery-authn-code=I miei codici di recupero
signingInDescription=Configura le modalità di accesso.
removeConsentError=Non è possibile rimuovere il consenso a causa di: {{error}}
linkedAccounts=Utenze collegate
groupsListHeader=Intestazione lista gruppi
scopeNameHelp=Nome dell''ambito client. Deve essere univoco nel realm. Il nome non deve contenere caratteri di spazio, poiché viene utilizzato come valore del parametro ambito
scopeNameHelp=Nome dell'ambito client. Deve essere univoco nel realm. Il nome non deve contenere caratteri di spazio, poiché viene utilizzato come valore del parametro ambito
scopeDescriptionHelp=Descrizione dell'ambito del client
selectOne=Seleziona un''opzione
selectOne=Seleziona unopzione
privacyPolicy=Politica sulla riservatezza
Loading
Loading
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载