PolyTools Trade Cost 0.1.1 / src/lib/i18n-locales.js

530 lines · 35,863 bytes · SHA-256 4ffdbdc906291d422e2b7abdfe5ed8eae78ac047d25a3e5bf3abb94692bb0699

1/* PolyTools · extra UI locales (es, zh, fr). Loaded after i18n.js. */
2(function (root) {
3 'use strict';
4
5 const es = {
6 'brand': 'PolyTools',
7 'unit.d': 'd', 'unit.h': 'h',
8 'common.notAffiliated': 'Sin afiliación a Polymarket. Estimaciones con fines meramente informativos. No constituyen asesoramiento financiero ni fiscal.',
9
10 'panel.title': 'Coste real de la operación',
11 'panel.collapse': 'Contraer', 'panel.expand': 'Expandir',
12 'panel.synced': 'sincronizado con el ticket', 'panel.manual': 'manual',
13 'panel.buy': 'Comprar', 'panel.sell': 'Vender', 'panel.limit': 'Límite',
14 'panel.market': 'Mercado','panel.amountUsd': 'Importe, $', 'panel.shares': 'Acciones',
15 'panel.pickMarket': 'Elige el mercado',
16 'panel.loading': 'Cargando datos del mercado…',
17 'panel.loadFail': 'No se pudieron cargar los datos ({err}). Reintentando…',
18 'panel.notMarketPage': 'Abre una página de mercado para ver el coste real de una operación.',
19 'panel.enterAmount': 'Escribe un importe en el ticket de orden y aquí aparecerá el coste total.',
20 'panel.enterShares': 'Escribe cuántas acciones quieres vender.',
21 'panel.enterLimit': 'Indica el precio límite y el número de acciones.',
22 'panel.quoteBuy': 'Al mejor ask {price}: punto de equilibrio {be}; si gana, rinde {roi}',
23 'panel.quoteApr': '{apr}/año',
24 'panel.quoteFee': 'Comisión por cada $100: {fee}',
25 'panel.quoteSell': 'Mejor bid {price}; tras la comisión recibes {net} por acción',
26 'panel.ifWins': 'Si gana',
27 'panel.perYear': '/año',
28 'panel.avgPrice': 'Precio medio de ejecución',
29 'panel.bestPrice': 'mejor {price}',
30 'panel.slippage': 'Slippage',
31 'panel.fee': 'Comisión de taker',
32 'panel.feeNone': 'sin comisión en este mercado',
33 'panel.feePromo': 'promoción sin comisión en este mercado',
34 'panel.perShare': 'por acción',
35 'panel.withFee': 'con comisión {price}',
36 'panel.ofAmount': 'de {usd} introducidos · acciones: {n}',
37 'panel.feeOfProfit': '{pct} de la ganancia',
38 'panel.totalCost': 'Total a pagar',
39 'panel.payout': 'Cobro si gana',
40 'panel.breakeven': 'Probabilidad de equilibrio',
41 'panel.breakevenHint': 'punto medio del mercado {mid}',
42 'panel.edgeNeeded': 'necesitas {pp} por encima del mercado',
43 'panel.until': 'Hasta la fecha de cierre',
44 'panel.endPassed': 'fecha de cierre vencida',
45 'panel.apr': 'Anualizado (simple)',
46 'panel.aprShort': 'Menos de 7 días: la cifra anualizada no es representativa',
47 'panel.holding': 'Holding Rewards ({rate}/año)',
48 'panel.holdingVal': '≈ {usd} hasta la fecha de cierre',
49 'panel.withHolding': 'con recompensas: {roi} · {apr}/año',
50 'panel.makerBuy': 'Con una orden límite a {price}: las mismas acciones por {cost}, ahorras {saving} (comisión + spread). La ejecución no está garantizada.',
51 'panel.makerSell': 'Con una orden límite de venta a {price}, ganas {gain} más. La ejecución no está garantizada.',
52 'panel.proceeds': 'Recibes (neto)',
53 'panel.gross': 'Importe bruto',
54 'panel.holdCompare': 'Si mantienes y gana, cobras {payout}. Vender solo compensa si estimas la probabilidad por debajo de {p}.',
55 'panel.limitTaker': 'Se ejecuta ya como taker (acciones: {n}, comisión {fee}). Queda en el libro como maker (acciones: {m}, sin comisión).',
56 'panel.limitPassive': 'Queda en el libro de órdenes como orden maker, sin comisión.',
57 'panel.limitCost': 'Coste si se ejecuta por completo',
58 'panel.limitNet': 'Neto si se ejecuta por completo',
59 'panel.updated': 'libro: hace {s} s',
60 'panel.openJournal': 'Diario del trader',
61 'panel.settings': 'Configuración',
62 'warn.unfilled': 'Liquidez insuficiente: {usd} quedarían sin ejecutar.',
63 'warn.unfilledShares': 'No hay compradores suficientes. Acciones que quedarían sin vender: {n}.',
64 'warn.slippage': 'Slippage alto: {pct} peor que el mejor precio.',
65 'warn.feeEatsProfit': 'La comisión absorbe el {pct} de tu beneficio potencial.',
66 'warn.expired': 'La fecha de cierre ya pasó. A la espera de la resolución, plazo desconocido.',
67 'warn.belowBenchmark': 'Por debajo de tu rentabilidad de referencia ({b}/año).',
68 'warn.noAsks': 'No hay vendedores en el libro de órdenes.',
69 'warn.noBids': 'No hay compradores en el libro de órdenes.',
70 'warn.noFill': 'Con este tamaño no se ejecutaría nada.',
71 'warn.closed': 'Este mercado no acepta órdenes.',
72 'warn.belowMinSize': 'Tamaño de orden insuficiente (mínimo de acciones: {n}).',
73 'warn.badInput': 'Revisa el precio límite y las acciones.',
74 'profile.button': 'Diario de este trader',
75
76 'popup.openJournal': 'Abrir el diario del trader',
77 'popup.journalHint': 'PnL por categoría, calibración, salidas anticipadas, exportación CSV',
78 'popup.settings': 'Configuración',
79 'popup.lang': 'Idioma', 'popup.lang.auto': 'Automático',
80 'popup.panel': 'Mostrar el panel de coste en Polymarket',
81 'popup.benchmark': 'Tu rentabilidad de referencia,\u00A0%/año',
82 'popup.benchmarkHint': 'p. ej., lo que rinde tu dinero en otro sitio; las operaciones por debajo de ese valor muestran un aviso',
83 'popup.saved': 'Guardado',
84 'popup.privacy': 'Funciona en local en tu navegador y solo lee las API públicas de Polymarket. Sin claves, sin acceso a tu billetera y sin servidores propios.',
85
86 'j.title': 'Diario del trader',
87 'j.subtitle': 'Estadísticas honestas de cualquier billetera de Polymarket: dónde ganas, dónde se te escapa el dinero y si tus entradas baten al precio del mercado.',
88 'j.input': 'Dirección de billetera, enlace de perfil o @usuario',
89 'j.load': 'Analizar', 'j.cancel': 'Detener', 'j.saved': 'Recientes', 'j.remove': 'Quitar',
90 'j.limit': 'Posiciones a analizar',
91 'j.err.resolve': 'No se encontró esta billetera ni este usuario.',
92 'j.err.load': 'Error al cargar: {err}',
93 'j.err.empty': 'No hay posiciones en esta billetera.',
94 'j.step.profile': 'Perfil y estadísticas', 'j.step.pnl': 'Historial de PnL', 'j.step.closed': 'Posiciones cerradas',
95 'j.step.open': 'Posiciones abiertas', 'j.step.tokens': 'Resoluciones', 'j.step.categories': 'Categorías', 'j.step.build': 'Calculando',
96 'j.truncated': 'Se muestran las últimas {n} posiciones por estado. Sube el límite para ver el panorama completo.',
97 'j.loadedAt': 'Datos a fecha de {t}',
98 'j.kpi.net': 'Resultado neto',
99 'j.kpi.netHint': 'tras comisiones, más rebates y recompensas (economic PnL de Polymarket)',
100 'j.kpi.positionPnl': 'PnL de posiciones',
101 'j.kpi.positionPnlHint': 'tras comisiones, cerradas + abiertas',
102 'j.kpi.feesHint': 'ya descontadas · antes de comisiones: {x} (≈ Total PnL del perfil de Polymarket)',
103 'j.kpi.fees': 'Comisiones pagadas',
104 'j.kpi.feesEntryOnly': 'comisiones de entrada de las posiciones analizadas, ya descontadas',
105 'j.kpi.income': 'Rebates y recompensas',
106 'j.kpi.winRate': 'Tasa de aciertos',
107 'j.kpi.winRateHint': 'Ganadas {w} · perdidas {l}',
108 'j.kpi.pf': 'Factor de beneficio',
109 'j.kpi.pfHint': 'ganancias brutas ÷ pérdidas brutas',
110 'j.kpi.avgWinLoss': 'Ganancia media / pérdida media',
111 'j.kpi.open': 'Exposición abierta',
112 'j.kpi.openHint': 'Posiciones: {n} · no realizado {u}',
113 'j.kpi.markets': 'Mercados operados',
114 'j.chart.pnl': 'PnL acumulado',
115 'j.chart.pnlHint': 'Puntos diarios de Polymarket (/v2/user-pnl, economic PnL).',
116 'j.chart.pnlEmpty': 'Aún no hay historial de PnL publicado para esta billetera.',
117 'j.cat.title': 'Por categoría',
118 'j.cat.hint': 'Posiciones cerradas, PnL después de comisiones.',
119 'j.cat.col.category': 'Categoría', 'j.cat.col.n': 'Cerradas', 'j.cat.col.wr': '% aciertos', 'j.cat.col.pnl': 'PnL',
120 'j.cat.col.roi': 'ROI','j.cat.col.open': 'Abiertas',
121 'j.cal.title': 'Calibración de tus entradas',
122 'j.cal.hint': 'Cada punto es un tramo de precio: lo que pagaste de media frente a la frecuencia con la que ese resultado ganó realmente. Un punto por encima de la diagonal indica que compraste más barato de lo que valía; uno por debajo, que pagaste de más. Las barras de error muestran el intervalo del 95\u00A0%.',
123 'j.cal.edge': 'Ventaja media por entrada',
124 'j.cal.moneyEdge': 'Ventaja ponderada por importe',
125 'j.cal.paid': 'Precio medio pagado', 'j.cal.won': 'Acierto real', 'j.cal.n': 'Posiciones', 'j.cal.bucket': 'Precio de entrada',
126 'j.cal.edgeCol': 'Ventaja', 'j.cal.few': 'pocos datos',
127 'j.cal.axisX': 'Precio medio de entrada', 'j.cal.axisY': 'Proporción que ganó',
128 'j.beh.title': 'Comportamiento',
129 'j.beh.held': 'Mantenidas hasta la resolución',
130 'j.beh.exited': 'Cerradas antes de la resolución',
131 'j.beh.saved': 'Las salidas anticipadas te ahorraron',
132 'j.beh.missed': 'Las salidas anticipadas te costaron',
133 'j.beh.deltaHint': 'frente a mantener las mismas acciones hasta la resolución',
134 'j.beh.holdWin': 'Tiempo mediano en posición: ganadoras',
135 'j.beh.holdLoss': 'Tiempo mediano en posición: perdedoras',
136 'j.beh.long': 'Improbables (<15¢)', 'j.beh.mid': 'Intermedios (15-85¢)', 'j.beh.fav': 'Favoritos (>85¢)',
137 'j.month.title': 'Mes a mes',
138 'j.month.hint': 'Posiciones cerradas según el mes de su última operación o canje (UTC).',
139 'j.month.col.month': 'Mes', 'j.month.col.n': 'Cerradas', 'j.month.col.wl': 'G / P', 'j.month.col.pnl': 'PnL',
140 'j.top.best': 'Mejores posiciones', 'j.top.worst': 'Peores posiciones',
141 'j.top.col.market': 'Mercado', 'j.top.col.entry': 'Entrada', 'j.top.col.pnl': 'PnL', 'j.top.col.closed': 'Cierre',
142 'j.export.title': 'Exportar',
143 'j.export.positions': 'CSV de posiciones',
144 'j.export.monthly': 'CSV mensual',
145 'j.export.activity': 'CSV del registro completo de actividad',
146 'j.export.year': 'Período',
147 'j.export.allTime': 'Todo el historial',
148 'j.export.loading': 'Obteniendo actividad… filas: {n}',
149 'j.export.done': 'Filas guardadas: {n}',
150 'j.export.hint': 'El registro incluye operaciones, canjes, split/merge, recompensas, rebates, depósitos y retiradas, en UTC. Polymarket calcula el PnL con coste medio. Son datos para tu contable y no constituyen asesoramiento fiscal.',
151 'j.table.show': 'Mostrar tabla', 'j.table.hide': 'Ocultar tabla',
152 'j.cat.esports': 'Esports', 'j.cat.sports': 'Deportes', 'j.cat.crypto': 'Cripto', 'j.cat.weather': 'Clima',
153 'j.cat.mentions': 'Menciones', 'j.cat.tech': 'Tecnología', 'j.cat.culture': 'Cultura', 'j.cat.economy': 'Economía',
154 'j.cat.finance': 'Finanzas', 'j.cat.geopolitics': 'Geopolítica', 'j.cat.politics': 'Política', 'j.cat.other': 'Otros',
155 'j.note.pnl': 'El PnL sigue el criterio de Polymarket: coste medio, neto de comisiones de trading. Los rebates y recompensas se suman aparte (estadísticas del perfil). Los resultados de Combo y LP solo se reflejan en las cifras totales.',
156 'panel.noBook': 'Este mercado no tiene libro de órdenes (cerrado o resuelto).',
157 'j.kpi.statsAsOf': 'Estadísticas del perfil de Polymarket a fecha de {t}',
158 'j.kpi.basedOn': 'Sobre las {n} posiciones analizadas',
159 'j.chart.col.date': 'Fecha',
160 'j.cal.empty': 'Aún no hay posiciones resueltas.',
161 'j.notice.categories': 'No se pudieron cargar las categorías de {n} eventos; se muestran como Otros.',
162 'panel.levelsN': 'niveles: {n}',
163 'panel.enterManual': 'Introduce un valor arriba para ver el coste total.',
164 'panel.openPanel': 'Abrir PolyTools',
165 'panel.minimize': 'Minimizar',
166 'panel.summaryBuy': 'Si gana {profit} · equilibrio {be} · comisión {fee}',
167 'panel.summarySell': 'Recibes {net} · comisión {fee}',
168 'j.stopped': 'Detenido. Pulsa «Analizar» para cargar de nuevo.',
169 'j.notice.tokens': 'No se pudo cargar la resolución de {n} posiciones; se tratan como abiertas.',
170 'j.export.capped': 'Se alcanzó el límite de filas: {n}.',
171 'panel.live': 'libro en vivo',
172 'panel.oneTap': 'Importes 1-Tap: pago tras comisiones',
173 'panel.oneTapSub': 'el botón dice {claim} · comisión {fee}',
174 'popup.also': 'También gratis de PolyTools:',
175 'popup.privacyLink': 'Política de privacidad',
176 'popup.follow': 'Novedades y nuevas herramientas:',
177 };
178
179 const zh = {
180 'brand': 'PolyTools',
181 'unit.d': '天', 'unit.h': '小时',
182 'common.notAffiliated': '与 Polymarket 无关联。估算仅供参考。不构成投资或税务建议。',
183
184 'panel.title': '真实交易成本',
185 'panel.collapse': '收起', 'panel.expand': '展开',
186 'panel.synced': '已与下单框同步', 'panel.manual': '手动',
187 'panel.buy': '买入', 'panel.sell': '卖出', 'panel.limit': '限价',
188 'panel.market': '市场','panel.amountUsd': '金额($)', 'panel.shares': '份额',
189 'panel.pickMarket': '选择市场',
190 'panel.loading': '正在加载市场数据…',
191 'panel.loadFail': '无法加载市场数据({err})。正在重试…',
192 'panel.notMarketPage': '打开市场页面,即可查看交易的真实成本。',
193 'panel.enterAmount': '在下单框输入金额,这里会显示完整成本。',
194 'panel.enterShares': '请输入要卖出的份额数。',
195 'panel.enterLimit': '请设置限价和份额。',
196 'panel.quoteBuy': '按卖一价 {price} 成交:盈亏平衡 {be};获胜回报率 {roi}',
197 'panel.quoteApr': '{apr}/年',
198 'panel.quoteFee': '每 $100 手续费:{fee}',
199 'panel.quoteSell': '买一价 {price};扣除手续费后每份净得 {net}',
200 'panel.ifWins': '若获胜',
201 'panel.perYear': '/年',
202 'panel.avgPrice': '平均成交价',
203 'panel.bestPrice': '最优 {price}',
204 'panel.slippage': '滑点',
205 'panel.fee': '吃单手续费',
206 'panel.feeNone': '本市场无手续费',
207 'panel.feePromo': '本市场限时免手续费',
208 'panel.perShare': '每份',
209 'panel.withFee': '含手续费 {price}',
210 'panel.ofAmount': '输入金额 {usd} · {n} 份',
211 'panel.feeOfProfit': '占获胜收益的 {pct}',
212 'panel.totalCost': '总计支付',
213 'panel.payout': '获胜时兑付',
214 'panel.breakeven': '盈亏平衡概率',
215 'panel.breakevenHint': '市场中间价 {mid}',
216 'panel.edgeNeeded': '需比市场高 {pp}',
217 'panel.until': '距结束日期',
218 'panel.endPassed': '已过结束日期',
219 'panel.apr': '年化(单利)',
220 'panel.aprShort': '不足 7 天,年化数字参考意义不大',
221 'panel.holding': 'Holding Rewards({rate}/年)',
222 'panel.holdingVal': '到结束日约 {usd}',
223 'panel.withHolding': '含奖励:{roi} · {apr}/年',
224 'panel.makerBuy': '改用限价单 {price}:同样份额只需 {cost},可省 {saving}(手续费 + 价差)。不保证成交。',
225 'panel.makerSell': '以限价 {price} 挂卖:多赚 {gain}。不保证成交。',
226 'panel.proceeds': '实际到手(净额)',
227 'panel.gross': '扣费前金额',
228 'panel.holdCompare': '持有并获胜可得 {payout}。只有当你判断获胜概率低于 {p} 时,卖出才更划算。',
229 'panel.limitTaker': '立即作为吃单成交:{n} 份(手续费 {fee})。作为挂单留在订单簿:{m} 份(无手续费)。',
230 'panel.limitPassive': '将作为挂单留在订单簿中,免手续费。',
231 'panel.limitCost': '全部成交所需成本',
232 'panel.limitNet': '全部成交后净得',
233 'panel.updated': '订单簿更新于 {s} 秒前',
234 'panel.openJournal': '交易员日志',
235 'panel.settings': '设置',
236 'warn.unfilled': '流动性不足:{usd} 将无法成交。',
237 'warn.unfilledShares': '买单不足:{n} 份将无法卖出。',
238 'warn.slippage': '滑点过大:比最优价还差 {pct}。',
239 'warn.feeEatsProfit': '手续费会吞掉潜在利润的 {pct}。',
240 'warn.expired': '已过结束日期。正在等待结算,结算时间未知。',
241 'warn.belowBenchmark': '低于你设定的基准 {b}/年。',
242 'warn.noAsks': '订单簿中没有卖单。',
243 'warn.noBids': '订单簿中没有买单。',
244 'warn.noFill': '该数量下无法成交。',
245 'warn.closed': '该市场暂不接受订单。',
246 'warn.belowMinSize': '低于最小下单量({n} 份)。',
247 'warn.badInput': '请检查限价和份额。',
248 'profile.button': '该交易员的日志',
249
250 'popup.openJournal': '打开交易员日志',
251 'popup.journalHint': '按类别统计 PnL、校准、提前平仓,导出 CSV',
252 'popup.settings': '设置',
253 'popup.lang': '语言', 'popup.lang.auto': '自动',
254 'popup.panel': '在 Polymarket 上显示成本面板',
255 'popup.benchmark': '你的基准收益率(%/年)',
256 'popup.benchmarkHint': '例如你的资金在别处的收益;低于该值的交易会显示警告',
257 'popup.saved': '已保存',
258 'popup.privacy': '在浏览器本地运行,只读取 Polymarket 公开 API。不涉及密钥,不接触你的钱包,也没有我们自己的服务器。',
259
260 'j.title': '交易员日志',
261 'j.subtitle': '任意 Polymarket 钱包的真实统计:哪里赚、哪里亏,你的入场价是否跑赢市场。',
262 'j.input': '钱包地址、主页链接或 @用户名',
263 'j.load': '分析', 'j.cancel': '停止', 'j.saved': '最近', 'j.remove': '删除',
264 'j.limit': '分析持仓数量',
265 'j.err.resolve': '找不到该钱包或用户名。',
266 'j.err.load': '加载失败:{err}',
267 'j.err.empty': '未找到该钱包的持仓。',
268 'j.step.profile': '个人主页与统计', 'j.step.pnl': 'PnL 历史', 'j.step.closed': '已平仓持仓',
269 'j.step.open': '未平仓持仓', 'j.step.tokens': '结算结果', 'j.step.categories': '类别', 'j.step.build': '计算中',
270 'j.truncated': '每种状态仅显示最近 {n} 个持仓。提高上限可查看完整情况。',
271 'j.loadedAt': '数据截至 {t}',
272 'j.kpi.net': '净盈亏',
273 'j.kpi.netHint': '扣除手续费,加上返佣与奖励(Polymarket economic PnL)',
274 'j.kpi.positionPnl': '持仓 PnL',
275 'j.kpi.positionPnlHint': '扣除手续费,已平仓 + 未平仓',
276 'j.kpi.feesHint': '已扣除 · 扣费前:{x}(≈ Polymarket 个人主页的 Total PnL)',
277 'j.kpi.fees': '已付手续费',
278 'j.kpi.feesEntryOnly': '已分析持仓的入场手续费,已扣除',
279 'j.kpi.income': '返佣与奖励',
280 'j.kpi.winRate': '胜率',
281 'j.kpi.winRateHint': '盈利 {w} · 亏损 {l}',
282 'j.kpi.pf': '盈利因子',
283 'j.kpi.pfHint': '总盈利 ÷ 总亏损',
284 'j.kpi.avgWinLoss': '平均盈利 / 平均亏损',
285 'j.kpi.open': '未平仓敞口',
286 'j.kpi.openHint': '持仓:{n} · 未实现 {u}',
287 'j.kpi.markets': '交易过的市场',
288 'j.chart.pnl': '累计 PnL',
289 'j.chart.pnlHint': '来自 Polymarket 的每日数据(/v2/user-pnl,economic PnL)。',
290 'j.chart.pnlEmpty': '该钱包暂无已发布的 PnL 历史。',
291 'j.cat.title': '按类别',
292 'j.cat.hint': '已结束的持仓,盈亏已扣除手续费。',
293 'j.cat.col.category': '类别', 'j.cat.col.n': '已平仓', 'j.cat.col.wr': '胜率', 'j.cat.col.pnl': 'PnL',
294 'j.cat.col.roi': 'ROI','j.cat.col.open': '未平仓',
295 'j.cal.title': '入场价校准',
296 'j.cal.hint': '每个点代表一个价格区间:你的平均买入价,对比该结果实际获胜的频率。对角线上方的点表示买得比实际价值便宜,下方的点表示买贵了。误差线表示 95% 置信区间。',
297 'j.cal.edge': '每笔入场平均优势',
298 'j.cal.moneyEdge': '按金额加权的优势',
299 'j.cal.paid': '平均买入价', 'j.cal.won': '实际胜率', 'j.cal.n': '持仓数', 'j.cal.bucket': '入场价',
300 'j.cal.edgeCol': '优势', 'j.cal.few': '样本较少',
301 'j.cal.axisX': '平均入场价', 'j.cal.axisY': '获胜比例',
302 'j.beh.title': '交易行为',
303 'j.beh.held': '持有至结算',
304 'j.beh.exited': '结算前平仓',
305 'j.beh.saved': '提前平仓帮你省下',
306 'j.beh.missed': '提前平仓让你错失',
307 'j.beh.deltaHint': '对比持有相同份额至结算',
308 'j.beh.holdWin': '中位持有时长:盈利单',
309 'j.beh.holdLoss': '中位持有时长:亏损单',
310 'j.beh.long': '冷门(<15¢)', 'j.beh.mid': '中段(15-85¢)', 'j.beh.fav': '热门(>85¢)',
311 'j.month.title': '按月',
312 'j.month.hint': '按最后一笔交易或赎回所在月份统计已平仓持仓(UTC)。',
313 'j.month.col.month': '月份', 'j.month.col.n': '已平仓', 'j.month.col.wl': '胜 / 负', 'j.month.col.pnl': 'PnL',
314 'j.top.best': '最佳持仓', 'j.top.worst': '最差持仓',
315 'j.top.col.market': '市场', 'j.top.col.entry': '入场价', 'j.top.col.pnl': 'PnL', 'j.top.col.closed': '平仓时间',
316 'j.export.title': '导出',
317 'j.export.positions': '持仓 CSV',
318 'j.export.monthly': '月度 CSV',
319 'j.export.activity': '完整活动流水 CSV',
320 'j.export.year': '时间范围',
321 'j.export.allTime': '全部时间',
322 'j.export.loading': '正在获取活动记录… {n} 行',
323 'j.export.done': '已保存 {n} 行',
324 'j.export.hint': '流水包括交易、赎回、拆分/合并、奖励、返佣、充值和提现,时间为 UTC。Polymarket 按平均成本计算 PnL。这些数据供你的会计使用,本身不构成税务建议。',
325 'j.table.show': '显示表格', 'j.table.hide': '隐藏表格',
326 'j.cat.esports': '电竞', 'j.cat.sports': '体育', 'j.cat.crypto': '加密货币', 'j.cat.weather': '天气',
327 'j.cat.mentions': '提及', 'j.cat.tech': '科技', 'j.cat.culture': '文化', 'j.cat.economy': '经济',
328 'j.cat.finance': '金融', 'j.cat.geopolitics': '地缘政治', 'j.cat.politics': '政治', 'j.cat.other': '其他',
329 'j.note.pnl': 'PnL 与 Polymarket 口径一致:按平均成本计算,已扣除交易手续费。返佣和奖励另计(来自个人主页统计)。Combo 和 LP 的结果只计入总体数字。',
330 'panel.noBook': '该市场没有订单簿(已关闭或已结算)。',
331 'j.kpi.statsAsOf': 'Polymarket 个人主页统计,截至 {t}',
332 'j.kpi.basedOn': '基于已分析的 {n} 个持仓',
333 'j.chart.col.date': '日期',
334 'j.cal.empty': '暂无已结算的持仓。',
335 'j.notice.categories': '有 {n} 个事件的分类未能加载,已归入“其他”。',
336 'panel.levelsN': '档位:{n}',
337 'panel.enterManual': '在上方输入数值即可查看完整成本。',
338 'panel.openPanel': '打开 PolyTools',
339 'panel.minimize': '最小化',
340 'panel.summaryBuy': '获胜 {profit} · 盈亏平衡 {be} · 手续费 {fee}',
341 'panel.summarySell': '到手 {net} · 手续费 {fee}',
342 'j.stopped': '已停止。点击“分析”重新加载。',
343 'j.notice.tokens': '有 {n} 个持仓的结算状态未能加载,暂按未平仓处理。',
344 'j.export.capped': '已达到行数上限:{n}。',
345 'panel.live': '实时订单簿',
346 'panel.oneTap': '一键下单金额:扣除手续费后的回报',
347 'panel.oneTapSub': '按钮显示 {claim} · 手续费 {fee}',
348 'popup.also': 'PolyTools 的另一款免费工具:',
349 'popup.privacyLink': '隐私政策',
350 'popup.follow': '新闻和新工具:',
351 };
352
353 const fr = {
354 'brand': 'PolyTools',
355 'unit.d': 'j', 'unit.h': 'h',
356 'common.notAffiliated': 'Non affilié à Polymarket. Estimations à titre informatif uniquement. Ces chiffres ne constituent pas un conseil financier ou fiscal.',
357
358 'panel.title': 'Coût réel du trade',
359 'panel.collapse': 'Réduire', 'panel.expand': 'Développer',
360 'panel.synced': 'synchronisé avec le ticket', 'panel.manual': 'manuel',
361 'panel.buy': 'Acheter', 'panel.sell': 'Vendre', 'panel.limit': 'Limite',
362 'panel.market': 'Marché','panel.amountUsd': 'Montant, $', 'panel.shares': 'Parts',
363 'panel.pickMarket': 'Choisissez le marché',
364 'panel.loading': 'Chargement des données du marché…',
365 'panel.loadFail': 'Impossible de charger les données ({err}). Nouvelle tentative…',
366 'panel.notMarketPage': 'Ouvrez une page de marché pour voir le coût réel d’un trade.',
367 'panel.enterAmount': 'Saisissez un montant dans le ticket d’ordre et le coût total s’affiche ici.',
368 'panel.enterShares': 'Saisissez le nombre de parts à vendre.',
369 'panel.enterLimit': 'Indiquez le prix limite et le nombre de parts.',
370 'panel.quoteBuy': 'Au meilleur ask {price}\u00A0: point d’équilibre {be}\u00A0; en cas de gain, rendement {roi}',
371 'panel.quoteApr': '{apr}/an',
372 'panel.quoteFee': 'Frais pour $100\u00A0: {fee}',
373 'panel.quoteSell': 'Meilleur bid {price}\u00A0; après frais, il vous reste {net} par part',
374 'panel.ifWins': 'En cas de gain',
375 'panel.perYear': '/an',
376 'panel.avgPrice': 'Prix moyen d’exécution',
377 'panel.bestPrice': 'meilleur {price}',
378 'panel.slippage': 'Slippage',
379 'panel.fee': 'Frais de taker',
380 'panel.feeNone': 'aucun frais sur ce marché',
381 'panel.feePromo': 'promo sans frais sur ce marché',
382 'panel.perShare': 'par part',
383 'panel.withFee': 'avec frais {price}',
384 'panel.ofAmount': 'sur {usd} saisis · parts\u00A0: {n}',
385 'panel.feeOfProfit': '{pct} du gain',
386 'panel.totalCost': 'Total à payer',
387 'panel.payout': 'Paiement en cas de gain',
388 'panel.breakeven': 'Probabilité d’équilibre',
389 'panel.breakevenHint': 'milieu bid/ask {mid}',
390 'panel.edgeNeeded': 'il vous faut {pp} au-dessus du marché',
391 'panel.until': 'Jusqu’à la date de fin',
392 'panel.endPassed': 'date de fin dépassée',
393 'panel.apr': 'Annualisé (simple)',
394 'panel.aprShort': 'Moins de 7 jours\u00A0: le rendement annualisé n’est pas significatif',
395 'panel.holding': 'Holding Rewards ({rate}/an)',
396 'panel.holdingVal': '≈ {usd} à la date de fin',
397 'panel.withHolding': 'avec récompenses\u00A0: {roi} · {apr}/an',
398 'panel.makerBuy': 'Avec un ordre limite à {price}\u00A0: les mêmes parts pour {cost}, soit {saving} d’économie (frais + spread). Exécution non garantie.',
399 'panel.makerSell': 'Avec un ordre limite de vente à {price}, vous gagnez {gain} de plus. Exécution non garantie.',
400 'panel.proceeds': 'Vous recevez (net)',
401 'panel.gross': 'Montant brut',
402 'panel.holdCompare': 'Conserver la position rapporte {payout} en cas de gain. Vendre n’est avantageux que si vous estimez la probabilité inférieure à {p}.',
403 'panel.limitTaker': 'Exécution immédiate en taker (parts\u00A0: {n}, frais {fee}). Le reste va au carnet en maker (parts\u00A0: {m}, sans frais).',
404 'panel.limitPassive': 'Reste dans le carnet d’ordres en tant qu’ordre maker, sans frais.',
405 'panel.limitCost': 'Coût si exécuté en totalité',
406 'panel.limitNet': 'Net si exécuté en totalité',
407 'panel.updated': 'carnet\u00A0: il y a {s} s',
408 'panel.openJournal': 'Journal du trader',
409 'panel.settings': 'Paramètres',
410 'warn.unfilled': 'Liquidité insuffisante\u00A0: {usd} resteraient non exécutés.',
411 'warn.unfilledShares': 'Pas assez d’acheteurs. Parts qui resteraient invendues\u00A0: {n}.',
412 'warn.slippage': 'Slippage élevé\u00A0: exécution {pct} moins favorable que le meilleur prix.',
413 'warn.feeEatsProfit': 'Les frais absorbent {pct} de votre bénéfice potentiel.',
414 'warn.expired': 'Date de fin dépassée. Résolution en attente, délai inconnu.',
415 'warn.belowBenchmark': 'Inférieur à votre rendement de référence ({b}/an).',
416 'warn.noAsks': 'Aucun vendeur dans le carnet d’ordres.',
417 'warn.noBids': 'Aucun acheteur dans le carnet d’ordres.',
418 'warn.noFill': 'Rien ne s’exécuterait à cette taille.',
419 'warn.closed': 'Ce marché n’accepte pas d’ordres.',
420 'warn.belowMinSize': 'Inférieur à la taille minimale d’un ordre (minimum de parts\u00A0: {n}).',
421 'warn.badInput': 'Vérifiez le prix limite et les parts.',
422 'profile.button': 'Journal de ce trader',
423
424 'popup.openJournal': 'Ouvrir le journal du trader',
425 'popup.journalHint': 'PnL par catégorie, calibration, sorties anticipées, export CSV',
426 'popup.settings': 'Paramètres',
427 'popup.lang': 'Langue', 'popup.lang.auto': 'Auto',
428 'popup.panel': 'Afficher le panneau de coût sur Polymarket',
429 'popup.benchmark': 'Votre rendement de référence,\u00A0%/an',
430 'popup.benchmarkHint': 'par ex. ce que rapporte votre argent ailleurs\u00A0; les trades en dessous déclenchent un avertissement',
431 'popup.saved': 'Enregistré',
432 'popup.privacy': 'Fonctionne en local dans votre navigateur et lit uniquement les API publiques de Polymarket. Aucune clé, aucun accès à votre portefeuille, aucun serveur de notre côté.',
433
434 'j.title': 'Journal du trader',
435 'j.subtitle': 'Des statistiques honnêtes sur n’importe quel portefeuille Polymarket\u00A0: où vous gagnez, où vous perdez de l’argent, et si vos entrées font mieux que le prix du marché.',
436 'j.input': 'Adresse du portefeuille, lien de profil ou @pseudo',
437 'j.load': 'Analyser', 'j.cancel': 'Arrêter', 'j.saved': 'Récents', 'j.remove': 'Supprimer',
438 'j.limit': 'Positions à analyser',
439 'j.err.resolve': 'Portefeuille ou pseudo introuvable.',
440 'j.err.load': 'Échec du chargement\u00A0: {err}',
441 'j.err.empty': 'Aucune position pour ce portefeuille.',
442 'j.step.profile': 'Profil et statistiques', 'j.step.pnl': 'Historique du PnL', 'j.step.closed': 'Positions clôturées',
443 'j.step.open': 'Positions ouvertes', 'j.step.tokens': 'Résolutions', 'j.step.categories': 'Catégories', 'j.step.build': 'Calcul en cours',
444 'j.truncated': 'Affichage des {n} dernières positions par statut. Augmentez la limite pour une vue complète.',
445 'j.loadedAt': 'Données au {t}',
446 'j.kpi.net': 'Résultat net',
447 'j.kpi.netHint': 'après frais, plus rebates et récompenses (economic PnL de Polymarket)',
448 'j.kpi.positionPnl': 'PnL des positions',
449 'j.kpi.positionPnlHint': 'après frais, clôturées + ouvertes',
450 'j.kpi.feesHint': 'déjà déduits · avant frais\u00A0: {x} (≈ Total PnL du profil Polymarket)',
451 'j.kpi.fees': 'Frais payés',
452 'j.kpi.feesEntryOnly': 'frais d’entrée des positions analysées, déjà déduits',
453 'j.kpi.income': 'Rebates et récompenses',
454 'j.kpi.winRate': 'Taux de réussite',
455 'j.kpi.winRateHint': 'Gagnées {w} · perdues {l}',
456 'j.kpi.pf': 'Facteur de profit',
457 'j.kpi.pfHint': 'gains bruts ÷ pertes brutes',
458 'j.kpi.avgWinLoss': 'Gain moyen / perte moyenne',
459 'j.kpi.open': 'Exposition ouverte',
460 'j.kpi.openHint': 'Positions : {n} · latent {u}',
461 'j.kpi.markets': 'Marchés tradés',
462 'j.chart.pnl': 'PnL cumulé',
463 'j.chart.pnlHint': 'Points quotidiens de Polymarket (/v2/user-pnl, economic PnL).',
464 'j.chart.pnlEmpty': 'Aucun historique de PnL n’est encore publié pour ce portefeuille.',
465 'j.cat.title': 'Par catégorie',
466 'j.cat.hint': 'Positions terminées, PnL après frais.',
467 'j.cat.col.category': 'Catégorie', 'j.cat.col.n': 'Clôturées', 'j.cat.col.wr': '% réussite', 'j.cat.col.pnl': 'PnL',
468 'j.cat.col.roi': 'ROI','j.cat.col.open': 'Ouvertes',
469 'j.cal.title': 'Calibration de vos entrées',
470 'j.cal.hint': 'Chaque point est une tranche de prix\u00A0: ce que vous avez payé en moyenne, comparé à la fréquence réelle de gain de ce résultat. Un point au-dessus de la diagonale signifie que vous avez acheté moins cher que la réalité, un point en dessous que vous avez payé trop cher. Les barres d’erreur montrent l’intervalle à 95\u00A0%.',
471 'j.cal.edge': 'Avantage moyen par entrée',
472 'j.cal.moneyEdge': 'Avantage pondéré par les montants',
473 'j.cal.paid': 'Prix moyen payé', 'j.cal.won': 'Réussite réelle', 'j.cal.n': 'Positions', 'j.cal.bucket': 'Prix d’entrée',
474 'j.cal.edgeCol': 'Avantage', 'j.cal.few': 'peu de données',
475 'j.cal.axisX': 'Prix moyen d’entrée', 'j.cal.axisY': 'Proportion de gagnantes',
476 'j.beh.title': 'Comportement',
477 'j.beh.held': 'Conservées jusqu’à la résolution',
478 'j.beh.exited': 'Clôturées avant la résolution',
479 'j.beh.saved': 'Les sorties anticipées vous ont fait économiser',
480 'j.beh.missed': 'Les sorties anticipées vous ont coûté',
481 'j.beh.deltaHint': 'par rapport à la conservation des mêmes parts jusqu’à la résolution',
482 'j.beh.holdWin': 'Durée médiane de détention\u00A0: gagnantes',
483 'j.beh.holdLoss': 'Durée médiane de détention\u00A0: perdantes',
484 'j.beh.long': 'Outsiders (<15¢)', 'j.beh.mid': 'Intermédiaires (15-85¢)', 'j.beh.fav': 'Favoris (>85¢)',
485 'j.month.title': 'Mois par mois',
486 'j.month.hint': 'Positions clôturées selon le mois de leur dernier trade ou encaissement (UTC).',
487 'j.month.col.month': 'Mois', 'j.month.col.n': 'Clôturées', 'j.month.col.wl': 'G / P', 'j.month.col.pnl': 'PnL',
488 'j.top.best': 'Meilleures positions', 'j.top.worst': 'Pires positions',
489 'j.top.col.market': 'Marché', 'j.top.col.entry': 'Entrée', 'j.top.col.pnl': 'PnL', 'j.top.col.closed': 'Clôture',
490 'j.export.title': 'Export',
491 'j.export.positions': 'CSV des positions',
492 'j.export.monthly': 'CSV mensuel',
493 'j.export.activity': 'CSV du registre complet d’activité',
494 'j.export.year': 'Période',
495 'j.export.allTime': 'Tout l’historique',
496 'j.export.loading': 'Récupération de l’activité… lignes\u00A0: {n}',
497 'j.export.done': 'Lignes enregistrées\u00A0: {n}',
498 'j.export.hint': 'Le registre inclut trades, encaissements de gains, split/merge, récompenses, rebates, dépôts et retraits, en UTC. Polymarket calcule le PnL au coût moyen. Ces données sont destinées à votre comptable et ne constituent pas un conseil fiscal.',
499 'j.table.show': 'Afficher le tableau', 'j.table.hide': 'Masquer le tableau',
500 'j.cat.esports': 'E-sport', 'j.cat.sports': 'Sport', 'j.cat.crypto': 'Crypto', 'j.cat.weather': 'Météo',
501 'j.cat.mentions': 'Mentions', 'j.cat.tech': 'Tech', 'j.cat.culture': 'Culture', 'j.cat.economy': 'Économie',
502 'j.cat.finance': 'Finance', 'j.cat.geopolitics': 'Géopolitique', 'j.cat.politics': 'Politique', 'j.cat.other': 'Autres',
503 'j.note.pnl': 'Le PnL suit la méthode de Polymarket\u00A0: coût moyen, net des frais de trading. Les rebates et récompenses s’ajoutent en plus (statistiques du profil). Les résultats Combo et LP n’apparaissent que dans les chiffres globaux.',
504 'panel.noBook': 'Pas de carnet d’ordres pour ce marché (fermé ou résolu).',
505 'j.kpi.statsAsOf': 'Statistiques du profil Polymarket au {t}',
506 'j.kpi.basedOn': 'Sur les {n} positions analysées',
507 'j.chart.col.date': 'Date',
508 'j.cal.empty': 'Aucune position résolue pour le moment.',
509 'j.notice.categories': 'Les catégories de {n} événements n’ont pas pu être chargées et apparaissent dans Autres.',
510 'panel.levelsN': 'niveaux : {n}',
511 'panel.enterManual': 'Saisissez une valeur ci-dessus pour voir le coût complet.',
512 'panel.openPanel': 'Ouvrir PolyTools',
513 'panel.minimize': 'Réduire',
514 'panel.summaryBuy': 'Si gagnant {profit} · équilibre {be} · frais {fee}',
515 'panel.summarySell': 'Vous recevez {net} · frais {fee}',
516 'j.stopped': 'Arrêté. Cliquez sur « Analyser » pour relancer.',
517 'j.notice.tokens': 'Le statut de résolution de {n} positions n’a pas pu être chargé ; elles sont traitées comme ouvertes.',
518 'j.export.capped': 'Limite de lignes atteinte : {n}.',
519 'panel.live': 'carnet en direct',
520 'panel.oneTap': 'Montants 1-Tap : gain après frais',
521 'panel.oneTapSub': 'le bouton indique {claim} · frais {fee}',
522 'popup.also': 'Aussi gratuit chez PolyTools :',
523 'popup.privacyLink': 'Politique de confidentialité',
524 'popup.follow': 'Actus et nouveaux outils :',
525 };
526
527 const i18n = root.PWL && root.PWL.i18n;
528 if (i18n) Object.assign(i18n.dicts, { es, zh, fr });
529 if (typeof module !== 'undefined' && module.exports) module.exports = { es, zh, fr };
530})(typeof globalThis !== 'undefined' ? globalThis : this);