diff --git a/languages/de.json b/languages/de.json index f8b93c0..fbb6e08 100644 --- a/languages/de.json +++ b/languages/de.json @@ -11,6 +11,7 @@ "general.close": "Schließen", "general.retry": "Erneut versuchen", "general.copy": "Kopieren", + "general.copyAll": "Alles kopieren", "general.cut": "Ausschneiden", "general.paste": "Einfügen", "general.selectAll": "Alles auswählen", diff --git a/src/main/shared/config/DefaultLanguage.config.ts b/src/main/shared/config/DefaultLanguage.config.ts index eaaa816..298e5f4 100644 --- a/src/main/shared/config/DefaultLanguage.config.ts +++ b/src/main/shared/config/DefaultLanguage.config.ts @@ -9,6 +9,7 @@ const ENGLISH_STRINGS = { 'general.close': 'Close', 'general.retry': 'Retry', 'general.copy': 'Copy', + 'general.copyAll': 'Copy All', 'general.cut': 'Cut', 'general.paste': 'Paste', 'general.selectAll': 'Select All', diff --git a/src/renderer/components/console/ConsoleTab.tsx b/src/renderer/components/console/ConsoleTab.tsx index c2a3c26..51038bf 100644 --- a/src/renderer/components/console/ConsoleTab.tsx +++ b/src/renderer/components/console/ConsoleTab.tsx @@ -11,6 +11,7 @@ import { VscClose, VscFolderOpened, VscClearAll, + VscCopy, } from 'react-icons/vsc'; import { ConsoleLine } from '../../../main/shared/types/Process.types'; import { hasJarConfigured } from '../../../main/shared/types/Profile.types'; @@ -237,10 +238,12 @@ export function ConsoleTab() { ? [ { label: t('console.copyLine'), + icon: , onClick: () => navigator.clipboard.writeText(lineCtxMenu.text), }, { label: t('console.copyAll'), + icon: , onClick: () => navigator.clipboard.writeText(lines.map((l) => l.text).join('\n')), }, ] diff --git a/src/renderer/components/developer/DevApiExplorer.tsx b/src/renderer/components/developer/DevApiExplorer.tsx index e1de830..1a7f22f 100644 --- a/src/renderer/components/developer/DevApiExplorer.tsx +++ b/src/renderer/components/developer/DevApiExplorer.tsx @@ -2,6 +2,7 @@ import React, { useState, useCallback } from 'react'; import { VscCheck, VscCopy, VscPlay, VscEdit, VscCode } from 'react-icons/vsc'; import { routeConfig, REST_API_CONFIG } from '../../../main/shared/config/API.config'; import { useApp } from '../../AppProvider'; +import { useTranslation } from '../../i18n/I18nProvider'; import { Button } from '../common/Button'; import { ContextMenu, ContextMenuItem } from '../common/ContextMenu'; import { RouteDefinition } from '../../..//main/shared/types/RestAPI.types'; @@ -104,6 +105,7 @@ function JsonHighlight({ text }: { text: string }) { export function DevApiExplorer() { const { state } = useApp(); + const { t } = useTranslation(); const [selected, setSelected] = useState(null); const [pathParams, setPathParams] = useState>({}); const [body, setBody] = useState(''); @@ -182,7 +184,7 @@ export function DevApiExplorer() { y: e.clientY, items: [ { - label: 'Copy', + label: t('general.copy'), icon: , disabled: !sel, onClick: () => navigator.clipboard.writeText(sel), @@ -198,7 +200,7 @@ export function DevApiExplorer() { ? [ { type: 'separator' }, { - label: 'Copy all', + label: t('general.copyAll'), icon: , onClick: () => navigator.clipboard.writeText(response), }, diff --git a/src/renderer/components/profiles/LogsTab.tsx b/src/renderer/components/profiles/LogsTab.tsx index c054efa..142e870 100644 --- a/src/renderer/components/profiles/LogsTab.tsx +++ b/src/renderer/components/profiles/LogsTab.tsx @@ -215,14 +215,14 @@ export function LogsTab() { onClose={() => setLogCtxMenu(null)} items={[ { - label: 'Copy', + label: t('general.copy'), icon: , disabled: !logCtxMenu.sel, onClick: () => navigator.clipboard.writeText(logCtxMenu.sel), }, { type: 'separator' }, { - label: 'Copy all', + label: t('general.copyAll'), icon: , onClick: () => navigator.clipboard.writeText(logContent), }, diff --git a/src/renderer/components/profiles/jar/StaticJarPicker.tsx b/src/renderer/components/profiles/jar/StaticJarPicker.tsx index e32c07e..e079780 100644 --- a/src/renderer/components/profiles/jar/StaticJarPicker.tsx +++ b/src/renderer/components/profiles/jar/StaticJarPicker.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { Input } from '../../common/Input'; import { FolderBtn } from './FolderBtn'; import { useTranslation } from '../../../i18n/I18nProvider'; +import { useInputContextMenu } from '../../../hooks/useInputContextMenu'; interface Props { jarPath: string; @@ -11,15 +12,20 @@ interface Props { export function StaticJarPicker({ jarPath, onChange, onPick }: Props) { const { t } = useTranslation(); + const { onContextMenu, contextMenu } = useInputContextMenu(); return ( - onChange(e.target.value)} - placeholder={t('config.jarFilePlaceholder')} - hint={t('config.jarFileHint')} - rightElement={} - /> + <> + onChange(e.target.value)} + onContextMenu={onContextMenu} + placeholder={t('config.jarFilePlaceholder')} + hint={t('config.jarFileHint')} + rightElement={} + /> + {contextMenu} + ); }