feat: display translated release notes in updater based on app language
Use i18n translations for release notes when available, falling back to the GitHub release body. Adds FR/EN notes for versions 0.3.8–0.3.11. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
db337b3285
commit
0fbcbc0eca
3 changed files with 39 additions and 21 deletions
|
|
@ -410,7 +410,13 @@
|
||||||
"installing": "Installing...",
|
"installing": "Installing...",
|
||||||
"error": "Update failed",
|
"error": "Update failed",
|
||||||
"retryButton": "Retry",
|
"retryButton": "Retry",
|
||||||
"releaseNotes": "What's New"
|
"releaseNotes": "What's New",
|
||||||
|
"notes": {
|
||||||
|
"0.3.11": "### Added\n- Dynamic Report: support multiple column dimensions (composite column keys)\n\n### Fixed\n- Dynamic Report: no longer affected by global page date filters — uses only its own panel filters",
|
||||||
|
"0.3.10": "### Added\n- Dynamic Report: fields can now be used in multiple zones simultaneously (rows + filters, columns + filters)\n- Dynamic Report: right-click on a filter value to exclude it (shown with strikethrough in red)\n- \"This year\" period option in reports and dashboard (Jan 1 to today)",
|
||||||
|
"0.3.9": "### Added\n- Dynamic Report (pivot table): compose custom reports by assigning dimensions to rows, columns, filters and measures to values\n- Delete keywords from the \"All Keywords\" view",
|
||||||
|
"0.3.8": "### Added\n- Custom date range picker for reports and dashboard\n- Toggle to position subtotals above or below detail rows\n- Display release notes from CHANGELOG in GitHub releases and in-app updater"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"dataManagement": {
|
"dataManagement": {
|
||||||
"title": "Data Management",
|
"title": "Data Management",
|
||||||
|
|
|
||||||
|
|
@ -410,7 +410,13 @@
|
||||||
"installing": "Installation en cours...",
|
"installing": "Installation en cours...",
|
||||||
"error": "Erreur lors de la mise à jour",
|
"error": "Erreur lors de la mise à jour",
|
||||||
"retryButton": "Réessayer",
|
"retryButton": "Réessayer",
|
||||||
"releaseNotes": "Nouveautés"
|
"releaseNotes": "Nouveautés",
|
||||||
|
"notes": {
|
||||||
|
"0.3.11": "### Ajouté\n- Rapport dynamique : support de plusieurs dimensions en colonnes (clés composites)\n\n### Corrigé\n- Rapport dynamique : n'est plus affecté par les filtres de date globaux — utilise uniquement ses propres filtres du panneau",
|
||||||
|
"0.3.10": "### Ajouté\n- Rapport dynamique : les champs peuvent maintenant être utilisés dans plusieurs zones simultanément (lignes + filtres, colonnes + filtres)\n- Rapport dynamique : clic-droit sur une valeur de filtre pour l'exclure (affiché barré en rouge)\n- Option de période « Cette année » dans les rapports et le tableau de bord (du 1er janvier à aujourd'hui)",
|
||||||
|
"0.3.9": "### Ajouté\n- Rapport dynamique (tableau croisé) : composez des rapports personnalisés en assignant des dimensions aux lignes, colonnes, filtres et mesures aux valeurs\n- Suppression de mots-clés depuis la vue « Tous les mots-clés »",
|
||||||
|
"0.3.8": "### Ajouté\n- Sélecteur de plage de dates personnalisée pour les rapports et le tableau de bord\n- Bascule pour positionner les sous-totaux au-dessus ou en dessous des lignes de détail\n- Affichage des notes de version du CHANGELOG dans les releases GitHub et le système de mise à jour"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"dataManagement": {
|
"dataManagement": {
|
||||||
"title": "Gestion des données",
|
"title": "Gestion des données",
|
||||||
|
|
|
||||||
|
|
@ -125,13 +125,18 @@ export default function SettingsPage() {
|
||||||
<p>
|
<p>
|
||||||
{t("settings.updates.available", { version: state.version })}
|
{t("settings.updates.available", { version: state.version })}
|
||||||
</p>
|
</p>
|
||||||
{state.body && (
|
{(() => {
|
||||||
|
const notesKey = `settings.updates.notes.${state.version}`;
|
||||||
|
const i18nNotes = t(notesKey, { defaultValue: "" });
|
||||||
|
const notes = i18nNotes || state.body;
|
||||||
|
if (!notes) return null;
|
||||||
|
return (
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<h3 className="text-sm font-semibold text-[var(--foreground)]">
|
<h3 className="text-sm font-semibold text-[var(--foreground)]">
|
||||||
{t("settings.updates.releaseNotes")}
|
{t("settings.updates.releaseNotes")}
|
||||||
</h3>
|
</h3>
|
||||||
<div className="max-h-48 overflow-y-auto rounded-lg bg-[var(--background)] border border-[var(--border)] p-3 text-sm text-[var(--muted-foreground)] space-y-1">
|
<div className="max-h-48 overflow-y-auto rounded-lg bg-[var(--background)] border border-[var(--border)] p-3 text-sm text-[var(--muted-foreground)] space-y-1">
|
||||||
{state.body.split("\n").map((line, i) => {
|
{notes.split("\n").map((line, i) => {
|
||||||
const trimmed = line.trim();
|
const trimmed = line.trim();
|
||||||
if (!trimmed) return <div key={i} className="h-2" />;
|
if (!trimmed) return <div key={i} className="h-2" />;
|
||||||
if (trimmed.startsWith("### "))
|
if (trimmed.startsWith("### "))
|
||||||
|
|
@ -144,7 +149,8 @@ export default function SettingsPage() {
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
);
|
||||||
|
})()}
|
||||||
<button
|
<button
|
||||||
onClick={downloadAndInstall}
|
onClick={downloadAndInstall}
|
||||||
className="flex items-center gap-2 px-4 py-2 bg-[var(--primary)] text-white rounded-lg hover:opacity-90 transition-opacity"
|
className="flex items-center gap-2 px-4 py-2 bg-[var(--primary)] text-white rounded-lg hover:opacity-90 transition-opacity"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue