diff --git a/src/client/components/LanguageSelector.tsx b/src/client/components/LanguageSelector.tsx
index f81f4e4..9f3d4e4 100644
--- a/src/client/components/LanguageSelector.tsx
+++ b/src/client/components/LanguageSelector.tsx
@@ -34,6 +34,11 @@ export const LanguageSelector: React.FC = React.memo(() => {
key: 'jp',
itemIcon: ,
},
+ {
+ label: 'Português',
+ key: 'pt',
+ itemIcon: ,
+ },
{
label: 'Русский',
key: 'ru',
diff --git a/src/client/i18next-toolkit.config.cjs b/src/client/i18next-toolkit.config.cjs
index ce05a00..d1336de 100644
--- a/src/client/i18next-toolkit.config.cjs
+++ b/src/client/i18next-toolkit.config.cjs
@@ -1,6 +1,6 @@
/** @type {import('@i18next-toolkit/cli').I18nextToolkitConfig} */
const config = {
- locales: ['en', 'zh', 'jp', 'fr', 'de', 'ru'],
+ locales: ['en', 'zh', 'jp', 'fr', 'de', 'pt', 'ru'],
verbose: true,
translator: {
type: 'openai',
diff --git a/src/client/public/locales/pt/flag.png b/src/client/public/locales/pt/flag.png
new file mode 100644
index 0000000..d405996
Binary files /dev/null and b/src/client/public/locales/pt/flag.png differ
diff --git a/src/client/public/locales/pt/translation.json b/src/client/public/locales/pt/translation.json
new file mode 100644
index 0000000..cbc52e5
--- /dev/null
+++ b/src/client/public/locales/pt/translation.json
@@ -0,0 +1,269 @@
+{
+ "k10336b1": "Nada mais para carregar",
+ "k10c85f27": "Ignorar erro TLS",
+ "k112a7174": "Utilização",
+ "k1192dd43": "Por favor, seleccione a área de trabalho",
+ "k11e887ab": "É possível eliminar este item?",
+ "k11f09c87": "vistas",
+ "k1286421": "Nome de utilizador",
+ "k134e0d97": "Atual",
+ "k139b5f9a": "Mapa dos Visitantes",
+ "k14c6c425": "Resultado",
+ "k158336d6": "Tempo limite do pedido (s)",
+ "k1598e726": "visitante atual",
+ "k15ae36a6": "Navegador",
+ "k16c8909f": "Nome de apresentação",
+ "k172a09c3": "Sugestões",
+ "k1777bbf2": "Manual",
+ "k186365b3": "Gráfico de {{monitorName}}",
+ "k1964b988": "Parar",
+ "k1bd89236": "correr repórter com",
+ "k1c33c293": "Definições",
+ "k1eb5b3ed": "Visão geral",
+ "k20edf271": "24h",
+ "k21077124": "Editar",
+ "k2264aac": "Este ano",
+ "k246063be": "ID do chat",
+ "k2497052e": "Gráfico",
+ "k25b3dc00": "Código JS do script",
+ "k264de775": "A carregar mais...",
+ "k277e2626": "Disponível",
+ "k28059d49": "ID da área de trabalho atual",
+ "k2813d1f7": "Este mês",
+ "k2a6a7d8f": "DOWN",
+ "k2b2d40d4": "Código de teste",
+ "k2b463d4b": "Tem a certeza de que quer fazer isto?",
+ "k2c2712a4": "CPU",
+ "k2dad13e3": "Idioma",
+ "k2e6dbf02": "Para o e-mail",
+ "k2ea8a019": "Monitor",
+ "k30b5f01b": "Áreas de trabalho",
+ "k30e234ee": "Ainda não tem nenhum item no painel de controlo, entre no modo de edição e adicione o seu item",
+ "k310fee": "Últimos 30 dias",
+ "k32344f64": "Limpar dados",
+ "k3260f019": "Terminar sessão",
+ "k340547f0": "Desculpe, mas algo correu mal",
+ "k3471e956": "Repetir nova palavra-passe",
+ "k3542f88c": "Nome da telemetria: {{nome}} | eventos: {{num}}",
+ "k3834d1a6": "Adicionar página",
+ "k389db675": "Enviar",
+ "k38c62888": "Selecionar monitor",
+ "k3cedb797": "Segurança",
+ "k3d1822c5": "Confirmar ação",
+ "k3d3baf52": "tempo médio de visita",
+ "k3dbe79b1": "Apagar",
+ "k3de768a1": "Alterar palavra-passe",
+ "k3e757ddf": "Aqui ainda não há monitor",
+ "k3e8b13f8": "Aderir ao Discord",
+ "k3f36e17e": "Seguir o Twitter",
+ "k406e9ad8": "Confirmar",
+ "k42347b91": "Contagem de eventos do sítio Web",
+ "k42831fc1": "Adicionar Telemetria",
+ "k43e21ee9": "Descarregar Reportor de Cliente",
+ "k44186b66": "Contar",
+ "k44cad477": "(Atual)",
+ "k46f0adde": "Mapa de Visitantes",
+ "k47f43dbc": "Saúde de {{monitorName}}",
+ "k48186ce": "Voltar à página inicial",
+ "k4905ed7b": "NONE",
+ "k490ada32": "Adicionar sítio Web",
+ "k49e5f1d2": "1w",
+ "k4a369f75": "Elimina permanentemente os dados relevantes",
+ "k4ac4dd36": "Referenciadores",
+ "k4de48e75": "Máximo de tentativas",
+ "k4e08cf58": "Mostrar número de pormenor",
+ "k4eea9393": "Perfil",
+ "k4fe1b4de": "Telemetria",
+ "k506a90b2": "O domínio ou ip do seu servidor",
+ "k517747e1": "Últimas 24 horas",
+ "k51bac044": "Cancelar",
+ "k53ae02a5": "Novo",
+ "k542b527c": "Eventos",
+ "k56b4c80c": "Tema",
+ "k58267a45": "Tipo de Letra",
+ "k58f90514": "Token de Bot",
+ "k593cf342": "De certeza que eliminou este monitor?",
+ "k5a839f71": "Tempo de atividade",
+ "k5eb87a8b": "Início",
+ "k5ecf04b0": "Ver",
+ "k6067f0ff": "Ignorar erro TLS/SSL",
+ "k621317b5": "Nova página",
+ "k62e19375": "Última atualização em: {{date}}",
+ "k646a3a80": "Métricas de {{monitorName}}",
+ "k646c0ae2": "HDD",
+ "k67c5a895": "Ontem",
+ "k683be220": "Correr",
+ "k691b7170": "Parado",
+ "k6acf5248": "Recente",
+ "k6b36580f": "URL da empresa",
+ "k6bc9e414": "Iniciar sessão",
+ "k6ea11aff": "Obter!",
+ "k6f15bcc3": "Anfitrião",
+ "k717660a5": "RAM",
+ "k721589c1": "Hoje",
+ "k7350bd93": "Ao mesmo tempo, também podemos utilizá-lo em alguns cenários de aplicações do lado do cliente, como a recolha da frequência de utilização do cli, como a recolha da instalação de aplicações auto-hospedadas, etc.",
+ "k74a240": "Barra de Saúde",
+ "k75581e13": "CC",
+ "k75bfaaa6": "Adicionar este código ao script principal do seu sítio Web",
+ "k763816ac": "Pré-visualização",
+ "k784dd132": "Teste",
+ "k7927b824": "Tem a certeza de que pretende limpar todos os nós offline?",
+ "k7a132ce8": "Desculpe, mas esta página não foi encontrada",
+ "k7ac44a6e": "Chave de sessão",
+ "k7b74a43f": "visitantes",
+ "k7c95e6a5": "De certeza que eliminou esta página?",
+ "k7cac602a": "Estado",
+ "k7f01b47c": "Registo de auditoria",
+ "k7f4bcf6b": "Monitores",
+ "k8037cc6b": "Servidores",
+ "k8202c669": "Visitantes",
+ "k845abd5b": "Próximo passo",
+ "k84ce1618": "(24 horas)",
+ "k85344b23": "Carregar",
+ "k85c5fd4c": "Não foi definido qualquer monitor",
+ "k8746ec38": "Selecionar monitor",
+ "k887ae5cd": "Criar",
+ "k88a9bf01": "Mostrar crachá",
+ "k88d2647b": "Sítio Web",
+ "k89056082": "(30 dias)",
+ "k89d54f7a": "Contagem de Execução do Monitor",
+ "k8a44833f": "Serviços",
+ "k8bac6ae0": "6h",
+ "k8ef56a20": "Número máximo de tentativas antes de o serviço ser marcado como inativo e ser enviada uma notificação",
+ "k8f8fbf6": "Partilhar com...",
+ "k8ff3a55a": "Aviso",
+ "k9022468f": "Limpar offline",
+ "k90873752": "Palavra-passe antiga",
+ "k90a82c67": "Registar conta",
+ "k90b668e5": "Últimas 24 horas",
+ "k93374bc9": "Eliminar sítio Web",
+ "k951a939a": "Contagem de sites aceites",
+ "k97ddb155": "Mostrar resposta atual",
+ "k98f433ee": "Descarregar repórter de",
+ "k9991c290": "Comunidade",
+ "k9a272ecf": "Estes são os vossos servidores?",
+ "k9a3cc801": "Aceitar caracteres",
+ "k9add1fac": "Tráfego",
+ "k9be2209c": "Nome do sítio Web a apresentar",
+ "k9e32beea": "online",
+ "k9e759f8": "Lista de notificações",
+ "k9fa794aa": "Nome do sítio Web",
+ "ka0051b3d": "Domínio",
+ "ka0ddbfb": "Informações do sítio Web",
+ "ka2b9bc3c": "Período anterior",
+ "ka2fae1c6": "User Id",
+ "ka349cb17": "Não foram encontrados resultados",
+ "ka388d3bf": "Pode ligar um monitor que apresentará o estado de saúde na vista geral do sítio Web",
+ "ka3a22795": "Nome da Telemetria",
+ "ka40aea11": "Ou queres comunicar o estado do servidor no servidor Windows? muda para o separador Manual",
+ "ka44150a0": "Últimos 90 dias",
+ "ka68f2242": "Registar",
+ "ka6ee7455": "ID do sítio Web",
+ "ka71c12e1": "As duas palavras-passe não são consistentes",
+ "ka765ad32": "Notificação",
+ "ka8e41156": "Pesquisa e salto rápido",
+ "ka9d081ac": "Intervalo(s) de verificação",
+ "kaa0788e9": "Layout guardado com sucesso",
+ "kaa0ccaab": "De e-mail",
+ "kaadb73f3": "Luz",
+ "kab56db46": "Batimentos cardíacos",
+ "kab662431": "Caminho",
+ "kacbdae07": "Resposta média Resposta",
+ "kad9ea10d": "Confirmar a eliminação desta telemetria: [{{name}}]",
+ "kadef6c48": "Anterior {{label}}",
+ "kaf39be20": "Rede",
+ "kb01f4f95": "Concluído",
+ "kb0e351e0": "Atualizado",
+ "kb320aac4": "Monitorizado durante {{dayNum}} dias",
+ "kb35cde91": "Pesquisar",
+ "kb5673707": "Últimos 7 dias",
+ "kb659c1bc": "Exp. do certificado",
+ "kb8de8c50": "BCC",
+ "kbb31d3db": "Data da estatística",
+ "kbb4e12c5": "Escuro",
+ "kbb58c99c": "Eliminar com êxito",
+ "kbcf67f53": "Nova palavra-passe",
+ "kbd1e7dee": "Utilização: {{usage}}ms",
+ "kbd425e0e": "updatedAt",
+ "kc00cf2c7": "Isto mostra o resultado recente do seu monitor",
+ "kc0c6a913": "Nome do nó",
+ "kc1f1f6c9": "Tipo de notificação",
+ "kc45a417b": "SO",
+ "kc4910af7": "Alterar palavra-passe",
+ "kc4ab7848": "Limpar nó offline",
+ "kc4e91854": "Tem a certeza de que pretende apagar todos os batimentos cardíacos deste monitor?",
+ "kc5573507": "Adicionar",
+ "kc5f82d53": "Por exemplo: pushdeer://pushKey",
+ "kc6888ac4": "Auto",
+ "kc6cac621": "(Nenhum)",
+ "kc70d69ad": "Resposta",
+ "kc9b446d1": "Execução concluída",
+ "kcacbfde1": "Criar agora",
+ "kcaf5c873": "Acções",
+ "kcb8fd4ce": "Nenhum servidor online",
+ "kcbc00b39": "Seleccione o seu intervalo de datas",
+ "kcc3b034e": "Url",
+ "kcc50957": "Adicionar novo Monitor",
+ "kccaa732a": "Sem traços consecutivos",
+ "kccb42483": "Palavra-passe",
+ "kd031b383": "Vistas",
+ "kd1f7e695": "Confirmar para terminar a sessão",
+ "kd211e2d4": "Página de lançamentos",
+ "kd3262a4a": "Config",
+ "kd3396544": "Geralmente, utilizamos uma imagem em branco de um pixel para que não afecte a utilização normal do utilizador.",
+ "kd37efb26": "Notificações",
+ "kd46ab159": "Sem eventos",
+ "kd7279fa6": "Código",
+ "kd7985726": "{{num}} utilizadores",
+ "kd92fa3e7": "Nome do anfitrião",
+ "kdaa949e5": "Eventos de {{monitorName}}",
+ "kdb61adbb": "Ocultar offline",
+ "kdc51b5db": "Websites",
+ "kdd44ac01": "Nome de telemetria a apresentar",
+ "kdd55936a": "Porta do resolvedor",
+ "kde37bc27": "Voltar ao Administrador",
+ "kde657d5b": "Painel de controlo",
+ "kdeba7706": "Dispositivos",
+ "kdeecbfea": "Servidor de resolução",
+ "kdf5da1d2": "Nenhum / STARTTLS",
+ "kdf97690e": "Países",
+ "ke188f24b": "taxa de ressalto",
+ "ke1b5ca71": "Páginas",
+ "ke20a92c7": "Tipo de registo de recurso",
+ "ke2fe505b": "Esta semana",
+ "ke349bd66": "Confirmar a eliminação desta telemetria?",
+ "ke3a3f2f2": "Porto",
+ "ke46232fe": "Adicionar servidor",
+ "ke5b015e9": "Pode obter um token em https://t.me/BotFather.",
+ "ke6797c65": "Pode obter o seu ID de chat enviando uma mensagem para o bot e acedendo a este URL para ver o chat_id",
+ "ke9d2fef3": "Este mês",
+ "ke9dcaa64": "Não encontrei nenhuma notificação",
+ "kea954889": "Continuar",
+ "keaf7576f": "Título",
+ "ked37937b": "Métricas",
+ "ked7eea1a": "UP",
+ "ked8814bc": "Copiar",
+ "kedc69eb6": "Código de rastreio",
+ "kef701e50": "Adicionar Monitor",
+ "kefe27782": "A telemetria é uma tecnologia que reporta dados de acesso mesmo em páginas que não estão sob o seu controlo. Desde que o outro sítio Web permita a inserção de imagens de terceiros (por exemplo, fóruns, blogues e vários editores de texto rico), os dados podem ser recolhidos e utilizados para analisar as imagens quando estas são carregadas pelo utilizador.",
+ "kf19c917a": "Não existe nenhum sítio Web",
+ "kf1d60bfc": "À espera de receber pacote de relatórios",
+ "kf22813ad": "Personalizado",
+ "kf3b749ef": "ID de Chat Direto do Suporte / Grupo / Canal",
+ "kf55495e0": "Guardar",
+ "kf5bbb568": "'s visitor map",
+ "kf6bc1610": "Tipo de monitor",
+ "kf6db9ea5": "3h",
+ "kf7878d19": "Visão geral do sítio Web",
+ "kf7d5dbf8": "Ler mais",
+ "kf85b9b7d": "Introduzir um comando ou pesquisar...",
+ "kf8a5d26d": "Adicionar sítio Web agora",
+ "kf97b6f71": "Executar este comando na sua máquina linux",
+ "kf9877f28": "Ver detalhes",
+ "kfc98929b": "{{num}} dias",
+ "kfd33c459": "Cópia bem sucedida!",
+ "kfdaf0bb3": "Última vez online: {{tempo}}",
+ "kfe11d138": "Nome",
+ "kfedb6cd8": "Tem a certeza de que pretende eliminar todos os eventos deste monitor?",
+ "kff849f78": "Auto Fetch (Busca automática)"
+}
diff --git a/src/client/utils/constants.ts b/src/client/utils/constants.ts
index 807df5a..f19622b 100644
--- a/src/client/utils/constants.ts
+++ b/src/client/utils/constants.ts
@@ -14,11 +14,16 @@ export const languages = [
{
label: '日本語',
key: 'jp',
+ },
+ {
+ label: 'Português',
+ key: 'pt',
},
{
label: 'Русский',
key: 'ru',
},
+
{
label: '简体中文',
key: 'zh',