const fs = require('fs'); const path = require('path'); const dir = path.join(__dirname, '..', 'public', 'intl', 'messages'); const enUS = JSON.parse(fs.readFileSync(path.join(dir, 'en-US.json'), 'utf8')); const translations = { 'es-ES': { label: { 'account': 'Cuenta', 'action': 'Acción', 'add-link': 'Añadir enlace', 'add-pixel': 'Añadir píxel', 'analysis': 'Análisis', 'application': 'Aplicación', 'audience': 'Audiencia', 'campaign': 'Campaña', 'channel': 'Canal', 'chart': 'Gráfico', 'cohorts': 'Cohortes', 'criteria': 'Criterios', 'destination-url': 'URL de destino', 'documentation': 'Documentación', 'download': 'Descargar', 'email': 'Correo electrónico', 'environment': 'Entorno', 'exclude-bounce': 'Excluir rebote', 'growth': 'Crecimiento', 'hour': 'Hora', 'invalid-url': 'URL no válida', 'link': 'Enlace', 'location': 'Ubicación', 'minute': 'Minuto', 'month': 'Mes', 'ok': 'Aceptar', 'online': 'En línea', 'pixel': 'Píxel', 'preferences': 'Preferencias', 'profiles': 'Perfiles', 'save-cohort': 'Guardar cohorte', 'save-segment': 'Guardar segmento', 'screen': 'Pantalla', 'segment': 'Segmento', 'segments': 'Segmentos', 'sms': 'SMS', 'source': 'Fuente', 'support': 'Soporte', 'switch-account': 'Cambiar cuenta', 'table': 'Tabla', 'term': 'Término', 'total': 'Total', 'traffic': 'Tráfico', 'unique-events': 'Eventos únicos', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Campaña', 'utm-content': 'UTM Contenido', 'utm-medium': 'UTM Medio', 'utm-source': 'UTM Fuente', 'utm-term': 'UTM Término', 'version': 'Versión' }, message: { 'bad-request': 'Solicitud incorrecta', 'forbidden': 'Prohibido', 'not-found': 'No encontrado', 'nothing-selected': 'Nada seleccionado.', 'sever-error': 'Error del servidor', 'unauthorized': 'No autorizado' } }, 'fr-FR': { label: { 'account': 'Compte', 'action': 'Action', 'actions': 'Actions', 'add-link': 'Ajouter un lien', 'add-pixel': 'Ajouter un pixel', 'analysis': 'Analyse', 'application': 'Application', 'attribution': 'Attribution', 'audience': 'Audience', 'campaign': 'Campagne', 'channel': 'Canal', 'chart': 'Graphique', 'cohorts': 'Cohortes', 'conversion': 'Conversion', 'criteria': 'Critères', 'date': 'Date', 'description': 'Description', 'destination-url': 'URL de destination', 'direct': 'Direct', 'documentation': 'Documentation', 'download': 'Télécharger', 'environment': 'Environnement', 'exclude-bounce': 'Exclure le rebond', 'growth': 'Croissance', 'hour': 'Heure', 'invalid-url': 'URL invalide', 'link': 'Lien', 'location': 'Emplacement', 'max': 'Max', 'min': 'Min', 'minute': 'Minute', 'month': 'Mois', 'ok': 'OK', 'online': 'En ligne', 'os': 'OS', 'page': 'Page', 'pages': 'Pages', 'pixel': 'Pixel', 'pixels': 'Pixels', 'preferences': 'Préférences', 'profiles': 'Profils', 'save-cohort': 'Enregistrer la cohorte', 'save-segment': 'Enregistrer le segment', 'screen': 'Écran', 'segment': 'Segment', 'segments': 'Segments', 'session': 'Session', 'sessions': 'Sessions', 'sms': 'SMS', 'source': 'Source', 'sources': 'Sources', 'support': 'Support', 'switch-account': 'Changer de compte', 'table': 'Tableau', 'team-settings': 'Paramètres de l\'équipe', 'term': 'Terme', 'total': 'Total', 'transactions': 'Transactions', 'type': 'Type', 'unique': 'Unique', 'unique-events': 'Événements uniques', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Campagne', 'utm-content': 'UTM Contenu', 'utm-medium': 'UTM Média', 'utm-source': 'UTM Source', 'utm-term': 'UTM Terme', 'version': 'Version' }, message: { 'bad-request': 'Requête incorrecte', 'forbidden': 'Interdit' } }, 'pt-BR': { label: { 'account': 'Conta', 'action': 'Ação', 'add-link': 'Adicionar link', 'add-pixel': 'Adicionar pixel', 'analysis': 'Análise', 'application': 'Aplicação', 'audience': 'Audiência', 'campaign': 'Campanha', 'channel': 'Canal', 'chart': 'Gráfico', 'cohorts': 'Coortes', 'criteria': 'Critérios', 'destination-url': 'URL de destino', 'documentation': 'Documentação', 'download': 'Download', 'email': 'E-mail', 'end-step': 'Etapa final', 'environment': 'Ambiente', 'exclude-bounce': 'Excluir rejeição', 'first-seen': 'Visto pela primeira vez', 'growth': 'Crescimento', 'hour': 'Hora', 'insight': 'Insight', 'insights': 'Insights', 'invalid-url': 'URL inválida', 'link': 'Link', 'links': 'Links', 'location': 'Localização', 'manager': 'Gerente', 'minute': 'Minuto', 'month': 'Mês', 'ok': 'OK', 'online': 'Online', 'pixel': 'Pixel', 'pixels': 'Pixels', 'preferences': 'Preferências', 'profiles': 'Perfis', 'save-cohort': 'Salvar coorte', 'save-segment': 'Salvar segmento', 'screen': 'Tela', 'segment': 'Segmento', 'segments': 'Segmentos', 'sms': 'SMS', 'source': 'Fonte', 'start-step': 'Etapa inicial', 'support': 'Suporte', 'switch-account': 'Trocar conta', 'table': 'Tabela', 'tablet': 'Tablet', 'tag': 'Tag', 'tags': 'Tags', 'term': 'Termo', 'total': 'Total', 'traffic': 'Tráfego', 'transactions': 'Transações', 'unique-events': 'Eventos únicos', 'uniqueCustomers': 'Clientes únicos', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Campanha', 'utm-content': 'UTM Conteúdo', 'utm-medium': 'UTM Mídia', 'utm-source': 'UTM Fonte', 'utm-term': 'UTM Termo', 'version': 'Versão' }, message: { 'bad-request': 'Requisição inválida', 'collected-data': 'Dados coletados', 'forbidden': 'Proibido', 'not-found': 'Não encontrado', 'nothing-selected': 'Nada selecionado.', 'sever-error': 'Erro do servidor', 'unauthorized': 'Não autorizado' } }, 'pt-PT': { label: { 'account': 'Conta', 'action': 'Ação', 'add-link': 'Adicionar ligação', 'add-pixel': 'Adicionar pixel', 'analysis': 'Análise', 'application': 'Aplicação', 'audience': 'Audiência', 'campaign': 'Campanha', 'channel': 'Canal', 'chart': 'Gráfico', 'cohorts': 'Coortes', 'contains': 'Contém', 'continue': 'Continuar', 'criteria': 'Critérios', 'data': 'Dados', 'date': 'Data', 'destination-url': 'URL de destino', 'documentation': 'Documentação', 'download': 'Transferir', 'dropoff': 'Abandono', 'email': 'E-mail', 'environment': 'Ambiente', 'exclude-bounce': 'Excluir rejeição', 'growth': 'Crescimento', 'hour': 'Hora', 'insight': 'Insight', 'insights': 'Insights', 'insights-description': 'Aprofunde os seus dados utilizando segmentos e filtros.', 'invalid-url': 'URL inválido', 'link': 'Ligação', 'location': 'Localização', 'minute': 'Minuto', 'month': 'Mês', 'number-of-records': '{x} {x, plural, one {registo} other {registos}}', 'ok': 'OK', 'online': 'Online', 'os': 'SO', 'overview': 'Visão geral', 'page-of': 'Página {current} de {total}', 'pageTitle': 'Título da página', 'pixel': 'Pixel', 'preferences': 'Preferências', 'profiles': 'Perfis', 'queries': 'Consultas', 'query': 'Consulta', 'query-parameters': 'Parâmetros de consulta', 'referrer': 'Referência', 'regenerate': 'Regenerar', 'region': 'Região', 'regions': 'Regiões', 'remove': 'Remover', 'remove-member': 'Remover membro', 'reports': 'Relatórios', 'retention': 'Retenção', 'retention-description': 'Meça a fidelidade do seu site, monitorizando a frequência com que os utilizadores regressam.', 'role': 'Função', 'run-query': 'Executar consulta', 'save-cohort': 'Guardar coorte', 'save-segment': 'Guardar segmento', 'screen': 'Ecrã', 'screens': 'Ecrãs', 'search': 'Pesquisar', 'segment': 'Segmento', 'segments': 'Segmentos', 'select': 'Selecionar', 'select-date': 'Selecionar data', 'select-role': 'Selecionar função', 'select-website': 'Selecionar website', 'sessions': 'Sessões', 'sms': 'SMS', 'source': 'Fonte', 'start-step': 'Etapa inicial', 'steps': 'Etapas', 'sum': 'Soma', 'support': 'Suporte', 'switch-account': 'Trocar de conta', 'table': 'Tabela', 'tablet': 'Tablet', 'team': 'Equipa', 'team-id': 'ID da equipa', 'team-member': 'Membro da equipa', 'team-name': 'Nome da equipa', 'team-owner': 'Proprietário da equipa', 'team-view-only': 'Visualização da equipa apenas', 'team-websites': 'Websites da equipa', 'teams': 'Equipas', 'term': 'Termo', 'title': 'Título', 'total': 'Total', 'total-records': 'Total de registos', 'traffic': 'Tráfego', 'transactions': 'Transações', 'transfer': 'Transferir', 'transfer-website': 'Transferir website', 'true': 'Verdadeiro', 'type': 'Tipo', 'unique': 'Único', 'unique-events': 'Eventos únicos', 'uniqueCustomers': 'Clientes únicos', 'untitled': 'Sem título', 'update': 'Atualizar', 'url': 'URL', 'user': 'Utilizador', 'users': 'Utilizadores', 'utm': 'UTM', 'utm-campaign': 'UTM Campanha', 'utm-content': 'UTM Conteúdo', 'utm-description': 'Monitorize as suas campanhas através de parâmetros UTM.', 'utm-medium': 'UTM Meio', 'utm-source': 'UTM Fonte', 'utm-term': 'UTM Termo', 'value': 'Valor', 'version': 'Versão', 'view': 'Visualizar', 'view-only': 'Apenas visualização', 'views-per-visit': 'Visualizações por visita', 'visits': 'Visitas', 'website': 'Website', 'website-id': 'ID do website', 'websites': 'Websites', 'window': 'Janela', 'yesterday': 'Ontem' }, message: { 'action-confirmation': 'Escreva {confirmation} na caixa abaixo para confirmar.', 'bad-request': 'Pedido inválido', 'collected-data': 'Dados recolhidos', 'confirm-leave': 'Tem a certeza de que deseja sair de {target}?', 'confirm-remove': 'Tem a certeza de que deseja remover {target}?', 'delete-team-warning': 'Eliminar uma equipa também elimina todos os websites da equipa.', 'event-log': '{event} em {url}', 'forbidden': 'Proibido', 'min-password-length': 'Comprimento mínimo de {n} caracteres', 'new-version-available': 'Uma nova versão do Umami {version} está disponível!', 'no-event-data': 'Não existem dados de eventos disponíveis.', 'no-team-websites': 'Esta equipa não tem websites.', 'no-teams': 'Ainda não criou nenhuma equipa.', 'no-users': 'Não existem utilizadores.', 'not-found': 'Não encontrado', 'nothing-selected': 'Nada selecionado.', 'reset-website': 'Para repor este website, escreva {confirmation} na caixa abaixo para confirmar.', 'sever-error': 'Erro do servidor', 'team-already-member': 'Já é membro da equipa.', 'team-not-found': 'Equipa não encontrada.', 'team-websites-info': 'Os websites podem ser visualizados por qualquer membro da equipa.', 'transfer-team-website-to-user': 'Transferir este website para a sua conta?', 'transfer-user-website-to-team': 'Selecione a equipa para a qual transferir este website.', 'transfer-website': 'Transfira a propriedade do website para a sua conta ou outra equipa.', 'triggered-event': 'Evento acionado', 'unauthorized': 'Não autorizado', 'user-deleted': 'Utilizador eliminado.', 'viewed-page': 'Página visualizada' } }, 'it-IT': { label: { 'account': 'Account', 'action': 'Azione', 'add-link': 'Aggiungi link', 'add-pixel': 'Aggiungi pixel', 'analysis': 'Analisi', 'application': 'Applicazione', 'audience': 'Pubblico', 'browser': 'Browser', 'campaign': 'Campagna', 'channel': 'Canale', 'chart': 'Grafico', 'cohorts': 'Coorti', 'contains': 'Contiene', 'criteria': 'Criteri', 'desktop': 'Desktop', 'destination-url': 'URL di destinazione', 'documentation': 'Documentazione', 'download': 'Scarica', 'email': 'Email', 'environment': 'Ambiente', 'exclude-bounce': 'Escludi rimbalzo', 'filter': 'Filtro', 'filter-raw': 'Grezzo', 'funnel': 'Funnel', 'growth': 'Crescita', 'hour': 'Ora', 'invalid-url': 'URL non valido', 'link': 'Link', 'location': 'Posizione', 'manager': 'Gestore', 'minute': 'Minuto', 'model': 'Modello', 'month': 'Mese', 'number-of-records': '{x} {x, plural, one {record} other {record}}', 'ok': 'OK', 'online': 'Online', 'os': 'SO', 'overview': 'Panoramica', 'page-of': 'Pagina {current} di {total}', 'pageTitle': 'Titolo pagina', 'password': 'Password', 'pixel': 'Pixel', 'powered-by': 'Fornito da {name}', 'preferences': 'Preferenze', 'previous': 'Precedente', 'previous-period': 'Periodo precedente', 'previous-year': 'Anno precedente', 'profiles': 'Profili', 'query': 'Query', 'referrer': 'Referente', 'referrers': 'Referenti', 'regenerate': 'Rigenera', 'region': 'Regione', 'regions': 'Regioni', 'remove': 'Rimuovi', 'remove-member': 'Rimuovi membro', 'reports': 'Report', 'reset': 'Reimposta', 'retention': 'Fidelizzazione', 'retention-description': 'Misura la fidelizzazione del tuo sito monitorando la frequenza con cui gli utenti ritornano.', 'role': 'Ruolo', 'run-query': 'Esegui query', 'save-cohort': 'Salva coorte', 'save-segment': 'Salva segmento', 'screen': 'Schermo', 'search': 'Cerca', 'segment': 'Segmento', 'segments': 'Segmenti', 'select': 'Seleziona', 'select-date': 'Seleziona data', 'select-role': 'Seleziona ruolo', 'select-website': 'Seleziona sito web', 'session': 'Sessione', 'sessions': 'Sessioni', 'sms': 'SMS', 'source': 'Fonte', 'start-step': 'Passaggio iniziale', 'steps': 'Passaggi', 'sum': 'Somma', 'support': 'Supporto', 'switch-account': 'Cambia account', 'table': 'Tabella', 'tablet': 'Tablet', 'team': 'Team', 'team-id': 'ID Team', 'team-manager': 'Manager del team', 'team-member': 'Membro del team', 'team-name': 'Nome del team', 'team-owner': 'Proprietario del team', 'team-view-only': 'Solo visualizzazione team', 'team-websites': 'Siti web del team', 'teams': 'Team', 'term': 'Termine', 'title': 'Titolo', 'total': 'Totale', 'total-records': 'Record totali', 'traffic': 'Traffico', 'transactions': 'Transazioni', 'transfer': 'Trasferisci', 'transfer-website': 'Trasferisci sito web', 'true': 'Vero', 'type': 'Tipo', 'unique': 'Unico', 'unique-events': 'Eventi unici', 'uniqueCustomers': 'Clienti unici', 'untitled': 'Senza titolo', 'update': 'Aggiorna', 'url': 'URL', 'user': 'Utente', 'users': 'Utenti', 'utm': 'UTM', 'utm-campaign': 'UTM Campagna', 'utm-content': 'UTM Contenuto', 'utm-description': 'Monitora le tue campagne attraverso i parametri UTM.', 'utm-medium': 'UTM Mezzo', 'utm-source': 'UTM Fonte', 'utm-term': 'UTM Termine', 'value': 'Valore', 'version': 'Versione', 'view': 'Visualizza', 'view-only': 'Solo visualizzazione', 'views-per-visit': 'Visualizzazioni per visita', 'visits': 'Visite', 'website': 'Sito web', 'website-id': 'ID sito web', 'window': 'Finestra' }, message: { 'action-confirmation': 'Digita {confirmation} nella casella sottostante per confermare.', 'bad-request': 'Richiesta non valida', 'collected-data': 'Dati raccolti', 'confirm-leave': 'Sei sicuro di voler lasciare {target}?', 'confirm-remove': 'Sei sicuro di voler rimuovere {target}?', 'delete-team-warning': 'L\'eliminazione di un team eliminerà anche tutti i siti web del team.', 'event-log': '{event} su {url}', 'forbidden': 'Vietato', 'min-password-length': 'Lunghezza minima di {n} caratteri', 'new-version-available': 'È disponibile una nuova versione di Umami {version}!', 'no-event-data': 'Nessun dato evento disponibile.', 'no-team-websites': 'Questo team non ha siti web.', 'no-teams': 'Non hai creato nessun team.', 'no-users': 'Non ci sono utenti.', 'not-found': 'Non trovato', 'nothing-selected': 'Nessuna selezione.', 'reset-website': 'Per reimpostare questo sito web, digita {confirmation} nella casella sottostante per confermare.', 'sever-error': 'Errore del server', 'team-already-member': 'Sei già membro del team.', 'team-not-found': 'Team non trovato.', 'team-websites-info': 'I siti web possono essere visualizzati da chiunque nel team.', 'transfer-team-website-to-user': 'Trasferire questo sito web al tuo account?', 'transfer-user-website-to-team': 'Seleziona il team a cui trasferire questo sito web.', 'transfer-website': 'Trasferisci la proprietà del sito web al tuo account o a un altro team.', 'triggered-event': 'Evento attivato', 'unauthorized': 'Non autorizzato', 'user-deleted': 'Utente eliminato.', 'viewed-page': 'Pagina visualizzata' } }, 'ca-ES': { label: { 'account': 'Compte', 'action': 'Acció', 'add-link': 'Afegir enllaç', 'add-pixel': 'Afegir píxel', 'analysis': 'Anàlisi', 'application': 'Aplicació', 'audience': 'Audiència', 'campaign': 'Campanya', 'channel': 'Canal', 'chart': 'Gràfic', 'cohort': 'Cohort', 'cohorts': 'Cohorts', 'criteria': 'Criteris', 'destination-url': 'URL de destinació', 'documentation': 'Documentació', 'download': 'Descarregar', 'email': 'Correu electrònic', 'environment': 'Entorn', 'exclude-bounce': 'Excloure rebot', 'growth': 'Creixement', 'hour': 'Hora', 'insights': 'Insights', 'invalid-url': 'URL no vàlida', 'link': 'Enllaç', 'location': 'Ubicació', 'minute': 'Minut', 'model': 'Model', 'month': 'Mes', 'ok': "D'acord", 'online': 'En línia', 'pixel': 'Píxel', 'pixels': 'Píxels', 'preferences': 'Preferències', 'profiles': 'Perfils', 'regions': 'Regions', 'save-cohort': 'Desar cohort', 'save-segment': 'Desar segment', 'screen': 'Pantalla', 'segment': 'Segment', 'segments': 'Segments', 'sessions': 'Sessions', 'sms': 'SMS', 'source': 'Font', 'support': 'Suport', 'switch-account': 'Canviar de compte', 'table': 'Taula', 'term': 'Terme', 'total': 'Total', 'traffic': 'Trànsit', 'unique-events': 'Esdeveniments únics', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Campanya', 'utm-content': 'UTM Contingut', 'utm-medium': 'UTM Mitjà', 'utm-source': 'UTM Font', 'utm-term': 'UTM Terme', 'version': 'Versió' }, message: { 'bad-request': 'Sol·licitud incorrecta', 'forbidden': 'Prohibit', 'not-found': 'No trobat', 'nothing-selected': 'Res seleccionat.', 'sever-error': 'Error del servidor', 'unauthorized': 'No autoritzat' } }, 'ga-ES': { label: { 'account': 'Conta', 'action': 'Acción', 'add-link': 'Engadir ligazón', 'add-pixel': 'Engadir píxel', 'analysis': 'Análise', 'application': 'Aplicación', 'audience': 'Audiencia', 'campaign': 'Campaña', 'channel': 'Canle', 'chart': 'Gráfico', 'cohorts': 'Cohortes', 'criteria': 'Criterios', 'destination-url': 'URL de destino', 'documentation': 'Documentación', 'download': 'Descargar', 'environment': 'Contorno', 'exclude-bounce': 'Excluír rebote', 'growth': 'Crecemento', 'hour': 'Hora', 'invalid-url': 'URL non válida', 'link': 'Ligazón', 'location': 'Localización', 'max': 'Máx', 'min': 'Mín', 'minute': 'Minuto', 'month': 'Mes', 'number-of-records': '{x} {x, plural, one {rexistro} other {rexistros}}', 'ok': 'Aceptar', 'online': 'En liña', 'pixel': 'Píxel', 'preferences': 'Preferencias', 'profiles': 'Perfís', 'save-cohort': 'Gardar cohorte', 'save-segment': 'Gardar segmento', 'screen': 'Pantalla', 'segment': 'Segmento', 'segments': 'Segmentos', 'sms': 'SMS', 'source': 'Orixe', 'start-step': 'Paso inicial', 'support': 'Soporte', 'switch-account': 'Cambiar de conta', 'table': 'Táboa', 'term': 'Termo', 'total': 'Total', 'traffic': 'Tráfico', 'unique-events': 'Eventos únicos', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Campaña', 'utm-content': 'UTM Contido', 'utm-medium': 'UTM Medio', 'utm-source': 'UTM Orixe', 'utm-term': 'UTM Termo', 'version': 'Versión' }, message: { 'bad-request': 'Solicitude incorrecta', 'forbidden': 'Prohibido', 'not-found': 'Non atopado', 'nothing-selected': 'Nada seleccionado.', 'sever-error': 'Erro do servidor', 'unauthorized': 'Non autorizado' } }, 'ro-RO': { label: { 'account': 'Cont', 'action': 'Acțiune', 'add-link': 'Adaugă link', 'add-pixel': 'Adaugă pixel', 'analysis': 'Analiză', 'application': 'Aplicație', 'audience': 'Audiență', 'browser': 'Browser', 'campaign': 'Campanie', 'channel': 'Canal', 'chart': 'Grafic', 'cohorts': 'Cohorte', 'confirm': 'Confirmă', 'criteria': 'Criterii', 'desktop': 'Desktop', 'destination-url': 'URL destinație', 'direct': 'Direct', 'distinct-id': 'ID distinct', 'documentation': 'Documentație', 'download': 'Descarcă', 'email': 'Email', 'environment': 'Mediu', 'exclude-bounce': 'Exclude respingere', 'growth': 'Creștere', 'hour': 'Oră', 'invalid-url': 'URL invalid', 'laptop': 'Laptop', 'link': 'Link', 'location': 'Locație', 'manager': 'Manager', 'max': 'Max', 'min': 'Min', 'minute': 'Minut', 'model': 'Model', 'month': 'Lună', 'ok': 'OK', 'online': 'Online', 'os': 'SO', 'pixel': 'Pixel', 'preferences': 'Preferințe', 'profiles': 'Profiluri', 'referral': 'Referință', 'save-cohort': 'Salvează cohorta', 'save-segment': 'Salvează segmentul', 'screen': 'Ecran', 'segment': 'Segment', 'segments': 'Segmente', 'sms': 'SMS', 'source': 'Sursă', 'support': 'Suport', 'switch-account': 'Schimbă contul', 'table': 'Tabel', 'term': 'Termen', 'total': 'Total', 'traffic': 'Trafic', 'transfer': 'Transferă', 'transfer-website': 'Transferă site-ul', 'unique-events': 'Evenimente unice', 'update': 'Actualizează', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Campanie', 'utm-content': 'UTM Conținut', 'utm-medium': 'UTM Mediu', 'utm-source': 'UTM Sursă', 'utm-term': 'UTM Termen', 'version': 'Versiune', 'website': 'Site web' }, message: { 'bad-request': 'Cerere incorectă', 'forbidden': 'Interzis', 'not-found': 'Negăsit', 'nothing-selected': 'Nimic selectat.', 'sever-error': 'Eroare de server', 'unauthorized': 'Neautorizat' } } }; for (const [locale, trans] of Object.entries(translations)) { const filePath = path.join(dir, locale + '.json'); const data = JSON.parse(fs.readFileSync(filePath, 'utf8')); let count = 0; for (const [section, keys] of Object.entries(trans)) { for (const [key, value] of Object.entries(keys)) { if (data[section] && key in data[section]) { data[section][key] = value; count++; } } } const sorted = {}; for (const section of Object.keys(enUS)) { if (data[section]) { sorted[section] = {}; for (const key of Object.keys(enUS[section])) { if (key in data[section]) sorted[section][key] = data[section][key]; } for (const key of Object.keys(data[section])) { if (!(key in sorted[section])) sorted[section][key] = data[section][key]; } } } fs.writeFileSync(filePath, JSON.stringify(sorted, null, 2) + '\n', 'utf8'); console.log('Updated ' + locale + ': ' + count + ' keys'); }