Files
FixIt/i18n/fr.toml
T
Cell a96ba665ac refactor(assets)!: rewrite content encryption with AES-256-GCM and PBKDF2 (#806)
* refactor(assets)!: rewrite content encryption with AES-256-GCM and PBKDF2

- Remove legacy Base64 obfuscation layer (content-encryption.html)
- Replace <cipher-text> with <template> for inert content storage
- Single-layer AES-256-GCM encryption via post-build script
- PBKDF2 key derivation (100k iterations) for encryption
- PBKDF2-protected password verification (data-verify-salt)
- Depth-tracking parser for nested shortcode support
- Dev mode: plaintext content used directly without encryption
- Remove crypto-js and xxhash-wasm vendored dependencies

* feat(post-encrypt): prepare package for npm publishing

- Add bin entry, build script, and dist output for npx usage
- Replace @hugo-fixit/shared with standalone implementations
- Add CLI shebang for direct execution
- Add package README with usage documentation
- Remove FIXIT_ENCRYPT_INPUT env var (redundant with --input)
- Add encryption detection warning in assets.html
- Remove Post-build Encryption sections from READMEs

* chore: integrate post-encrypt into build pipeline and use consola

- Replace console with consola for post-encrypt logging
- Improve verification messages (no templates, count, etc.)
- Simplify build scripts: encrypt runs as part of main build
- Update encryption detection warning to use npx command

* feat(assets): add encryption dev warning admonition

- Add danger admonition in single.html for full-page encryption (dev mode only)
- Add encryption detection warning in assets.html console
- Improve post-encrypt verification messages with template count

* feat(assets): improve encryption i18n, cache security, and error handling

- Add encryptionWarning and encryptionCommand i18n keys for all 16 languages
- Store PBKDF2 verification hash in localStorage cache for better security
- Show decryption errors via flashTooltip instead of console only
- Add FixItDecryptor type definitions in global.ts
- Move encryption detection to init/detection-encryption.html with batched warning
- Remove redundant per-page warning from assets.html

* feat(assets): redesign fixit-decryptor UI with card layout

- Page-level: card form with lock icon header, password input with key icon, primary-colored unlock button, circular re-encrypt button
- Shortcode-level: connected input+button design (search bar style) with focus ring sync
- Remove loading spinner, use display:none/flex toggle via .initialized class
- Move lock icon styling to UnoCSS (text-primary text-xl)
- Initialize CellTooltip on re-encrypt button
- Fix JSDoc @param warnings in global.ts

* refactor(assets): unify TOC template and decryptor animations

- TOC always rendered in `<template data-toc>`, containers populated by initToc()
- Moved TOC scroll/resize handling from events.ts to toc.ts (syncTocLayout, syncTocActiveState)
- Removed EventsModule toc dependency, updated public-api.ts constructor
- Removed visibility:hidden from #toc-auto
- Decryptor: form always visible, @starting-style for fade-in on init
- Decryptor: content expand/collapse animation using height + opacity
- Removed encrypted-hidden from TOC elements in single.html

* refactor(assets): add target to fixit:decrypted event and simplify handlers

- Add { target: Element } payload to fixit:decrypted in event-bus.ts
- Remove $content closure from fixit-decryptor init(), use detail.target
- Update content.ts and toc.ts to use detail.target from event

* fix(assets): use eventBus for TOC scroll/resize listeners and eliminate redundant template parsing

- Replace raw window scroll/resize listeners in TocModule with eventBus
  subscriptions (fixit:scroll/fixit:resize), reusing EventsModule's
  throttle and debounce instead of duplicating un-throttled handlers.
- Refactor hasUnencryptedTemplate in post-encrypt to accept the already-
  computed matches array, avoiding a redundant findEncryptionTemplates
  call on the same HTML content.
- Remove crypto-js and xxhash-wasm from README credits.

* style(assets): soften decryptor button background and add form hover shadow

* build(workflow): add post-encrypt step to build script
2026-07-05 23:26:11 +08:00

265 lines
7.1 KiB
TOML

# Translations for French
# Traductions pour le français
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# === Init ===
[init]
hugoVersionError = "La version de Hugo est trop ancienne.\n\nLa version actuelle de Hugo est {{ .Current }}, la version minimale requise pour FixIt est {{ .Minimal }}.\n\nSi vous utilisez Hugo sur votre ordinateur, consultez le guide de mise à niveau à l'adresse https://gohugo.io/getting-started/installing/#upgrade-hugo.\n\nSi vous déployez sur une plateforme tierce, veuillez configurer la version de Hugo en conséquence."
hugoExtendedWarn = "La version étendue de Hugo est nécessaire pour la prise en charge de SCSS."
configurationError = "Erreur de configuration\nVous n'avez pas configuré la version de FixIt correctement. Voir https://fixit.lruihao.cn/documentation/basics/#theme-configuration"
compatibilityError = "Erreur de compatibilité ({{ .From }} -> {{ .To }}):\nVous avez une mise à jour incompatible. Voir https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Vous utilisez une version de développement de FixIt. Veuillez considérer l'utilisation d'une version stable.\nVoir https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "L'environnement actuel est \"développement\". Le \"système de commentaires\", le \"PWA\", le \"CDN\", le \"prise d'empreinte\" et la \"analyses\" seront désactivés."
quicklyUpgrade = "La mise à jour rapide utilise la commande: "
# === Init ===
# === Base Layout ===
[baseof]
backToTop = "Retour en Haut"
viewComments = "Afficher les Commentaires"
noscript = "Ce site Web fonctionne mieux quand JavaScript est activé."
# === Base Layout ===
# === Taxonomy ===
[archives]
other = "Archives"
[allSome]
other = "Tous les {{ .Some }}"
[category]
other = "Catégorie"
[categories]
other = "Catégories"
[collection]
other = "Collection"
[collections]
other = "Collections"
[tag]
other = "Tag"
[tags]
other = "Tags"
[posts]
other = "Posts"
# === Taxonomy ===
# === Section ===
[section]
recentlyUpdated = "Récemment Modifié"
[section.totalWordCount]
one = "Nombre de mots: 1"
other = "Nombre de mots: {{ .Count }}"
[section.archiveCounter]
one = "Seulement un article"
other = "{{ .Count }} articles au total"
# === Section ===
# === Pagination ===
[pagination]
more = "Plus"
# === Pagination ===
# === Header ===
[header]
selectLanguage = "Choisir la langue"
noMoretTranslations = "Plus de traductions"
switchTheme = "Changer de Thème"
# === Header ===
# === Footer ===
[footer]
poweredBySome = "Propulsé par {{ .Hugo }} | Thème - {{ .Theme }}"
siteUV = "Total de visiteurs"
sitePV = "Total de visites"
siteRunning = "Site en cours d'exécution ..."
# === Footer ===
# === Comment ===
[comment]
valinePlaceholder = "Votre commentaire ..."
# === Comment ===
# === Assets ===
[assets]
search = "Chercher"
searchPlaceholder = "Rechercher des titres, des contenus..."
searchIn = "Rechercher dans {{ . }}"
searchBy = "Recherche par"
gotoResultsPage = "Aller à la page de résultats de recherche ..."
clear = "Effacer"
cancel = "Annuler"
navigate = "Naviguer"
select = "Sélectionner"
close = "Fermer"
refresh = "Actualiser"
noResultsFound = "Aucun résultat trouvé"
copyToClipboard = "Copier dans le presse-papiers"
copyText = "Copier"
copiedText = "Copié"
toggleLineNumbers = "Basculer les numéros de ligne"
toggleLineWrap = "Basculer le retour à la ligne"
toggleCodeEditable = "Basculer le bloc de code modifiable"
downloadCode = "Télécharger le code"
expandCode = "Développer ou réduire le bloc de code"
fullscreen = "Plein écran"
exitFullscreen = "Quitter le plein écran"
cookieconsentMessage = "Ce site Web utilise des Cookies pour améliorer votre expérience."
cookieconsentDismiss = "J'ai compris !"
cookieconsentLink = "En apprendre plus"
# === Assets ===
# === Share ===
[shareOn]
other = "Partager via"
# === Share ===
# === Single Post ===
[single]
contents = "Contenus"
pin = "Épingler en haut"
repost = "Reposter"
publishedOnDate = "publié le {{ .Date }}"
views = "vues"
comments = "commentaires"
author = "Auteur"
updatedOnDate = "Mis à jour le {{ .Date }}"
readMarkdown = "Ouvrir le Markdown"
viewSource = "Voir la source"
editThisPage = "Modifier cette page"
reportIssue = "Signaler un problème"
openInEditor = "Ouvrir dans l'éditeur"
back = "Retour"
home = "Accueil"
readMore = "En savoir plus"
expirationReminder = "Cet article a été mis à jour pour la dernière fois le {{ .Date }}, son contenu est peut-être obsolète."
encryptedAbstract = "Cet article a été chiffré, son contenu n'est donc pas lisible!"
encryptedMessage = "Entrer le mot de passe"
password = "Mot de passe"
enterBtn = "Entrer"
encryptyAgain = "Chiffrer à nouveau"
encryptionWarning = "Chiffrement de contenu détecté, mais ils sont toujours en texte clair !"
encryptionCommand = "Exécutez `npx @hugo-fixit/post-encrypt` après la compilation pour les chiffrer réellement."
relatedContent = "Contenu lié"
[single.includedIn]
categories = "inclus dans {{ .Categories }}"
collections = "inclus dans {{ .Collections }}"
both = "inclus dans {{ .Categories }} et {{ .Collections }}"
[single.wordCount]
one = "1 mot"
other = "{{ .Count }} mots"
[single.fuzzyWordCount]
other = "environ {{ .Count }} mots"
[single.readingTime]
one = "1 minute"
other = "{{ .Count }} minutes"
[single.reward]
donate = "Faire un don"
wechatpay = "WeChat Pay"
alipay = "Alipay"
paypal = "PayPal"
bitcoin = "Bitcoin"
# === Single Post ===
# === Error Pages ===
[pageNotFound]
other = "Page introuvable"
[pageNotFoundText]
other = "Désolé, la page recherchée n'existe pas."
# === Error Pages ===
# === Offline ===
[offlineTitle]
other = "Hors ligne"
[offlineText]
other = "Vous n'êtes pas connecté à Internet, seules les pages mises en cache seront disponibles."
# === Offline ===
# === Service Worker ===
[serviceWorker]
updateTitle = "Mise à jour disponible"
updateText = "Une nouvelle version de ce site est disponible."
# === Service Worker ===
# === Link Redirection ===
[linkRedirection]
title = "Avis de redirection"
message = "Vous êtes sur le point de quitter {{ .Title }}. Veuillez protéger la sécurité de votre compte et de vos biens."
confirm = "Continuer la visite"
# === Link Redirection ===
# === Alert ===
[alert]
note = "Remarque"
tip = "Astuce"
important = "Important"
warning = "Avertissement"
caution = "Attention"
# === Alert ===
# === Task List ===
[taskList]
x = "Vérifié"
" " = "Non vérifié"
"/" = "En cours"
"-" = "Annulé"
"<" = "Planifié"
">" = "Replanifié"
"!" = "Important"
"!x" = "Important Vérifié"
"?" = "Question"
# === Task List ===
# === Admonition ===
[admonition]
note = "Remarque"
abstract = "Résumé"
info = "Info"
todo = "À faire"
tip = "Astuce"
success = "Succès"
question = "Question"
warning = "Avertissement"
failure = "Échec"
danger = "Danger"
bug = "Bug"
example = "Exemple"
quote = "Citation"
# === Admonition ===
# === Version ===
[version]
new = "NOUVEAU"
changed = "MODIFIÉ"
deleted = "SUPPRIMÉ"
deprecated = "OBSOLÈTE"
# === Version ===
# === Diagram ===
[diagram]
zoomIn = "Zoom avant"
zoomOut = "Zoom arrière"
reset = "Réinitialiser"
download = "Télécharger le SVG"
# === Diagram ===
# === Tabs ===
[tabs]
diagram = "Diagramme"
code = "Code"
# === Tabs ===