From bf03a6011b4fb7e23252217d744e1ed03a4f1aff Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.> Date: Thu, 4 Sep 2025 16:29:05 +0100 Subject: [PATCH] translations --- .claude/settings.local.json | 8 ++++- .../public/locales/en-GB/translation.json | 34 ++++++++++++++----- .../CertificateFilesSettings.tsx | 31 +++++++++++------ .../CertificateFormatSettings.tsx | 28 ++++++++++----- .../SignatureAppearanceSettings.tsx | 22 ++++++------ .../useManageSignaturesParameters.ts | 3 +- frontend/src/tools/ManageSignatures.tsx | 15 ++++---- 7 files changed, 94 insertions(+), 47 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 877d932ef..e3ec84cae 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -14,7 +14,13 @@ "Bash(node:*)", "Bash(npm run dev:*)", "Bash(sed:*)", - "Bash(npm run typecheck:*)" + "Bash(npm run typecheck:*)", + "Bash(echo:*)", + "Bash(keys=\"files.placeholder signMode.stepTitle certTypeStep.stepTitle certFiles.stepTitle appearance.stepTitle appearance.title appearance.invisible appearance.visible appearance.options.title sign.submit sign.results choosePrivateKey chooseCertificate chooseP12File choosePfxFile chooseJksFile password passwordOptional serverCertMessage reason location name showLogo pageNumber logoTitle noLogo\")", + "Bash(__NEW_LINE__ echo \"\")", + "Bash(for key in $keys)", + "Bash(do)", + "Bash(done)" ], "deny": [], "defaultMode": "acceptEdits" diff --git a/frontend/public/locales/en-GB/translation.json b/frontend/public/locales/en-GB/translation.json index c2e60dbd8..68be7add0 100644 --- a/frontend/public/locales/en-GB/translation.json +++ b/frontend/public/locales/en-GB/translation.json @@ -1396,26 +1396,27 @@ "location": "Location", "name": "Name", "showLogo": "Show Logo", - "submit": "Sign PDF" - }, - "manageSignatures": { - "tags": "sign,certificate,PEM,PKCS12,JKS,server,manual,auto", - "title": "Manage Signatures", - "header": "Sign PDFs with Certificates", + "submit": "Sign PDF", "files": { "placeholder": "Select PDF files to sign with certificates" }, "signMode": { "stepTitle": "Sign Mode" }, - "certType": { + "certTypeStep": { "stepTitle": "Certificate Format" }, "certFiles": { "stepTitle": "Certificate Files" }, "appearance": { - "stepTitle": "Signature Appearance" + "stepTitle": "Signature Appearance", + "title": "Signature Appearance", + "invisible": "Invisible", + "visible": "Visible", + "options": { + "title": "Signature Details" + } }, "sign": { "submit": "Sign PDF", @@ -1423,7 +1424,22 @@ }, "error": { "failed": "An error occurred whilst signing the PDF." - } + }, + "choosePrivateKey": "Choose Private Key File", + "chooseCertificate": "Choose Certificate File", + "chooseP12File": "Choose PKCS12 File", + "choosePfxFile": "Choose PFX File", + "chooseJksFile": "Choose JKS File", + "passwordOptional": "Leave empty if no password", + "serverCertMessage": "Using server certificate - no files or password required", + "pageNumber": "Page Number", + "logoTitle": "Logo", + "noLogo": "No Logo" + }, + "manageSignatures": { + "tags": "sign,certificate,PEM,PKCS12,JKS,server,manual,auto", + "title": "Manage Signatures", + "desc": "Sign PDFs with certificates using manual or server-managed keys" }, "removeCertSign": { "tags": "authenticate,PEM,P12,official,decrypt", diff --git a/frontend/src/components/tools/manageSignatures/CertificateFilesSettings.tsx b/frontend/src/components/tools/manageSignatures/CertificateFilesSettings.tsx index d35eb4487..598b2d833 100644 --- a/frontend/src/components/tools/manageSignatures/CertificateFilesSettings.tsx +++ b/frontend/src/components/tools/manageSignatures/CertificateFilesSettings.tsx @@ -20,17 +20,17 @@ const CertificateFilesSettings = ({ parameters, onParameterChange, disabled = fa onParameterChange('privateKeyFile', file || undefined)} - accept=".pem,.der" + accept=".pem,.der,.key" disabled={disabled} - placeholder={t('manageSignatures.signing.choosePrivateKey', 'Choose Private Key File')} + placeholder={t('certSign.choosePrivateKey', 'Choose Private Key File')} /> {parameters.privateKeyFile && ( onParameterChange('certFile', file || undefined)} - accept=".pem,.der" + accept=".pem,.der,.crt,.cer" disabled={disabled} - placeholder={t('manageSignatures.signing.chooseCertificate', 'Choose Certificate File')} + placeholder={t('certSign.chooseCertificate', 'Choose Certificate File')} /> )} @@ -40,9 +40,19 @@ const CertificateFilesSettings = ({ parameters, onParameterChange, disabled = fa onParameterChange('p12File', file || undefined)} - accept=".p12,.pfx" + accept=".p12" disabled={disabled} - placeholder={t('manageSignatures.signing.chooseP12File', 'Choose PKCS12 File')} + placeholder={t('certSign.chooseP12File', 'Choose PKCS12 File')} + /> + )} + + {parameters.certType === 'PFX' && ( + onParameterChange('p12File', file || undefined)} + accept=".pfx" + disabled={disabled} + placeholder={t('certSign.choosePfxFile', 'Choose PFX File')} /> )} @@ -52,13 +62,13 @@ const CertificateFilesSettings = ({ parameters, onParameterChange, disabled = fa onChange={(file) => onParameterChange('jksFile', file || undefined)} accept=".jks,.keystore" disabled={disabled} - placeholder={t('manageSignatures.signing.chooseJksFile', 'Choose JKS File')} + placeholder={t('certSign.chooseJksFile', 'Choose JKS File')} /> )} {parameters.certType === 'SERVER' && ( - {t('manageSignatures.signing.serverCertMessage', 'Using server certificate - no files or password required')} + {t('certSign.serverCertMessage', 'Using server certificate - no files or password required')} )} @@ -66,11 +76,12 @@ const CertificateFilesSettings = ({ parameters, onParameterChange, disabled = fa {parameters.certType && ( (parameters.certType === 'PEM' && parameters.privateKeyFile && parameters.certFile) || (parameters.certType === 'PKCS12' && parameters.p12File) || + (parameters.certType === 'PFX' && parameters.p12File) || (parameters.certType === 'JKS' && parameters.jksFile) ) && ( onParameterChange('password', event.currentTarget.value)} diff --git a/frontend/src/components/tools/manageSignatures/CertificateFormatSettings.tsx b/frontend/src/components/tools/manageSignatures/CertificateFormatSettings.tsx index 44643247b..2b345acf3 100644 --- a/frontend/src/components/tools/manageSignatures/CertificateFormatSettings.tsx +++ b/frontend/src/components/tools/manageSignatures/CertificateFormatSettings.tsx @@ -14,7 +14,7 @@ const CertificateFormatSettings = ({ parameters, onParameterChange, disabled = f return (
- {/* First row - PKCS#12 and PEM */} + {/* First row - PKCS#12 and PFX */}
+ +
+ {/* Second row - PEM and JKS */} +
-
- {/* Second row - JKS spanning full width */} -
- {parameters.certType === 'PKCS12' && "Upload a single .p12/.pfx file containing both certificate and private key"} - {parameters.certType === 'PEM' && "Upload separate certificate (.crt/.pem) and private key (.key/.pem) files"} + {parameters.certType === 'PKCS12' && "Upload a single .p12 file containing both certificate and private key"} + {parameters.certType === 'PFX' && "Upload a single .pfx file containing both certificate and private key"} + {parameters.certType === 'PEM' && "Upload separate certificate (.pem/.der/.crt/.cer) and private key (.pem/.der/.key) files"} {parameters.certType === 'JKS' && "Upload a Java KeyStore (.jks) file"} {!parameters.certType && "Choose the format of your certificate files"} diff --git a/frontend/src/components/tools/manageSignatures/SignatureAppearanceSettings.tsx b/frontend/src/components/tools/manageSignatures/SignatureAppearanceSettings.tsx index 501179608..2741c712d 100644 --- a/frontend/src/components/tools/manageSignatures/SignatureAppearanceSettings.tsx +++ b/frontend/src/components/tools/manageSignatures/SignatureAppearanceSettings.tsx @@ -16,7 +16,7 @@ const SignatureAppearanceSettings = ({ parameters, onParameterChange, disabled = {/* Signature Visibility */} - {t('manageSignatures.appearance.title', 'Signature Appearance')} + {t('certSign.appearance.title', 'Signature Appearance')}
@@ -48,28 +48,28 @@ const SignatureAppearanceSettings = ({ parameters, onParameterChange, disabled = {parameters.showSignature && ( - {t('manageSignatures.appearance.options.title', 'Signature Details')} + {t('certSign.appearance.options.title', 'Signature Details')} onParameterChange('reason', event.currentTarget.value)} disabled={disabled} /> onParameterChange('location', event.currentTarget.value)} disabled={disabled} /> onParameterChange('name', event.currentTarget.value)} disabled={disabled} /> onParameterChange('pageNumber', value || 1)} min={1} @@ -77,7 +77,7 @@ const SignatureAppearanceSettings = ({ parameters, onParameterChange, disabled = /> - {t('manageSignatures.signing.logoTitle', 'Logo')} + {t('certSign.logoTitle', 'Logo')}
diff --git a/frontend/src/hooks/tools/manageSignatures/useManageSignaturesParameters.ts b/frontend/src/hooks/tools/manageSignatures/useManageSignaturesParameters.ts index 8f6708531..70fa80c29 100644 --- a/frontend/src/hooks/tools/manageSignatures/useManageSignaturesParameters.ts +++ b/frontend/src/hooks/tools/manageSignatures/useManageSignaturesParameters.ts @@ -5,7 +5,7 @@ export interface ManageSignaturesParameters extends BaseParameters { // Sign mode selection signMode: 'MANUAL' | 'AUTO'; // Certificate signing options (only for manual mode) - certType: '' | 'PEM' | 'PKCS12' | 'JKS'; + certType: '' | 'PEM' | 'PKCS12' | 'PFX' | 'JKS'; privateKeyFile?: File; certFile?: File; p12File?: File; @@ -55,6 +55,7 @@ export const useManageSignaturesParameters = (): ManageSignaturesParametersHook case 'PEM': return !!(params.privateKeyFile && params.certFile); case 'PKCS12': + case 'PFX': return !!params.p12File; case 'JKS': return !!params.jksFile; diff --git a/frontend/src/tools/ManageSignatures.tsx b/frontend/src/tools/ManageSignatures.tsx index a39a3546d..8f0aee57f 100644 --- a/frontend/src/tools/ManageSignatures.tsx +++ b/frontend/src/tools/ManageSignatures.tsx @@ -38,6 +38,7 @@ const ManageSignatures = (props: BaseToolProps) => { case 'PEM': return !!(params.privateKeyFile && params.certFile); case 'PKCS12': + case 'PFX': return !!params.p12File; case 'JKS': return !!params.jksFile; @@ -51,11 +52,11 @@ const ManageSignatures = (props: BaseToolProps) => { files: { selectedFiles: base.selectedFiles, isCollapsed: base.hasResults, - placeholder: t("manageSignatures.files.placeholder", "Select PDF files to sign with certificates"), + placeholder: t("certSign.files.placeholder", "Select PDF files to sign with certificates"), }, steps: [ { - title: t("manageSignatures.signMode.stepTitle", "Sign Mode"), + title: t("certSign.signMode.stepTitle", "Sign Mode"), isCollapsed: base.settingsCollapsed, onCollapsedClick: base.settingsCollapsed ? base.handleSettingsReset : undefined, content: ( @@ -67,7 +68,7 @@ const ManageSignatures = (props: BaseToolProps) => { ), }, ...(base.params.parameters.signMode === 'MANUAL' ? [{ - title: t("manageSignatures.certType.stepTitle", "Certificate Format"), + title: t("certSign.certTypeStep.stepTitle", "Certificate Format"), isCollapsed: base.settingsCollapsed, onCollapsedClick: base.settingsCollapsed ? base.handleSettingsReset : undefined, tooltip: certTypeTips, @@ -80,7 +81,7 @@ const ManageSignatures = (props: BaseToolProps) => { ), }] : []), ...(base.params.parameters.signMode === 'MANUAL' ? [{ - title: t("manageSignatures.certFiles.stepTitle", "Certificate Files"), + title: t("certSign.certFiles.stepTitle", "Certificate Files"), isCollapsed: base.settingsCollapsed, onCollapsedClick: base.settingsCollapsed ? base.handleSettingsReset : undefined, content: ( @@ -92,7 +93,7 @@ const ManageSignatures = (props: BaseToolProps) => { ), }] : []), { - title: t("manageSignatures.appearance.stepTitle", "Signature Appearance"), + title: t("certSign.appearance.stepTitle", "Signature Appearance"), isCollapsed: base.settingsCollapsed || !areCertFilesConfigured(), onCollapsedClick: (base.settingsCollapsed || !areCertFilesConfigured()) ? base.handleSettingsReset : undefined, tooltip: appearanceTips, @@ -106,7 +107,7 @@ const ManageSignatures = (props: BaseToolProps) => { }, ], executeButton: { - text: t("manageSignatures.sign.submit", "Sign PDF"), + text: t("certSign.sign.submit", "Sign PDF"), isVisible: !base.hasResults, loadingText: t("loading"), onClick: base.handleExecute, @@ -115,7 +116,7 @@ const ManageSignatures = (props: BaseToolProps) => { review: { isVisible: base.hasResults, operation: base.operation, - title: t("manageSignatures.sign.results", "Signed PDF"), + title: t("certSign.sign.results", "Signed PDF"), onFileClick: base.handleThumbnailClick, onUndo: base.handleUndo, },