diff --git a/public/lang/pt-BR.json b/public/lang/pt-BR.json
new file mode 100644
index 0000000..1cd6283
--- /dev/null
+++ b/public/lang/pt-BR.json
@@ -0,0 +1,165 @@
+{
+ "header": {
+ "about_title": "Sobre o PairDrop",
+ "language-selector_title": "Definir idioma",
+ "about_aria-label": "Abrir Sobre o PairDrop",
+ "theme-auto_title": "Adaptar o tema ao sistema automaticamente",
+ "theme-light_title": "Sempre usar o tema claro",
+ "theme-dark_title": "Sempre usar o tema escuro",
+ "notification_title": "Ativar notificações",
+ "install_title": "Instalar o PairDrop",
+ "pair-device_title": "Emparelhar seus dispositivos permanentemente",
+ "edit-paired-devices_title": "Editar dispositivos emparelhados",
+ "join-public-room_title": "Entrar em uma sala pública temporariamente",
+ "cancel-paste-mode": "Concluído"
+ },
+ "instructions": {
+ "no-peers_data-drop-bg": "Solte para selecionar o destinatário",
+ "no-peers-title": "Abra o PairDrop em outros dispositivos para enviar arquivos",
+ "no-peers-subtitle": "Emparelhe dispositivos ou entre em uma sala pública para ser descoberto em outras redes",
+ "x-instructions_desktop": "Clique para enviar arquivos ou clique com o botão direito para enviar uma mensagem",
+ "x-instructions_mobile": "Toque para enviar arquivos ou toque e segure para enviar uma mensagem",
+ "x-instructions_data-drop-peer": "Solte para enviar para o par",
+ "x-instructions_data-drop-bg": "Solte para selecionar o destinatário",
+ "click-to-send": "Clique para enviar",
+ "tap-to-send": "Toque para enviar",
+ "activate-paste-mode-base": "Abra o PairDrop em outros dispositivos para enviar",
+ "activate-paste-mode-and-other-files": "e {{count}} outros arquivos",
+ "activate-paste-mode-shared-text": "texto compartilhado"
+ },
+ "footer": {
+ "known-as": "Você é conhecido como:",
+ "display-name_data-placeholder": "Carregando…",
+ "display-name_title": "Edite o nome do seu dispositivo permanentemente",
+ "discovery": "Você pode ser descoberto:",
+ "on-this-network": "nesta rede",
+ "on-this-network_title": "Você pode ser descoberto por todos nesta rede.",
+ "paired-devices": "por dispositivos emparelhados",
+ "paired-devices_title": "Você pode ser descoberto por dispositivos emparelhados a qualquer momento, independentemente da rede.",
+ "public-room-devices": "na sala {{roomId}}",
+ "public-room-devices_title": "Você pode ser descoberto por dispositivos nesta sala pública, independentemente da rede.",
+ "traffic": "O tráfego é",
+ "routed": "roteado pelo servidor",
+ "webrtc": "se o WebRTC não estiver disponível."
+ },
+ "dialogs": {
+ "pair-devices-title": "Emparelhar Dispositivos Permanentemente",
+ "input-key-on-this-device": "Insira esta chave em outro dispositivo",
+ "scan-qr-code": "ou escaneie o código QR.",
+ "enter-key-from-another-device": "Insira a chave de outro dispositivo aqui.",
+ "temporary-public-room-title": "Sala Pública Temporária",
+ "input-room-id-on-another-device": "Insira este ID de sala em outro dispositivo",
+ "enter-room-id-from-another-device": "Insira o ID da sala de outro dispositivo para entrar na sala.",
+ "hr-or": "OU",
+ "pair": "Emparelhar",
+ "cancel": "Cancelar",
+ "edit-paired-devices-title": "Editar Dispositivos Emparelhados",
+ "unpair": "Desemparelhar",
+ "paired-devices-wrapper_data-empty": "Nenhum dispositivo emparelhado.",
+ "auto-accept-instructions-1": "Ative",
+ "auto-accept": "auto-aceitar",
+ "auto-accept-instructions-2": "para aceitar automaticamente todos os arquivos enviados por esse dispositivo.",
+ "close": "Fechar",
+ "join": "Entrar",
+ "leave": "Sair",
+ "would-like-to-share": "gostaria de compartilhar",
+ "accept": "Aceitar",
+ "decline": "Recusar",
+ "has-sent": "enviou:",
+ "share": "Compartilhar",
+ "download": "Baixar",
+ "send-message-title": "Enviar Mensagem",
+ "send-message-to": "Enviar uma Mensagem para",
+ "message_title": "Insira a mensagem a ser enviada",
+ "send": "Enviar",
+ "receive-text-title": "Mensagem Recebida",
+ "copy": "Copiar",
+ "base64-processing": "Processando…",
+ "base64-tap-to-paste": "Toque aqui para colar {{type}}",
+ "base64-paste-to-send": "Cole aqui para enviar {{type}}",
+ "base64-text": "texto",
+ "base64-files": "arquivos",
+ "file-other-description-image": "e mais 1 imagem",
+ "file-other-description-file": "e mais 1 arquivo",
+ "file-other-description-image-plural": "e mais {{count}} imagens",
+ "file-other-description-file-plural": "e mais {{count}} arquivos",
+ "title-image": "Imagem",
+ "title-file": "Arquivo",
+ "title-image-plural": "Imagens",
+ "title-file-plural": "Arquivos",
+ "receive-title": "{{descriptor}} Recebido",
+ "download-again": "Baixar novamente",
+ "language-selector-title": "Definir idioma",
+ "system-language": "Idioma do sistema",
+ "public-room-qr-code_title": "Clique para copiar o link da sala pública",
+ "pair-devices-qr-code_title": "Clique para copiar o link para emparelhar este dispositivo"
+ },
+ "about": {
+ "close-about_aria-label": "Fechar Sobre o PairDrop",
+ "claim": "A maneira mais fácil de transferir arquivos entre dispositivos",
+ "github_title": "PairDrop no GitHub",
+ "buy-me-a-coffee_title": "Me compre um café!",
+ "tweet_title": "Tweet sobre o PairDrop",
+ "faq_title": "Perguntas frequentes"
+ },
+ "notifications": {
+ "display-name-changed-permanently": "O nome de exibição é alterado permanentemente.",
+ "display-name-changed-temporarily": "O nome de exibição é alterado apenas para esta sessão.",
+ "display-name-random-again": "O nome de exibição é gerado aleatoriamente novamente.",
+ "download-successful": "{{descriptor}} baixado",
+ "pairing-tabs-error": "Emparelhar duas abas do navegador web é impossível.",
+ "pairing-success": "Dispositivos emparelhados.",
+ "pairing-not-persistent": "Dispositivos emparelhados não são persistentes.",
+ "pairing-key-invalid": "Chave inválida",
+ "pairing-key-invalidated": "Chave {{key}} invalidada.",
+ "pairing-cleared": "Todos os dispositivos desemparelhados.",
+ "public-room-id-invalid": "ID da sala inválido",
+ "public-room-left": "Saiu da sala pública {{publicRoomId}}",
+ "copied-to-clipboard": "Copiado para a área de transferência",
+ "pair-url-copied-to-clipboard": "Link para emparelhar este dispositivo copiado para a área de transferência",
+ "room-url-copied-to-clipboard": "Link para a sala pública copiado para a área de transferência",
+ "copied-to-clipboard-error": "Cópia não possível. Copie manualmente.",
+ "text-content-incorrect": "O conteúdo do texto está incorreto.",
+ "file-content-incorrect": "O conteúdo do arquivo está incorreto.",
+ "clipboard-content-incorrect": "O conteúdo da área de transferência está incorreto.",
+ "notifications-enabled": "Notificações ativadas.",
+ "notifications-permissions-error": "A permissão de notificações foi bloqueada porque o usuário dispensou o prompt de permissão várias vezes. Isso pode ser redefinido nas Informações da Página, que podem ser acessadas clicando no ícone de cadeado ao lado da barra de URL.",
+ "link-received": "Link recebido por {{name}} - Clique para abrir",
+ "message-received": "Mensagem recebida por {{name}} - Clique para copiar",
+ "click-to-download": "Clique para baixar",
+ "request-title": "{{name}} gostaria de transferir {{count}} {{descriptor}}",
+ "click-to-show": "Clique para mostrar",
+ "copied-text": "Texto copiado para a área de transferência",
+ "copied-text-error": "Escrever na área de transferência falhou. Copie manualmente!",
+ "offline": "Você está offline",
+ "online": "Você está online novamente",
+ "connected": "Conectado.",
+ "online-requirement-pairing": "Você precisa estar online para emparelhar dispositivos.",
+ "online-requirement-public-room": "Você precisa estar online para criar uma sala pública.",
+ "connecting": "Conectando…",
+ "files-incorrect": "Os arquivos estão incorretos.",
+ "file-transfer-completed": "Transferência de arquivo concluída.",
+ "ios-memory-limit": "Enviar arquivos para iOS só é possível até 200 MB de uma vez",
+ "message-transfer-completed": "Transferência de mensagem concluída.",
+ "unfinished-transfers-warning": "Há transferências inacabadas. Tem certeza de que deseja fechar o PairDrop?",
+ "rate-limit-join-key": "Limite de taxa atingido. Aguarde 10 segundos e tente novamente.",
+ "selected-peer-left": "Par selecionado saiu."
+ },
+ "document-titles": {
+ "file-received": "Arquivo recebido",
+ "file-received-plural": "{{count}} Arquivos recebidos",
+ "file-transfer-requested": "Transferência de arquivo solicitada",
+ "image-transfer-requested": "Transferência de imagem solicitada",
+ "message-received": "Mensagem recebida",
+ "message-received-plural": "{{count}} mensagens recebidas"
+ },
+ "peer-ui": {
+ "click-to-send-paste-mode": "Clique para enviar {{descriptor}}",
+ "click-to-send": "Clique para enviar arquivos ou clique com o botão direito para enviar uma mensagem",
+ "connection-hash": "Para verificar a segurança da criptografia de ponta a ponta, compare este número de segurança em ambos os dispositivos",
+ "preparing": "Preparando…",
+ "waiting": "Aguardando…",
+ "processing": "Processando…",
+ "transferring": "Transferindo…"
+ }
+}
\ No newline at end of file
diff --git a/public/scripts/localization.js b/public/scripts/localization.js
index 7f5961d..5c37728 100644
--- a/public/scripts/localization.js
+++ b/public/scripts/localization.js
@@ -1,7 +1,7 @@
class Localization {
constructor() {
Localization.defaultLocale = "en";
- Localization.supportedLocales = ["ar", "de", "en", "es", "fr", "id", "it", "ja", "nb", "nl", "ro", "ru", "tr", "zh-CN"];
+ Localization.supportedLocales = ["ar", "de", "en", "es", "fr", "id", "it", "ja", "nb", "nl", "ro", "ru", "tr", "zh-CN","pt-BR"];
Localization.supportedLocalesRTL = ["ar"];
Localization.translations = {};
@@ -31,7 +31,13 @@ class Localization {
}
static getSupportedOrDefault(locales) {
- return locales.find(Localization.isSupported) || Localization.defaultLocale;
+ let localesGeneric = locales
+ .map(locale => locale.split("-")[0])
+ .filter(locale => locales.indexOf(locale) === -1);
+
+ return locales.find(Localization.isSupported)
+ || localesGeneric.find(Localization.isSupported)
+ || Localization.defaultLocale;
}
static async setTranslation(locale) {
diff --git a/public/scripts/ui.js b/public/scripts/ui.js
index c124d2b..089d687 100644
--- a/public/scripts/ui.js
+++ b/public/scripts/ui.js
@@ -1268,9 +1268,9 @@ class PairDeviceDialog extends Dialog {
content: this._getPairUrl(),
width: 150,
height: 150,
- padding: 0,
- background: "transparent",
- color: `rgb(var(--text-color))`,
+ padding: 1,
+ background: 'rgb(250,250,250)',
+ color: 'rgb(18, 18, 18)',
ecl: "L",
join: true
});
@@ -1619,9 +1619,9 @@ class PublicRoomDialog extends Dialog {
content: this._getShareRoomUrl(),
width: 150,
height: 150,
- padding: 0,
- background: "transparent",
- color: `rgb(var(--text-color))`,
+ padding: 1,
+ background: 'rgb(250,250,250)',
+ color: 'rgb(18, 18, 18)',
ecl: "L",
join: true
});
diff --git a/public/service-worker.js b/public/service-worker.js
index 2b6701c..f84d49d 100644
--- a/public/service-worker.js
+++ b/public/service-worker.js
@@ -1,4 +1,4 @@
-const cacheVersion = 'v1.9.2';
+const cacheVersion = 'v1.9.4';
const cacheTitle = `pairdrop-cache-${cacheVersion}`;
const forceFetch = false; // FOR DEVELOPMENT: Set to true to always update assets instead of using cached versions
const urlsToCache = [
diff --git a/public_included_ws_fallback/index.html b/public_included_ws_fallback/index.html
index 4f843ac..a2713d1 100644
--- a/public_included_ws_fallback/index.html
+++ b/public_included_ws_fallback/index.html
@@ -191,6 +191,11 @@
-
(Norwegian)
+