mirror of
https://github.com/we-promise/sure.git
synced 2026-05-29 23:39: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")
225 lines
8.1 KiB
YAML
225 lines
8.1 KiB
YAML
---
|
|
fr:
|
|
reports:
|
|
index:
|
|
title: Rapports
|
|
subtitle: Aperçus complets de votre santé financière
|
|
export: Exporter CSV
|
|
print_report: Imprimer le rapport
|
|
drag_to_reorder: "Glisser pour réorganiser la section"
|
|
toggle_section: "Basculer la visibilité de la section"
|
|
periods:
|
|
monthly: Mensuel
|
|
quarterly: Trimestriel
|
|
ytd: Depuis le début de l'année
|
|
last_6_months: 6 derniers mois
|
|
custom: Plage personnalisée
|
|
date_range:
|
|
from: Du
|
|
to: Au
|
|
showing_period: "Affichage des données du %{start} au %{end}"
|
|
invalid_date_range: "La date de fin ne peut pas être antérieure à la date de début. Les dates ont été inversées."
|
|
summary:
|
|
total_income: Revenus totaux
|
|
total_expenses: Dépenses totales
|
|
net_savings: Épargne nette
|
|
budget_performance: Performance budgétaire
|
|
vs_previous: vs période précédente
|
|
income_minus_expenses: Revenus moins dépenses
|
|
of_budget_used: du budget utilisé
|
|
no_budget_data: Aucune donnée budgétaire pour cette période
|
|
budget_performance:
|
|
title: Performance budgétaire
|
|
spent: Dépensé
|
|
budgeted: Budgété
|
|
remaining: Restant
|
|
over_by: Dépassé de
|
|
shared: partagé
|
|
suggested_daily: "%{amount} suggéré par jour pour les %{days} jours restants"
|
|
no_budgets: Aucune catégorie de budget définie pour ce mois
|
|
status:
|
|
good: En bonne voie
|
|
warning: Proche de la limite
|
|
over: Budget dépassé
|
|
trends:
|
|
title: Tendances et aperçus
|
|
monthly_breakdown: Répartition mensuelle
|
|
month: Mois
|
|
income: Revenus
|
|
expenses: Dépenses
|
|
net: Net
|
|
savings_rate: Taux d'épargne
|
|
current: actuel
|
|
avg_monthly_income: Revenu mensuel moyen
|
|
avg_monthly_expenses: Dépenses mensuelles moyennes
|
|
avg_monthly_savings: Épargne mensuelle moyenne
|
|
no_data: Aucune donnée de tendance disponible
|
|
spending_patterns: Modèles de dépenses
|
|
weekday_spending: Dépenses en semaine
|
|
weekend_spending: Dépenses le week-end
|
|
total: Total
|
|
avg_per_transaction: Moy. par transaction
|
|
transactions: Transactions
|
|
insight_title: Aperçu
|
|
insight_higher_weekend: "Vous dépensez %{percent}% de plus par transaction le week-end qu'en semaine"
|
|
insight_higher_weekday: "Vous dépensez %{percent}% de plus par transaction en semaine que le week-end"
|
|
insight_similar: "Vos dépenses par transaction sont similaires en semaine et le week-end"
|
|
no_spending_data: Aucune donnée de dépenses disponible pour cette période
|
|
empty_state:
|
|
title: Aucune donnée disponible
|
|
description: Commencez à suivre vos finances en ajoutant des transactions ou en connectant vos comptes pour voir des rapports complets
|
|
add_transaction: Ajouter une transaction
|
|
add_account: Ajouter un compte
|
|
transactions_breakdown:
|
|
title: Répartition des activités
|
|
no_transactions: Aucune activité trouvée pour la période et les filtres sélectionnés
|
|
filters:
|
|
title: Filtres
|
|
category: Catégorie
|
|
account: Compte
|
|
tag: Étiquette
|
|
amount_min: Montant min
|
|
amount_max: Montant max
|
|
date_range: Plage de dates
|
|
all_categories: Toutes les catégories
|
|
all_accounts: Tous les comptes
|
|
all_tags: Toutes les étiquettes
|
|
apply: Appliquer les filtres
|
|
clear: Effacer les filtres
|
|
sort:
|
|
label: Trier par
|
|
date_desc: Date (Plus récent)
|
|
amount_desc: Montant (Élevé à faible)
|
|
amount_asc: Montant (Faible à élevé)
|
|
export:
|
|
label: Exporter
|
|
csv: CSV
|
|
excel: Excel
|
|
pdf: PDF
|
|
google_sheets: Ouvrir dans Google Sheets
|
|
table:
|
|
category: Catégorie
|
|
amount: Montant
|
|
type: Type
|
|
expense: Dépenses
|
|
income: Revenus
|
|
uncategorized: Non catégorisé
|
|
entries:
|
|
one: "%{count} entrée"
|
|
other: "%{count} entrées"
|
|
percentage: "% du total"
|
|
pagination:
|
|
showing:
|
|
one: Affichage de %{count} entrée
|
|
other: Affichage de %{count} entrées
|
|
previous: Précédent
|
|
next: Suivant
|
|
net_worth:
|
|
title: Patrimoine net
|
|
current_net_worth: Patrimoine net actuel
|
|
period_change: Variation sur la période
|
|
assets_vs_liabilities: Actifs vs Passifs
|
|
total_assets: Actifs
|
|
total_liabilities: Passifs
|
|
no_assets: Aucun actif
|
|
no_liabilities: Aucun passif
|
|
investment_performance:
|
|
title: Performance des investissements
|
|
portfolio_value: Valeur du portefeuille
|
|
total_return: Rendement total
|
|
contributions: Contributions de la période
|
|
withdrawals: Retraits de la période
|
|
top_holdings: Principaux avoirs
|
|
holding: Avoir
|
|
weight: Poids
|
|
value: Valeur
|
|
return: Rendement
|
|
accounts: Comptes d'investissement
|
|
gains_by_tax_treatment: Gains par traitement fiscal
|
|
unrealized_gains: Plus-values latentes
|
|
realized_gains: Plus-values réalisées
|
|
total_gains: Gains totaux
|
|
taxable_realized_note: Ces gains peuvent être soumis à l'impôt
|
|
no_data: "-"
|
|
view_details: Voir les détails
|
|
holdings_count:
|
|
one: "%{count} avoir"
|
|
other: "%{count} avoirs"
|
|
sells_count:
|
|
one: "%{count} vente"
|
|
other: "%{count} ventes"
|
|
holdings: Avoirs
|
|
sell_trades: Transactions boursières de vente
|
|
and_more: "+%{count} de plus"
|
|
investment_flows:
|
|
title: Flux d'investissement
|
|
description: Suivez les flux d'argent entrants et sortants de vos comptes d'investissement
|
|
contributions: Contributions
|
|
withdrawals: Retraits
|
|
net_flow: Flux net
|
|
google_sheets_instructions:
|
|
title_with_key: "✅ Copier l'URL pour Google Sheets"
|
|
title_no_key: "⚠️ Clé API requise"
|
|
ready: Votre URL CSV (avec clé API) est prête.
|
|
steps: "Pour importer dans Google Sheets :\n1. Créez une nouvelle feuille Google\n2. Dans la cellule A1, entrez la formule ci-dessous\n3. Appuyez sur Entrée"
|
|
security_warning: "Cette URL inclut votre clé API. Gardez-la en sécurité !"
|
|
need_key: Pour importer des données dans Google Sheets, vous avez besoin d'une clé API.
|
|
step1: "Allez dans Paramètres → Clés API"
|
|
step2: "Créez une nouvelle clé API avec la permission \"lecture\""
|
|
step3: Copiez la clé API
|
|
step4: "Ajoutez-la à cette URL comme : ?api_key=VOTRE_CLÉ"
|
|
example: Exemple
|
|
then_use: Ensuite, utilisez l'URL complète avec =IMPORTDATA() dans Google Sheets.
|
|
open_sheets: Ouvrir Google Sheets
|
|
go_to_api_keys: Aller aux clés API
|
|
close: Compris
|
|
print:
|
|
document_title: Rapport financier
|
|
title: Rapport financier
|
|
generated_on: "Généré le %{date}"
|
|
summary:
|
|
title: Résumé
|
|
income: Revenus
|
|
expenses: Dépenses
|
|
net_savings: Épargne nette
|
|
budget: Budget
|
|
vs_prior: "%{percent}% vs précédent"
|
|
of_income: "%{percent}% des revenus"
|
|
used: utilisé
|
|
net_worth:
|
|
title: Patrimoine net
|
|
current_balance: Solde actuel
|
|
this_period: cette période
|
|
assets: Actifs
|
|
liabilities: Passifs
|
|
no_liabilities: Aucun passif
|
|
trends:
|
|
title: Tendances mensuelles
|
|
month: Mois
|
|
income: Revenus
|
|
expenses: Dépenses
|
|
net: Net
|
|
savings_rate: Taux d'épargne
|
|
average: Moyenne
|
|
current_month_note: "* Mois en cours (données partielles)"
|
|
investments:
|
|
title: Investissements
|
|
portfolio_value: Valeur du portefeuille
|
|
total_return: Rendement total
|
|
contributions: Contributions
|
|
withdrawals: Retraits
|
|
this_period: cette période
|
|
top_holdings: Principaux avoirs
|
|
holding: Avoir
|
|
weight: Poids
|
|
value: Valeur
|
|
return: Rendement
|
|
spending:
|
|
title: Dépenses par catégorie
|
|
income: Revenus
|
|
expenses: Dépenses
|
|
category: Catégorie
|
|
amount: Montant
|
|
percent: "%"
|
|
more_categories: "+ %{count} autres catégories"
|