mirror of
https://github.com/we-promise/sure.git
synced 2026-05-31 16:29:03 +00:00
* i18n(fr): complete provider_sync_summary translations
Add 13 missing French translations under provider_sync_summary in
config/locales/views/components/fr.yml to bring it to parity with en.yml.
Covers: transactions.fetching/protected/view_protected, full skip_reasons
section, full trades section (investment activities), and
health.view_error_details.
* chore(i18n): fix i18n-tasks scanner config
Add app/components to i18n-tasks relative_roots so component .erb files
using t(".relative_key") are correctly resolved by the scanner. Without
this, the scanner crashed on any component using relative i18n keys.
* i18n(fr): complete high-impact view translations
Bring full FR parity to the 5 most-visited user-facing screens:
- accounts (+25 keys)
- transactions (+168)
- holdings (+53)
- settings (+81)
- reports (+20)
Vocabulary aligned with docs/i18n/fr-glossary.md (Holding → Avoir,
Trade → Transaction boursière, Brokerage → Courtier, Posted → Validée,
Merchant → Commerçant, Net worth → Patrimoine net, etc.).
* i18n(fr): complete remaining incomplete view translations
Bring full FR parity to 23 partially-translated view locale files:
Mid-size (8-68 keys each): investments, pages, merchants, imports,
coinstats_items, sessions, cryptos, rules, transfers, trades,
invitations, entries, onboardings, simplefin_items.
Small (1-4 keys each): plaid_items, recurring_transactions, users,
password_resets, other_assets, loans, shared, registrations,
oidc_accounts.
Total: ~430 new FR keys. Existing FR translations preserved where
already in place; only missing keys were added.
Note: shared/fr.yml retains a `breadcrumbs:` block not present in EN
(used by FR breadcrumb controllers — removing would regress).
* i18n(fr): complete nested admin & settings translations
Cover the nested view subdirectories missed by the top-level scan:
- defaults/fr.yml (+3 custom keys: global.expand,
helpers.select.default_label, helpers.select.search_placeholder)
- admin/sso_providers (+2 keys: role_guest, guest_groups)
- admin/users (+25 keys: section title, family/role/trial filters,
table columns, summary, role descriptions, invitations)
- settings/api_keys (+1 key + structural fix: no_api_key and
current_api_key were nested incorrectly, now match en.yml)
- settings/hostings (+93 keys: assistant_settings, provider_selection,
tiingo/eodhd/alpha_vantage/openai blocks, twelve_data plan upgrade)
* i18n(fr): add fr.yml for 11 previously untranslated views
Create French locale files for all view directories that had no fr.yml:
Core features (6 files, 112 keys):
- account_sharings, budgets, splits, pdf_import_mailer (view scope),
pending_duplicate_merges, securities
Provider integrations (5 files, 575 keys):
- binance_items (Binance crypto exchange)
- coinbase_items (Coinbase crypto exchange)
- indexa_capital_items (Indexa Capital robo-advisor)
- mercury_items (Mercury business banking)
- snaptrade_items (SnapTrade broker aggregator)
Provider names kept in English. Domain vocabulary follows
docs/i18n/fr-glossary.md (Reconnect → Reconnecter, Refresh →
Actualiser, Wallet → Portefeuille, Cost basis → Coût d'acquisition,
Canadian retirement accounts mapped to official FR-CA acronyms
RRSP→REER, TFSA→CELI, RRIF→FERR).
* i18n(fr): add models, mailer, breadcrumb & Doorkeeper translations
Create French locale files for the remaining non-view scopes:
- models/coinbase_account/fr.yml (1 key)
- models/transaction/fr.yml (3 keys)
- mailers/pdf_import_mailer/fr.yml (1 key)
- breadcrumbs/fr.yml (5 root-level breadcrumb labels)
- doorkeeper.fr.yml (89 keys: full OAuth2 UI translation
modeled on the doorkeeper-i18n FR conventions; PKCE/scope/
Client Credentials kept in English as proper grant names;
date_format adjusted to %d/%m/%Y %H:%M:%S)
* i18n(fr): use "Inscription des utilisateurs" for invite_codes onboarding
In the invite_codes settings section, EN "Onboarding" was translated as
"Intégration" — wrong context. The page controls how new people sign up
to the instance, so "Inscription des utilisateurs" is the natural
French term for this UX flow.
* i18n(fr): use "Marchand" consistently for Merchant
Aligns transactions/, settings/, and settings/hostings/ with the FR
fintech convention (Lydia, Revolut FR, Boursorama, N26 FR all use
"Marchand"). Earlier waves had introduced "Commerçant" via a glossary
choice that turned out to imply a small physical retailer rather than
a generic transaction payee.
Net effect: a single consistent term across all FR screens.
* i18n(fr): address CodeRabbit review feedback
Fixes 9 of 17 actionable items from the CodeRabbit review:
- Remove duplicate breadcrumbs block from shared/fr.yml (item 2)
- Standardize "Indexa Capital" naming throughout (item 6)
- Pluralize merchants.perform_merge.success in EN+FR (item 7)
- Add rel="noopener noreferrer" to Coinbase + Binance external links
in EN+FR settings (item 9, security)
- Replace "rappeler" with "invoquer" for MCP tool calling (item 10)
- Localize Doorkeeper "Single Page Apps" + grant names with FR-first
phrasing (item 12)
- Reorder twelve_data_settings to put title first (item 14)
- Enrich IRA/SEP/SIMPLE/ISA/LISA/SIPP long labels with FR expansion
+ acronym in parens (item 15)
- Use "Transfert" (not "Virement") for investment activity_labels.transfer
to disambiguate from banking transfers (item 16)
Items deferred (require non-FR code changes or are pre-existing EN bugs):
1, 3, 4, 5, 8, 11, 13.
* i18n(fr): address second-wave CodeRabbit review feedback
- transactions: fix gender agreement on one_time_title
("%{type} ponctuel" → "Transaction ponctuelle (%{type})") so that
"Dépense" no longer renders as "Dépense ponctuel"
- transactions: fix bare-noun-modifier in rule_description_prefix
("Les futures transactions %{type}…" → "…de type %{type}…")
- settings/hostings: clarify email_confirmation_description
("lors du changement" → "lorsqu'ils la modifient")
- settings/hostings: fix dangling "Utilisé de préférence" in EODHD
and Alpha Vantage rate_limit_warning ("À utiliser de préférence")
133 lines
7.9 KiB
YAML
133 lines
7.9 KiB
YAML
---
|
|
fr:
|
|
simplefin_items:
|
|
new:
|
|
title: Connecter SimpleFIN
|
|
setup_token: Jeton de configuration
|
|
setup_token_placeholder: collez votre jeton de configuration SimpleFIN
|
|
connect: Connecter
|
|
cancel: Annuler
|
|
create:
|
|
success: Connexion SimpleFIN ajoutée avec succès ! Vos comptes apparaîtront sous peu lors de la synchronisation en arrière-plan.
|
|
errors:
|
|
blank_token: Veuillez entrer un jeton de configuration SimpleFIN.
|
|
invalid_token: Jeton de configuration invalide. Veuillez vérifier que vous avez copié le jeton complet depuis SimpleFIN Bridge.
|
|
token_compromised: Le jeton de configuration est peut-être compromis, expiré ou déjà utilisé. Veuillez en créer un nouveau.
|
|
create_failed: "Échec de la connexion : %{message}"
|
|
unexpected: Une erreur inattendue s'est produite. Veuillez réessayer.
|
|
destroy:
|
|
success: La connexion SimpleFIN va être supprimée
|
|
update:
|
|
success: Connexion SimpleFIN mise à jour avec succès ! Vos comptes sont en cours de reconnexion.
|
|
errors:
|
|
blank_token: Veuillez entrer un jeton de configuration SimpleFIN.
|
|
invalid_token: Jeton de configuration invalide. Veuillez vérifier que vous avez copié le jeton complet depuis SimpleFIN Bridge.
|
|
token_compromised: Le jeton de configuration est peut-être compromis, expiré ou déjà utilisé. Veuillez en créer un nouveau.
|
|
update_failed: "Échec de la mise à jour de la connexion : %{message}"
|
|
unexpected: Une erreur inattendue s'est produite. Veuillez réessayer.
|
|
edit:
|
|
setup_token:
|
|
label: "Jeton de configuration SimpleFIN :"
|
|
placeholder: "Collez votre jeton de configuration SimpleFIN ici..."
|
|
help_text: "Le jeton doit être une longue chaîne commençant par des lettres et des chiffres"
|
|
setup_accounts:
|
|
account_card:
|
|
balance: "Solde"
|
|
activity:
|
|
recent:
|
|
one: "1 transaction • dernière %{when}"
|
|
other: "%{count} transactions • dernière %{when}"
|
|
dormant: "Aucune activité depuis %{days} jours"
|
|
empty: "Aucune transaction importée pour le moment"
|
|
likely_closed: "Aucune activité récente et solde à zéro — il peut s'agir d'une carte fermée ou remplacée"
|
|
today: "aujourd'hui"
|
|
yesterday: "hier"
|
|
days_ago:
|
|
one: "il y a 1 jour"
|
|
other: "il y a %{count} jours"
|
|
stale_accounts:
|
|
title: "Comptes qui ne sont plus dans SimpleFIN"
|
|
description: "Ces comptes existent dans votre base de données mais ne sont plus fournis par SimpleFIN. Cela peut se produire lorsque la configuration des comptes change en amont."
|
|
action_prompt: "Que souhaitez-vous faire ?"
|
|
action_delete: "Supprimer le compte et toutes les transactions"
|
|
action_move: "Déplacer les transactions vers :"
|
|
action_skip: "Ignorer pour l'instant"
|
|
transaction_count:
|
|
one: "%{count} transaction"
|
|
other: "%{count} transactions"
|
|
complete_account_setup:
|
|
all_skipped: "Tous les comptes ont été ignorés. Aucun compte n'a été créé."
|
|
no_accounts: "Aucun compte à configurer."
|
|
success:
|
|
one: "%{count} compte SimpleFIN créé avec succès ! Vos transactions et avoirs sont en cours d'importation en arrière-plan."
|
|
other: "%{count} comptes SimpleFIN créés avec succès ! Vos transactions et avoirs sont en cours d'importation en arrière-plan."
|
|
stale_accounts_processed: "Comptes obsolètes : %{deleted} supprimés, %{moved} déplacés."
|
|
stale_accounts_errors:
|
|
one: "%{count} action sur un compte obsolète a échoué. Consultez les journaux pour plus de détails."
|
|
other: "%{count} actions sur des comptes obsolètes ont échoué. Consultez les journaux pour plus de détails."
|
|
simplefin_item:
|
|
add_new: Ajouter une nouvelle connexion
|
|
confirm_accept: Supprimer la connexion
|
|
confirm_body: Cela supprimera définitivement tous les comptes de ce groupe et toutes les données associées.
|
|
confirm_title: Supprimer la connexion SimpleFIN ?
|
|
delete: Supprimer
|
|
deletion_in_progress: "(suppression en cours...)"
|
|
error: Une erreur s'est produite lors de la synchronisation des données
|
|
no_accounts_description: Cette connexion n'a pas encore de comptes synchronisés.
|
|
no_accounts_title: Aucun compte trouvé
|
|
requires_update: Reconnecter
|
|
setup_needed: Nouveaux comptes prêts à être configurés
|
|
setup_description: Choisissez les types de comptes pour vos comptes SimpleFIN nouvellement importés.
|
|
setup_action: Configurer les nouveaux comptes
|
|
setup_accounts_menu: Configurer les comptes
|
|
more_accounts_available:
|
|
one: "%{count} compte supplémentaire disponible à configurer"
|
|
other: "%{count} comptes supplémentaires disponibles à configurer"
|
|
accounts_skipped_tooltip: "Certains comptes ont été ignorés en raison d'erreurs lors de la synchronisation"
|
|
accounts_skipped_label: "Ignorés : %{count}"
|
|
rate_limited_ago: "Limite de débit atteinte (il y a %{time})"
|
|
rate_limited_recently: "Limite de débit atteinte récemment"
|
|
status: Dernière synchronisation il y a %{timestamp}
|
|
status_never: Jamais synchronisé
|
|
status_with_summary: "Dernière synchronisation il y a %{timestamp} • %{summary}"
|
|
syncing: Synchronisation...
|
|
update: Mettre à jour
|
|
stale_pending_note: "(exclues des budgets)"
|
|
stale_pending_accounts: "dans : %{accounts}"
|
|
reconciled_details_note: "(voir le résumé de synchronisation pour plus de détails)"
|
|
duplicate_accounts_skipped: "Certains comptes ont été ignorés comme doublons — utilisez 'Lier des comptes existants' pour fusionner."
|
|
select_existing_account:
|
|
title: "Lier %{account_name} à SimpleFIN"
|
|
description: Sélectionnez un compte SimpleFIN à lier à votre compte existant
|
|
cancel: Annuler
|
|
link_account: Lier le compte
|
|
no_accounts_found: "Aucun compte SimpleFIN trouvé pour ce %{moniker}."
|
|
wait_for_sync: Si vous venez de connecter ou de synchroniser, réessayez une fois la synchronisation terminée.
|
|
unlink_to_move: Pour déplacer un lien, détachez-le d'abord depuis le menu d'actions du compte.
|
|
all_accounts_already_linked: Tous les comptes SimpleFIN semblent déjà liés.
|
|
currently_linked_to: "Actuellement lié à : %{account_name}"
|
|
|
|
link_existing_account:
|
|
success: Compte lié à SimpleFIN avec succès
|
|
errors:
|
|
only_manual: Seuls les comptes manuels peuvent être liés
|
|
different_provider: Ce compte est lié à un autre fournisseur. Détachez-le d'abord de ce fournisseur, puis liez-le à SimpleFIN.
|
|
invalid_simplefin_account: Compte SimpleFIN sélectionné invalide
|
|
dismiss_replacement_suggestion:
|
|
dismissed: Suggestion de remplacement ignorée
|
|
replacement_prompt:
|
|
title: "Votre carte %{institution} a peut-être été remplacée"
|
|
description: "« %{account_name} » est liée à « %{old_name} », qui n'a eu aucune activité récente et un solde à zéro. Une nouvelle carte, « %{new_name} », est désormais active dans la même institution. Reliez-la pour conserver votre historique intact."
|
|
relink: Relier à la nouvelle carte
|
|
confirm_title: Relier à la nouvelle carte ?
|
|
confirm_body: "« %{account_name} » sera liée à « %{new_name} ». Votre historique de transactions est conservé ; les transactions futures proviendront de la nouvelle carte."
|
|
dismiss_aria: Ignorer la suggestion de remplacement
|
|
reconciled_status:
|
|
message:
|
|
one: "%{count} transaction en attente en doublon réconciliée"
|
|
other: "%{count} transactions en attente en doublon réconciliées"
|
|
stale_pending_status:
|
|
message:
|
|
one: "%{count} transaction en attente depuis plus de %{days} jours"
|
|
other: "%{count} transactions en attente depuis plus de %{days} jours"
|