feat: SPA Roles screens
This commit is contained in:
1 parent
907949aa12
commit
3db490a615
47 files changed
+6947
-9
No files matched your search
@@ -2917,6 +2917,226 @@ export const messages = {
|
||||
'Save draft': 'Enregistrer le brouillon',
|
||||
'The id of the role to give. Absent or 0 means the Writer role. The Owner role is refused.':
|
||||
'L’identifiant du rôle à donner. Absent ou 0, c’est le rôle Rédacteur. Le rôle Propriétaire est refusé.',
|
||||
Access: 'Accès',
|
||||
Roles: 'Rôles',
|
||||
"Built-in roles can't be deleted.": 'Les rôles intégrés ne peuvent pas être supprimés.',
|
||||
'{0} members have this role. Move them to another role first. Then {1} can be deleted.':
|
||||
'{0} membres ont ce rôle. Déplacez-les d’abord vers un autre rôle. Ensuite, {1} pourra être supprimé.',
|
||||
"No one has this role. This can't be undone.":
|
||||
'Personne n’a ce rôle. Cette action est irréversible.',
|
||||
'Duplicate role': 'Dupliquer le rôle',
|
||||
'Move {0} members and delete role': 'Déplacer {0} membres et supprimer le rôle',
|
||||
'Delete role': 'Supprimer le rôle',
|
||||
'Moving and deleting…': 'Déplacement et suppression…',
|
||||
"Couldn't delete the role. Try again in a moment.":
|
||||
'Impossible de supprimer le rôle. Réessayez dans un instant.',
|
||||
'Move members to': 'Déplacer les membres vers',
|
||||
'They keep their API keys. Keys follow the new role.':
|
||||
'Ils gardent leurs clés d’API. Les clés suivent le nouveau rôle.',
|
||||
'{0} is built in': '{0} est intégré',
|
||||
'Duplicate it to make a custom role you can change or delete.':
|
||||
'Dupliquez-le pour créer un rôle personnalisé que vous pouvez modifier ou supprimer.',
|
||||
"Deleting a role doesn't affect content.": 'Supprimer un rôle n’affecte pas le contenu.',
|
||||
Read: 'Lire',
|
||||
Create: 'Créer',
|
||||
Own: 'Les siennes',
|
||||
'{0}, {1}, set to {2}.': '{0}, {1}, réglé sur {2}.',
|
||||
'Content permissions': 'Permissions de contenu',
|
||||
'Content type': 'Type de contenu',
|
||||
'Sets every row': 'Règle toutes les lignes',
|
||||
'Schema locked': 'Schéma verrouillé',
|
||||
'{0}, set to {1}.': '{0}, réglé sur {1}.',
|
||||
'{0} of {1} enabled': '{0} sur {1} activées',
|
||||
'Only the owner can grant this.': 'Seul le propriétaire peut accorder cette permission.',
|
||||
'Read only': 'Lecture seule',
|
||||
'Write own': 'Écrire les siens',
|
||||
'Full content': 'Contenu complet',
|
||||
'Quick presets': 'Préréglages rapides',
|
||||
Added: 'Ajouté',
|
||||
Removed: 'Retiré',
|
||||
'The Owner role is locked': 'Le rôle Propriétaire est verrouillé',
|
||||
'It always has every permission. To hand it to someone else, transfer ownership from Users.':
|
||||
'Il a toujours toutes les permissions. Pour le confier à quelqu’un d’autre, transférez la propriété depuis Utilisateurs.',
|
||||
'Go to Users': 'Aller aux utilisateurs',
|
||||
'Only the owner can edit built-in roles':
|
||||
'Seul le propriétaire peut modifier les rôles intégrés',
|
||||
'You can read what {0} allows. To change it, duplicate it into a custom role.':
|
||||
'Vous pouvez lire ce que {0} autorise. Pour le modifier, dupliquez-le en rôle personnalisé.',
|
||||
'You can see roles but not change them': 'Vous pouvez voir les rôles sans les modifier',
|
||||
'Ask an owner or admin if a role needs to change.':
|
||||
'Demandez à un propriétaire ou à un administrateur si un rôle doit changer.',
|
||||
"You can't change the permissions of your own role. Ask another owner or admin.":
|
||||
'Vous ne pouvez pas modifier les permissions de votre propre rôle. Demandez à un autre propriétaire ou administrateur.',
|
||||
'Your access changed': 'Votre accès a changé',
|
||||
"An owner changed your role while this page was open. You can still see roles, but you can't change them. Your edits weren't saved.":
|
||||
'Un propriétaire a modifié votre rôle pendant que cette page était ouverte. Vous pouvez toujours voir les rôles, mais pas les modifier. Vos modifications n’ont pas été enregistrées.',
|
||||
'This role has 1 member': 'Ce rôle a 1 membre',
|
||||
'This role has {0} members': 'Ce rôle a {0} membres',
|
||||
'Changes apply to all of them when you save, and to the API keys they created. Built-in roles can be restored with Reset to default.':
|
||||
'Les changements s’appliquent à tous à l’enregistrement, ainsi qu’aux clés d’API qu’ils ont créées. Les rôles intégrés peuvent être restaurés avec Réinitialiser.',
|
||||
'Reload role': 'Recharger le rôle',
|
||||
'Review differences': 'Voir les différences',
|
||||
"Your role can't assign a role with more power than yours.":
|
||||
'Votre rôle ne peut pas attribuer un rôle plus puissant que le vôtre.',
|
||||
'Choose a role': 'Choisir un rôle',
|
||||
'What this role can do': 'Ce que ce rôle peut faire',
|
||||
'A summary of what this role allows.': 'Un résumé de ce que ce rôle autorise.',
|
||||
'Updates as you edit.': 'Se met à jour pendant vos modifications.',
|
||||
'Everything else': 'Tout le reste',
|
||||
'1 unsaved change. Save is off until you reload':
|
||||
'1 modification non enregistrée. L’enregistrement est désactivé jusqu’au rechargement',
|
||||
'{0} unsaved changes. Save is off until you reload':
|
||||
'{0} modifications non enregistrées. L’enregistrement est désactivé jusqu’au rechargement',
|
||||
'Name your role to save it': 'Nommez votre rôle pour l’enregistrer',
|
||||
'1 unsaved change': '1 modification non enregistrée',
|
||||
'{0} unsaved changes': '{0} modifications non enregistrées',
|
||||
Members: 'Membres',
|
||||
Locked: 'Verrouillé',
|
||||
'{0} members': '{0} membres',
|
||||
'This role changed while you were editing': 'Ce rôle a changé pendant que vous le modifiiez',
|
||||
'{0} saved changes to {1} at {2}. Reload to see them, or review how they differ from your edits.':
|
||||
'{0} a enregistré des modifications sur {1} à {2}. Rechargez pour les voir, ou comparez-les à vos modifications.',
|
||||
Someone: 'Quelqu’un',
|
||||
"Couldn't save the role": 'Impossible d’enregistrer le rôle',
|
||||
'{0} is updated for 1 member.': '{0} est mis à jour pour 1 membre.',
|
||||
'{0} is updated for {1} members.': '{0} est mis à jour pour {1} membres.',
|
||||
'Give the role a name.': 'Donnez un nom au rôle.',
|
||||
'A role named "{0}" already exists. Choose a different name.':
|
||||
'Un rôle nommé « {0} » existe déjà. Choisissez un autre nom.',
|
||||
'Role created': 'Rôle créé',
|
||||
'{0} is ready. Assign it from Users.': '{0} est prêt. Attribuez-le depuis Utilisateurs.',
|
||||
'Role saved': 'Rôle enregistré',
|
||||
'Reset {0} to default?': 'Réinitialiser {0} ?',
|
||||
'Its permissions go back to what RenewCMS ships with.':
|
||||
'Ses permissions reviennent à celles fournies par RenewCMS.',
|
||||
'Reset to default': 'Réinitialiser',
|
||||
'Resetting…': 'Réinitialisation…',
|
||||
'Role reset': 'Rôle réinitialisé',
|
||||
'{0} is back to its defaults.': '{0} est revenu à ses valeurs par défaut.',
|
||||
"Couldn't reset the role. Try again in a moment.":
|
||||
'Impossible de réinitialiser le rôle. Réessayez dans un instant.',
|
||||
read: 'lire',
|
||||
update: 'modifier',
|
||||
delete: 'supprimer',
|
||||
publish: 'publier',
|
||||
"Your role can {0} only entries you created, so All isn't available.":
|
||||
'Votre rôle peut {0} uniquement les entrées que vous avez créées, donc Toutes n’est pas disponible.',
|
||||
'The Owner role can’t be deleted.': 'Le rôle Propriétaire ne peut pas être supprimé.',
|
||||
"Built-in roles can't be deleted. Duplicate it to make a custom role.":
|
||||
'Les rôles intégrés ne peuvent pas être supprimés. Dupliquez-le pour créer un rôle personnalisé.',
|
||||
'You can see roles, but only people who manage roles can create or change them.':
|
||||
'Vous pouvez voir les rôles, mais seules les personnes qui gèrent les rôles peuvent les créer ou les modifier.',
|
||||
'only their own': 'uniquement les siens',
|
||||
'see content types and fields': 'voir les types de contenu et leurs champs',
|
||||
'create and edit content types': 'créer et modifier des types de contenu',
|
||||
'delete content types': 'supprimer des types de contenu',
|
||||
'browse the media library': 'parcourir la médiathèque',
|
||||
'upload files': 'téléverser des fichiers',
|
||||
'delete files': 'supprimer des fichiers',
|
||||
'see authors': 'voir les auteurs',
|
||||
'create authors': 'créer des auteurs',
|
||||
'edit authors': 'modifier des auteurs',
|
||||
'delete authors': 'supprimer des auteurs',
|
||||
'see activity': 'voir l’activité',
|
||||
'export activity': 'exporter l’activité',
|
||||
'see users': 'voir les utilisateurs',
|
||||
'invite users': 'inviter des utilisateurs',
|
||||
"change a user's role": 'changer le rôle d’un utilisateur',
|
||||
'remove users': 'retirer des utilisateurs',
|
||||
'see settings': 'voir les paramètres',
|
||||
'edit general settings': 'modifier les paramètres généraux',
|
||||
'manage sites': 'gérer les sites',
|
||||
'delete a site': 'supprimer un site',
|
||||
'see API keys': 'voir les clés d’API',
|
||||
'create API keys': 'créer des clés d’API',
|
||||
'revoke API keys': 'révoquer des clés d’API',
|
||||
'see roles': 'voir les rôles',
|
||||
'manage roles': 'gérer les rôles',
|
||||
'edit roles with owner-only power': 'modifier les rôles à pouvoir réservé au propriétaire',
|
||||
'apply software updates': 'appliquer les mises à jour du logiciel',
|
||||
'edit activity retention': 'modifier la conservation de l’activité',
|
||||
'transfer ownership': 'transférer la propriété',
|
||||
'read any entry': 'lire n’importe quelle entrée',
|
||||
'read only their own entries': 'lire uniquement leurs propres entrées',
|
||||
'create entries': 'créer des entrées',
|
||||
'edit any entry': 'modifier n’importe quelle entrée',
|
||||
'edit only their own': 'modifier uniquement les leurs',
|
||||
'delete any entry': 'supprimer n’importe quelle entrée',
|
||||
'delete only their own entries': 'supprimer uniquement leurs propres entrées',
|
||||
'publish any entry': 'publier n’importe quelle entrée',
|
||||
'publish only their own entries': 'publier uniquement leurs propres entrées',
|
||||
create: 'créer',
|
||||
edit: 'modifier',
|
||||
'No access to entries.': 'Aucun accès aux entrées.',
|
||||
'Can {0}.': 'Peut {0}.',
|
||||
"Can't {0}.": 'Ne peut pas {0}.',
|
||||
'Applies to 1 member, and to the API keys they created.':
|
||||
'S’applique à 1 membre, et aux clés d’API qu’il a créées.',
|
||||
'Applies to {0} members, and to the API keys they created.':
|
||||
'S’applique à {0} membres, et aux clés d’API qu’ils ont créées.',
|
||||
'No access to {0}.': 'Aucun accès à {0}.',
|
||||
'New role': 'Nouveau rôle',
|
||||
"Couldn't load this role": 'Impossible de charger ce rôle',
|
||||
'This role no longer exists': 'Ce rôle n’existe plus',
|
||||
'It may have been deleted.': 'Il a peut-être été supprimé.',
|
||||
'Back to Roles': 'Retour aux rôles',
|
||||
'1 member': '1 membre',
|
||||
'For example, Contributor': 'Par exemple, Contributeur',
|
||||
'Description (optional)': 'Description (facultatif)',
|
||||
'What this role is for': 'À quoi sert ce rôle',
|
||||
'What this role can do with entries of each content type. Own means entries the person created.':
|
||||
'Ce que ce rôle peut faire avec les entrées de chaque type de contenu. « Les siennes » désigne les entrées créées par la personne.',
|
||||
'General permissions': 'Permissions générales',
|
||||
'Everything outside entries.': 'Tout ce qui n’est pas une entrée.',
|
||||
'Collapse all': 'Tout réduire',
|
||||
'Expand all': 'Tout développer',
|
||||
'Role deleted': 'Rôle supprimé',
|
||||
'{0} is gone.': '{0} a été supprimé.',
|
||||
'Who can do what on this site. Each user has one role.':
|
||||
'Qui peut faire quoi sur ce site. Chaque utilisateur a un seul rôle.',
|
||||
"Couldn't load roles": 'Impossible de charger les rôles',
|
||||
'GET /v1/role failed. Check your connection and try again.':
|
||||
'GET /v1/role a échoué. Vérifiez votre connexion et réessayez.',
|
||||
'No custom roles yet': 'Aucun rôle personnalisé pour l’instant',
|
||||
'The three built-in roles cover most sites. Create a role when someone needs something in between.':
|
||||
'Les trois rôles intégrés couvrent la plupart des sites. Créez un rôle quand quelqu’un a besoin de quelque chose d’intermédiaire.',
|
||||
'See entries of this type.': 'Voir les entrées de ce type.',
|
||||
'Add new entries.': 'Ajouter des entrées.',
|
||||
'Change existing entries.': 'Modifier les entrées existantes.',
|
||||
'Remove entries.': 'Supprimer des entrées.',
|
||||
'Make entries public.': 'Rendre des entrées publiques.',
|
||||
'See content types and their fields.': 'Voir les types de contenu et leurs champs.',
|
||||
'Add content types and change their fields.':
|
||||
'Ajouter des types de contenu et modifier leurs champs.',
|
||||
'Remove content types.': 'Supprimer des types de contenu.',
|
||||
'Browse the images and files.': 'Parcourir les images et les fichiers.',
|
||||
'Add images and files.': 'Ajouter des images et des fichiers.',
|
||||
'Remove images and files.': 'Supprimer des images et des fichiers.',
|
||||
'See the list of authors.': 'Voir la liste des auteurs.',
|
||||
'Add authors.': 'Ajouter des auteurs.',
|
||||
'Change author profiles.': 'Modifier les profils des auteurs.',
|
||||
'Remove authors.': 'Supprimer des auteurs.',
|
||||
'Read the log of who did what.': 'Lire le journal de qui a fait quoi.',
|
||||
'Download the log as a CSV file.': 'Télécharger le journal en fichier CSV.',
|
||||
'See who has an account.': 'Voir qui a un compte.',
|
||||
'Send invitations by email.': 'Envoyer des invitations par e-mail.',
|
||||
'Give someone another role.': 'Donner un autre rôle à quelqu’un.',
|
||||
'Take away someone’s access.': 'Retirer l’accès de quelqu’un.',
|
||||
'Read the site settings.': 'Lire les paramètres du site.',
|
||||
'Change the site settings.': 'Modifier les paramètres du site.',
|
||||
'Add, edit and remove sites.': 'Ajouter, modifier et supprimer des sites.',
|
||||
'Remove a site and its content.': 'Supprimer un site et son contenu.',
|
||||
'See the API keys.': 'Voir les clés d’API.',
|
||||
'Make new API keys.': 'Créer de nouvelles clés d’API.',
|
||||
'Stop an API key from working.': 'Empêcher une clé d’API de fonctionner.',
|
||||
'See roles and what they allow.': 'Voir les rôles et ce qu’ils autorisent.',
|
||||
'Create, edit, duplicate and delete roles.':
|
||||
'Créer, modifier, dupliquer et supprimer des rôles.',
|
||||
'Change a role that carries owner-only abilities.':
|
||||
'Modifier un rôle qui porte des pouvoirs réservés au propriétaire.',
|
||||
'Install a new version of RenewCMS.': 'Installer une nouvelle version de RenewCMS.',
|
||||
'How long the activity log is kept.': 'Durée de conservation du journal d’activité.',
|
||||
'Make another member the owner.': 'Faire d’un autre membre le propriétaire.',
|
||||
} as const
|
||||
|
||||
export type MessageKey = keyof typeof messages
|
||||
@@ -0,0 +1,63 @@
|
||||
import { afterEach, describe, expect, it } from 'vitest'
|
||||
import { messages } from './messages'
|
||||
import { setLocale, t } from './index'
|
||||
|
||||
const ROLE_KEYS = [
|
||||
'Access',
|
||||
'Roles',
|
||||
'New role',
|
||||
'Who can do what on this site. Each user has one role.',
|
||||
'No custom roles yet',
|
||||
"Couldn't load roles",
|
||||
'You can see roles but not change them',
|
||||
'Content permissions',
|
||||
'Quick presets',
|
||||
'Read only',
|
||||
'Write own',
|
||||
'Full content',
|
||||
'General permissions',
|
||||
'Expand all',
|
||||
'{0} unsaved changes',
|
||||
'Give the role a name.',
|
||||
'A role named "{0}" already exists. Choose a different name.',
|
||||
'This role changed while you were editing',
|
||||
'Your access changed',
|
||||
'The Owner role is locked',
|
||||
'Only the owner can edit built-in roles',
|
||||
'What this role can do',
|
||||
'Role created',
|
||||
'{0} is ready. Assign it from Users.',
|
||||
'Role saved',
|
||||
'{0} members have this role. Move them to another role first. Then {1} can be deleted.',
|
||||
'Move {0} members and delete role',
|
||||
"No one has this role. This can't be undone.",
|
||||
'Can {0}.',
|
||||
"Can't {0}.",
|
||||
] as const
|
||||
|
||||
const PLACEHOLDER = /\{\d+\}/g
|
||||
|
||||
afterEach(() => setLocale('en'))
|
||||
|
||||
describe('Roles screens copy', () => {
|
||||
it.each(ROLE_KEYS)('"%s" has a French entry', (key) => {
|
||||
expect((messages as Record<string, string>)[key]).toMatch(/\S/)
|
||||
})
|
||||
|
||||
it('keeps the same placeholders in French as in English for every entry', () => {
|
||||
const mismatches = Object.entries(messages).filter(([english, french]) => {
|
||||
const expected = (english.match(PLACEHOLDER) ?? []).sort().join()
|
||||
const actual = (french.match(PLACEHOLDER) ?? []).sort().join()
|
||||
return expected !== actual
|
||||
})
|
||||
|
||||
expect(mismatches.map(([english]) => english)).toEqual([])
|
||||
})
|
||||
|
||||
it('renders French with its values', () => {
|
||||
setLocale('fr')
|
||||
|
||||
expect(t('{0} unsaved changes', [3])).toBe('3 modifications non enregistrées')
|
||||
expect(t('Roles')).toBe('Rôles')
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user