feat: translate all UI strings to English for international release

Complete French→English translation across all frontend pages and backend
services — every label, button, header, empty state, toast, and nav item
is now in English. Build verified clean (tsc + vite). No i18n library
added; direct string replacement throughout.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OpenSquared
2026-06-22 09:06:37 +02:00
parent f8a0a6d023
commit dcbc9f19fc
24 changed files with 1443 additions and 1444 deletions

View File

@@ -63,7 +63,7 @@ export default function Backtest() {
<History className="w-5 h-5 text-blue-400" /> Backtest & Simulation
</h1>
<p className="text-xs text-slate-500 mt-0.5">
Testez vos stratégies options sur des données historiques réelles
Test your options strategies on real historical data
</p>
</div>
@@ -74,7 +74,7 @@ export default function Backtest() {
<div className="section-title">Configuration</div>
<div className="space-y-3">
<div>
<label className="text-xs text-slate-500 mb-1 block">Sous-jacent</label>
<label className="text-xs text-slate-500 mb-1 block">Underlying</label>
<div className="flex flex-wrap gap-1 mb-1">
{SYMBOLS.slice(0, 7).map(s => (
<button
@@ -98,7 +98,7 @@ export default function Backtest() {
</div>
<div>
<label className="text-xs text-slate-500 mb-1 block">Stratégie</label>
<label className="text-xs text-slate-500 mb-1 block">Strategy</label>
{STRATEGIES.map(s => (
<button
key={s.key}
@@ -114,7 +114,7 @@ export default function Backtest() {
</div>
<div>
<label className="text-xs text-slate-500 mb-1 block">Période</label>
<label className="text-xs text-slate-500 mb-1 block">Period</label>
<input
type="date"
value={form.start_date}
@@ -142,7 +142,7 @@ export default function Backtest() {
</div>
<div>
<label className="text-xs text-slate-500 mb-1 block">Expiration: {form.expiry_days}j</label>
<label className="text-xs text-slate-500 mb-1 block">Expiration: {form.expiry_days}d</label>
<div className="flex gap-1 mb-1">
{[30, 60, 90, 180].map(d => (
<button
@@ -153,14 +153,14 @@ export default function Backtest() {
'border-slate-700 text-slate-500': form.expiry_days !== d,
})}
>
{d}j
{d}d
</button>
))}
</div>
</div>
<div>
<label className="text-xs text-slate-500 mb-1 block">Capital initial ()</label>
<label className="text-xs text-slate-500 mb-1 block">Initial capital ()</label>
<input
type="number"
value={form.capital}
@@ -175,7 +175,7 @@ export default function Backtest() {
className="w-full bg-blue-600 hover:bg-blue-500 disabled:opacity-50 text-white rounded py-2 text-sm font-semibold flex items-center justify-center gap-2 transition-colors"
>
<Play className="w-4 h-4" />
{isPending ? 'Calcul...' : 'Lancer le backtest'}
{isPending ? 'Computing...' : 'Run backtest'}
</button>
</div>
</div>
@@ -196,12 +196,12 @@ export default function Backtest() {
{/* KPIs */}
<div className="grid grid-cols-4 gap-3">
<StatCard
label="Retour total"
label="Total return"
value={`${typed.total_return_pct >= 0 ? '+' : ''}${typed.total_return_pct.toFixed(2)}%`}
positive={typed.total_return_pct >= 0}
/>
<StatCard
label="Taux de succès"
label="Win rate"
value={`${typed.win_rate.toFixed(1)}%`}
sub={`${typed.wins}W / ${typed.losses}L`}
positive={typed.win_rate >= 50}
@@ -221,9 +221,9 @@ export default function Backtest() {
{/* Equity curve */}
<div className="card">
<div className="section-title">Courbe d'équité — {form.symbol} {STRATEGIES.find(s => s.key === form.strategy)?.label}</div>
<div className="section-title">Equity curve {form.symbol} {STRATEGIES.find(s => s.key === form.strategy)?.label}</div>
<div className="text-xs text-slate-500 mb-3">
Capital final: <span className="text-white font-bold">{typed.final_capital.toFixed(2)}€</span>
Final capital: <span className="text-white font-bold">{typed.final_capital.toFixed(2)}</span>
{' '}(initial: {form.capital} · P&L: {typed.total_pnl >= 0 ? '+' : ''}{typed.total_pnl.toFixed(2)})
</div>
<ResponsiveContainer width="100%" height={220}>
@@ -254,17 +254,17 @@ export default function Backtest() {
{/* Last trades */}
<div className="card">
<div className="section-title">Derniers trades exécutés</div>
<div className="section-title">Last executed trades</div>
<div className="overflow-x-auto">
<table className="w-full text-xs">
<thead>
<tr className="text-slate-600 border-b border-slate-700/40">
<th className="text-left pb-2">Entrée</th>
<th className="text-left pb-2">Sortie</th>
<th className="text-right pb-2">Prix entrée</th>
<th className="text-left pb-2">Entry</th>
<th className="text-left pb-2">Exit</th>
<th className="text-right pb-2">Entry price</th>
<th className="text-right pb-2">Strike</th>
<th className="text-right pb-2">Prime</th>
<th className="text-right pb-2">Prix sortie</th>
<th className="text-right pb-2">Premium</th>
<th className="text-right pb-2">Exit price</th>
<th className="text-right pb-2">P&L</th>
<th className="text-right pb-2">Capital</th>
</tr>
@@ -298,8 +298,8 @@ export default function Backtest() {
<div className="card h-80 flex items-center justify-center text-slate-600">
<div className="text-center">
<History className="w-10 h-10 mx-auto mb-3 opacity-20" />
<div className="text-sm">Configurer et lancer un backtest</div>
<div className="text-xs mt-1">Données yfinance historique complet disponible</div>
<div className="text-sm">Configure and run a backtest</div>
<div className="text-xs mt-1">yfinance data full history available</div>
</div>
</div>
)}