diff --git a/net/web/src/constants/Strings.js b/net/web/src/constants/Strings.js index a368ea8d..83657b97 100644 --- a/net/web/src/constants/Strings.js +++ b/net/web/src/constants/Strings.js @@ -546,3 +546,552 @@ export const sp = { notes: 'Notas', } + +export const pt = { + code: 'pt', + settings: 'Configurações', + contacts: 'Contatos', + logout: 'Sair', + confirmLogout: 'Tem certeza de que deseja sair?', + contactsUpdated: 'Seus contatos foram atualizados', + disconnected: 'Desconectado do servidor', + allDevices: 'Desconectar de todos os dispositivos', + ok: 'OK', + cancel: 'Cancelar', + + new: 'Novo', + newMessage: 'Nova mensagem', + topics: 'Tópicos', + unsetSealing: 'Chave de segurança não definida', + newTopic: 'Novo tópico', + + noContacts: 'Sem contatos', + noTopics: 'Sem tópicos', + noConnected: 'Nenhum contato conectado', + subjectOptional: 'Assunto (opcional)', + members: 'Membros', + sealedTopic: 'Tópico selado', + start: 'Iniciar', + + communication: 'Comunicação para a Web Descentralizada', + setupProfile: 'Configurar seu perfil', + connectPeople: 'Conectar-se com as pessoas', + startConversation: 'Iniciar uma conversa', + + default: 'Padrão', + dark: 'Escuro', + light: 'Claro', + + operationFailed: 'Operação falhou', + tryAgain: 'Por favor, tente novamente.', + + add: 'Adicionar', + save: 'Salvar', + forget: 'Esquecer', + unlock: 'Desbloquear', + profile: 'Perfil', + application: 'Aplicação', + account: 'Conta', + name: 'Nome', + node: 'Servidor', + location: 'Localização', + description: 'Descrição', + timeFormat: 'Formato de hora', + dateFormat: 'Formato de data', + theme: 'Tema', + language: 'Idioma', + timeUs: '12h', + timeEu: '24h', + dateUs: 'mm/dd', + dateEu: 'dd/mm', + registry: 'Visível no registro', + sealedTopics: 'Tópicos selados', + changeLogin: 'Alterar credenciais', + selectImage: 'Selecionar', + profileImage: 'Imagem do perfil', + profileDetails: 'Detalhes do perfil', + enableSealed: 'Ativar tópicos selados', + password: 'Senha', + newPassword: 'Nova senha', + confirmPassword: 'Confirmar senha', + deleteKey: 'Digite \'excluir\' para deletar a chave', + delete: 'excluir', + remove: 'Remover', + username: 'Nome de usuário', + updateProfile: 'Atualizar perfil', + + syncError: 'Erro de sincronização', + callTip: 'Ligar para o contato', + messageTip: 'Enviar mensagem ao contato', + connectedTip: 'Contato conectado', + requestedTip: 'Pedido de conexão enviado pelo contato', + connectingTip: 'Conexão em andamento', + pendingTip: 'Pedido de conexão enviado por um contato desconhecido', + confirmedTip: 'Contato desconectado', + unsavedTip: 'Contato desconhecido', + + actions: 'Ações', + resync: 'Resincronizar', + connect: 'Conectar', + disconnect: 'Desconectar', + disconnectContact: 'Desconectar o contato', + deleteContact: 'Excluir contato', + saveContact: 'Salvar contato', + saveAccept: 'Salvar e aceitar a conexão', + saveRequest: 'Salvar e solicitar a conexão', + ignoreRequest: 'Ignorar solicitação', + acceptConnection: 'Aceitar conexão', + requestConnection: 'Solicitar conexão', + cancelRequest: 'Cancelar solicitação', + resyncContact: 'Resincronizar contato', + + login: 'Entrar', + create: 'Criar', + createAccount: 'Criar uma conta', + accountLogin: 'Login da conta', + toCreate: 'As contas são criadas através de um link gerado no painel de administração.', + admin: 'Administrador', + loginError: 'Erro de login', + loginMessage: 'Por favor, confirme seu nome de usuário e senha.', + createError: 'Erro ao criar conta', + createMessage: 'Por favor, verifique com seu administrador.', + adminError: 'Erro de acesso', + adminMessage: 'Por favor, confirme sua senha', + + confirmDelete: 'Excluir conta', + areSure: 'Tem certeza de que deseja excluir a conta?', + + mb: 'MB', + gb: 'GB', + copied: 'Copiado', + accounts: 'Contas', + accessAccount: 'Acessar conta', + browserLink: 'Link do navegador', + mobileToken: 'Token móvel', + createLink: 'Link para criar uma conta', + configureServer: 'Configurar servidor', + reloadAccounts: 'Recarregar contas', + disableAccount: 'Desativar conta', + enableAccount: 'Ativar conta', + deleteAccount: 'Excluir conta', + hostHint: 'domínio:porta/aplicação', + federatedHost: 'Host federado', + storageLimit: 'Limite de armazenamento (GB) / conta', + storageHint: '0 para ilimitado', + keyType: 'Tipo de chave', + accountCreation: 'Criação de conta pública', + enablePush: 'Ativar notificações push', + allowUnsealed: 'Permitir tópicos não selados', + topicContent: 'Conteúdo do tópico:', + enableImage: 'Ativar imagens no tópico', + imageHint: 'Permitir a publicação de imagens em tópicos', + enableAudio: 'Ativar áudio no tópico', + audioHint: 'Permitir a publicação de áudio em tópicos', + enableVideo: 'Ativar vídeos no tópico', + videoHint: 'Permitir a publicação de vídeos em tópicos', + enableWeb: 'Ativar chamadas WebRTC', + webHint: 'Permitir chamadas de áudio e vídeo para contatos', + serverUrl: 'URL do servidor WebRTC', + urlHint: 'turn:ip:port?transport=udp', + webUsername: 'Nome de usuário WebRTC', + webPassword: 'Senha WebRTC', + failedLoad: 'Falha ao carregar', + limit: 'Limite', + + deleteMessage: 'Excluir mensagem', + messageHint: 'Tem certeza de que deseja excluir a mensagem?', + attachImage: 'Anexar imagem', + attachVideo: 'Anexar vídeo', + attachAudio: 'Anexar áudio', + attachFile: 'Anexar arquivo', + fontColor: 'Alterar cor da fonte', + fontSize: 'Alterar tamanho da fonte', + postMessage: 'Publicar mensagem', + + close: 'Fechar', + leave: 'Sair', + confirmTopic: 'Excluir tópico', + sureTopic: 'Tem certeza de que deseja excluir este tópico?', + confirmLeave: 'Sair do tópico', + sureLeave: 'Tem certeza de que deseja sair deste tópico?', + + details: 'Detalhes', + host: 'Anfitrião', + guest: 'Convidado', + editSubject: 'Editar tópico', + editMembership: 'Editar membros do tópico', + deleteTopic: 'Excluir tópico', + leaveTopic: 'Sair do tópico', + + integrated: 'Integrado', + microphone: 'Microfone', + camera: 'Câmera', + + notes: 'Notas' +} + +export const de = { + code: 'de', + settings: 'Einstellungen', + contacts: 'Kontakte', + logout: 'Ausloggen', + confirmLogout: 'Sind Sie sicher, dass Sie sich abmelden möchten?', + contactsUpdated: 'Ihre Kontakte wurden aktualisiert', + disconnected: 'Vom Server getrennt', + allDevices: 'Alle Geräte abmelden', + ok: 'OK', + cancel: 'Abbrechen', + + new: 'Neu', + newMessage: 'Neue Nachricht', + topics: 'Themen', + unsetSealing: 'Sicherheitsschlüssel nicht festgelegt', + newTopic: 'Neues Thema', + + noContacts: 'Keine Kontakte', + noTopics: 'Keine Themen', + noConnected: 'Keine verbundenen Kontakte', + subjectOptional: 'Betreff (optional)', + members: 'Mitglieder', + sealedTopic: 'Versiegeltes Thema', + start: 'Starten', + + communication: 'Kommunikation für das dezentrale Web', + setupProfile: 'Profil einrichten', + connectPeople: 'Mit Menschen verbinden', + startConversation: 'Gespräch beginnen', + + default: 'Standard', + dark: 'Dunkel', + light: 'Hell', + + operationFailed: 'Vorgang fehlgeschlagen', + tryAgain: 'Bitte versuchen Sie es erneut.', + + add: 'Hinzufügen', + save: 'Speichern', + forget: 'Vergessen', + unlock: 'Entsperren', + profile: 'Profil', + application: 'Anwendung', + account: 'Konto', + name: 'Name', + node: 'Server', + location: 'Standort', + description: 'Beschreibung', + timeFormat: 'Zeitformat', + dateFormat: 'Datumsformat', + theme: 'Thema', + language: 'Sprache', + timeUs: '12 Stunden', + timeEu: '24 Stunden', + dateUs: 'MM/TT', + dateEu: 'TT/MM', + registry: 'Im Register sichtbar', + sealedTopics: 'Versiegelte Themen', + changeLogin: 'Anmeldeinformationen ändern', + selectImage: 'Auswählen', + profileImage: 'Profilbild', + profileDetails: 'Profildetails', + enableSealed: 'Versiegelte Themen aktivieren', + password: 'Passwort', + newPassword: 'Neues Passwort', + confirmPassword: 'Passwort bestätigen', + deleteKey: '\'löschen\' eingeben, um den Schlüssel zu löschen', + delete: 'löschen', + remove: 'Entfernen', + username: 'Benutzername', + updateProfile: 'Profil aktualisieren', + + syncError: 'Synchronisierungsfehler', + callTip: 'Kontakt anrufen', + messageTip: 'Nachricht an den Kontakt senden', + connectedTip: 'Verbundener Kontakt', + requestedTip: 'Verbindungsanfrage vom Kontakt gesendet', + connectingTip: 'Verbindungsanfrage läuft', + pendingTip: 'Verbindungsanfrage von einem unbekannten Kontakt gesendet', + confirmedTip: 'Kontakt getrennt', + unsavedTip: 'Unbekannter Kontakt', + + actions: 'Aktionen', + resync: 'Neusynchronisieren', + connect: 'Verbinden', + disconnect: 'Trennen', + disconnectContact: 'Kontakt trennen', + deleteContact: 'Kontakt löschen', + saveContact: 'Kontakt speichern', + saveAccept: 'Speichern und Verbindung akzeptieren', + saveRequest: 'Speichern und Verbindung anfordern', + ignoreRequest: 'Anfrage ignorieren', + acceptConnection: 'Verbindung akzeptieren', + requestConnection: 'Verbindung anfordern', + cancelRequest: 'Anfrage abbrechen', + resyncContact: 'Kontakt neu synchronisieren', + + login: 'Einloggen', + create: 'Erstellen', + createAccount: 'Konto erstellen', + accountLogin: 'Kontoanmeldung', + toCreate: 'Konten werden über einen Link erstellt, der im Administrations-Dashboard generiert wird.', + admin: 'Administrator', + loginError: 'Anmeldefehler', + loginMessage: 'Bitte bestätigen Sie Ihren Benutzernamen und Ihr Passwort.', + createError: 'Fehler beim Erstellen des Kontos', + createMessage: 'Bitte überprüfen Sie bei Ihrem Administrator nach.', + adminError: 'Zugriffsfehler', + adminMessage: 'Bitte bestätigen Sie Ihr Passwort', + + confirmDelete: 'Konto löschen', + areSure: 'Sind Sie sicher, dass Sie das Konto löschen möchten?', + + mb: 'MB', + gb: 'GB', + copied: 'Kopiert', + accounts: 'Konten', + accessAccount: 'Kontozugriff', + browserLink: 'Browser-Link', + mobileToken: 'Mobilcode', + createLink: 'Link zum Erstellen eines Kontos', + configureServer: 'Server konfigurieren', + reloadAccounts: 'Konten neu laden', + disableAccount: 'Konto deaktivieren', + enableAccount: 'Konto aktivieren', + deleteAccount: 'Konto löschen', + hostHint: 'Domäne:Port/Anwendung', + federatedHost: 'Föderierter Host', + storageLimit: 'Speicherbegrenzung (GB) / Konto', + storageHint: '0 für unbegrenzt', + keyType: 'Schlüsseltyp', + accountCreation: 'Öffentliche Kontenerstellung', + enablePush: 'Push-Benachrichtigungen aktivieren', + allowUnsealed: 'Nicht versiegelte Themen zulassen', + topicContent: 'Themeninhalt:', + enableImage: 'Bilder im Thema aktivieren', + imageHint: 'Veröffentlichung von Bildern in Themen ermöglichen', + enableAudio: 'Audio im Thema aktivieren', + audioHint: 'Veröffentlichung von Audio in Themen ermöglichen', + enableVideo: 'Videos im Thema aktivieren', + videoHint: 'Veröffentlichung von Videos in Themen ermöglichen', + enableWeb: 'WebRTC-Anrufe aktivieren', + webHint: 'Audio- und Videoanrufe an Kontakte zulassen', + serverUrl: 'URL des WebRTC-Servers', + urlHint: 'turn:ip:port?transport=udp', + webUsername: 'WebRTC-Benutzername', + webPassword: 'WebRTC-Passwort', + failedLoad: 'Laden fehlgeschlagen', + limit: 'Limit', + + deleteMessage: 'Nachricht löschen', + messageHint: 'Sind Sie sicher, dass Sie die Nachricht löschen möchten?', + attachImage: 'Bild anhängen', + attachVideo: 'Video anhängen', + attachAudio: 'Audio anhängen', + attachFile: 'Datei anhängen', + fontColor: 'Schriftfarbe ändern', + fontSize: 'Schriftgröße ändern', + postMessage: 'Nachricht veröffentlichen', + + close: 'Schließen', + leave: 'Verlassen', + confirmTopic: 'Thema löschen', + sureTopic: 'Sind Sie sicher, dass Sie dieses Thema löschen möchten?', + confirmLeave: 'Thema verlassen', + sureLeave: 'Sind Sie sicher, dass Sie dieses Thema verlassen möchten?', + + details: 'Details', + host: 'Host', + guest: 'Gast', + editSubject: 'Thema bearbeiten', + editMembership: 'Mitgliedschaft im Thema bearbeiten', + deleteTopic: 'Thema löschen', + leaveTopic: 'Thema verlassen', + + integrated: 'Integriert', + microphone: 'Mikrofon', + camera: 'Kamera', + + notes: 'Notizen' +} + +export const ru = { + code: 'ru', + settings: 'Настройки', + contacts: 'Контакты', + logout: 'Выйти', + confirmLogout: 'Вы уверены, что хотите выйти?', + contactsUpdated: 'Ваши контакты обновлены', + disconnected: 'Отключено от сервера', + allDevices: 'Выйти со всех устройств', + ok: 'OK', + cancel: 'Отмена', + + new: 'Новый', + newMessage: 'Новое сообщение', + topics: 'Темы', + unsetSealing: 'Ключ безопасности не установлен', + newTopic: 'Новая тема', + + noContacts: 'Нет контактов', + noTopics: 'Нет тем', + noConnected: 'Нет подключенных контактов', + subjectOptional: 'Тема (необязательно)', + members: 'Участники', + sealedTopic: 'Запечатанная тема', + start: 'Начать', + + communication: 'Коммуникация для децентрализованной сети', + setupProfile: 'Настройка профиля', + connectPeople: 'Подключиться к людям', + startConversation: 'Начать разговор', + + default: 'По умолчанию', + dark: 'Темная', + light: 'Светлая', + + operationFailed: 'Операция не удалась', + tryAgain: 'Пожалуйста, попробуйте снова.', + + add: 'Добавить', + save: 'Сохранить', + forget: 'Забыть', + unlock: 'Разблокировать', + profile: 'Профиль', + application: 'Приложение', + account: 'Аккаунт', + name: 'Имя', + node: 'Сервер', + location: 'Местоположение', + description: 'Описание', + timeFormat: 'Формат времени', + dateFormat: 'Формат даты', + theme: 'Тема', + language: 'Язык', + timeUs: '12 часов', + timeEu: '24 часа', + dateUs: 'ММ/ДД', + dateEu: 'ДД/ММ', + registry: 'Видимо в реестре', + sealedTopics: 'Запечатанные темы', + changeLogin: 'Изменить логин', + selectImage: 'Выбрать', + profileImage: 'Изображение профиля', + profileDetails: 'Детали профиля', + enableSealed: 'Включить запечатанные темы', + password: 'Пароль', + newPassword: 'Новый пароль', + confirmPassword: 'Подтвердите пароль', + deleteKey: 'Введите \'удалить\', чтобы удалить ключ', + delete: 'удалить', + remove: 'Удалить', + username: 'Имя пользователя', + updateProfile: 'Обновить профиль', + + syncError: 'Ошибка синхронизации', + callTip: 'Позвонить контакту', + messageTip: 'Отправить сообщение контакту', + connectedTip: 'Подключенный контакт', + requestedTip: 'Запрос на подключение отправлен контактом', + connectingTip: 'Запрос на подключение выполняется', + pendingTip: 'Запрос на подключение отправлен неизвестным контактом', + confirmedTip: 'Контакт отключен', + unsavedTip: 'Неизвестный контакт', + + actions: 'Действия', + resync: 'Пересинхронизация', + connect: 'Подключиться', + disconnect: 'Отключиться', + disconnectContact: 'Отключить контакт', + deleteContact: 'Удалить контакт', + saveContact: 'Сохранить контакт', + saveAccept: 'Сохранить и принять подключение', + saveRequest: 'Сохранить и запросить подключение', + ignoreRequest: 'Игнорировать запрос', + acceptConnection: 'Принять подключение', + requestConnection: 'Запросить подключение', + cancelRequest: 'Отменить запрос', + resyncContact: 'Пересинхронизировать контакт', + + login: 'Войти', + create: 'Создать', + createAccount: 'Создать аккаунт', + accountLogin: 'Вход в аккаунт', + toCreate: 'Учетные записи создаются через ссылку, сгенерированную в панели администратора.', + admin: 'Администратор', + loginError: 'Ошибка входа', + loginMessage: 'Пожалуйста, подтвердите свое имя пользователя и пароль.', + createError: 'Ошибка создания учетной записи', + createMessage: 'Пожалуйста, проверьте с вашим администратором.', + adminError: 'Ошибка доступа', + adminMessage: 'Пожалуйста, подтвердите ваш пароль', + + confirmDelete: 'Удаление аккаунта', + areSure: 'Вы уверены, что хотите удалить аккаунт?', + + mb: 'МБ', + gb: 'ГБ', + copied: 'Скопировано', + accounts: 'Аккаунты', + accessAccount: 'Доступ к аккаунту', + browserLink: 'Ссылка на браузер', + mobileToken: 'Мобильный токен', + createLink: 'Создать ссылку на аккаунт', + configureServer: 'Настроить сервер', + reloadAccounts: 'Перезагрузить аккаунты', + disableAccount: 'От ключить аккаунт', + enableAccount: 'Включить аккаунт', + deleteAccount: 'Удалить аккаунт', + hostHint: 'домен:порт/приложение', + federatedHost: 'Федеративный хост', + storageLimit: 'Лимит хранения (ГБ) / аккаунт', + storageHint: '0 для неограниченного', + keyType: 'Тип ключа', + accountCreation: 'Создание открытого аккаунта', + enablePush: 'Включить уведомления Push', + allowUnsealed: 'Разрешить незапечатанные темы', + topicContent: 'Содержимое темы:', + enableImage: 'Включить изображения тем', + imageHint: 'Разрешить публикацию изображений в темах', + enableAudio: 'Включить аудио тем', + audioHint: 'Разрешить публикацию аудио в темах', + enableVideo: 'Включить видео тем', + videoHint: 'Разрешить публикацию видео в темах', + enableWeb: 'Включить WebRTC-звонки', + webHint: 'Разрешить аудио- и видеозвонки контактам', + serverUrl: 'URL сервера WebRTC', + urlHint: 'turn:ip:port?transport=udp', + webUsername: 'Имя пользователя WebRTC', + webPassword: 'Пароль WebRTC', + failedLoad: 'Загрузка не удалась', + limit: 'Лимит', + + deleteMessage: 'Удаление сообщения', + messageHint: 'Вы уверены, что хотите удалить сообщение?', + attachImage: 'Прикрепить изображение', + attachVideo: 'Прикрепить видео', + attachAudio: 'Прикрепить аудио', + attachFile: 'Прикрепить файл', + fontColor: 'Изменить цвет текста', + fontSize: 'Изменить размер текста', + postMessage: 'Опубликовать сообщение', + + close: 'Закрыть', + leave: 'Покинуть', + confirmTopic: 'Удаление темы', + sureTopic: 'Вы уверены, что хотите удалить эту тему?', + confirmLeave: 'Покинуть тему', + sureLeave: 'Вы уверены, что хотите покинуть эту тему?', + + details: 'Детали', + host: 'Хост', + guest: 'Гость', + editSubject: 'Редактировать тему', + editMembership: 'Редактировать участников темы', + deleteTopic: 'Удалить тему', + leaveTopic: 'Покинуть тему', + + integrated: 'Интегрированный', + microphone: 'Микрофон', + camera: 'Камера', + + notes: 'Заметки' +} diff --git a/net/web/src/context/useSettingsContext.hook.js b/net/web/src/context/useSettingsContext.hook.js index 7bcc2088..4aa8fa44 100644 --- a/net/web/src/context/useSettingsContext.hook.js +++ b/net/web/src/context/useSettingsContext.hook.js @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { LightTheme, DarkTheme } from 'constants/Colors'; -import { en, fr, sp } from 'constants/Strings'; +import { en, fr, sp, pt, de, ru } from 'constants/Strings'; export function useSettingsContext() { @@ -8,12 +8,12 @@ export function useSettingsContext() { display: null, width: null, height: null, - themes: [{ value: null, label: 'Default' }, { value: 'dark', label: 'Dark' }, { value: 'light', label: 'Light' }], + themes: [{ value: 'dark', label: 'Dark' }, { value: 'light', label: 'Light' }], theme: null, scheme: null, colors: {}, menuStyle: {}, - languages: [{ value: null, label: 'Default' }, { value: 'en', label: 'English' }, { value: 'fr', label: 'Français' }, { value: 'sp', label: 'Español' }], + languages: [{ value: 'en', label: 'English' }, { value: 'fr', label: 'Français' }, { value: 'sp', label: 'Español' }, { value: 'pt', label: 'Português' }, { value: 'de', label: 'Deutsch' }, { value: 'ru', label: 'Русский' }], language: null, strings: en, dateFormat: 'mm/dd', @@ -120,24 +120,42 @@ export function useSettingsContext() { const language = localStorage.getItem('language'); if (language && language.startsWith('fr')) { - updateState({ language: 'fr', strings: fr, themes: [{ value: null, label: fr.default }, { value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); + updateState({ language: 'fr', strings: fr, themes: [{ value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); } else if (language && language.startsWith('sp')) { - updateState({ language: 'sp', strings: sp, themes: [{ value: null, label: sp.default }, { value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + updateState({ language: 'sp', strings: sp, themes: [{ value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); } else if (language && language.startsWith('en')) { - updateState({ language: 'en', strings: en, themes: [{ value: null, label: en.default }, { value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); + updateState({ language: 'en', strings: en, themes: [{ value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); + } + else if (language && language.startsWith('pt')) { + updateState({ language: 'pt', strings: pt, themes: [{ value: 'dark', label: pt.dark }, { value: 'light', label: pt.light }]}); + } + else if (language && language.startsWith('de')) { + updateState({ language: 'de', strings: de, themes: [{ value: 'dark', label: de.dark }, { value: 'light', label: de.light }]}); + } + else if (language && language.startsWith('ru')) { + updateState({ language: 'ru', strings: ru, themes: [{ value: 'dark', label: ru.dark }, { value: 'light', label: ru.light }]}); } else { const browser = navigator.language; if (browser && browser.startsWith('fr')) { - updateState({ language: null, strings: fr, themes: [{ value: null, label: fr.default }, { value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); + updateState({ language: null, strings: fr, themes: [{ value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); } else if (browser && browser.startsWith('sp')) { - updateState({ language: null, strings: sp, themes: [{ value: null, label: sp.default }, { value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + updateState({ language: null, strings: sp, themes: [{ value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + } + else if (browser && browser.startsWith('pt')) { + updateState({ language: null, strings: pt, themes: [{ value: 'dark', label: pt.dark }, { value: 'light', label: pt.light }]}); + } + else if (browser && browser.startsWith('de')) { + updateState({ language: null, strings: de, themes: [{ value: 'dark', label: de.dark }, { value: 'light', label: de.light }]}); + } + else if (browser && browser.startsWith('ru')) { + updateState({ language: null, strings: ru, themes: [{ value: 'dark', label: ru.dark }, { value: 'light', label: ru.light }]}); } else { - updateState({ language: null, strings: en, themes: [{ value: null, label: en.default }, { value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); + updateState({ language: null, strings: en, themes: [{ value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); } } @@ -175,27 +193,48 @@ export function useSettingsContext() { setLanguage: (code: string) => { if (code && code.startsWith('fr')) { localStorage.setItem('language', 'fr'); - updateState({ language: 'fr', strings: fr, themes: [{ value: null, label: fr.default }, { value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); + updateState({ language: 'fr', strings: fr, themes: [{ value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); } else if (code && code.startsWith('sp')) { localStorage.setItem('language', 'sp'); - updateState({ language: 'sp', strings: sp, themes: [{ value: null, label: sp.default }, { value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + updateState({ language: 'sp', strings: sp, themes: [{ value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); } else if (code && code.startsWith('en')) { localStorage.setItem('language', 'en'); - updateState({ language: 'en', strings: en, themes: [{ value: null, label: fr.default }, { value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); + updateState({ language: 'en', strings: en, themes: [{ value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); + } + else if (code && code.startsWith('pt')) { + localStorage.setItem('language', 'pt'); + updateState({ language: 'pt', strings: pt, themes: [{ value: 'dark', label: pt.dark }, { value: 'light', label: pt.light }]}); + } + else if (code && code.startsWith('de')) { + localStorage.setItem('language', 'de'); + updateState({ language: 'de', strings: de, themes: [{ value: 'dark', label: de.dark }, { value: 'light', label: de.light }]}); + } + else if (code && code.startsWith('ru')) { + localStorage.setItem('language', 'ru'); + updateState({ language: 'ru', strings: ru, themes: [{ value: 'dark', label: ru.dark }, { value: 'light', label: ru.light }]}); } else { localStorage.removeItem('language'); const browser = navigator.language; if (browser && browser.startsWith('fr')) { - updateState({ language: null, strings: fr, themes: [{ value: null, label: fr.default }, { value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); + updateState({ language: null, strings: fr, themes: [{ value: 'dark', label: fr.dark }, { value: 'light', label: fr.light }]}); } - if (browser && browser.startsWith('sp')) { - updateState({ language: null, strings: sp, themes: [{ value: null, label: sp.default }, { value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + else if (browser && browser.startsWith('sp')) { + updateState({ language: null, strings: sp, themes: [{ value: 'dark', label: sp.dark }, { value: 'light', label: sp.light }]}); + } + else if (browser && browser.startsWith('pt')) { + updateState({ language: null, strings: pt, themes: [{ value: 'dark', label: pt.dark }, { value: 'light', label: pt.light }]}); + } + else if (browser && browser.startsWith('de')) { + updateState({ language: null, strings: de, themes: [{ value: 'dark', label: de.dark }, { value: 'light', label: de.light }]}); + } + else if (browser && browser.startsWith('ru')) { + updateState({ language: null, strings: ru, themes: [{ value: 'dark', label: ru.dark }, { value: 'light', label: ru.light }]}); } else { - updateState({ language: null, strings: en, themes: [{ value: null, label: en.default }, { value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); + updateState({ language: null, strings: en, themes: [{ value: 'dark', label: en.dark }, { value: 'light', label: en.light }]}); } } }, diff --git a/net/web/src/session/account/profile/Profile.jsx b/net/web/src/session/account/profile/Profile.jsx index 932c925e..7a02c48b 100644 --- a/net/web/src/session/account/profile/Profile.jsx +++ b/net/web/src/session/account/profile/Profile.jsx @@ -1,10 +1,10 @@ import { useRef, useCallback } from 'react'; -import { Modal, Input, Button, Switch } from 'antd'; +import { Modal, Input, Button } from 'antd'; import { ProfileWrapper, ProfileDetailsWrapper, ProfileImageWrapper } from './Profile.styled'; import { useProfile } from './useProfile.hook'; import { Logo } from 'logo/Logo'; import { AccountAccess } from './accountAccess/AccountAccess'; -import { LogoutOutlined, CloseOutlined, EditOutlined, BookOutlined, EnvironmentOutlined } from '@ant-design/icons'; +import { CloseOutlined, EditOutlined, BookOutlined, EnvironmentOutlined } from '@ant-design/icons'; import Cropper from 'react-easy-crop'; export function Profile({ closeProfile }) { @@ -12,7 +12,6 @@ export function Profile({ closeProfile }) { const [ modal, modalContext ] = Modal.useModal(); const { state, actions } = useProfile(); const imageFile = useRef(null); - const all = useRef(false); const selected = (e) => { var reader = new FileReader(); diff --git a/net/web/src/session/account/profile/accountAccess/AccountAccess.jsx b/net/web/src/session/account/profile/accountAccess/AccountAccess.jsx index eb5925a2..beeeb59c 100644 --- a/net/web/src/session/account/profile/accountAccess/AccountAccess.jsx +++ b/net/web/src/session/account/profile/accountAccess/AccountAccess.jsx @@ -131,7 +131,7 @@ export function AccountAccess() { size="small" value={state.theme} onChange={actions.setTheme} - options={state.themes} + options={[ { value: null, label: state.strings.default }, ...state.themes ]} />
@@ -142,7 +142,7 @@ export function AccountAccess() { size="small" value={state.language} onChange={actions.setLanguage} - options={state.languages} + options={[ { value: null, label: state.strings.default }, ...state.languages ]} />
@@ -153,7 +153,7 @@ export function AccountAccess() { size="small" value={state.audioId} onChange={actions.setAudio} - options={[ { value: null, label: 'Default' }, ...state.audioInputs ]} + options={[ { value: null, label: state.strings.default }, ...state.audioInputs ]} />
@@ -164,7 +164,7 @@ export function AccountAccess() { size="small" value={state.videoId} onChange={actions.setVideo} - options={[ { value: null, label: 'Default' }, ...state.videoInputs ]} + options={[ { value: null, label: state.strings.default }, ...state.videoInputs ]} />
diff --git a/net/web/src/session/account/profile/accountAccess/useAccountAccess.hook.js b/net/web/src/session/account/profile/accountAccess/useAccountAccess.hook.js index 933b5f2b..4759974c 100644 --- a/net/web/src/session/account/profile/accountAccess/useAccountAccess.hook.js +++ b/net/web/src/session/account/profile/accountAccess/useAccountAccess.hook.js @@ -2,7 +2,6 @@ import { useRef, useState, useEffect, useContext } from 'react'; import { AccountContext } from 'context/AccountContext'; import { ProfileContext } from 'context/ProfileContext'; import { SettingsContext } from 'context/SettingsContext'; -import { RingContext } from 'context/RingContext'; import { generateSeal, unlockSeal, updateSeal } from 'context/sealUtil'; import { getUsername } from 'api/getUsername'; export function useAccountAccess() { @@ -48,7 +47,6 @@ export function useAccountAccess() { const profile = useContext(ProfileContext); const account = useContext(AccountContext); const settings = useContext(SettingsContext); - const ring = useContext(RingContext); const debounce = useRef(null); const updateState = (value) => { diff --git a/net/web/src/session/details/Details.jsx b/net/web/src/session/details/Details.jsx index af7e27f4..cbe35544 100644 --- a/net/web/src/session/details/Details.jsx +++ b/net/web/src/session/details/Details.jsx @@ -1,5 +1,5 @@ import { Button, Modal, Tooltip } from 'antd'; -import { DetailsWrapper, ModalFooter } from './Details.styled'; +import { DetailsWrapper } from './Details.styled'; import { CloseOutlined } from '@ant-design/icons'; import { useDetails } from './useDetails.hook'; import { Logo } from 'logo/Logo'; @@ -114,19 +114,6 @@ export function Details({ closeDetails, closeConversation, openContact }) { } }; - const editSubjectFooter = ( - - - - - ); - - const editMembersFooter = ( - - - - ); - return ( { modalContext } diff --git a/net/web/src/session/details/Details.styled.js b/net/web/src/session/details/Details.styled.js index fda2e113..511da511 100644 --- a/net/web/src/session/details/Details.styled.js +++ b/net/web/src/session/details/Details.styled.js @@ -1,5 +1,4 @@ import styled from 'styled-components'; -import { Colors } from 'constants/Colors'; export const DetailsWrapper = styled.div` height: 100%; @@ -168,10 +167,3 @@ export const DetailsWrapper = styled.div` } ` -export const ModalFooter = styled.div` - width: 100%; - display: flex; - flex-direction: row; - justify-content: flex-end; - align-items: center; -` diff --git a/net/web/src/session/details/editMembers/EditMembers.styled.js b/net/web/src/session/details/editMembers/EditMembers.styled.js index 80b0c5af..e2061205 100644 --- a/net/web/src/session/details/editMembers/EditMembers.styled.js +++ b/net/web/src/session/details/editMembers/EditMembers.styled.js @@ -1,5 +1,4 @@ import styled from 'styled-components'; -import { Colors } from 'constants/Colors'; export const EditMembersWrapper = styled.div` display: flex; diff --git a/todo b/todo index c056775c..0dc01b8c 100644 --- a/todo +++ b/todo @@ -1,10 +1,2 @@ - -add languages: -portugues -german -russian - -fix lint warnings - trim docker image