added more translations

This commit is contained in:
Roland Osborne 2024-03-07 16:28:44 -08:00
parent b0fd1a2cd6
commit 67f7caa378
9 changed files with 611 additions and 56 deletions

View File

@ -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: 'Заметки'
}

View File

@ -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 }]});
}
}
},

View File

@ -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();

View File

@ -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 ]}
/>
</div>
<div className="option">
@ -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 ]}
/>
</div>
<div className="option">
@ -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 ]}
/>
</div>
<div className="option">
@ -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 ]}
/>
</div>
</div>

View File

@ -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) => {

View File

@ -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 = (
<ModalFooter>
<Button key="back" onClick={actions.clearEditSubject}>Cancel</Button>
<Button key="save" type="primary" onClick={saveSubject} loading={state.busy}>Save</Button>
</ModalFooter>
);
const editMembersFooter = (
<ModalFooter>
<Button key="back" onClick={actions.clearEditMembers}>Done</Button>
</ModalFooter>
);
return (
<DetailsWrapper>
{ modalContext }

View File

@ -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;
`

View File

@ -1,5 +1,4 @@
import styled from 'styled-components';
import { Colors } from 'constants/Colors';
export const EditMembersWrapper = styled.div`
display: flex;

8
todo
View File

@ -1,10 +1,2 @@
add languages:
portugues
german
russian
fix lint warnings
trim docker image