From d88fc132cc2c84cefaa35d339d16d4dec0aa3eb4 Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 14:58:41 +0300 Subject: [PATCH 1/9] New translation keys in en-US locale --- messages/en-US.json | 1 + 1 file changed, 1 insertion(+) diff --git a/messages/en-US.json b/messages/en-US.json index 09838cc8..ecaef172 100644 --- a/messages/en-US.json +++ b/messages/en-US.json @@ -286,6 +286,7 @@ "apiKeysDelete": "Delete API Key", "apiKeysManage": "Manage API Keys", "apiKeysDescription": "API keys are used to authenticate with the integration API", + "apiKeysSettings": "{apiKeyName} Settings", "userTitle": "Manage All Users", "userDescription": "View and manage all users in the system", "userAbount": "About User Management", From 3dba4aa36dad2cb5ef3d9df74926d5c9de8b9646 Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 14:59:11 +0300 Subject: [PATCH 2/9] New translation keys in de-DE locale --- messages/de-DE.json | 1 + 1 file changed, 1 insertion(+) diff --git a/messages/de-DE.json b/messages/de-DE.json index 08f6834e..aa41476f 100644 --- a/messages/de-DE.json +++ b/messages/de-DE.json @@ -286,6 +286,7 @@ "apiKeysDelete": "API-Schlüssel löschen", "apiKeysManage": "API-Schlüssel verwalten", "apiKeysDescription": "API-Schlüssel werden zur Authentifizierung mit der Integrations-API verwendet", + "apiKeysSettings": "{apiKeyName} Einstellungen", "userTitle": "Alle Benutzer verwalten", "userDescription": "Alle Benutzer im System anzeigen und verwalten", "userAbount": "Über Benutzerverwaltung", From 58c12996f144e96fb6031925983d0670d7875c53 Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 14:59:24 +0300 Subject: [PATCH 3/9] New translation keys in fr-FR locale --- messages/fr-FR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/messages/fr-FR.json b/messages/fr-FR.json index 355abe52..3d879f33 100644 --- a/messages/fr-FR.json +++ b/messages/fr-FR.json @@ -286,6 +286,7 @@ "apiKeysDelete": "Supprimer la clé API", "apiKeysManage": "Gérer les clés API", "apiKeysDescription": "Les clés API sont utilisées pour s'authentifier avec l'API d'intégration", + "apiKeysSettings": "Paramètres de {apiKeyName}", "userTitle": "Gérer tous les utilisateurs", "userDescription": "Voir et gérer tous les utilisateurs du système", "userAbount": "À propos de la gestion des utilisateurs", From 31d54eb63cfbd668c3f6aed0d32448ddb085ec1d Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 14:59:41 +0300 Subject: [PATCH 4/9] New translation keys in it-IT locale --- messages/it-IT.json | 1 + 1 file changed, 1 insertion(+) diff --git a/messages/it-IT.json b/messages/it-IT.json index 5f54fe18..9e42af9d 100644 --- a/messages/it-IT.json +++ b/messages/it-IT.json @@ -286,6 +286,7 @@ "apiKeysDelete": "Elimina Chiave API", "apiKeysManage": "Gestisci Chiavi API", "apiKeysDescription": "Le chiavi API sono utilizzate per autenticarsi con l'API di integrazione", + "apiKeysSettings": "Impostazioni {apiKeyName}", "userTitle": "Gestisci Tutti Gli Utenti", "userDescription": "Visualizza e gestisci tutti gli utenti del sistema", "userAbount": "Informazioni Sulla Gestione Utente", From 99352aa2a9e67179e1f54266642dbe524d2b6442 Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 14:59:52 +0300 Subject: [PATCH 5/9] New translation keys in pl-PL locale --- messages/pl-PL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/messages/pl-PL.json b/messages/pl-PL.json index 630b88cf..6b538257 100644 --- a/messages/pl-PL.json +++ b/messages/pl-PL.json @@ -286,6 +286,7 @@ "apiKeysDelete": "Usuń klucz API", "apiKeysManage": "Zarządzaj kluczami API", "apiKeysDescription": "Klucze API służą do uwierzytelniania z API integracji", + "apiKeysSettings": "Ustawienia {apiKeyName}", "userTitle": "Zarządzaj wszystkimi użytkownikami", "userDescription": "Zobacz i zarządzaj wszystkimi użytkownikami w systemie", "userAbount": "O zarządzaniu użytkownikami", From bb7421c54e93eabcc329f4c2ecd29c06f5bd68ce Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 15:00:07 +0300 Subject: [PATCH 6/9] New translation keys in pt-PT locale --- messages/pt-PT.json | 1 + 1 file changed, 1 insertion(+) diff --git a/messages/pt-PT.json b/messages/pt-PT.json index 1cee3d91..1f1d2da1 100644 --- a/messages/pt-PT.json +++ b/messages/pt-PT.json @@ -286,6 +286,7 @@ "apiKeysDelete": "Excluir Chave API", "apiKeysManage": "Gerenciar Chaves API", "apiKeysDescription": "As chaves API são usadas para autenticar com a API de integração", + "apiKeysSettings": "Configurações de {apiKeyName}", "userTitle": "Gerenciar Todos os Usuários", "userDescription": "Visualizar e gerenciar todos os usuários no sistema", "userAbount": "Sobre a Gestão de Usuário", From 1ee8561e2ab211d5ddfc144179ee5e6073c085af Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 15:00:21 +0300 Subject: [PATCH 7/9] New translation keys in tr-TR locale --- messages/tr-TR.json | 1 + 1 file changed, 1 insertion(+) diff --git a/messages/tr-TR.json b/messages/tr-TR.json index 09838cc8..ecaef172 100644 --- a/messages/tr-TR.json +++ b/messages/tr-TR.json @@ -286,6 +286,7 @@ "apiKeysDelete": "Delete API Key", "apiKeysManage": "Manage API Keys", "apiKeysDescription": "API keys are used to authenticate with the integration API", + "apiKeysSettings": "{apiKeyName} Settings", "userTitle": "Manage All Users", "userDescription": "View and manage all users in the system", "userAbount": "About User Management", From d994a8100d832dfec42d910d58a8b4565a1f7d85 Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 15:01:12 +0300 Subject: [PATCH 8/9] Add missed translation keys in settings/api-keys --- src/app/[orgId]/settings/api-keys/OrgApiKeysTable.tsx | 2 +- src/app/[orgId]/settings/api-keys/[apiKeyId]/layout.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/[orgId]/settings/api-keys/OrgApiKeysTable.tsx b/src/app/[orgId]/settings/api-keys/OrgApiKeysTable.tsx index b26bc622..d8372fe1 100644 --- a/src/app/[orgId]/settings/api-keys/OrgApiKeysTable.tsx +++ b/src/app/[orgId]/settings/api-keys/OrgApiKeysTable.tsx @@ -101,7 +101,7 @@ export default function OrgApiKeysTable({ setIsDeleteModalOpen(true); }} > - Delete + {t('delete')} diff --git a/src/app/[orgId]/settings/api-keys/[apiKeyId]/layout.tsx b/src/app/[orgId]/settings/api-keys/[apiKeyId]/layout.tsx index 79b28dfd..b4336782 100644 --- a/src/app/[orgId]/settings/api-keys/[apiKeyId]/layout.tsx +++ b/src/app/[orgId]/settings/api-keys/[apiKeyId]/layout.tsx @@ -55,7 +55,7 @@ export default async function SettingsLayout(props: SettingsLayoutProps) { return ( <> - + {children} From 8242a66b976d007e221fd7a964d1a56829a29240 Mon Sep 17 00:00:00 2001 From: vlalx <143875984+vlalx@users.noreply.github.com> Date: Tue, 6 May 2025 15:01:29 +0300 Subject: [PATCH 9/9] Add translation keys in admin/api-keys --- src/app/admin/api-keys/ApiKeysDataTable.tsx | 9 ++-- src/app/admin/api-keys/ApiKeysTable.tsx | 30 +++++------ src/app/admin/api-keys/[apiKeyId]/layout.tsx | 7 ++- .../api-keys/[apiKeyId]/permissions/page.tsx | 21 ++++---- src/app/admin/api-keys/create/page.tsx | 50 +++++++++---------- src/app/admin/api-keys/page.tsx | 6 ++- 6 files changed, 67 insertions(+), 56 deletions(-) diff --git a/src/app/admin/api-keys/ApiKeysDataTable.tsx b/src/app/admin/api-keys/ApiKeysDataTable.tsx index f65949a4..35986b5d 100644 --- a/src/app/admin/api-keys/ApiKeysDataTable.tsx +++ b/src/app/admin/api-keys/ApiKeysDataTable.tsx @@ -32,6 +32,7 @@ import { Input } from "@app/components/ui/input"; import { DataTablePagination } from "@app/components/DataTablePagination"; import { Plus, Search } from "lucide-react"; import { DataTable } from "@app/components/ui/data-table"; +import { useTranslations } from "next-intl"; interface DataTableProps { columns: ColumnDef[]; @@ -44,15 +45,17 @@ export function ApiKeysDataTable({ columns, data }: DataTableProps) { + + const t = useTranslations(); return ( ); } diff --git a/src/app/admin/api-keys/ApiKeysTable.tsx b/src/app/admin/api-keys/ApiKeysTable.tsx index c44d43f3..133b890b 100644 --- a/src/app/admin/api-keys/ApiKeysTable.tsx +++ b/src/app/admin/api-keys/ApiKeysTable.tsx @@ -24,6 +24,7 @@ import { createApiClient } from "@app/lib/api"; import { useEnvContext } from "@app/hooks/useEnvContext"; import moment from "moment"; import { ApiKeysDataTable } from "./ApiKeysDataTable"; +import { useTranslations } from "next-intl"; export type ApiKeyRow = { id: string; @@ -45,14 +46,16 @@ export default function ApiKeysTable({ apiKeys }: ApiKeyTableProps) { const api = createApiClient(useEnvContext()); + const t = useTranslations(); + const deleteSite = (apiKeyId: string) => { api.delete(`/api-key/${apiKeyId}`) .catch((e) => { - console.error("Error deleting API key", e); + console.error(t('apiKeysErrorDelete'), e); toast({ variant: "destructive", - title: "Error deleting API key", - description: formatAxiosError(e, "Error deleting API key") + title: t('apiKeysErrorDelete'), + description: formatAxiosError(e, t('apiKeysErrorDeleteMessage')) }); }) .then(() => { @@ -86,7 +89,7 @@ export default function ApiKeysTable({ apiKeys }: ApiKeyTableProps) { setSelected(apiKeyROw); }} > - View settings + {t('viewSettings')} { @@ -94,7 +97,7 @@ export default function ApiKeysTable({ apiKeys }: ApiKeyTableProps) { setIsDeleteModalOpen(true); }} > - Delete + {t('delete')} @@ -111,7 +114,7 @@ export default function ApiKeysTable({ apiKeys }: ApiKeyTableProps) { column.toggleSorting(column.getIsSorted() === "asc") } > - Name + {t('name')} ); @@ -141,7 +144,7 @@ export default function ApiKeysTable({ apiKeys }: ApiKeyTableProps) {
@@ -163,27 +166,24 @@ export default function ApiKeysTable({ apiKeys }: ApiKeyTableProps) { dialog={

- Are you sure you want to remove the API key{" "} - {selected?.name || selected?.id}? + {t('apiKeysQuestionRemove', {selectedApiKey: selected?.name || selected?.id})}

- Once removed, the API key will no longer be - able to be used. + {t('apiKeysMessageRemove')}

- To confirm, please type the name of the API key - below. + {t('apiKeysMessageConfirm')}

} - buttonText="Confirm Delete API Key" + buttonText={t('apiKeysDeleteConfirm')} onConfirm={async () => deleteSite(selected!.id)} string={selected.name} - title="Delete API Key" + title={t('apiKeysDelete')} /> )} diff --git a/src/app/admin/api-keys/[apiKeyId]/layout.tsx b/src/app/admin/api-keys/[apiKeyId]/layout.tsx index be3147ea..3354b435 100644 --- a/src/app/admin/api-keys/[apiKeyId]/layout.tsx +++ b/src/app/admin/api-keys/[apiKeyId]/layout.tsx @@ -20,6 +20,7 @@ import { import { GetApiKeyResponse } from "@server/routers/apiKeys"; import ApiKeyProvider from "@app/providers/ApiKeyProvider"; import { HorizontalTabs } from "@app/components/HorizontalTabs"; +import { useTranslations } from "next-intl"; interface SettingsLayoutProps { children: React.ReactNode; @@ -29,6 +30,8 @@ interface SettingsLayoutProps { export default async function SettingsLayout(props: SettingsLayoutProps) { const params = await props.params; + const t = useTranslations(); + const { children } = props; let apiKey = null; @@ -45,14 +48,14 @@ export default async function SettingsLayout(props: SettingsLayoutProps) { const navItems = [ { - title: "Permissions", + title: t('apiKeysPermissionsTitle'), href: "/admin/api-keys/{apiKeyId}/permissions" } ]; return ( <> - + {children} diff --git a/src/app/admin/api-keys/[apiKeyId]/permissions/page.tsx b/src/app/admin/api-keys/[apiKeyId]/permissions/page.tsx index c468c139..46d192ec 100644 --- a/src/app/admin/api-keys/[apiKeyId]/permissions/page.tsx +++ b/src/app/admin/api-keys/[apiKeyId]/permissions/page.tsx @@ -23,12 +23,15 @@ import { ListApiKeyActionsResponse } from "@server/routers/apiKeys"; import { AxiosResponse } from "axios"; import { useParams } from "next/navigation"; import { useEffect, useState } from "react"; +import { useTranslations } from "next-intl"; export default function Page() { const { env } = useEnvContext(); const api = createApiClient({ env }); const { apiKeyId } = useParams(); + const t = useTranslations(); + const [loadingPage, setLoadingPage] = useState(true); const [selectedPermissions, setSelectedPermissions] = useState< Record @@ -47,10 +50,10 @@ export default function Page() { .catch((e) => { toast({ variant: "destructive", - title: "Error loading API key actions", + title: t('apiKeysPermissionsErrorLoadingActions'), description: formatAxiosError( e, - "Error loading API key actions" + t('apiKeysPermissionsErrorLoadingActions') ) }); }); @@ -81,18 +84,18 @@ export default function Page() { ) }) .catch((e) => { - console.error("Error setting permissions", e); + console.error(t('apiKeysPermissionsErrorUpdate'), e); toast({ variant: "destructive", - title: "Error setting permissions", + title: t('apiKeysPermissionsErrorUpdate'), description: formatAxiosError(e) }); }); if (actionsRes && actionsRes.status === 200) { toast({ - title: "Permissions updated", - description: "The permissions have been updated." + title: t('apiKeysPermissionsUpdated'), + description: t('apiKeysPermissionsUpdatedDescription') }); } @@ -106,10 +109,10 @@ export default function Page() { - Permissions + {t('apiKeysPermissionsTitle')} - Determine what this API key can do + {t('apiKeysPermissionsGeneralSettingsDescription')} @@ -127,7 +130,7 @@ export default function Page() { loading={loadingSavePermissions} disabled={loadingSavePermissions} > - Save Permissions + {t('apiKeysPermissionsSave')} diff --git a/src/app/admin/api-keys/create/page.tsx b/src/app/admin/api-keys/create/page.tsx index c76b1859..6bda9d16 100644 --- a/src/app/admin/api-keys/create/page.tsx +++ b/src/app/admin/api-keys/create/page.tsx @@ -59,15 +59,18 @@ import CopyToClipboard from "@app/components/CopyToClipboard"; import moment from "moment"; import CopyTextBox from "@app/components/CopyTextBox"; import PermissionsSelectBox from "@app/components/PermissionsSelectBox"; +import { useTranslations } from "next-intl"; + +const t = useTranslations(); const createFormSchema = z.object({ name: z .string() .min(2, { - message: "Name must be at least 2 characters." + message: t('apiKeysNameMin') }) .max(255, { - message: "Name must not be longer than 255 characters." + message: t('apiKeysNameMax') }) }); @@ -82,7 +85,7 @@ const copiedFormSchema = z return data.copied; }, { - message: "You must confirm that you have copied the API key.", + message: t('apiKeysConfirmCopy2'), path: ["copied"] } ); @@ -127,7 +130,7 @@ export default function Page() { .catch((e) => { toast({ variant: "destructive", - title: "Error creating API key", + title: t('apiKeysErrorCreate'), description: formatAxiosError(e) }); }); @@ -148,10 +151,10 @@ export default function Page() { ) }) .catch((e) => { - console.error("Error setting permissions", e); + console.error(t('apiKeysErrorSetPermission'), e); toast({ variant: "destructive", - title: "Error setting permissions", + title: t('apiKeysErrorSetPermission'), description: formatAxiosError(e) }); }); @@ -184,8 +187,8 @@ export default function Page() { <>
@@ -368,7 +368,7 @@ export default function Page() { router.push(`/admin/api-keys`); }} > - Cancel + {t('cancel')} )} {!apiKey && ( @@ -380,7 +380,7 @@ export default function Page() { form.handleSubmit(onSubmit)(); }} > - Generate + {t('generate')} )} @@ -391,7 +391,7 @@ export default function Page() { copiedForm.handleSubmit(onCopiedSubmit)(); }} > - Done + {t('done')} )}
diff --git a/src/app/admin/api-keys/page.tsx b/src/app/admin/api-keys/page.tsx index b4a00806..76929ec5 100644 --- a/src/app/admin/api-keys/page.tsx +++ b/src/app/admin/api-keys/page.tsx @@ -9,6 +9,7 @@ import { AxiosResponse } from "axios"; import SettingsSectionTitle from "@app/components/SettingsSectionTitle"; import { ListRootApiKeysResponse } from "@server/routers/apiKeys"; import ApiKeysTable, { ApiKeyRow } from "./ApiKeysTable"; +import { useTranslations } from "next-intl"; type ApiKeyPageProps = {}; @@ -16,6 +17,7 @@ export const dynamic = "force-dynamic"; export default async function ApiKeysPage(props: ApiKeyPageProps) { let apiKeys: ListRootApiKeysResponse["apiKeys"] = []; + const t = useTranslations(); try { const res = await internal.get>( `/api-keys`, @@ -36,8 +38,8 @@ export default async function ApiKeysPage(props: ApiKeyPageProps) { return ( <>