From 731ec1da69263a3f62c5601e7bc6282222f27412 Mon Sep 17 00:00:00 2001
From: vlalx <143875984+vlalx@users.noreply.github.com>
Date: Sat, 17 May 2025 19:23:34 +0300
Subject: [PATCH] I18n app other (#24)
* New translation keys in en-US locale
* New translation keys in de-DE locale
* New translation keys in fr-FR locale
* New translation keys in it-IT locale
* New translation keys in pl-PL locale
* New translation keys in pt-PT locale
* New translation keys in tr-TR locale
* Add translation keys in app/invite, app/setup and other files
* Fix build
---------
Co-authored-by: Lokowitz
---
messages/de-DE.json | 30 ++++++++++++++++++-
messages/en-US.json | 30 ++++++++++++++++++-
messages/fr-FR.json | 30 ++++++++++++++++++-
messages/it-IT.json | 30 ++++++++++++++++++-
messages/pl-PL.json | 30 ++++++++++++++++++-
messages/pt-PT.json | 30 ++++++++++++++++++-
messages/tr-TR.json | 30 ++++++++++++++++++-
.../[orgId]/settings/sites/CreateSiteForm.tsx | 2 --
src/app/invite/InviteStatusCard.tsx | 6 ++--
src/app/invite/page.tsx | 19 +++++++-----
src/app/navigation.tsx | 1 +
src/app/not-found.tsx | 6 ++--
src/app/setup/layout.tsx | 1 +
13 files changed, 223 insertions(+), 22 deletions(-)
diff --git a/messages/de-DE.json b/messages/de-DE.json
index 24153a78..d710e14b 100644
--- a/messages/de-DE.json
+++ b/messages/de-DE.json
@@ -886,5 +886,33 @@
"idpConnectingToProcess": "Verbindung wird hergestellt...",
"idpConnectingToFinished": "Verbunden",
"idpErrorConnectingTo": "Es gab ein Problem bei der Verbindung zu {name}. Bitte kontaktieren Sie Ihren Administrator.",
- "idpErrorNotFound": "IdP nicht gefunden"
+ "idpErrorNotFound": "IdP nicht gefunden",
+ "expiresAt": "Läuft ab am",
+ "inviteInvalid": "Ungültige Einladung",
+ "inviteInvalidDescription": "Der Einladungslink ist ungültig.",
+ "inviteErrorWrongUser": "Einladung ist nicht für diesen Benutzer",
+ "inviteErrorUserNotExists": "Benutzer existiert nicht. Bitte erstelle zuerst ein Konto.",
+ "inviteErrorLoginRequired": "Du musst angemeldet sein, um eine Einladung anzunehmen",
+ "inviteErrorExpired": "Die Einladung ist möglicherweise abgelaufen",
+ "inviteErrorRevoked": "Die Einladung wurde möglicherweise widerrufen",
+ "inviteErrorTypo": "Es könnte ein Tippfehler im Einladungslink sein",
+ "pangolinSetup": "Einrichtung - Pangolin",
+ "orgNameRequired": "Organisationsname ist erforderlich",
+ "orgIdRequired": "Organisations-ID ist erforderlich",
+ "orgErrorCreate": "Beim Erstellen der Organisation ist ein Fehler aufgetreten",
+ "pageNotFound": "Seite nicht gefunden",
+ "pageNotFoundDescription": "Hoppla! Die gesuchte Seite existiert nicht.",
+ "overview": "Übersicht",
+ "home": "Startseite",
+ "sites": "Standorte",
+ "resources": "Ressourcen",
+ "accessControl": "Zugriffskontrolle",
+ "users": "Benutzer",
+ "roles": "Rollen",
+ "share": "Teilbare Links",
+ "settings": "Einstellungen",
+ "usersAll": "Alle Benutzer",
+ "idp": "Identitätsanbieter",
+ "license": "Lizenz",
+ "pangolinDashboard": "Dashboard - Pangolin"
}
diff --git a/messages/en-US.json b/messages/en-US.json
index 9fce5b9f..bd279447 100644
--- a/messages/en-US.json
+++ b/messages/en-US.json
@@ -886,5 +886,33 @@
"idpConnectingToProcess": "Connecting...",
"idpConnectingToFinished": "Connected",
"idpErrorConnectingTo": "There was a problem connecting to {name}. Please contact your administrator.",
- "idpErrorNotFound": "IdP not found"
+ "idpErrorNotFound": "IdP not found",
+ "expiresAt": "Expires At",
+ "inviteInvalid": "Invalid Invite",
+ "inviteInvalidDescription": "The invite link is invalid.",
+ "inviteErrorWrongUser": "Invite is not for this user",
+ "inviteErrorUserNotExists": "User does not exist. Please create an account first.",
+ "inviteErrorLoginRequired": "You must be logged in to accept an invite",
+ "inviteErrorExpired": "The invite may have expired",
+ "inviteErrorRevoked": "The invite might have been revoked",
+ "inviteErrorTypo": "There could be a typo in the invite link",
+ "pangolinSetup": "Setup - Pangolin",
+ "orgNameRequired": "Organization name is required",
+ "orgIdRequired": "Organization ID is required",
+ "orgErrorCreate": "An error occurred while creating org",
+ "pageNotFound": "Page Not Found",
+ "pageNotFoundDescription": "Oops! The page you're looking for doesn't exist.",
+ "overview": "Overview",
+ "home": "Home",
+ "sites": "Sites",
+ "resources": "Resources",
+ "accessControl": "Access Control",
+ "users": "Users",
+ "roles": "Roles",
+ "share": "Shareable Links",
+ "settings": "Settings",
+ "usersAll": "All Users",
+ "idp": "Identity Providers",
+ "license": "License",
+ "pangolinDashboard": "Dashboard - Pangolin"
}
diff --git a/messages/fr-FR.json b/messages/fr-FR.json
index ea8727b2..d1ced0f5 100644
--- a/messages/fr-FR.json
+++ b/messages/fr-FR.json
@@ -886,5 +886,33 @@
"idpConnectingToProcess": "Connexion...",
"idpConnectingToFinished": "Connecté",
"idpErrorConnectingTo": "Un problème est survenu lors de la connexion à {name}. Veuillez contacter votre administrateur.",
- "idpErrorNotFound": "IdP introuvable"
+ "idpErrorNotFound": "IdP introuvable",
+ "expiresAt": "Expire le",
+ "inviteInvalid": "Invitation invalide",
+ "inviteInvalidDescription": "Le lien d'invitation n'est pas valide.",
+ "inviteErrorWrongUser": "L'invitation n'est pas pour cet utilisateur",
+ "inviteErrorUserNotExists": "L'utilisateur n'existe pas. Veuillez d'abord créer un compte.",
+ "inviteErrorLoginRequired": "Vous devez être connecté pour accepter une invitation",
+ "inviteErrorExpired": "L'invitation a peut-être expiré",
+ "inviteErrorRevoked": "L'invitation a peut-être été révoquée",
+ "inviteErrorTypo": "Il pourrait y avoir une erreur de frappe dans le lien d'invitation",
+ "pangolinSetup": "Configuration - Pangolin",
+ "orgNameRequired": "Le nom de l'organisation est requis",
+ "orgIdRequired": "L'ID de l'organisation est requis",
+ "orgErrorCreate": "Une erreur s'est produite lors de la création de l'organisation",
+ "pageNotFound": "Page non trouvée",
+ "pageNotFoundDescription": "Oups! La page que vous recherchez n'existe pas.",
+ "overview": "Vue d'ensemble",
+ "home": "Accueil",
+ "sites": "Sites",
+ "resources": "Ressources",
+ "accessControl": "Contrôle d'accès",
+ "users": "Utilisateurs",
+ "roles": "Rôles",
+ "share": "Liens partageables",
+ "settings": "Paramètres",
+ "usersAll": "Tous les utilisateurs",
+ "idp": "Fournisseurs d'identité",
+ "license": "Licence",
+ "pangolinDashboard": "Tableau de bord - Pangolin"
}
diff --git a/messages/it-IT.json b/messages/it-IT.json
index 8099a8a8..c33cd9cd 100644
--- a/messages/it-IT.json
+++ b/messages/it-IT.json
@@ -886,5 +886,33 @@
"idpConnectingToProcess": "Connessione in corso...",
"idpConnectingToFinished": "Connesso",
"idpErrorConnectingTo": "Si è verificato un problema durante la connessione a {name}. Contatta il tuo amministratore.",
- "idpErrorNotFound": "IdP non trovato"
+ "idpErrorNotFound": "IdP non trovato",
+ "expiresAt": "Scade Il",
+ "inviteInvalid": "Invito Non Valido",
+ "inviteInvalidDescription": "Il link di invito non è valido.",
+ "inviteErrorWrongUser": "L'invito non è per questo utente",
+ "inviteErrorUserNotExists": "L'utente non esiste. Si prega di creare prima un account.",
+ "inviteErrorLoginRequired": "Devi effettuare l'accesso per accettare un invito",
+ "inviteErrorExpired": "L'invito potrebbe essere scaduto",
+ "inviteErrorRevoked": "L'invito potrebbe essere stato revocato",
+ "inviteErrorTypo": "Potrebbe esserci un errore di battitura nel link di invito",
+ "pangolinSetup": "Configurazione - Pangolin",
+ "orgNameRequired": "Il nome dell'organizzazione è obbligatorio",
+ "orgIdRequired": "L'ID dell'organizzazione è obbligatorio",
+ "orgErrorCreate": "Si è verificato un errore durante la creazione dell'organizzazione",
+ "pageNotFound": "Pagina Non Trovata",
+ "pageNotFoundDescription": "Oops! La pagina che stai cercando non esiste.",
+ "overview": "Panoramica",
+ "home": "Home",
+ "sites": "Siti",
+ "resources": "Risorse",
+ "accessControl": "Controllo Accessi",
+ "users": "Utenti",
+ "roles": "Ruoli",
+ "share": "Link Condivisibili",
+ "settings": "Impostazioni",
+ "usersAll": "Tutti Gli Utenti",
+ "idp": "Provider Di Identità",
+ "license": "Licenza",
+ "pangolinDashboard": "Dashboard - Pangolin"
}
diff --git a/messages/pl-PL.json b/messages/pl-PL.json
index b0dba5cb..0336f120 100644
--- a/messages/pl-PL.json
+++ b/messages/pl-PL.json
@@ -886,5 +886,33 @@
"idpConnectingToProcess": "Łączenie...",
"idpConnectingToFinished": "Połączono",
"idpErrorConnectingTo": "Wystąpił problem z połączeniem z {name}. Skontaktuj się z administratorem.",
- "idpErrorNotFound": "Nie znaleziono IdP"
+ "idpErrorNotFound": "Nie znaleziono IdP",
+ "expiresAt": "Wygasa w dniu",
+ "inviteInvalid": "Nieprawidłowe zaproszenie",
+ "inviteInvalidDescription": "Link zapraszający jest nieprawidłowy.",
+ "inviteErrorWrongUser": "Zaproszenie nie jest dla tego użytkownika",
+ "inviteErrorUserNotExists": "Użytkownik nie istnieje. Najpierw utwórz konto.",
+ "inviteErrorLoginRequired": "Musisz być zalogowany, aby zaakceptować zaproszenie",
+ "inviteErrorExpired": "Zaproszenie mogło wygasnąć",
+ "inviteErrorRevoked": "Zaproszenie mogło zostać odwołane",
+ "inviteErrorTypo": "W linku zapraszającym może być literówka",
+ "pangolinSetup": "Konfiguracja - Pangolin",
+ "orgNameRequired": "Nazwa organizacji jest wymagana",
+ "orgIdRequired": "ID organizacji jest wymagane",
+ "orgErrorCreate": "Wystąpił błąd podczas tworzenia organizacji",
+ "pageNotFound": "Nie znaleziono strony",
+ "pageNotFoundDescription": "Ups! Strona, której szukasz, nie istnieje.",
+ "overview": "Przegląd",
+ "home": "Strona główna",
+ "sites": "Witryny",
+ "resources": "Zasoby",
+ "accessControl": "Kontrola dostępu",
+ "users": "Użytkownicy",
+ "roles": "Role",
+ "share": "Linki do udostępniania",
+ "settings": "Ustawienia",
+ "usersAll": "Wszyscy użytkownicy",
+ "idp": "Dostawcy tożsamości",
+ "license": "Licencja",
+ "pangolinDashboard": "Panel - Pangolin"
}
diff --git a/messages/pt-PT.json b/messages/pt-PT.json
index 1192b3af..c35487e1 100644
--- a/messages/pt-PT.json
+++ b/messages/pt-PT.json
@@ -886,5 +886,33 @@
"idpConnectingToProcess": "A conectar...",
"idpConnectingToFinished": "Conectado",
"idpErrorConnectingTo": "Ocorreu um problema ao ligar a {name}. Por favor, contacte o seu administrador.",
- "idpErrorNotFound": "IdP não encontrado"
+ "idpErrorNotFound": "IdP não encontrado",
+ "expiresAt": "Expira em",
+ "inviteInvalid": "Convite Inválido",
+ "inviteInvalidDescription": "O link do convite é inválido.",
+ "inviteErrorWrongUser": "O convite não é para este usuário",
+ "inviteErrorUserNotExists": "O usuário não existe. Por favor, crie uma conta primeiro.",
+ "inviteErrorLoginRequired": "Você deve estar logado para aceitar um convite",
+ "inviteErrorExpired": "O convite pode ter expirado",
+ "inviteErrorRevoked": "O convite pode ter sido revogado",
+ "inviteErrorTypo": "Pode haver um erro de digitação no link do convite",
+ "pangolinSetup": "Configuração - Pangolin",
+ "orgNameRequired": "O nome da organização é obrigatório",
+ "orgIdRequired": "O ID da organização é obrigatório",
+ "orgErrorCreate": "Ocorreu um erro ao criar a organização",
+ "pageNotFound": "Página Não Encontrada",
+ "pageNotFoundDescription": "Ops! A página que você está procurando não existe.",
+ "overview": "Visão Geral",
+ "home": "Início",
+ "sites": "Sites",
+ "resources": "Recursos",
+ "accessControl": "Controle de Acesso",
+ "users": "Usuários",
+ "roles": "Funções",
+ "share": "Links Compartilháveis",
+ "settings": "Configurações",
+ "usersAll": "Todos os Usuários",
+ "idp": "Provedores de Identidade",
+ "license": "Licença",
+ "pangolinDashboard": "Painel - Pangolin"
}
diff --git a/messages/tr-TR.json b/messages/tr-TR.json
index 9fce5b9f..bd279447 100644
--- a/messages/tr-TR.json
+++ b/messages/tr-TR.json
@@ -886,5 +886,33 @@
"idpConnectingToProcess": "Connecting...",
"idpConnectingToFinished": "Connected",
"idpErrorConnectingTo": "There was a problem connecting to {name}. Please contact your administrator.",
- "idpErrorNotFound": "IdP not found"
+ "idpErrorNotFound": "IdP not found",
+ "expiresAt": "Expires At",
+ "inviteInvalid": "Invalid Invite",
+ "inviteInvalidDescription": "The invite link is invalid.",
+ "inviteErrorWrongUser": "Invite is not for this user",
+ "inviteErrorUserNotExists": "User does not exist. Please create an account first.",
+ "inviteErrorLoginRequired": "You must be logged in to accept an invite",
+ "inviteErrorExpired": "The invite may have expired",
+ "inviteErrorRevoked": "The invite might have been revoked",
+ "inviteErrorTypo": "There could be a typo in the invite link",
+ "pangolinSetup": "Setup - Pangolin",
+ "orgNameRequired": "Organization name is required",
+ "orgIdRequired": "Organization ID is required",
+ "orgErrorCreate": "An error occurred while creating org",
+ "pageNotFound": "Page Not Found",
+ "pageNotFoundDescription": "Oops! The page you're looking for doesn't exist.",
+ "overview": "Overview",
+ "home": "Home",
+ "sites": "Sites",
+ "resources": "Resources",
+ "accessControl": "Access Control",
+ "users": "Users",
+ "roles": "Roles",
+ "share": "Shareable Links",
+ "settings": "Settings",
+ "usersAll": "All Users",
+ "idp": "Identity Providers",
+ "license": "License",
+ "pangolinDashboard": "Dashboard - Pangolin"
}
diff --git a/src/app/[orgId]/settings/sites/CreateSiteForm.tsx b/src/app/[orgId]/settings/sites/CreateSiteForm.tsx
index a045926b..91db2059 100644
--- a/src/app/[orgId]/settings/sites/CreateSiteForm.tsx
+++ b/src/app/[orgId]/settings/sites/CreateSiteForm.tsx
@@ -57,11 +57,9 @@ const createSiteFormSchema = z.object({
.string()
.min(2, {
message: "Name must be at least 2 characters."
- message: "Name must be at least 2 characters."
})
.max(30, {
message: "Name must not be longer than 30 characters."
- message: "Name must not be longer than 30 characters."
}),
method: z.enum(["wireguard", "newt", "local"])
});
diff --git a/src/app/invite/InviteStatusCard.tsx b/src/app/invite/InviteStatusCard.tsx
index 1eee0174..c2c757c6 100644
--- a/src/app/invite/InviteStatusCard.tsx
+++ b/src/app/invite/InviteStatusCard.tsx
@@ -45,9 +45,9 @@ export default function InviteStatusCard({
{t('inviteErrorNotValid')}
- - The invite may have expired
- - The invite might have been revoked
- - There could be a typo in the invite link
+ - {t('inviteErrorExpired')}
+ - {t('inviteErrorRevoked')}
+ - {t('inviteErrorTypo')}
);
diff --git a/src/app/invite/page.tsx b/src/app/invite/page.tsx
index b105c0b1..5ba30dd8 100644
--- a/src/app/invite/page.tsx
+++ b/src/app/invite/page.tsx
@@ -5,7 +5,10 @@ import { AcceptInviteResponse } from "@server/routers/user";
import { AxiosResponse } from "axios";
import { redirect } from "next/navigation";
import InviteStatusCard from "./InviteStatusCard";
-import { formatAxiosError } from "@app/lib/api";;
+import { formatAxiosError } from "@app/lib/api";
+import { useTranslations } from "next-intl";
+
+;
export default async function InvitePage(props: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
@@ -20,12 +23,14 @@ export default async function InvitePage(props: {
const user = await verifySession();
+ const t = useTranslations();
+
const parts = tokenParam.split("-");
if (parts.length !== 2) {
return (
<>
- Invalid Invite
- The invite link is invalid.
+ {t('inviteInvalid')}
+ {t('inviteInvalidDescription')}
>
);
}
@@ -52,15 +57,13 @@ export default async function InvitePage(props: {
}
function cardType() {
- if (error.includes("Invite is not for this user")) {
+ if (error.includes(t('inviteErrorWrongUser'))) {
return "wrong_user";
} else if (
- error.includes(
- "User does not exist. Please create an account first."
- )
+ error.includes(t('inviteErrorUserNotExists'))
) {
return "user_does_not_exist";
- } else if (error.includes("You must be logged in to accept an invite")) {
+ } else if (error.includes(t('inviteErrorLoginRequired'))) {
return "not_logged_in";
} else {
return "rejected";
diff --git a/src/app/navigation.tsx b/src/app/navigation.tsx
index 8ea3c080..7ee9ec75 100644
--- a/src/app/navigation.tsx
+++ b/src/app/navigation.tsx
@@ -10,6 +10,7 @@ import {
KeyRound,
TicketCheck
} from "lucide-react";
+import { useTranslations } from "next-intl";
export const orgLangingNavItems: SidebarNavItem[] = [
{
diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx
index cb831311..a1cd6103 100644
--- a/src/app/not-found.tsx
+++ b/src/app/not-found.tsx
@@ -1,14 +1,16 @@
import Link from "next/link";
+import { useTranslations } from "next-intl";
export default async function NotFound() {
+ const t = useTranslations();
return (
404
- Page Not Found
+ {t('pageNotFound')}
- Oops! The page you're looking for doesn't exist.
+ {t('pageNotFoundDescription')}
);
diff --git a/src/app/setup/layout.tsx b/src/app/setup/layout.tsx
index e254037d..6b1b80e3 100644
--- a/src/app/setup/layout.tsx
+++ b/src/app/setup/layout.tsx
@@ -11,6 +11,7 @@ import { ListUserOrgsResponse } from "@server/routers/org";
import { internal } from "@app/lib/api";
import { AxiosResponse } from "axios";
import { authCookieHeader } from "@app/lib/api/cookies";
+import { useTranslations } from "next-intl";
export const metadata: Metadata = {
title: `Setup - Pangolin`,