diff --git a/docs/en/UI/Angular/Quick-Start.md b/docs/en/UI/Angular/Quick-Start.md index 3e6de0b43f..c3cbc90b25 100644 --- a/docs/en/UI/Angular/Quick-Start.md +++ b/docs/en/UI/Angular/Quick-Start.md @@ -55,7 +55,7 @@ To avoid IDE warnings, run `yarn` or `npm install` in the Angular root folder be After creating a solution, open its "angular" directory in your IDE. This is how the contents of the root folder looks like: -Angular project root folder structure +Angular project root folder structure Here is what these folders and files are for: @@ -76,7 +76,7 @@ Here is what these folders and files are for: Now let us take a look at the contents of the source folder. -Angular project source folder structure +Angular project source folder structure - **app** is the main directory you put your application files in. Any module, component, directive, service, pipe, guard, interceptor, etc. should be placed here. You are free to choose any folder structure, but [organizing Angular applications based on modules](https://angular.io/guide/module-types) is generally a fine practice. - **home** is a predefined module and acts as a welcome page. It also demonstrates how a feature-based folder structure may look like. More complex features will probably have sub-features, thus inner folders. You may change the home folder however you like. @@ -106,7 +106,7 @@ Now that you know about the files and folders, we can get the application up and 3. Run `yarn start` or `npm start`. The first compilation may take a while. This will start a [live development server](#angular-live-development-server) and launch your default browser in the end. 4. Visit the browser page that opens after the compilation [1](#f-certificate-error). -New ABP Angular project home page +New ABP Angular project home page You may modify the behavior of the **start script** (in the package.json file) by changing the parameters passed to the `ng serve` command. For instance, if you do not want a browser window to open next time you run the script, remove `--open` from the end of it. Please check [ng serve documentation](https://angular.io/cli/serve) for all available options. @@ -114,13 +114,13 @@ You may modify the behavior of the **start script** (in the package.json file) b The development server of Angular is based on [Webpack DevServer](https://webpack.js.org/configuration/dev-server/). It tracks changes to source files and syncs the browser window after an incremental re-compilation every time [2](#f-dev-server) you make one. Your experience will be like this: -Angular Live Development Server compiles again on template change and removes a button from the page displayed by the browser. +Angular Live Development Server compiles again on template change and removes a button from the page displayed by the browser. Please keep in mind that you should not use this server in production. To provide the fastest experience, the compiler skips some heavy optimizations and the development server is simply not built for multiple clients. The next section will describe what to do. --- -Error caused by browser blocking access to backend +Error caused by browser blocking access to backend 1 _If you see the error above when you run the Angular app, your browser might be blocking access to the API because of the self-signed certificate. Visit that address and allow access to it (once). When you see the Swagger interface, you are good to go._ [↩](#a-certificate-error) @@ -169,7 +169,7 @@ When you run the development server, variables defined in _environment.ts_ take 2. Run `yarn` or `npm install` if you have not installed dependencies already. 3. Run `yarn build:prod` or `npm run build:prod`. -Angular compiler optimizing the build using Terser +Angular compiler optimizing the build using Terser Depending on project size, the compilation may take a few minutes. When it is finished, the compiled output will be placed inside the _/dist_ folder. Voila! You have deployment-ready build artifacts. diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json index c02e7e0e46..d1a9f1f09e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "GivenTenantIsNotAvailable": "Given tenant is not available: {0}", diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/fr.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/fr.json new file mode 100644 index 0000000000..dbd17957fc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/fr.json @@ -0,0 +1,12 @@ +{ + "culture": "fr", + "texts": { + "GivenTenantIsNotAvailable": "Le Tenant donné n'est pas disponible: {0}", + "Tenant": "Tenant", + "Switch": "Changer", + "Name": "Nom", + "SwitchTenantHint": "Laissez le champ de nom vide pour passer du côté hôte.", + "SwitchTenant": "Changer le Tenant", + "NotSelected": "Non séléctionné" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs index 84643ed543..a178f489ff 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs @@ -73,7 +73,7 @@ namespace Volo.Abp.Cli { var assembly = typeof(CliService).Assembly; var toolPath = GetToolPath(assembly); - var currentCliVersion = await GetCurrentCliVersion(assembly); + var currentCliVersion = await GetCurrentCliVersionInternalAsync(assembly); var updateChannel = GetUpdateChannel(currentCliVersion); Logger.LogInformation($"Version {currentCliVersion} ({updateChannel})"); @@ -94,7 +94,7 @@ namespace Volo.Abp.Cli } } - private static string GetToolPath(Assembly assembly) + private string GetToolPath(Assembly assembly) { if (!assembly.Location.Contains(".store")) { @@ -104,7 +104,12 @@ namespace Volo.Abp.Cli return assembly.Location.Substring(0, assembly.Location.IndexOf(".store", StringComparison.Ordinal)); } - private static async Task GetCurrentCliVersion(Assembly assembly) + public async Task GetCurrentCliVersionAsync(Assembly assembly) + { + return await GetCurrentCliVersionInternalAsync(assembly); + } + + private async Task GetCurrentCliVersionInternalAsync(Assembly assembly) { SemanticVersion currentCliVersion = default; @@ -134,7 +139,7 @@ namespace Volo.Abp.Cli return currentCliVersion; } - private static UpdateChannel GetUpdateChannel(SemanticVersion currentCliVersion) + private UpdateChannel GetUpdateChannel(SemanticVersion currentCliVersion) { if (!currentCliVersion.IsPrerelease) { @@ -172,7 +177,7 @@ namespace Volo.Abp.Cli } } - private static bool IsGlobalTool(string toolPath) + private bool IsGlobalTool(string toolPath) { var globalPaths = new[] { @"%USERPROFILE%\.dotnet\tools\", "%HOME%/.dotnet/tools/", }; return globalPaths.Select(Environment.ExpandEnvironmentVariables).Contains(toolPath); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs index 72aedc51de..4f4aec853c 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs @@ -7,5 +7,10 @@ namespace Volo.Abp.Cli.Commands protected override string CommandName => Name; protected override string SchematicsCommandName => "proxy-add"; + + public GenerateProxyCommand(CliService cliService) + : base(cliService) + { + } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs index 7898ae7abc..0ecd849ad1 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs @@ -2,7 +2,10 @@ using System.IO; using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Newtonsoft.Json.Linq; +using NuGet.Versioning; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; @@ -11,14 +14,23 @@ namespace Volo.Abp.Cli.Commands { public abstract class ProxyCommandBase : IConsoleCommand, ITransientDependency { + public CliService CliService { get; } + public ILogger Logger { get; set; } + protected abstract string CommandName { get; } protected abstract string SchematicsCommandName { get; } - public Task ExecuteAsync(CommandLineArgs commandLineArgs) + public ProxyCommandBase(CliService cliService) + { + CliService = cliService; + Logger = NullLogger.Instance; + } + + public async Task ExecuteAsync(CommandLineArgs commandLineArgs) { CheckAngularJsonFile(); - CheckNgSchematics(); + await CheckNgSchematicsAsync(); var prompt = commandLineArgs.Options.ContainsKey("p") || commandLineArgs.Options.ContainsKey("prompt"); var defaultValue = prompt ? null : "__default"; @@ -51,11 +63,9 @@ namespace Volo.Abp.Cli.Commands } CmdHelper.RunCmd(commandBuilder.ToString()); - - return Task.CompletedTask; } - private void CheckNgSchematics() + private async Task CheckNgSchematicsAsync() { var packageJsonPath = $"package.json"; @@ -68,10 +78,10 @@ namespace Volo.Abp.Cli.Commands ); } - var schematicsPackageNode = + var schematicsVersion = (string) JObject.Parse(File.ReadAllText(packageJsonPath))["devDependencies"]?["@abp/ng.schematics"]; - if (schematicsPackageNode == null) + if (schematicsVersion == null) { throw new CliUsageException( "\"@abp/ng.schematics\" NPM package should be installed to the devDependencies before running this command!" + @@ -79,6 +89,20 @@ namespace Volo.Abp.Cli.Commands GetUsageInfo() ); } + + var parseError = SemanticVersion.TryParse(schematicsVersion.TrimStart('~', '^', 'v'), out var semanticSchematicsVersion); + if (parseError) + { + Logger.LogWarning("Couldn't determinate version of \"@abp/ng.schematics\" package."); + return; + } + + var cliVersion = await CliService.GetCurrentCliVersionAsync(typeof(CliService).Assembly); + if (semanticSchematicsVersion < cliVersion) + { + Logger.LogWarning("\"@abp/ng.schematics\" version is lower than ABP Cli version."); + return; + } } private void CheckAngularJsonFile() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs index 7d31d5387a..85bbc3e15f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs @@ -7,5 +7,10 @@ protected override string CommandName => Name; protected override string SchematicsCommandName => "proxy-remove"; + + public RemoveProxyCommand(CliService cliService) + : base(cliService) + { + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/fr.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/fr.json new file mode 100644 index 0000000000..772754e665 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/fr.json @@ -0,0 +1,6 @@ +{ + "culture": "fr", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0} ne peut pas être plus que {1}! Augmentez {2}. {3} du côté du serveur pour permettre plus de résultats." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/fr.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/fr.json new file mode 100644 index 0000000000..a5cdbb768d --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/fr.json @@ -0,0 +1,25 @@ +{ + "culture": "fr", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "Adresse par défaut", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Valeur par défaut du nom d'affichage", + "DisplayName:Abp.Mailing.Smtp.Host": "Hôte", + "DisplayName:Abp.Mailing.Smtp.Port": "Port", + "DisplayName:Abp.Mailing.Smtp.UserName": "Nom d'utilisateur", + "DisplayName:Abp.Mailing.Smtp.Password": "Mot de passe", + "DisplayName:Abp.Mailing.Smtp.Domain": "Domaine", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "Activer SSL", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Utiliser les informations d'identification par défaut", + "Description:Abp.Mailing.DefaultFromAddress": "L'adresse d'expédition par défaut", + "Description:Abp.Mailing.DefaultFromDisplayName": "La valeur par défaut du nom d'affichage", + "Description:Abp.Mailing.Smtp.Host": "Le nom ou l'adresse IP de l'hôte utilisé pour les transactions SMTP.", + "Description:Abp.Mailing.Smtp.Port": "Le port utilisé pour les transactions SMTP.", + "Description:Abp.Mailing.Smtp.UserName": "Nom d'utilisateur associé aux informations d'identification.", + "Description:Abp.Mailing.Smtp.Password": "Le mot de passe du nom d'utilisateur associé aux informations d'identification.", + "Description:Abp.Mailing.Smtp.Domain": "Le nom de domaine ou d'ordinateur qui vérifie les informations d'identification.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Si SmtpClient utilise SSL (Secure Sockets Layer) pour crypter la connexion.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Si les DefaultCredentials sont envoyés avec les demandes.", + "TextTemplate:StandardEmailTemplates.Layout": "Modèle de mise en page d'e-mail par défaut", + "TextTemplate:StandardEmailTemplates.Message": "Modèle de message simple pour les e-mails" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/fr.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/fr.json new file mode 100644 index 0000000000..adcded679d --- /dev/null +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/fr.json @@ -0,0 +1,15 @@ +{ + "culture": "fr", + "texts": { + "DisplayName:Abp.Ldap.ServerHost": "Hôte du serveur", + "Description:Abp.Ldap.ServerHost": "Hôte du serveur", + "DisplayName:Abp.Ldap.ServerPort": "Port de serveur", + "Description:Abp.Ldap.ServerPort": "Port de serveur", + "DisplayName:Abp.Ldap.BaseDc": "Composant de domaine de base", + "Description:Abp.Ldap.BaseDc": "Composant de domaine de base", + "DisplayName:Abp.Ldap.UserName": "Nom d'utilisateur", + "Description:Abp.Ldap.UserName": "Nom d'utilisateur", + "DisplayName:Abp.Ldap.Password": "Mot de passe", + "Description:Abp.Ldap.Password": "Mot de passe" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/fr.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/fr.json new file mode 100644 index 0000000000..a8b5c1bb5f --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/fr.json @@ -0,0 +1,7 @@ +{ + "culture": "fr", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "Langage par défaut", + "Description:Abp.Localization.DefaultLanguage": "La langue par défaut de l'application." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/fr.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/fr.json new file mode 100644 index 0000000000..b36fbcdcfb --- /dev/null +++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/fr.json @@ -0,0 +1,7 @@ +{ + "culture": "fr", + "texts": { + "DisplayName:Abp.Timing.Timezone": "Fuseau horaire", + "Description:Abp.Timing.Timezone": "Fuseau horaire de l'application" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/fr.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/fr.json new file mode 100644 index 0000000000..1fb2e26760 --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/fr.json @@ -0,0 +1,6 @@ +{ + "culture": "fr", + "texts": { + "Menu:Administration": "Administration" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json new file mode 100644 index 0000000000..ce03c28549 --- /dev/null +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json @@ -0,0 +1,69 @@ +{ + "culture": "fr", + "texts": { + "InternalServerErrorMessage": "Une erreur interne s'est produite lors de votre demande!", + "ValidationErrorMessage": "Votre demande n'est pas valide!", + "ValidationNarrativeErrorMessageTitle": "Les erreurs suivantes ont été détectées lors de la validation.", + "DefaultErrorMessage": "Une erreur est survenue!", + "DefaultErrorMessageDetail": "Détails de l'erreur non envoyés par le serveur.", + "DefaultErrorMessage401": "Vous n'êtes pas authentifié!", + "DefaultErrorMessage401Detail": "Vous devez vous connecter pour effectuer cette opération.", + "DefaultErrorMessage403": "Vous n'êtes pas autorisé!", + "DefaultErrorMessage403Detail": "Vous n'êtes pas autorisé à effectuer cette opération!", + "DefaultErrorMessage404": "Ressource introuvable!", + "DefaultErrorMessage404Detail": "La ressource demandée est introuvable sur le serveur!", + "EntityNotFoundErrorMessage": "Il n'y a pas d'entité {0} avec id = {1}!", + "Languages": "Langues", + "Error": "Erreur", + "AreYouSure": "Êtes-vous sûr?", + "Cancel": "Annuler", + "Clear": "Clair", + "Yes": "Oui", + "No": "Non", + "Ok": "D'accord", + "Close": "Fermer", + "Save": "Enregistrer", + "SavingWithThreeDot": "Enregistrement...", + "Actions": "Actions", + "Delete": "Supprimer", + "Edit": "Modifier", + "Refresh": "Actualiser", + "Language": "Langue", + "LoadMore": "Charger plus", + "ProcessingWithThreeDot": "Traitement...", + "LoadingWithThreeDot": "Chargement...", + "Welcome": "Bienvenue", + "Login": "Se connecter", + "Register": "S'inscrire", + "Logout": "Se déconnecter", + "Submit": "Envoyer", + "Back": "Précédent", + "PagerSearch": "Recherche", + "PagerNext": "prochain", + "PagerPrevious": "Précédent", + "PagerFirst": "Première", + "PagerLast": "Dernier", + "PagerInfo": "Affichage de _START_ à _END_ entrées sur _TOTAL_", + "PagerInfo{0}{1}{2}": "Affichage de {0} à {1} sur {2} entrées", + "PagerInfoEmpty": "Affichage de 0 à 0 sur 0 entrées", + "PagerInfoFiltered": "(filtré à partir des entrées _MAX_ totale)", + "NoDataAvailableInDatatable": "Aucune donnée disponible", + "Total": "Total", + "Selected": "Sélectionné", + "PagerShowMenuEntries": "Afficher les entrées _MENU_", + "DatatableActionDropdownDefaultText": "Actions", + "ChangePassword": "Changer le mot de passe", + "PersonalInfo": "Mon profil", + "AreYouSureYouWantToCancelEditingWarningMessage": "Vous avez des changements non enregistrés.", + "UnhandledException": "Exception non-gérée!", + "401Message": "Non autorisé", + "403Message": "Interdit", + "404Message": "Page introuvable", + "500Message": "Erreur Interne du Serveur", + "GoHomePage": "Aller à la page d'accueil", + "GoBack": "Retour", + "Search": "Recherche", + "ItemWillBeDeletedMessageWithFormat": "{0} sera supprimé!", + "ItemWillBeDeletedMessage": "Cet objet va être supprimé!" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/fr.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/fr.json new file mode 100644 index 0000000000..558bc9ca11 --- /dev/null +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/fr.json @@ -0,0 +1,34 @@ +{ + "culture": "fr", + "texts": { + "'{0}' and '{1}' do not match.": "'{0}' et '{1}' ne correspondent pas.", + "The {0} field is not a valid credit card number.": "Le champ {0} n'est pas un numéro de carte de crédit valide.", + "{0} is not valid.": "{0} n'est pas valide.", + "The {0} field is not a valid e-mail address.": "Le champ {0} n'est pas une adresse e-mail valide.", + "The {0} field only accepts files with the following extensions: {1}": "Le champ {0} accepte uniquement les fichiers avec les extensions suivantes: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "Le champ {0} doit être une chaîne ou un type de tableau d'une longueur maximale de '{1}'.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "Le champ {0} doit être une chaîne ou un type de tableau d'une longueur minimale de '{1}'.", + "The {0} field is not a valid phone number.": "Le champ {0} n'est pas un numéro de téléphone valide.", + "The field {0} must be between {1} and {2}.": "Le champ {0} doit être compris entre {1} et {2}.", + "The field {0} must match the regular expression '{1}'.": "Le champ {0} ne correspond pas au format demandé.", + "The {0} field is required.": "Le champ {0} est obligatoire.", + "The field {0} must be a string with a maximum length of {1}.": "Le champ {0} doit être une chaîne d'une longueur maximale de {1}.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "Le champ {0} doit être une chaîne d'une longueur minimale de {2} et d'une longueur maximale de {1}.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "Le champ {0} n'est pas une URL http, https ou ftp complète valide.", + "The field {0} is invalid.": "Le champ {0} n'est pas valide.", + "ThisFieldIsNotAValidCreditCardNumber.": "Ce champ n'est pas un numéro de carte de crédit valide.", + "ThisFieldIsNotValid.": "Ce champ n'est pas valide.", + "ThisFieldIsNotAValidEmailAddress.": "Ce champ n'est pas une adresse e-mail valide.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Ce champ accepte uniquement les fichiers avec les extensions suivantes: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Ce champ doit être une chaîne ou un type de tableau d'une longueur maximale de '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Ce champ doit être un type de chaîne ou de tableau d'une longueur minimale de '{0}'.", + "ThisFieldIsNotAValidPhoneNumber.": "Ce champ n'est pas un numéro de téléphone valide.", + "ThisFieldMustBeBetween{0}And{1}": "Ce champ doit être compris entre {0} et {1}.", + "ThisFieldMustMatchTheRegularExpression{0}": "Ce champ doit correspondre à l'expression régulière '{0}'.", + "ThisFieldIsRequired.": "Ce champ est requis.", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Ce champ doit être une chaîne d'une longueur maximale de {0}.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Ce champ doit être une chaîne d'une longueur minimale de {1} et d'une longueur maximale de {0}.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Ce champ n'est pas une URL http, https ou ftp complète valide.", + "ThisFieldIsInvalid.": "Ce champ n'est pas valide." + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/fr.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/fr.json new file mode 100644 index 0000000000..dfc8dce92a --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/fr.json @@ -0,0 +1,7 @@ +{ + "culture": "fr", + "texts": { + "BirthDate": "Date de naissance", + "Value1": "Valeur 1" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/fr.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/fr.json new file mode 100644 index 0000000000..23afa0e098 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/fr.json @@ -0,0 +1,6 @@ +{ + "culture": "fr", + "texts": { + "hello": "Bonjour" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/fr.json b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/fr.json new file mode 100644 index 0000000000..04642aa5d2 --- /dev/null +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/fr.json @@ -0,0 +1,7 @@ +{ + "culture": "fr", + "texts": { + "HelloText": "Bonjour {0}", + "HowAreYou": "Comment ça va?" + } +} \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json new file mode 100644 index 0000000000..100a71bb05 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/fr.json @@ -0,0 +1,60 @@ +{ + "culture": "fr", + "texts": { + "UserName": "Nom d'utilisateur", + "EmailAddress": "Adresse e-mail", + "UserNameOrEmailAddress": "Nom d'utilisateur ou adresse e-mail", + "Password": "Mot de passe", + "RememberMe": "Souviens-toi de moi", + "UseAnotherServiceToLogin": "Utilisez un autre service pour vous connecter", + "UserLockedOutMessage": "Le compte utilisateur a été verrouillé en raison de tentatives de connexion non valides. Veuillez patienter un instant et réessayer.", + "InvalidUserNameOrPassword": "Nom d'utilisateur ou mot de passe invalide!", + "LoginIsNotAllowed": "Vous n'êtes pas autorisé à vous connecter! Vous devez confirmer votre e-mail / numéro de téléphone.", + "SelfRegistrationDisabledMessage": "L'auto-inscription est désactivée pour cette application. Veuillez contacter l'administrateur de l'application pour enregistrer un nouvel utilisateur.", + "LocalLoginDisabledMessage": "La connexion locale est désactivée pour cette application.", + "Login": "Connectez-vous", + "Cancel": "Annuler", + "Register": "S'inscrire", + "AreYouANewUser": "Êtes-vous un nouvel utilisateur?", + "AlreadyRegistered": "Déjà inscrit?", + "InvalidLoginRequest": "Demande de connexion non valide", + "ThereAreNoLoginSchemesConfiguredForThisClient": "Aucun schéma de connexion n'est configuré pour ce client.", + "LogInUsingYourProviderAccount": "Connectez-vous à l'aide de votre compte {0}", + "DisplayName:CurrentPassword": "Mot de passe actuel", + "DisplayName:NewPassword": "Nouveau mot de passe", + "DisplayName:NewPasswordConfirm": "Confirmer le nouveau mot de passe", + "PasswordChangedMessage": "Votre mot de passe a été changé avec succès.", + "DisplayName:UserName": "Nom d'utilisateur", + "DisplayName:Email": "Email", + "DisplayName:Name": "Nom", + "DisplayName:Surname": "Nom de famille", + "DisplayName:Password": "Mot de passe", + "DisplayName:EmailAddress": "Adresse e-mail", + "DisplayName:PhoneNumber": "Numéro de téléphone", + "PersonalSettings": "Paramètres personnels", + "PersonalSettingsSaved": "Paramètres personnels enregistrés", + "PasswordChanged": "Mot de passe changé", + "NewPasswordConfirmFailed": "Veuillez confirmer le nouveau mot de passe.", + "Manage": "Gérer", + "ManageYourProfile": "Gérez votre profil", + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "L’auto-inscription est-elle activée", + "Description:Abp.Account.IsSelfRegistrationEnabled": "Si un utilisateur peut enregistrer le compte par lui-même.", + "DisplayName:Abp.Account.EnableLocalLogin": "Authentifier avec un compte local", + "Description:Abp.Account.EnableLocalLogin": "Indique si le serveur permettra aux utilisateurs de s’authentifier avec un compte local.", + "LoggedOutTitle": "Se déconnecter", + "LoggedOutText": "Vous avez été déconnecté et vous serez bientôt redirigé.", + "ReturnToText": "Cliquez ici pour rediriger vers {0}", + "OrLoginWith": "Ou connectez-vous avec;", + "ForgotPassword": "Vous avez oublié le mot de passe ?", + "SendPasswordResetLink_Information": "Un lien de réinitialisation du mot de passe sera envoyé à votre adresse e-mail pour réinitialiser votre mot de passe. Si vous ne recevez pas d'e-mail dans quelques minutes, veuillez réessayer.", + "PasswordResetMailSentMessage": "E-mail de récupération de compte envoyé à votre adresse e-mail. Si vous ne voyez pas cet e-mail dans votre boîte de réception dans les 15 minutes, recherchez-le dans votre dossier de courrier indésirable. Si vous le trouvez là-bas, veuillez le marquer comme -Pas indésirable-.", + "ResetPassword": "Réinitialiser le mot de passe", + "ConfirmPassword": "Confirmer (répéter) le mot de passe", + "ResetPassword_Information": "Entrez votre nouveau mot de passe.", + "YourPasswordIsSuccessfullyReset": "Votre mot de passe a été réinitialisé avec succès.", + "GoToTheApplication": "Accédez à l’application", + "BackToLogin": "Retour à la connexion", + "ProfileTab:Password": "Changer le mot de passe", + "ProfileTab:PersonalInfo": "Informations personnelles" + } +} \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/fr.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/fr.json new file mode 100644 index 0000000000..7641ae9683 --- /dev/null +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/fr.json @@ -0,0 +1,6 @@ +{ + "culture": "fr", + "texts": { + "ManageYourProfile": "Gérer votre profil" + } +} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/fr.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/fr.json new file mode 100644 index 0000000000..ff6e396496 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/fr.json @@ -0,0 +1,58 @@ +{ + "culture": "fr", + "texts": { + "Menu:Blogs": "Blogs", + "Menu:BlogManagement": "Bloguer", + "Permission:Management": "La gestion", + "Permission:Edit": "Éditer", + "Permission:Create": "Créer", + "Permission:Delete": "Supprimer", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Des postes", + "Permission:Tags": "Mots clés", + "Permission:Comments": "commentaires", + "Title": "Titre", + "Delete": "Supprimer", + "Reply": "Répondre", + "ReplyTo": "Répondre à {0}", + "ContinueReading": "Continuer la lecture", + "DaysAgo": "Il y a {0} jours", + "YearsAgo": "Il y a {0} ans", + "MonthsAgo": "Il y a {0} mois", + "WeeksAgo": "Il y a {0} semaines", + "MinutesAgo": "Il y a {0} minutes", + "SecondsAgo": "Il y a {0} secondes", + "HoursAgo": "Il y a {0} heures", + "Now": "maintenant", + "Content": "Contenu", + "SeeAll": "Voir tout", + "PopularTags": "Tags populaires", + "WiewsWithCount": "{0} vues", + "LastPosts": "Derniers messages", + "LeaveComment": "Laisse un commentaire", + "TagsInThisArticle": "Tags dans cet article", + "Posts": "Des postes", + "Edit": "Éditer", + "BLOG": "BLOG", + "CommentDeletionWarningMessage": "Le commentaire sera supprimé.", + "PostDeletionWarningMessage": "Le message sera supprimé.", + "BlogDeletionWarningMessage": "Le blog sera supprimé.", + "AreYouSure": "Êtes-vous sûr?", + "CommentWithCount": "{0 commentaire", + "Comment": "Commentaire", + "ShareOnTwitter": "Partager sur Twitter", + "CoverImage": "Image de couverture", + "CreateANewPost": "Créer un nouveau message", + "CreateANewBlog": "Créer un nouveau blog", + "WhatIsNew": "Ce qui est nouveau?", + "Name": "Nom", + "ShortName": "Nom court", + "CreationTime": "Temps de creation", + "Description": "La description", + "Blogs": "Blogs", + "Tags": "Mots clés", + "ShareOn": "Partager sur", + "TitleLengthWarning": "Gardez la taille de votre titre sous 60 caractères pour être optimisé pour le référencement!" + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json new file mode 100644 index 0000000000..17a14bca72 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json @@ -0,0 +1,22 @@ +{ + "culture": "fr", + "texts": { + "PickYourReaction": "Choisissez votre réaction", + "YourComment": "Votre commentaire", + "YourReply": "Votre réponse", + "Comments": "Commentaires", + "Send": "Envoyer", + "Delete": "Supprimer", + "Reply": "Réponse", + "Update": "Mettre à jour", + "Edit": "Modifier", + "LoginToAddComment": "Connectez-vous pour ajouter un commentaire", + "LoginToReply": "Connectez-vous pour répondre", + "MessageDeletionConfirmationMessage": "Ce commentaire sera complètement supprimé.", + "CommentAuthorizationExceptionMessage": "Ces commentaires ne sont pas autorisés pour l'affichage public.", + "Undo": "Annuler", + "RatingUndoMessage": "Votre note sera annulée.", + "LoginToRate": "Connectez-vous pour évaluer", + "Star": "étoile" + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fr.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fr.json new file mode 100644 index 0000000000..5983edf8a3 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fr.json @@ -0,0 +1,10 @@ +{ + "culture": "fr", + "texts": { + "Features": "Fonctionnalités", + "NoFeatureFoundMessage": "Il n'y a aucune fonctionnalité disponible.", + "Permission:FeatureManagement": "Gestion des fonctionnalités", + "Permission:FeatureManagement.ManageHostFeatures": "Gérer les fonctionnalités de l'hôte", + "Volo.Abp.FeatureManagement:InvalidFeatureValue": "La valeur de la fonctionnalité {0} n'est pas valide!" + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json new file mode 100644 index 0000000000..b7df93a9b9 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json @@ -0,0 +1,120 @@ +{ + "culture": "fr", + "texts": { + "Menu:IdentityManagement": "Gestion de l’identité", + "Users": "Utilisateurs", + "NewUser": "Nouvel utilisateur", + "UserName": "Nom d’utilisateur", + "EmailAddress": "Adresse e-mail", + "PhoneNumber": "Numéro de téléphone", + "UserInformations": "Informations utilisateur", + "DisplayName:IsDefault": "Par défaut", + "DisplayName:IsStatic": "Statique", + "DisplayName:IsPublic": "Public", + "Roles": "Rôles", + "Password": "mot de passe", + "PersonalInfo": "Mon profil", + "PersonalSettings": "Paramètres personnels", + "UserDeletionConfirmationMessage": "Les ' {0} ' de l’utilisateur seront supprimés. Vous le confirmez ?", + "RoleDeletionConfirmationMessage": "Le rôle '{0}' sera supprimé. Vous le confirmez ?", + "DisplayName:RoleName": "Nom du rôle", + "DisplayName:UserName": "Nom d’utilisateur", + "DisplayName:Name": "Nom", + "DisplayName:Surname": "Nom", + "DisplayName:Password": "mot de passe", + "DisplayName:Email": "Adresse e-mail", + "DisplayName:PhoneNumber": "Numéro de téléphone", + "DisplayName:TwoFactorEnabled": "Vérification de deux facteurs", + "DisplayName:LockoutEnabled": "Verrouiller le compte après l’échec des tentatives de connexion", + "NewRole": "Nouveau rôle", + "RoleName": "Nom du rôle", + "CreationTime": "Temps de création", + "Permissions": "Autorisations", + "DisplayName:CurrentPassword": "Mot de passe actuel", + "DisplayName:NewPassword": "Nouveau mot de passe", + "DisplayName:NewPasswordConfirm": "Confirmer un nouveau mot de passe", + "PasswordChangedMessage": "Votre mot de passe a été modifié avec succès.", + "PersonalSettingsSavedMessage": "Vos paramètres personnels ont été enregistrés avec succès.", + "Volo.Abp.Identity:DefaultError": "Une défaillance inconnue s’est produite.", + "Volo.Abp.Identity:ConcurrencyFailure": "Échec optimiste de la concurrence, l’objet a été modifié.", + "Volo.Abp.Identity:DuplicateEmail": "E-mail '{0}' est déjà prise.", + "Volo.Abp.Identity:DuplicateRoleName": "Le nom de rôle '{0}' est déjà pris.", + "Volo.Abp.Identity:DuplicateUserName": "Le nom d’utilisateur '{0}' est déjà pris.", + "Volo.Abp.Identity:InvalidEmail": "Le courrier électronique '{0}' n’est pas valide.", + "Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "Le passwordHasherCompatibilitéMode fourni n’est pas valide.", + "Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "Le nombre d’itérations doit être un entier positif.", + "Volo.Abp.Identity:InvalidRoleName": "Le nom de rôle '{0}' n’est pas valide.", + "Volo.Abp.Identity:InvalidToken": "Jeton non valide.", + "Volo.Abp.Identity:InvalidUserName": "Le nom d’utilisateur '{0}' n’est pas valide, ne peut contenir que des lettres ou des chiffres.", + "Volo.Abp.Identity:LoginAlreadyAssociated": "Un utilisateur avec cette connexion existe déjà.", + "Volo.Abp.Identity:PasswordMismatch": "Mot de passe incorrect.", + "Volo.Abp.Identity:PasswordRequiresDigit": "Les mots de passe doivent avoir au moins un chiffre ('0'-'9').", + "Volo.Abp.Identity:PasswordRequiresLower": "Les mots de passe doivent avoir au moins une minuscule ('a'-'z').", + "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Les mots de passe doivent avoir au moins un caractère non alphanumérique.", + "Volo.Abp.Identity:PasswordRequiresUpper": "Les mots de passe doivent avoir au moins une majuscule ('A'-'Z').", + "Volo.Abp.Identity:PasswordTooShort": "Les mots de passe doivent être au moins {0} caractères.", + "Volo.Abp.Identity:RoleNotFound": "La {0} de rôle n’existe pas.", + "Volo.Abp.Identity:UserAlreadyHasPassword": "L’utilisateur dispose déjà d’un jeu de mots de passe.", + "Volo.Abp.Identity:UserAlreadyInRole": "Utilisateur déjà dans le rôle '{0}'.", + "Volo.Abp.Identity:UserLockedOut": "L’utilisateur est en lock-out.", + "Volo.Abp.Identity:UserLockoutNotEnabled": "Le lock-out n’est pas activé pour cet utilisateur.", + "Volo.Abp.Identity:UserNameNotFound": "La {0} de l’utilisateur n’existe pas.", + "Volo.Abp.Identity:UserNotInRole": "L’utilisateur n’est pas dans le rôle '{0}'.", + "Volo.Abp.Identity:PasswordConfirmationFailed": "Le mot de passe ne correspond pas au mot de passe de confirmation.", + "Volo.Abp.Identity:010001": "Vous ne pouvez pas supprimer votre propre compte!", + "Volo.Abp.Identity:010002": "Impossible de définir plus de {MaxUserMembershipCount} unité d’organisation pour un utilisateur!", + "Volo.Abp.Identity:010003": "Impossible de changer le mot de passe d’un utilisateur connecté à l’extérieur!", + "Volo.Abp.Identity:010004": "Il existe déjà une unité d’organisation dont le nom {0}. Deux unités du même nom ne peuvent pas être créées dans le même niveau.", + "Volo.Abp.Identity:010005": "Les rôles statiques ne peuvent pas être renommés.", + "Volo.Abp.Identity:010006": "Les rôles statiques ne peuvent pas être supprimés.", + "Volo.Abp.Identity:010007": "Vous ne pouvez pas modifier votre paramètre à deux facteurs.", + "Volo.Abp.Identity:010008": "Il n’est pas permis de changer deux facteurs de réglage.", + "Identity.OrganizationUnit.MaxUserMembershipCount": "Nombre maximal d’adhésions autorisées à l’unité d’organisation pour un utilisateur", + "Permission:IdentityManagement": "Gestion de l’identité", + "Permission:RoleManagement": "Gestion des rôles", + "Permission:Create": "Créer", + "Permission:Edit": "Modifier", + "Permission:Delete": "Supprimer", + "Permission:ChangePermissions": "Modifier les autorisations", + "Permission:UserManagement": "Gestion des utilisateurs", + "Permission:UserLookup": "Recherche utilisateur", + "Feature:IdentityGroup": "Identité", + "Feature:TwoFactor": "Deux facteurs", + "Feature:TwoFactorDescription": "Deux facteurs", + "Feature:TwoFactor.Optional": "Optionnel", + "Feature:TwoFactor.Disabled": "Handicapés", + "Feature:TwoFactor.Forced": "Forcé", + "DisplayName:Abp.Identity.Password.RequiredLength": "Longueur requise", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Nombre de caractères uniques requis", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Caractère non alphanumérique requis", + "DisplayName:Abp.Identity.Password.RequireLowercase": "Caractère de minuscule requis", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Caractère de majuscule requis", + "DisplayName:Abp.Identity.Password.RequireDigit": "Chiffre requis", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Activé pour les nouveaux utilisateurs", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Durée(secondes) du lock-out", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max a échoué tentatives d’accès", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Exiger un e-mail confirmé", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Permettre aux utilisateurs de confirmer leur numéro de téléphone", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Exiger un numéro de téléphone confirmé", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Permettre aux utilisateurs de modifier leurs noms d’utilisateur", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Permettre aux utilisateurs de modifier leurs adresses e-mail", + "Description:Abp.Identity.Password.RequiredLength": "La longueur minimale d’un mot de passe doit être.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "Nombre minimum de caractères uniques qu’un mot de passe doit contenir.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Si les mots de passe doivent contenir un caractère non alphanumérique.", + "Description:Abp.Identity.Password.RequireLowercase": "Si les mots de passe doivent contenir un caractère ASCII minuscule.", + "Description:Abp.Identity.Password.RequireUppercase": "Si les mots de passe doivent contenir un caractère ASCII majuscule.", + "Description:Abp.Identity.Password.RequireDigit": "Si les mots de passe doivent contenir un chiffre.", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Si un nouvel utilisateur peut être verrouillé.", + "Description:Abp.Identity.Lockout.LockoutDuration": "Durée pendant laquelle un utilisateur est verrouillé lorsqu’un lock-out se produit.", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Nombre de tentatives d’accès échouées avant qu’un utilisateur ne soit verrouillé, en supposant que le verrouillage est activé.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Si une adresse e-mail confirmée est nécessaire pour se connecter.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Si le téléphoneNumber peut être confirmé par l’utilisateur.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Si un numéro de téléphone confirmé est nécessaire pour se connecter.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Si le nom d’utilisateur peut être mis à jour par l’utilisateur.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Si l’e-mail peut être mis à jour par l’utilisateur.", + "DisplayName:Abp.Identity.TwoFactorBehaviour": "Comportement à deux facteurs", + "Description:Abp.Identity.TwoFactorBehaviour": "Comportement à deux facteurs", + "DisplayName:Abp.Identity.UsersCanChange": "Permettre aux utilisateurs de modifier leur facteur deux.", + "Description:Abp.Identity.UsersCanChange": "Permettre aux utilisateurs de modifier leur facteur deux." + } +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json new file mode 100644 index 0000000000..0eec4bd7b9 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json @@ -0,0 +1,10 @@ +{ + "culture": "fr", + "texts": { + "Permissions": "Autorisations", + "OnlyProviderPermissons": "Seul ce fournisseur", + "All": "Tous", + "SelectAllInAllTabs": "Accorder toutes les autorisations", + "SelectAllInThisTab": "Sélectionner tous les" + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fr.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fr.json new file mode 100644 index 0000000000..b1a55f4134 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fr.json @@ -0,0 +1,7 @@ +{ + "culture": "fr", + "texts": { + "Settings": "Paramètres", + "SuccessfullySaved": "Enregistré avec succès" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fr.json new file mode 100644 index 0000000000..4aac3eebab --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fr.json @@ -0,0 +1,23 @@ +{ + "culture": "fr", + "texts": { + "Menu:TenantManagement": "Gestion des locataires", + "Tenants": "Locataires", + "NewTenant": "Nouveau locataire", + "TenantName": "Nom du locataire", + "DisplayName:TenantName": "Nom du locataire", + "TenantDeletionConfirmationMessage": "Les ' {0} ' du locataire seront supprimés. Vous le confirmez ?", + "ConnectionStrings": "Chaînes de connexion", + "DisplayName:DefaultConnectionString": "Chaîne de connexion par défaut", + "DisplayName:UseSharedDatabase": "Utiliser la base de données partagée", + "ManageHostFeatures": "Gérer les fonctionnalités de l’hôte", + "Permission:TenantManagement": "Gestion des locataires", + "Permission:Create": "Créer", + "Permission:Edit": "Modifier", + "Permission:Delete": "Supprimer", + "Permission:ManageConnectionStrings": "Gérer les chaînes de connexion", + "Permission:ManageFeatures": "Gérer les fonctionnalités", + "DisplayName:AdminEmailAddress": "Adresse de messagerie d’administrateur", + "DisplayName:AdminPassword": "Mot de passe d’administrateur" + } +} \ No newline at end of file diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/fr.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/fr.json new file mode 100644 index 0000000000..0471341bb9 --- /dev/null +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/fr.json @@ -0,0 +1,14 @@ +{ + "culture": "fr", + "texts": { + "VirtualFileExplorer": "Explorateur de fichiers virtuels", + "VirtualFileType": "Type de fichier virtuel", + "Menu:VirtualFileExplorer": "Explorateur de fichiers virtuels", + "LastUpdateTime": "Dernière heure de mise à jour", + "VirtualFileName": "Nom de fichier virtuel", + "FileContent": "Contenu du fichier", + "Size": "Taille", + "BackToRoot": "Retour à la racine", + "EmptyFileInfoList": "Il n’y a pas de fichiers virtuels" + } +} \ No newline at end of file diff --git a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html index 990f381a8f..314da224d4 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html +++ b/npm/ng-packs/packages/feature-management/src/lib/components/feature-management/feature-management.component.html @@ -23,20 +23,22 @@
-
+
+ @@ -44,27 +46,32 @@ *ngTemplateOutlet="descTmp; context: { $implicit: feature.description }" >
-
-
-
+ + +
-
-
+ + -
+
-