chore: lots of i18n

This commit is contained in:
2026-02-21 12:34:06 +01:00
parent c991015ea8
commit b27a3e6885
18 changed files with 1355 additions and 661 deletions

View File

@@ -1,6 +1,7 @@
import React, { useEffect, useMemo, useRef, useState } from 'react';
import { useAppStore } from '../../store';
import type { TaskProgress } from '../../../main/shared/electronApi';
import { useI18n } from '../../i18n';
import './Panel.css';
function getPostRelativePath(createdAt: string, slug: string): string | null {
@@ -101,6 +102,7 @@ function buildTaskEntries(tasks: TaskProgress[]): TaskEntry[] {
}
export const Panel: React.FC = () => {
const { t, language } = useI18n();
const {
panelVisible,
panelActiveTab,
@@ -191,7 +193,7 @@ export const Panel: React.FC = () => {
setPostLinksEntries([...fromEntries, ...toEntries]);
} catch (error) {
setPostLinksError(error instanceof Error ? error.message : 'Failed to load post links.');
setPostLinksError(error instanceof Error ? error.message : t('panel.error.loadPostLinks'));
setPostLinksEntries([]);
} finally {
setPostLinksLoading(false);
@@ -277,7 +279,7 @@ export const Panel: React.FC = () => {
if (requestIdRef.current !== currentRequestId) {
return;
}
setGitLogError(error instanceof Error ? error.message : 'Failed to load git log.');
setGitLogError(error instanceof Error ? error.message : t('panel.error.loadGitLog'));
setGitLogEntries([]);
} finally {
if (requestIdRef.current === currentRequestId) {
@@ -339,7 +341,7 @@ export const Panel: React.FC = () => {
className="task-cancel"
onClick={() => window.electronAPI?.tasks.cancel(task.taskId)}
>
Cancel
{t('common.cancel')}
</button>
)}
</div>
@@ -348,7 +350,7 @@ export const Panel: React.FC = () => {
return (
<div className="panel">
<div className="panel-header">
<div className="panel-tabs" role="tablist" aria-label="Panel tabs">
<div className="panel-tabs" role="tablist" aria-label={t('panel.tabsAria')}>
<button
type="button"
role="tab"
@@ -356,7 +358,7 @@ export const Panel: React.FC = () => {
aria-selected={effectiveActivePanelTab === 'tasks'}
onClick={() => setPanelActiveTab('tasks')}
>
Tasks
{t('common.tasks')}
</button>
<button
type="button"
@@ -365,7 +367,7 @@ export const Panel: React.FC = () => {
aria-selected={effectiveActivePanelTab === 'output'}
onClick={() => setPanelActiveTab('output')}
>
Output
{t('panel.output')}
</button>
{canActivatePostLinks && (
<button
@@ -375,7 +377,7 @@ export const Panel: React.FC = () => {
aria-selected={effectiveActivePanelTab === 'post-links'}
onClick={() => setPanelActiveTab('post-links')}
>
Post Links
{t('panel.postLinks')}
</button>
)}
<button
@@ -390,13 +392,13 @@ export const Panel: React.FC = () => {
}
}}
>
Git Log
{t('panel.gitLog')}
</button>
</div>
<button
className="panel-close"
onClick={() => useAppStore.getState().togglePanel()}
title="Close Panel"
title={t('panel.closeTitle')}
>
×
</button>
@@ -404,7 +406,7 @@ export const Panel: React.FC = () => {
<div className="panel-content">
{effectiveActivePanelTab === 'tasks' && (
recentTasks.length === 0 ? (
<div className="panel-empty">No recent tasks</div>
<div className="panel-empty">{t('panel.noRecentTasks')}</div>
) : (
<div className="task-list">
{recentTaskEntries.map((entry) => {
@@ -434,18 +436,18 @@ export const Panel: React.FC = () => {
)}
{effectiveActivePanelTab === 'output' && (
<div className="panel-empty">No output</div>
<div className="panel-empty">{t('panel.noOutput')}</div>
)}
{effectiveActivePanelTab === 'post-links' && (
!canActivatePostLinks ? (
<div className="panel-empty">Open a post editor to view post links</div>
<div className="panel-empty">{t('panel.openPostEditor')}</div>
) : postLinksLoading ? (
<div className="panel-empty">Loading post links...</div>
<div className="panel-empty">{t('panel.loadingPostLinks')}</div>
) : postLinksError ? (
<div className="panel-empty">{postLinksError}</div>
) : postLinksEntries.length === 0 ? (
<div className="panel-empty">No post links for this post</div>
<div className="panel-empty">{t('panel.noPostLinks')}</div>
) : (
<div className="post-links-list">
{postLinksEntries.map((entry) => (
@@ -454,9 +456,9 @@ export const Panel: React.FC = () => {
type="button"
className="post-links-item"
onClick={() => handlePostLinkClick(entry.id)}
title={`Open ${entry.title || entry.slug}`}
title={t('postLinks.openTitle', { title: entry.title || entry.slug })}
>
<span className="post-links-direction">{entry.direction} {entry.slug}</span>
<span className="post-links-direction">{t(`panel.direction.${entry.direction}`)} {entry.slug}</span>
</button>
))}
</div>
@@ -465,13 +467,13 @@ export const Panel: React.FC = () => {
{effectiveActivePanelTab === 'git-log' && (
!canActivateGitLog ? (
<div className="panel-empty">Open a post or media editor to view git log</div>
<div className="panel-empty">{t('panel.openPostOrMediaEditor')}</div>
) : gitLogLoading ? (
<div className="panel-empty">Loading git log...</div>
<div className="panel-empty">{t('panel.loadingGitLog')}</div>
) : gitLogError ? (
<div className="panel-empty">{gitLogError}</div>
) : gitLogEntries.length === 0 ? (
<div className="panel-empty">No commits found for this item</div>
<div className="panel-empty">{t('panel.noCommits')}</div>
) : (
<div className="git-log-list">
<div className="git-log-target">{gitLogTargetLabel}</div>
@@ -481,7 +483,7 @@ export const Panel: React.FC = () => {
<div className="git-log-meta">
<span className="git-log-hash">{entry.shortHash}</span>
<span>{entry.author}</span>
<span>{new Date(entry.date).toLocaleString()}</span>
<span>{new Date(entry.date).toLocaleString(language)}</span>
</div>
</div>
))}