diff --git a/packages/core/src/i18n/i18n.service.ts b/packages/core/src/i18n/i18n.service.ts index b74a8aec8f..70cba5f678 100644 --- a/packages/core/src/i18n/i18n.service.ts +++ b/packages/core/src/i18n/i18n.service.ts @@ -59,7 +59,7 @@ export class I18nService implements OnModuleInit { .use(ICU) .init({ nsSeparator: false, - preload: ['en', 'de', 'ru', 'uk'], + preload: ['en', 'de', 'ru', 'uk', 'fr'], fallbackLng: 'en', detection: { lookupQuerystring: 'languageCode', diff --git a/packages/core/src/i18n/messages/fr.json b/packages/core/src/i18n/messages/fr.json new file mode 100644 index 0000000000..f7121d3f6b --- /dev/null +++ b/packages/core/src/i18n/messages/fr.json @@ -0,0 +1,138 @@ +{ + "error": { + "active-user-does-not-have-sufficient-permissions": "L'utilisateur actif ne dispose pas des permissions suffisantes", + "available-currency-codes-must-include-default": "availableCurrencyCodes doit inclure defaultCurrencyCode ({ defaultCurrencyCode })", + "cannot-delete-role": "Le rôle \"{ roleCode }\" ne peut pas être supprimé", + "cannot-delete-sole-superadmin": "Le seul SuperAdmin ne peut pas être supprimé", + "cannot-locate-customer-for-user": "Impossible de localiser un Client pour l'utilisateur", + "cannot-modify-role": "Le rôle \"{ roleCode }\" ne peut pas être modifié", + "cannot-move-collection-into-self": "Impossible de déplacer une Collection dans elle-même", + "cannot-transition-payment-from-to": "Impossible de changer l'état du Paiement de \"{ fromState }\" à \"{ toState }\"", + "cannot-transition-refund-from-to": "Impossible de changer l'état du Remboursement de \"{ fromState }\" à \"{ toState }\"", + "cannot-transition-fulfillment-from-to": "Impossible de changer l'état de l'Exécution de \"{ fromState }\" à \"{ toState }\"", + "channel-not-found": "Aucun Canal avec le token \"{ token }\" n'a été trouvé", + "collection-id-or-slug-must-be-provided": "L'id de la Collection ou le slug doit être fourni", + "collection-id-slug-mismatch": "L'id et le slug fournis font référence à des Collections différentes", + "conditions-required-for-action": "L'action de Promotion \"{ action }\" requiert les conditions suivantes : { conditions }", + "configurable-argument-is-required": "L'argument \"{ name }\" est requis", + "country-code-not-valid": "Le code pays \"{ countryCode }\" n'a pas été reconnu", + "currency-not-available-in-channel": "La devise \"{ currencyCode }\" n'est pas disponible dans le Canal actuel", + "customer-does-not-belong-to-customer-group": "Le client n'appartient pas à ce groupe de clients", + "default-channel-not-found": "Canal par défaut non trouvé", + "entity-has-no-translation-in-language": "L'entité traduisible \"{ entityName }\" n'a pas été traduite dans la langue demandée ({ languageCode })", + "entity-with-id-not-found": "Aucun(e) { entityName } avec l'id \"{ id }\" n'a été trouvé(e)", + "items-cannot-be-removed-from-default-channel": "Les articles ne peuvent pas être retirés du Canal par défaut", + "facetfilterinput-invalid-input": "Un objet FacetValueFilterInput ne peut pas spécifier les champs 'and' et 'or' simultanément", + "field-invalid-datetime-range-max": "La valeur du champ personnalisé \"{ name }\" [{ value }] est supérieure au maximum [{ max }]", + "field-invalid-datetime-range-min": "La valeur du champ personnalisé \"{ name }\" [{ value }] est inférieure au minimum [{ min }]", + "field-invalid-non-nullable": "La valeur du champ personnalisé \"{ name }\" ne peut pas être définie à null", + "field-invalid-no-permission": "Vous n'avez pas les permissions nécessaires pour mettre à jour le champ \"{ name }\"", + "field-invalid-number-range-max": "La valeur du champ personnalisé \"{ name }\" [{ value }] dépasse le maximum [{ max }]", + "field-invalid-number-range-min": "La valeur du champ personnalisé \"{ name }\" [{ value }] est inférieure au minimum [{ min }]", + "field-invalid-readonly": "Le champ personnalisé \"{ name }\" est en lecture seule", + "field-invalid-string-option": "La valeur du champ personnalisé \"{ name }\" [\"{ value }\"] est invalide. Les options valides sont : [{ validOptions }]", + "field-invalid-string-pattern": "La valeur du champ personnalisé \"{ name }\" [\"{ value }\"] ne correspond pas au motif [{ pattern }]", + "forbidden": "Vous n'êtes actuellement pas autorisé à effectuer cette action", + "invalid-sort-field": "Le champ de tri \"{ fieldName }\" est invalide. Les champs valides sont : { validFields }", + "list-query-limit-exceeded": "Impossible de prendre plus de { limit } résultats dans une requête de liste", + "no-active-tax-zone": "La zone fiscale active n'a pas pu être déterminée. Assurez-vous qu'une zone fiscale par défaut est définie pour le canal actuel.", + "no-configurable-operation-def-with-code-found": "Aucun { type } avec le code \"{ code }\" n'a été trouvé", + "no-price-found-for-channel": "Aucune information de prix n'a été trouvée pour l'ID de la Variante de Produit \"{ variantId}\" dans le Canal \"{ channel }\".", + "no-search-plugin-configured": "Aucun plugin de recherche n'a été configuré", + "order-could-not-be-determined-or-created": "Aucune Commande active n'a pu être déterminée ni créée", + "order-does-not-contain-line-with-id": "Cette commande ne contient pas de Ligne de Commande avec l'id { id }", + "pending-identifier-missing": "L'adresse e-mail en attente de mise à jour n'a pas pu être trouvée", + "permission-invalid": "La permission \"{ permission }\" ne peut pas être attribuée", + "product-id-or-slug-must-be-provided": "L'id du Produit ou le slug doit être fourni", + "product-id-slug-mismatch": "L'id et le slug fournis font référence à des Produits différents", + "product-option-group-already-assigned": "Le groupe d'options de produit \"{ groupCode }\" est déjà attribué au produit \"{ productName }\"", + "product-variant-option-ids-not-compatible": "Les optionIds de la Variante de Produit doivent inclure un optionId de chaque groupe : {groupNames}", + "product-variant-options-combination-already-exists": "Une Variante de Produit avec les options sélectionnées existe déjà : {variantName}", + "promotion-channels-can-only-be-changed-from-default-channel": "Les canaux de promotion peuvent uniquement être modifiés à partir du Canal par défaut", + "stockonhand-cannot-be-negative": "stockOnHand ne peut pas être une valeur négative", + "superadmin-must-have-superadmin-role": "Il n'est pas possible de retirer le rôle de SuperAdmin au seul SuperAdmin", + "target-customer-not-assigned-to-order-channels": "Le Client ciblé n'est pas assigné aux mêmes Canaux que la Commande. IDs de canaux manquants : { missingChannelIds }", + "unauthorized": "Les informations d'identification ne correspondent pas. Veuillez vérifier et réessayer" + }, + "errorResult": { + "ALREADY_LOGGED_IN_ERROR": "Impossible d'attribuer un Client à la Commande lorsqu'on est déjà connecté", + "ALREADY_REFUNDED_ERROR": "Impossible de rembourser un Article de la Commande qui a déjà été remboursé", + "CANCEL_ACTIVE_ORDER_ERROR": "Impossible d'annuler des Lignes de Commande d'une Commande dans l'état \"{ orderState }\"", + "CANCEL_PAYMENT_ERROR": "L'annulation du paiement a échoué", + "CHANNEL_DEFAULT_LANGUAGE_ERROR": "Impossible de rendre la langue \"{ language }\" indisponible car elle est utilisée comme langue par défaut par le canal \"{ channelCode }\"", + "COUPON_CODE_EXPIRED_ERROR": "Le code coupon \"{ couponCode }\" a expiré", + "COUPON_CODE_INVALID_ERROR": "Le code coupon \"{ couponCode }\" n'est pas valide", + "COUPON_CODE_LIMIT_ERROR": "Le code coupon ne peut pas être utilisé plus de {limit, plural, one {une fois} other {# fois}} par client", + "CREATE_FULFILLMENT_ERROR": "Une erreur s'est produite lors de la tentative de création de l'Exécution", + "DUPLICATE_ENTITY_ERROR": "L'entité n'a pas pu être dupliquée", + "EMAIL_ADDRESS_CONFLICT_ERROR": "L'adresse e-mail n'est pas disponible", + "EMPTY_ORDER_LINE_SELECTION_ERROR": "Au moins une Ligne de Commande doit être spécifiée", + "FACET_IN_USE_ERROR": "Le Facet \"{ facetCode }\" inclut des FacetValues qui sont attribués à {productCount, plural, =0 {} one {1 Produit} other {# Produits}} {variantCount, plural, =0 {} one {1 Variante de Produit} other {# Variantes de Produit}}", + "IDENTIFIER_CHANGE_TOKEN_INVALID_ERROR": "Le jeton de changement d'identifiant n'est pas reconnu", + "INELIGIBLE_SHIPPING_METHOD_ERROR": "Cette Commande n'est pas éligible pour la Méthode d'Expédition sélectionnée", + "INSUFFICIENT_STOCK_ERROR": "{quantityAvailable, plural, =0 {Aucun article n'a été} one {Seul un article a été} other {Seulement # articles ont été}} ajouté(s) à la commande en raison d'un stock insuffisant", + "INSUFFICIENT_STOCK_ON_HAND_ERROR": "Impossible de créer une Exécution car \"{productVariantName}\" a un stockOnHand insuffisant ({stockOnHand})", + "INVALID_CREDENTIALS_ERROR": "Les informations d'identification fournies sont invalides", + "ITEMS_ALREADY_FULFILLED_ERROR": "Un ou plusieurs Articles de la Commande font déjà partie d'une Exécution", + "LANGUAGE_NOT_AVAILABLE_ERROR": "La langue \"{languageCode}\" n'est pas disponible. Activez-la d'abord via les Paramètres Globaux et réessayez", + "MANUAL_PAYMENT_STATE_ERROR": "Un paiement manuel ne peut être ajouté que dans l'état \"ArrangingPayment\" ou \"ArrangingAdditionalPayment\"", + "MIME_TYPE_ERROR": "Le type MIME \"{ mimeType }\" n'est pas autorisé.", + "MISSING_CONDITIONS_ERROR": "Une Promotion doit avoir au moins une condition ou un code coupon défini", + "MISSING_PASSWORD_ERROR": "Un mot de passe doit être fourni", + "NEGATIVE_QUANTITY_ERROR": "La quantité pour un Article de la Commande ne peut pas être négative", + "NO_ACTIVE_ORDER_ERROR": "Il n'y a aucune Commande active associée à la session en cours", + "NOTHING_TO_REFUND_ERROR": "Rien à rembourser", + "NOT_VERIFIED_ERROR": "Veuillez vérifier cette adresse e-mail avant de vous connecter", + "ORDER_LIMIT_ERROR": "Impossible d'ajouter des articles. Une commande peut comprendre un maximum de { maxItems } articles", + "ORDER_MODIFICATION_ERROR": "Le contenu de la Commande peut uniquement être modifié dans l'état \"AddingItems\"", + "ORDER_PAYMENT_STATE_ERROR": "Un Paiement ne peut être ajouté que lorsque la Commande est dans l'état \"ArrangingPayment\"", + "ORDER_STATE_TRANSITION_ERROR": "Impossible de changer l'état de la Commande de \"{ fromState }\" à \"{ toState }\"", + "PASSWORD_ALREADY_SET_ERROR": "Un mot de passe a déjà été défini lors de l'inscription", + "PASSWORD_RESET_TOKEN_EXPIRED_ERROR": "Le jeton de réinitialisation du mot de passe a expiré", + "PASSWORD_RESET_TOKEN_INVALID_ERROR": "Le jeton de réinitialisation du mot de passe n'est pas reconnu", + "PASSWORD_VALIDATION_ERROR": "Le mot de passe est invalide", + "PAYMENT_DECLINED_ERROR": "Le paiement a été refusé", + "PAYMENT_FAILED_ERROR": "Le paiement a échoué", + "PAYMENT_ORDER_MISMATCH_ERROR": "Le Paiement et les Lignes de Commande n'appartiennent pas à la même Commande", + "PAYMENT_STATE_TRANSITION_ERROR": "Impossible de changer l'état du Paiement de \"{ fromState }\" à \"{ toState }\"", + "PRODUCT_OPTION_IN_USE_ERROR": "Impossible de retirer le groupe d'options de produit \"{ optionGroupCode }\" car il est utilisé par {productVariantCount, plural, one {une Variante de Produit} other {# Variantes de Produit}}. Utilisez l'argument `force` pour le retirer malgré tout", + "QUANTITY_TOO_GREAT_ERROR": "La quantité spécifiée est supérieure aux Articles de la Commande disponibles", + "REFUND_AMOUNT_ERROR": "Le montant spécifié dépasse le montant remboursable pour ce paiement", + "REFUND_ORDER_STATE_ERROR": "Impossible de rembourser une Commande dans l'état \"{ orderState }\"", + "SETTLE_PAYMENT_ERROR": "L'établissement du paiement a échoué", + "VERIFICATION_TOKEN_EXPIRED_ERROR": "Le jeton de vérification a expiré. Utilisez refreshCustomerVerification pour envoyer un nouveau jeton.", + "VERIFICATION_TOKEN_INVALID_ERROR": "Le jeton de vérification n'est pas reconnu" + }, + "message": { + "asset-to-be-deleted-is-featured": "L'{assetCount, plural, one {Asset est} other {Assets sont}} présenté(s) par {products, plural, =0 {} one {1 Produit} other {# Produits}} {variants, plural, =0 {} one { 1 Variante de Produit} other { # Variantes de Produit}} {collections, plural, =0 {} one { 1 Collection} other { # Collections}}", + "cannot-delete-last-stock-location": "L'emplacement de stockage restant ne peut pas être supprimé", + "cannot-remove-tax-category-due-to-tax-rates": "Impossible de retirer la Catégorie Fiscale \"{ name }\" car elle est référencée par {count, plural, one {1 Taux Fiscal} other {# Taux Fiscaux}}", + "cannot-transition-order-contains-products-which-are-unavailable": "Impossible de passer à \"{ toState }\" car la Commande contient des Variantes de Produit qui ne sont plus disponibles", + "cannot-transition-from-arranging-additional-payment": "Impossible de passer de \"ArrangingAdditionalPayment\" à moins que le total de la Commande ne soit couvert par des Paiements", + "cannot-transition-order-from-to": "Impossible de changer l'état de la Commande de \"{ fromState }\" à \"{ toState }\"", + "cannot-transition-no-additional-payments-needed": "Impossible de passer la Commande à l'état \"ArrangingAdditionalPayment\" car aucun paiement supplémentaire n'est nécessaire", + "cannot-transition-to-shipping-when-order-is-empty": "Impossible de passer la Commande à l'état \"ArrangingShipping\" lorsque celle-ci est vide", + "cannot-transition-to-payment-due-to-insufficient-stock": "Impossible de passer la Commande à l'état \"ArrangingPayment\" en raison d'un stock insuffisant de { productVariantNames }", + "cannot-transition-to-payment-without-customer": "Impossible de passer la Commande à l'état \"ArrangingPayment\" sans les détails du Client", + "cannot-transition-to-payment-without-shipping-method": "Impossible de passer la Commande à l'état \"ArrangingPayment\" sans Méthode d'Expédition", + "cannot-transition-unless-all-cancelled": "Impossible de passer la Commande à l'état \"Cancelled\" à moins que tous les Articles de la Commande ne soient annulés", + "cannot-transition-unless-all-order-items-delivered": "Impossible de passer la Commande à l'état \"Delivered\" à moins que tous les Articles de la Commande ne soient livrés", + "cannot-transition-unless-some-order-items-delivered": "Impossible de passer la Commande à l'état \"PartiallyDelivered\" à moins que certains Articles de la Commande ne soient livrés", + "cannot-transition-unless-some-order-items-shipped": "Impossible de passer la Commande à l'état \"PartiallyShipped\" à moins que certains Articles de la Commande ne soient expédiés", + "cannot-transition-unless-all-order-items-shipped": "Impossible de passer la Commande à l'état \"Shipped\" à moins que tous les Articles de la Commande ne soient expédiés", + "cannot-transition-without-authorized-payments": "Impossible de passer la Commande à l'état \"PaymentAuthorized\" lorsque le total n'est pas couvert par des Paiements autorisés", + "cannot-transition-without-modification-payment": "Peut seulement passer à l'état \"ArrangingAdditionalPayment\"", + "cannot-transition-without-settled-payments": "Impossible de passer la Commande à l'état \"PaymentSettled\" lorsque le total n'est pas couvert par des Paiements réglés", + "country-used-in-addresses": "Le Pays sélectionné ne peut pas être supprimé car il est utilisé dans {count, plural, one {1 Adresse} other {# Adresses}}", + "entity-duplication-no-permission": "Vous n'avez pas les permissions nécessaires pour dupliquer cette entité", + "entity-duplication-no-strategy-found": "Aucune stratégie de duplication avec le code \"{ code }\" n'a été trouvée pour le type d'entité \"{ entityName }\"", + "facet-force-deleted": "Le Facet a été supprimé et ses FacetValues ont été retirés de {products, plural, =0 {} one {1 Produit} other {# Produits}}{both, select, both {, } single {} other {}}{variants, plural, =0 {} one {1 Variante de Produit} other {# Variantes de Produit}}", + "facet-used": "Le Facet \"{ facetCode }\" inclut des FacetValues qui sont attribués à {products, plural, =0 {} one {1 Produit} other {# Produits}}{both, select, both {, } single {} other {}}{variants, plural, =0 {} one {1 Variante de Produit} other {# Variantes de Produit}}", + "facet-value-force-deleted": "La FacetValue sélectionnée a été retirée de {products, plural, =0 {} one {1 Produit} other {# Produits}}{both, select, both {, } single {} other {}}{variants, plural, =0 {} one {1 Variante de Produit} other {# Variantes de Produit}} et supprimée", + "facet-value-used": "La FacetValue \"{ facetValueCode }\" est attribuée à {products, plural, =0 {} one {1 Produit} other {# Produits}}{both, select, both {, } single {} other {}}{variants, plural, =0 {} one {1 Variante de Produit} other {# Variantes de Produit}}", + "payment-method-used-in-channels": "La méthode de paiement sélectionnée est assignée aux Canaux suivants : { channelCodes }. Définissez \"force: true\" pour la supprimer de tous les Canaux.", + "product-option-used": "Impossible de supprimer l'option \"{code}\" car elle est utilisée par {count, plural, =0 {} one {1 Variante de Produit} other {# Variantes de Produit}}", + "zone-used-in-channels": "La Zone sélectionnée ne peut pas être supprimée car elle est utilisée comme défaut dans les Canaux suivants : { channelCodes }", + "zone-used-in-tax-rates": "La Zone sélectionnée ne peut pas être supprimée car elle est utilisée dans les Taux Fiscaux suivants : { taxRateNames }" + } +}