0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-03-03 22:15:32 -05:00

feat(phrases): add french language (#1767)

* feat(phrases): add french language

* feat(phrases): add missing french translation

* feat(phrases): add missing import

* fix(phrases): fix liniting

* fix(phrases): linting

* fix(phrases): apply review changes

* fix(phrases): linting

Co-authored-by: Charles Zhao <charleszhao@silverhand.io>
This commit is contained in:
Olyno 2022-08-14 14:36:10 +02:00 committed by GitHub
parent 166da40210
commit 0503b30121
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 867 additions and 0 deletions

View file

@ -1,6 +1,7 @@
import { NormalizeKeyPaths } from '@silverhand/essentials';
import en from './locales/en';
import fr from './locales/fr';
import koKR from './locales/ko-kr';
import trTR from './locales/tr-tr';
import zhCN from './locales/zh-cn';
@ -12,6 +13,7 @@ export type I18nKey = NormalizeKeyPaths<typeof en.translation>;
const resource: Resource = {
[Language.English]: en,
[Language.French]: fr,
[Language.Chinese]: zhCN,
[Language.Korean]: koKR,
[Language.Turkish]: trTR,

View file

@ -0,0 +1,84 @@
import en from './en';
const translation = {
input: {
username: "Nom d'utilisateur",
password: 'Mot de passe',
email: 'Email',
phone_number: 'Numéro de téléphone',
confirm_password: 'Confirmer le mot de passe',
},
secondary: {
sign_in_with: 'Se connecter avec {{methods, list(type: disjunction;)}}',
social_bind_with:
'Vous avez déjà un compte ? Connectez-vous pour lier {{methods, list(type: disjunction;)}} avec votre identité sociale.',
},
action: {
sign_in: 'Connexion',
continue: 'Continuer',
create_account: 'Créer un compte',
create: 'Créer',
enter_passcode: 'Entrer le code',
confirm: 'Confirmer',
cancel: 'Annuler',
bind: 'Lier avec {{address}}',
back: 'Aller en arrière',
nav_back: 'Retour',
agree: 'Accepter',
got_it: 'Compris',
sign_in_with: 'Connexion avec {{name}}',
},
description: {
email: 'email',
phone_number: 'numéro de téléphone',
reminder: 'Rappel',
not_found: '404 Non trouvé',
agree_with_terms: "J'ai lu et accepté les ",
agree_with_terms_modal: 'Pour continuer, veuillez accepter le <link></link>.',
terms_of_use: "Conditions d'utilisation",
create_account: 'Créer un compte',
forgot_password: 'Mot de passe oublié ?',
or: 'ou',
enter_passcode: 'Le code a été envoyé à {{address}}',
passcode_sent: 'Le code a été renvoyé',
resend_after_seconds: 'Renvoyer après <span>{{seconds}}</span> secondes',
resend_passcode: 'Renvoyer le code',
continue_with: 'Continuer avec',
create_account_id_exists:
'Le compte avec {{type}} {{value}} existe déjà, voulez-vous vous connecter ?',
sign_in_id_does_not_exists:
"Le compte avec {{type}} {{value}} n'existe pas, voulez-vous créer un nouveau compte ?",
bind_account_title: 'Lier le compte',
social_create_account: 'Pas de compte ? Vous pouvez créer un nouveau compte et un lien.',
social_bind_account:
'Vous avez déjà un compte ? Connectez-vous pour le relier à votre identité sociale.',
social_bind_with_existing:
'Nous trouvons un compte connexe, vous pouvez le relier directement.',
},
error: {
username_password_mismatch: "Le nom d'utilisateur et le mot de passe ne correspondent pas",
username_required: "Le nom d'utilisateur est requis",
password_required: 'Le mot de passe est requis',
username_exists: "Ce Nom d'utilisateur existe déjà",
username_should_not_start_with_number:
"Le nom d'utilisateur ne doit pas commencer par un chiffre",
username_valid_charset:
"Le nom d'utilisateur ne doit contenir que des lettres, des chiffres ou des caractères de soulignement.",
invalid_email: "L'email n'est pas valide",
invalid_phone: "Le numéro de téléphone n'est pas valide",
password_min_length: 'Le mot de passe doit comporter un minimum de {{min}} caractères.',
passwords_do_not_match: 'Les mots de passe ne correspondent pas',
invalid_passcode: 'Le code est invalide',
invalid_connector_auth: "L'autorisation n'est pas valide",
invalid_connector_request: 'Les données du connecteur ne sont pas valides',
unknown: 'Erreur inconnue. Veuillez réessayer plus tard.',
invalid_session:
'Session non trouvée. Veuillez revenir en arrière et vous connecter à nouveau.',
},
};
const fr: typeof en = Object.freeze({
translation,
});
export default fr;

View file

@ -7,6 +7,7 @@ export type ResourceKey = string | Record<string, unknown>;
export enum Language {
English = 'en',
French = 'fr',
Chinese = 'zh-CN',
Turkish = 'tr-TR',
Korean = 'ko-KR',
@ -14,6 +15,7 @@ export enum Language {
const languageCodeAndDisplayNameMappings: Record<Language, string> = {
[Language.English]: 'English',
[Language.French]: 'Français',
[Language.Chinese]: '简体中文',
[Language.Turkish]: 'Türkçe',
[Language.Korean]: '한국어',

View file

@ -1,6 +1,7 @@
import { NormalizeKeyPaths } from '@silverhand/essentials';
import en from './locales/en';
import fr from './locales/fr';
import koKR from './locales/ko-kr';
import trTR from './locales/tr-tr';
import zhCN from './locales/zh-cn';
@ -16,6 +17,7 @@ export type AdminConsoleKey = NormalizeKeyPaths<typeof en.translation.admin_cons
const resource: Resource = {
[Language.English]: en,
[Language.French]: fr,
[Language.Chinese]: zhCN,
[Language.Korean]: koKR,
[Language.Turkish]: trTR,

View file

@ -0,0 +1,118 @@
const errors = {
auth: {
authorization_header_missing: "L'en-tête d'autorisation est manquant.",
authorization_token_type_not_supported: "Le type d'autorisation n'est pas pris en charge.",
unauthorized:
"Non autorisé. Veuillez vérifier les informations d'identification et son champ d'application.",
forbidden: "Interdit. Veuillez vérifier vos rôles et autorisations d'utilisateur.",
jwt_sub_missing: '`sub` manquant dans JWT.',
},
guard: {
invalid_input: "La requête {{type}} n'est pas valide.",
invalid_pagination: "La valeur de la pagination de la requête n'est pas valide.",
},
oidc: {
aborted: "L'utilisateur a abandonné l'interaction.",
invalid_scope: "Le scope {{scope}} n'est pas pris en charge.",
invalid_scope_plural: 'Les scopes {{scopes}} ne sont pas supportés.',
invalid_token: 'Jeton fournis invalide.',
invalid_client_metadata: 'Les métadonnées du client fournies sont invalides.',
insufficient_scope: "Jeton d'accès manquant pour les scopes {{scopes}}.",
invalid_request: 'La requête est invalide.',
invalid_grant: 'Grant request is invalid.',
invalid_redirect_uri:
'`redirect_uri` ne correspondait à aucun des `redirect_uris` enregistrés par le client.',
access_denied: 'Accès refusé.',
invalid_target: 'Indicateur de ressource invalide.',
unsupported_grant_type: "Le `grant_type` demandé n'est pas supporté.",
unsupported_response_mode: "Le `response_mode` demandé n'est pas supporté.",
unsupported_response_type: "Le `response_type` demandé n'est pas supporté.",
provider_error: "Erreur interne de l'OIDC : {{message}}.",
},
user: {
username_exists_register: "Le nom d'utilisateur a été enregistré.",
email_exists_register: "L'adresse email a été enregistrée.",
phone_exists_register: 'Le numéro de téléphone a été enregistré',
invalid_email: 'Addresse email incorrecte.',
invalid_phone: 'Numéro de téléphone incorrect.',
email_not_exists: "L'adresse e-mail n'a pas encore été enregistrée.",
phone_not_exists: "Le numéro de téléphone n'a pas encore été enregistré.",
identity_not_exists: "Le compte social n'a pas encore été enregistré.",
identity_exists: 'Le compte social a été enregistré.',
invalid_role_names: 'les noms de rôles ({{roleNames}}) ne sont pas valides',
},
password: {
unsupported_encryption_method: "La méthode de cryptage {{name}} n'est pas prise en charge.",
pepper_not_found:
'Mot de passe pepper non trouvé. Veuillez vérifier votre environnement de base.',
},
session: {
not_found: 'Session non trouvée. Veuillez revenir en arrière et vous connecter à nouveau.',
invalid_credentials:
"Informations d'identification non valides. Veuillez vérifier votre saisie.",
invalid_sign_in_method: "La méthode de connexion actuelle n'est pas disponible.",
invalid_connector_id:
"Impossible de trouver un connecteur disponible avec l'id {{connectorId}}.",
insufficient_info: "Informations d'identification insuffisantes",
connector_id_mismatch: "Le connectorId ne correspond pas à l'enregistrement de la session.",
connector_session_not_found:
"La session du connecteur n'a pas été trouvée. Veuillez revenir en arrière et vous connecter à nouveau.",
unauthorized: "Veuillez vous enregistrer d'abord.",
unsupported_prompt_name: "Nom d'invite non supporté.",
},
connector: {
general: "Une erreur inattendue s'est produite dans le connecteur. {{errorDescription}}",
not_found: 'Impossible de trouver un connecteur disponible pour le type : {{type}}.',
not_enabled: "Le connecteur n'est pas activé.",
insufficient_request_parameters: 'Certains paramètres peuvent manquer dans la requête.',
invalid_config: "La configuration du connecteur n'est pas valide.",
invalid_response: "La réponse du connecteur n'est pas valide.",
template_not_found: 'Impossible de trouver le bon modèle dans la configuration du connecteur.',
not_implemented: "{{method}} : n'a pas encore été mis en œuvre.",
invalid_access_token: "Le jeton d'accès du connecteur n'est pas valide.",
invalid_auth_code: "Le code d'authentification du connecteur n'est pas valide.",
invalid_id_token: "Le jeton d'identification du connecteur n'est pas valide.",
authorization_failed: "Le processus d'autorisation de l'utilisateur n'a pas abouti.",
oauth_code_invalid:
"Impossible d'obtenir le jeton d'accès, veuillez vérifier le code d'autorisation.",
more_than_one_sms: 'Le nombre de connecteurs SMS est supérieur à 1.',
more_than_one_email: 'Le nombre de connecteurs Email est supérieur à 1.',
db_connector_type_mismatch:
'Il y a un connecteur dans la base de donnée qui ne correspond pas au type.',
},
passcode: {
phone_email_empty: "Le téléphone et l'email sont vides.",
not_found: "Le code d'accès n'a pas été trouvé. Veuillez envoyer le code d'accès en premier.",
phone_mismatch: "Le téléphone ne correspond pas. Veuillez demander un nouveau code d'accès.",
email_mismatch: "Erreur d'email. Veuillez demander un nouveau code d'accès.",
code_mismatch: "Code d'accès invalide.",
expired: "Le code d'accès a expiré. Veuillez demander un nouveau code d'accès.",
exceed_max_try:
"La limite de vérification du code d'accès est dépassée. Veuillez demander un nouveau code d'accès.",
},
sign_in_experiences: {
empty_content_url_of_terms_of_use:
'URL de contenu "Conditions d\'utilisation" vide. Veuillez ajouter l\'URL du contenu si les "Conditions d\'utilisation" sont activées.',
empty_logo: "Veuillez entrer l'URL de votre logo",
empty_slogan:
"Un slogan vide. Veuillez ajouter un slogan si un style d'interface utilisateur contenant le slogan est sélectionné.",
empty_social_connectors:
'Connecteurs sociaux vides. Veuillez ajouter des connecteurs sociaux activés lorsque la méthode de connexion sociale est activée.',
enabled_connector_not_found: 'Le connecteur {{type}} activé est introuvable.',
not_one_and_only_one_primary_sign_in_method:
'Il doit y avoir une et une seule méthode de connexion primaire. Veuillez vérifier votre saisie.',
},
swagger: {
invalid_zod_type: 'Type Zod non valide. Veuillez vérifier la configuration du garde-route.',
not_supported_zod_type_for_params:
'Type Zod non supporté pour les paramètres. Veuillez vérifier la configuration du garde-route.',
},
entity: {
create_failed: 'Échec de la création de {{name}}.',
not_exists: "Le {{name}} n'existe pas.",
not_exists_with_id: "Le {{name}} avec l'ID `{{id}}` n'existe pas.",
not_found: "La ressource n'existe pas.",
},
};
export default errors;

View file

@ -0,0 +1,10 @@
import en from '../en';
import errors from './errors';
import translation from './translation';
const fr: typeof en = Object.freeze({
translation,
errors,
});
export default fr;

View file

@ -0,0 +1,11 @@
const api_resource_details = {
back_to_api_resources: 'Retour aux ressources API',
token_expiration_time_in_seconds: "Temps d'expiration du jeton (en secondes)",
token_expiration_time_in_seconds_placeholder: "Entrez le délai d'expiration de votre jeton",
delete_description:
'Cette action ne peut pas être annulée. Elle supprimera définitivement la ressource API. Veuillez entrer le nom de la ressource API <span>{{name}}</span> pour confirmer.',
enter_your_api_resource_name: 'Entrez le nom de votre ressource API',
api_resource_deleted: 'La ressource API {{name}} a été supprimée avec succès',
};
export default api_resource_details;

View file

@ -0,0 +1,14 @@
const api_resources = {
title: 'Ressources API',
subtitle: 'Définir les API que vous pouvez consommer à partir de vos applications autorisées',
create: 'Créer une ressource API',
api_name: "Nom de l'API",
api_name_placeholder: "Entrez votre nom d'API",
api_identifier: 'Identifiant API',
api_identifier_tip:
"L'identifiant unique de la ressource API. Il doit s'agir d'un URI absolu et ne doit pas comporter de fragment (#). Équivaut au paramètre de ressource dans OAuth 2.0.",
api_resource_created: 'La ressource API {{name}} a été créée avec succès.',
api_identifier_placeholder: 'https://votre-identifiant-api/',
};
export default api_resources;

View file

@ -0,0 +1,40 @@
const application_details = {
back_to_applications: 'Retour aux applications',
check_guide: 'Aller voir le guide',
advanced_settings: 'Paramètres avancés',
application_name: "Nom de l'application",
application_name_placeholder: 'Mon App',
description: 'Description',
description_placeholder: 'Entrez la description de votre application',
authorization_endpoint: 'Authorization endpoint',
authorization_endpoint_tip:
"Le point de terminaison pour effectuer l'authentification et l'autorisation. Il est utilisé pour l'authentification OpenID Connect.",
application_secret: 'App Secret',
redirect_uri: 'Redirect URI',
redirect_uris: 'Redirect URIs',
redirect_uri_placeholder: 'https://votre.site.com/app',
redirect_uri_placeholder_native: 'io.logto://callback',
redirect_uri_tip:
"L'URI de redirection après la connexion d'un utilisateur (qu'elle soit réussie ou non). Voir OpenID Connect AuthRequest pour plus d'informations.",
post_sign_out_redirect_uri: 'URI de redirection post-signature',
post_sign_out_redirect_uris: 'URI de redirection après la signature',
post_sign_out_redirect_uri_placeholder: 'https://votre.site.com/home',
post_sign_out_redirect_uri_tip:
"L'URI de redirection après la déconnexion de l'utilisateur (facultatif). Cela peut n'avoir aucun effet pratique dans certains types d'applications.",
cors_allowed_origins: 'Origines CORS autorisées',
cors_allowed_origins_placeholder: 'https://votre.site.com',
cors_allowed_origins_tip:
"Par défaut, toutes les origines des URI de redirection seront autorisées. En général, aucune action n'est requise pour ce champ.",
add_another: 'Ajouter un autre',
id_token_expiration: "Expiration du jeton d'identification",
refresh_token_expiration: "Rafraîchir l'expiration du jeton",
token_endpoint: 'Token endpoint',
user_info_endpoint: 'Userinfo endpoint',
delete_description:
"Cette action ne peut être annulée. Elle supprimera définitivement l'application. Veuillez entrer le nom de l'application <span>{{nom}}</span> pour confirmer.",
enter_your_application_name: "Saisissez votre nom d'application",
application_deleted: "L'application {{name}} a été supprimée avec succès.",
redirect_uri_required: 'Vous devez entrer au moins un URI de redirection.',
};
export default application_details;

View file

@ -0,0 +1,45 @@
const applications = {
title: 'Applications',
subtitle:
"Configurez une application mobile, une page unique ou une application traditionnelle pour utiliser Logto pour l'authentification.",
create: 'Créer une application',
application_name: "Nom de l'application",
application_name_placeholder: 'Mon app',
application_description: "Description de l'application",
application_description_placeholder: 'Entrer la description de votre application',
select_application_type: "Sélectionner un type d'application",
no_application_type_selected: "Vous n'avez pas encore sélectionné de type d'application",
application_created:
"L'application {{name}} a été créée avec succès ! \nMaintenant, terminez les paramètres de votre application",
app_id: 'App ID',
type: {
native: {
title: 'Application native',
subtitle: 'Une application qui fonctionne dans un environnement natif',
description: 'Exemple: iOS app, Android app',
},
spa: {
title: 'Single Page App',
subtitle:
"Une application qui s'exécute dans un navigateur web et met dynamiquement à jour les données sur place.",
description: 'Exemple: React app, Vue app',
},
traditional: {
title: 'Web Traditionnel',
subtitle: 'Une application qui met à jour les pages par le seul serveur web.',
description: 'Exemple: Next.js, PHP',
},
},
guide: {
get_sample_file: 'Obtenir un exemple',
header_description:
'Suivez un guide étape par étape pour intégrer votre application ou cliquez sur le bouton de droite pour obtenir notre exemple de projet.',
title: "L'application a été créée avec succès",
subtitle:
'Suivez maintenant les étapes ci-dessous pour terminer la configuration de votre application. Veuillez sélectionner le type de SDK pour continuer.',
description_by_sdk:
"Ce guide de démarrage rapide montre comment intégrer Logto dans l'application {{sdk}}.",
},
};
export default applications;

View file

@ -0,0 +1,22 @@
const connector_details = {
back_to_connectors: 'Retour à Connecteurs',
check_readme: 'Vérifier le README',
save_error_empty_config: 'Veuillez entrer la configuration',
send: 'Envoyer',
send_error_invalid_format: 'Entrée non valide',
edit_config_label: 'Entrez votre json ici',
test_email_sender: 'Testez votre connecteur Email',
test_sms_sender: 'Testez votre connecteur SMS',
test_email_placeholder: 'Entrez une adresse email de test',
test_sms_placeholder: 'Entrez un numéro de téléphone de test',
test_message_sent: 'Message de test envoyé !',
test_sender_description: 'Vous recevrez un message si votre json est correctement configuré.',
options_change_email: 'Modifier le connecteur Email',
options_change_sms: 'Changer le connecteur SMS',
connector_deleted: 'Le connecteur a été supprimé avec succès',
type_email: 'Connecteur Email',
type_sms: 'Connecteur SMS',
type_social: 'Connecteur Social',
};
export default connector_details;

View file

@ -0,0 +1,38 @@
const connectors = {
title: 'Connecteurs',
subtitle:
'Configurez des connecteurs pour permettre une expérience de connexion sans mot de passe et sociale.',
create: 'Ajouter un connecteur social',
tab_email_sms: 'Connecteurs Email et SMS',
tab_social: 'Connecteurs sociaux',
connector_name: 'Nom du connecteur',
connector_type: 'Type',
connector_status: 'Experience de connexion',
connector_status_in_use: "En cours d'utilisation",
connector_status_not_in_use: 'Non utilisé',
social_connector_eg: 'Exemple : Google, Facebook, Github',
save_and_done: 'Sauvegarder et Finis',
type: {
email: 'Connecteur Email',
sms: 'Connecreur SMS',
social: 'Connecteur Social',
},
setup_title: {
email: 'Configurer le connecteur Email',
sms: 'Configurer le connecteur SMS',
social: 'Ajouter un connecteur Social',
},
guide: {
subtitle: 'Un guide étape par étape pour configurer votre connecteur',
},
platform: {
universal: 'Universel',
web: 'Web',
native: 'Natif',
},
add_multi_platform: ' supporte plusieurs plateformes, sélectionnez une plateforme pour continuer',
drawer_title: 'Guide des connecteurs',
drawer_subtitle: 'Suivez les instructions pour intégrer votre connecteur',
};
export default connectors;

View file

@ -0,0 +1,22 @@
const contact = {
title: 'Nous contacter',
description:
"Participez à notre communauté pour fournir des informations, demander de l'aide et partager vos idées avec d'autres développeurs.",
discord: {
title: 'Serveur Discord',
description: "Rejoignez notre serveur public pour discuter avec d'autres développeurs",
button: 'Rejoindre',
},
github: {
title: 'GitHub',
description: 'Créer un ticket GitHub',
button: 'Ouvrir',
},
email: {
title: 'Envoyer un email',
description: "Envoyez nous un email pour plus d'information et d'aide",
button: 'Envoyer',
},
};
export default contact;

View file

@ -0,0 +1,23 @@
const dashboard = {
title: 'Tableau de bord',
description: "Obtenez une vue d'ensemble des performances de votre application",
total_users: 'Utilisateurs totaux',
total_users_tip: 'Utilisateurs totaux',
new_users_today: "Nouveaux utilisateurs aujourd'hui",
new_users_today_tip:
"Le nombre de nouveaux utilisateurs enregistrés sur vos applications aujourd'hui",
new_users_7_days: 'Nouveaux utilisateurs des 7 derniers jours',
new_users_7_days_tip:
'Le nombre de nouveaux utilisateurs enregistrés sur vos applications au cours des 7 derniers jours.',
daily_active_users: 'Utilisateurs actifs quotidiens',
daily_active_users_tip:
"Le nombre d'utilisateurs uniques qui ont échangé des jetons sur vos applications aujourd'hui.",
weekly_active_users: 'Utilisateurs actifs hebdomadaires',
weekly_active_users_tip:
"Le nombre d'utilisateurs uniques ayant échangé des jetons sur vos applications au cours des 7 derniers jours.",
monthly_active_users: 'Utilisateurs actifs mensuels',
monthly_active_users_tip:
"Le nombre d'utilisateurs uniques ayant échangé des jetons sur vos applications au cours des 30 derniers jours.",
};
export default dashboard;

View file

@ -0,0 +1,21 @@
const errors = {
something_went_wrong: 'Oups ! Quelque chose a mal tourné.',
page_not_found: 'Page non trouvée',
unknown_server_error: "Une erreur de serveur inconnu s'est produite",
empty: 'Pas de données',
missing_total_number: 'Impossible de trouver le nombre total dans les en-têtes de réponse',
invalid_uri_format: "Format d'URI non valide",
invalid_origin_format: "Format d'origine URI non valide",
invalid_json_format: 'Format JSON non valide',
invalid_error_message_format: "Le format du message d'erreur n'est pas valide.",
required_field_missing: 'Veuillez saisir {{field}}',
required_field_missing_plural: 'Vous devez entrer au moins un {{field}}.',
more_details: 'Plus de détails',
username_pattern_error:
"Le nom d'utilisateur ne doit contenir que des lettres, des chiffres ou des traits de soulignement et ne doit pas commencer par un chiffre.",
password_pattern_error: 'Le mot de passe doit comporter un minimum de 6 caractères',
insecure_contexts: 'Les contextes non sécurisés (non HTTPS) ne sont pas pris en charge.',
unexpected_error: "Une erreur inattendue s'est produite",
};
export default errors;

View file

@ -0,0 +1,41 @@
const general = {
placeholder: 'Placeholder',
skip: 'Passer',
next: 'Suivant',
retry: 'Essayez à nouveau',
done: 'Terminé',
search: 'Rechercher',
search_placeholder: 'Rechercher...',
clear_result: 'Effacer les résultats',
save: 'Sauvegarder',
save_changes: 'Sauvegarder les modifications',
saved: 'Sauvegardé !',
loading: 'Chargement...',
redirecting: 'Redirection...',
add: 'Ajouter',
added: 'Ajouté',
cancel: 'Annuler',
confirm: 'Confirmer',
check_out: 'Vérifier',
create: 'Créer',
set_up: 'Configurer',
customize: 'Customiser',
enable: 'Activer',
reminder: 'Rappeler',
delete: 'Supprimer',
more_options: "PLUS D'OPTIONS",
close: 'Fermer',
copy: 'Copier',
copying: 'Copie',
copied: 'Copié',
required: 'Requis',
add_another: '+ Ajouter un autre',
deletion_confirmation: 'Êtes-vous sûr de vouloir supprimer ce {{title}} ?',
settings_nav: 'Paramètres',
unsaved_changes_warning:
'Vous avez effectué des changements. Êtes-vous sûr de vouloir quitter cette page ?',
leave_page: 'Quittez la page',
stay_on_page: 'Rester sur la page',
};
export default general;

View file

@ -0,0 +1,31 @@
const get_started = {
progress: 'Guide de démarrage : {{completed}}/{{total}}',
progress_dropdown_title: 'Il y a quelques choses que vous pouvez faire...',
title: 'Comment voulez-vous démarrer avec Logto ?',
subtitle_part1:
'Voici quelques mesures que vous pouvez prendre pour tirer rapidement profit de Logto',
subtitle_part2: "J'en ai fini avec cette installation. ",
hide_this: 'Cacher cela',
confirm_message:
'Êtes-vous sûr de vouloir masquer cette page ? Cette action ne peut être annulée.',
card1_title: 'Regardez la démo',
card1_subtitle:
"Essayez maintenant l'expérience de connexion Logto pour voir comment elle fonctionne.",
card2_title: 'Créer et intégrer la première application',
card2_subtitle:
"Configurez une application mobile, une page unique ou une application traditionnelle pour utiliser Logto pour l'authentification.",
card3_title: "Personnaliser l'expérience de connexion",
card3_subtitle:
"Personnalisez l'interface utilisateur pour qu'elle corresponde à votre marque et consultez-la en temps réel.",
card4_title: 'Configurer le connecteur SMS et e-mail',
card4_subtitle:
"Essayez de vous connecter sans mot de passe à l'aide d'un numéro de téléphone ou d'une adresse email pour offrir une expérience client sécurisée et sans friction.",
card5_title: 'Ajouter un connecteur social',
card5_subtitle:
'Permettez à vos clients de se connecter à votre application avec leurs identités sociales en un clic.',
card6_title: 'Informations complémentaires',
card6_subtitle:
'Découvrez nos documents basés sur des scénarios, étape par étape, sans concepts fastidieux',
};
export default get_started;

View file

@ -0,0 +1,52 @@
import api_resource_details from './api-resource-details';
import api_resources from './api-resources';
import application_details from './application-details';
import applications from './applications';
import connector_details from './connector-details';
import connectors from './connectors';
import contact from './contact';
import dashboard from './dashboard';
import errors from './errors';
import general from './general';
import get_started from './get-started';
import log_details from './log-details';
import logs from './logs';
import session_expired from './session-expired';
import settings from './settings';
import sign_in_exp from './sign-in-exp';
import tab_sections from './tab-sections';
import tabs from './tabs';
import user_details from './user-details';
import users from './users';
import welcome from './welcome';
const admin_console = {
title: 'Admin Console',
sign_out: 'Sign Out',
profile: 'Profile',
admin_user: 'Admin',
system_app: 'System',
general,
errors,
tab_sections,
tabs,
applications,
application_details,
api_resources,
api_resource_details,
connectors,
connector_details,
get_started,
users,
user_details,
contact,
sign_in_exp,
settings,
dashboard,
logs,
log_details,
session_expired,
welcome,
};
export default admin_console;

View file

@ -0,0 +1,17 @@
const log_details = {
back_to_logs: "Retour aux journaux d'audit",
back_to_user: 'Retour à {{name}}',
success: 'Succès',
failed: 'Échoué',
event_type: "Type d'événement",
application: 'Application',
ip_address: 'Addresse IP',
user: 'Utilisateur',
log_id: 'ID du journal',
time: 'Temps',
user_agent: "Agent de l'utilisateur",
tab_details: 'Détails',
raw_data: 'Données brutes',
};
export default log_details;

View file

@ -0,0 +1,12 @@
const logs = {
title: "Journaux d'audit",
subtitle:
"Visualisez les données du journal des événements d'authentification effectués par votre administrateur et vos utilisateurs.",
event: 'Événement',
user: 'Utilisateur',
application: 'Application',
time: 'Temps',
filter_by: 'Filtrer par',
};
export default logs;

View file

@ -0,0 +1,8 @@
const session_expired = {
title: 'Session expirée',
subtitle:
"Votre session a peut-être expiré et vous avez été déconnecté. Cliquez sur le bouton ci-dessous pour vous reconnecter à la console d'administration.",
button: 'Se reconnecter',
};
export default session_expired;

View file

@ -0,0 +1,27 @@
const settings = {
title: 'Paramètres',
description: 'Gérer les paramètres globaux',
tabs: {
general: 'Général',
},
custom_domain: 'Domaine personnalisé',
language: 'Langue',
appearance: 'Apparence',
appearance_system: 'Synchronisation avec le système',
appearance_light: 'Mode clair',
appearance_dark: 'Mode sombre',
saved: 'Sauvegardé !',
change_password: 'Changer le mot de passe',
change_password_description:
"Vous pouvez changer le mot de passe de ce compte. Vous utiliserez le nom d'utilisateur actuel avec le nouveau mot de passe pour vous connecter à la console d'administration.",
change_modal_title: 'Changer le mot de passe du compte',
change_modal_description:
"Vous utiliserez votre nom d'utilisateur actuel et votre nouveau mot de passe pour vous connecter à la console d'administration.",
new_password: 'Nouveau mot de passe',
new_password_placeholder: 'Entrez votre mot de passe',
confirm_password: 'Confirmez votre mot de passe',
confirm_password_placeholder: 'Confirmez votre mot de passe',
password_changed: 'Mot de passe changé !',
};
export default settings;

View file

@ -0,0 +1,112 @@
const sign_in_exp = {
title: 'Expérience de connexion',
description:
"Personnalisez l'interface utilisateur pour qu'elle corresponde à votre marque et consultez-la en temps réel.",
tabs: {
branding: 'Image de marque',
methods: 'Méthodes de connexion',
others: 'Autres',
},
welcome: {
title:
"C'est la première fois que vous définissez l'expérience de connexion. Ce guide vous aidera à passer par tous les paramètres nécessaires et à démarrer rapidement.",
get_started: 'Commencez',
apply_remind:
"Veuillez noter que l'expérience de connexion s'appliquera à toutes les applications sous ce compte.",
got_it: 'Compris.',
},
color: {
title: 'COULEUR',
primary_color: 'Couleur de la marque',
dark_primary_color: 'Couleur de la marque (Sombre)',
dark_mode: 'Activer le mode sombre',
dark_mode_description:
"Votre application aura un thème en mode sombre généré automatiquement en fonction de la couleur de votre marque et de l'algorithme de Logto. Vous êtes libre de le personnaliser.",
dark_mode_reset_tip:
'Recalculer la couleur du mode sombre en fonction de la couleur de la marque.',
reset: 'Recalculer',
},
branding: {
title: 'ZONE DE MARQUE',
ui_style: 'Style',
styles: {
logo_slogan: "Logo de l'application avec slogan",
logo: "Logo de l'application seulement",
},
logo_image_url: "URL de l'image du logo de l'application",
logo_image_url_placeholder: 'https://votre.domaine.cdn/logo.png',
dark_logo_image_url: "URL de l'image du logo de l'application (Sombre)",
dark_logo_image_url_placeholder: 'https://votre.domaine.cdn/logo-dark.png',
slogan: 'Slogan',
slogan_placeholder: 'Libérez votre créativité',
},
terms_of_use: {
title: "CONDITIONS D'UTILISATION",
enable: "Activer les conditions d'utilisation",
description: "Ajouter les accords juridiques pour l'utilisation de votre produit",
terms_of_use: "Conditions d'utilisation",
terms_of_use_placeholder: 'https://vos.conditions.utilisation/',
terms_of_use_tip: "Conditions d'utilisation URL",
},
sign_in_methods: {
title: 'METHODES DE CONNEXION',
primary: 'Méthode de connexion principale',
enable_secondary: 'Activer une seconde méthode de connexion',
enable_secondary_description:
"Une fois qu'elle est activée, votre application prend en charge d'autres méthodes de connexion que la méthode principale. ",
methods: 'Méthode de connexion',
methods_sms: 'Connexion avec numéro de téléphone',
methods_email: 'Connexion avec email',
methods_social: 'Connexion avec social',
methods_username: "Connexion avec nom d'utilisateur et mot de passe",
methods_primary_tag: '(Principale)',
define_social_methods: "Définir les méthodes d'authentification sociale",
transfer: {
title: 'Connecteurs sociaux',
footer: {
not_in_list: 'Pas dans la liste ?',
set_up_more: 'Configurer plus',
go_to: 'connecteurs sociaux ou allez à la section "Connecteurs".',
},
},
},
others: {
languages: {
title: 'LANGAGES',
mode: 'Mode langue',
auto: 'Auto',
fixed: 'Fixé',
fallback_language: 'Langage par défaut',
fallback_language_tip:
'La langue de repli si Logto ne trouve pas de jeu de phrases dans la langue appropriée.',
fixed_language: 'Langue fixe',
},
},
setup_warning: {
no_connector: '',
no_connector_sms:
"Vous n'avez pas encore configuré de connecteur SMS. Votre expérience de connexion ne sera pas disponible tant que vous n'aurez pas terminé les paramètres. ",
no_connector_email:
"Vous n'avez pas encore configuré de connecteur Email. Votre expérience de connexion ne sera pas disponible tant que vous n'aurez pas terminé les paramètres. ",
no_connector_social:
"Vous n'avez pas encore configuré de connecteurs sociaux. Votre expérience de connexion ne sera pas disponible tant que vous n'aurez pas terminé les paramètres. ",
no_added_social_connector:
"Vous avez maintenant configuré quelques connecteurs sociaux. Assurez-vous d'en ajouter quelques-uns à votre expérience de connexion.",
},
save_alert: {
description:
'Vous changez de méthode de connexion. Cela aura un impact sur certains de vos utilisateurs. Êtes-vous sûr de vouloir faire cela ?',
before: 'Avant',
after: 'Après',
},
preview: {
title: "Aperçu de l'expérience de connexion",
dark: 'Sombre',
light: 'Clair',
native: 'Natif',
desktop_web: 'Web ordinateur',
mobile_web: 'Web mobile',
},
};
export default sign_in_exp;

View file

@ -0,0 +1,8 @@
const tab_sections = {
overview: "Vue d'ensemble",
resource_management: 'Gestion des ressources',
user_management: 'Gestion des utilisateurs',
help_and_support: 'Aide et support',
};
export default tab_sections;

View file

@ -0,0 +1,15 @@
const tabs = {
get_started: 'Commencez',
dashboard: 'Tableau de bord',
applications: 'Applications',
api_resources: 'Ressources API',
sign_in_experience: 'Expérience de connexion',
connectors: 'Connecteurs',
users: 'Gestion des utilisateurs',
audit_logs: "Journaux d'audit",
docs: 'Documentation',
contact_us: 'Contactez nous',
settings: 'Paramètres',
};
export default tabs;

View file

@ -0,0 +1,41 @@
const user_details = {
back_to_users: 'Retour à la gestion des utilisateurs',
created_title: 'Cet utilisateur a été créé avec succès',
created_guide: "Vous pouvez envoyer à l'utilisateur les informations de connexion suivantes",
created_username: "Nom d'utilisateur :",
created_password: 'Mot de passe :',
menu_delete: 'Supprimer',
delete_description:
"Cette action ne peut être annulée. Elle supprimera définitivement l'utilisateur.",
deleted: "L'utilisateur a été supprimé avec succès",
reset_password: {
reset_password: 'Réinitialiser le mot de passe',
title: 'Êtes-vous sûr de vouloir réinitialiser le mot de passe ?',
content:
"Cette action ne peut être annulée. Cette action réinitialisera les informations de connexion de l'utilisateur.",
congratulations: 'Cet utilisateur a été réinitialisé',
new_password: 'Nouveau mot de passe :',
},
tab_logs: "Journaux de l'utilisateur",
field_email: 'Email principale',
field_phone: 'Téléphone principal',
field_username: "Nom d'utilisateur",
field_name: 'Nom',
field_avatar: "URL de l'image avatar",
field_avatar_placeholder: 'https://votre.domaine.cdn/avatar.png',
field_custom_data: 'Données personnalisées',
field_custom_data_tip:
"Informations supplémentaires sur l'utilisateur qui ne figurent pas dans les propriétés prédéfinies de l'utilisateur, telles que la couleur et la langue préférées de l'utilisateur.",
field_connectors: 'Connecteurs sociaux',
custom_data_invalid: 'Les données personnalisées doivent être un objet JSON valide.',
connectors: {
connectors: 'Connecteurs',
user_id: 'ID utilisateur',
remove: 'Supprimer',
not_connected: "L'utilisateur n'est connecté à aucun connecteur social",
deletion_confirmation:
"Vous supprimez l'identité existante <nom/>. Etes-vous sûr de vouloir faire ça ?",
},
};
export default user_details;

View file

@ -0,0 +1,15 @@
const users = {
title: 'Gestion des utilisateurs',
subtitle:
"Gérer les identités des utilisateurs, y compris la création d'utilisateurs, la modification des informations sur les utilisateurs, la consultation des journaux des utilisateurs, la réinitialisation des mots de passe et la suppression des utilisateurs.",
create: 'Ajouter un utilisateur',
user_name: 'Utilisateur',
application_name: "De l'application",
latest_sign_in: 'Dernière connexion',
create_form_username: "Nom d'utilisateur",
create_form_password: 'Mot de passe',
create_form_name: 'Nom complet',
unnamed: 'Sans nom',
};
export default users;

View file

@ -0,0 +1,8 @@
const welcome = {
title: "Bienvenue dans la console d'administration",
description:
"La console d'administration est une application web qui permet de gérer Logto sans avoir à coder. Commençons par créer un compte. Avec ce compte, vous pouvez gérer Logto par vous-même ou au nom de votre entreprise.",
create_account: 'Créer un compte',
};
export default welcome;

View file

@ -0,0 +1,15 @@
const demo_app = {
notification:
'Utilisez votre compte administrateur par défaut ou créez un nouveau compte pour vous connecter à la démo.',
title: 'Vous avez réussi à vous connecter à la démo !',
subtitle: 'Voici vos informations de connexion :',
username: "Nom d'utilisateur : ",
user_id: "ID de l'utilisateur :",
sign_out: 'Déconnexion de la démo',
continue_explore: 'Ou continuer à explorer',
customize_sign_in_experience: "Personnaliser l'expérience de connexion",
enable_passwordless: 'Activer la fonction sans mot de passe',
add_social_connector: 'Ajouter un connecteur social',
};
export default demo_app;

View file

@ -0,0 +1,9 @@
import admin_console from './admin-console';
import demo_app from './demo-app';
const translation = {
admin_console,
demo_app,
};
export default translation;

View file

@ -9,6 +9,7 @@ export type ResourceKey = string | Record<string, unknown>;
export enum Language {
English = 'en',
French = 'fr',
Chinese = 'zh-CN',
Turkish = 'tr-TR',
Korean = 'ko-KR',
@ -18,6 +19,7 @@ export const languageEnumGuard = z.nativeEnum(Language);
const languageCodeAndDisplayNameMappings: Record<Language, string> = {
[Language.English]: 'English',
[Language.French]: 'Français',
[Language.Chinese]: '简体中文',
[Language.Turkish]: 'Türkçe',
[Language.Korean]: '한국어',