83 changed files with 3416 additions and 388 deletions
|
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
#!/bin/sh |
||||
# |
||||
# This script blocks all outbound and inbound DNS except DNS. If all UDP is |
||||
# blocked, the only way to do a peer to peer connection is with a TURN server |
||||
# which supports tcp. |
||||
# |
||||
# NOTE: this script requires Linux and must be run as root/sudo. |
||||
# |
||||
# (c)2016 struktur AG |
||||
# http://www.struktur.de |
||||
|
||||
set -e |
||||
RETVAL=0 |
||||
|
||||
run() { |
||||
set -x |
||||
local mode=$1 |
||||
iptables $mode INPUT -p udp --sport 53 -j ACCEPT |
||||
iptables $mode INPUT -p udp --dport 53 -j ACCEPT |
||||
iptables $mode OUTPUT -p udp --sport 53 -j ACCEPT |
||||
iptables $mode OUTPUT -p udp --dport 53 -j ACCEPT |
||||
|
||||
iptables $mode INPUT -p udp -j DROP |
||||
iptables $mode OUTPUT -p udp -j DROP |
||||
set +x |
||||
} |
||||
|
||||
start() { |
||||
run -A |
||||
} |
||||
|
||||
stop() { |
||||
set +e |
||||
run -D |
||||
set -e |
||||
} |
||||
|
||||
case "$1" in |
||||
start) |
||||
start |
||||
;; |
||||
stop) |
||||
stop |
||||
;; |
||||
*) |
||||
echo "Usage: $0 [start|stop]" |
||||
RETVAL=1 |
||||
;; |
||||
esac |
||||
|
||||
exit $RETVAL |
@ -0,0 +1,140 @@
@@ -0,0 +1,140 @@
|
||||
/* |
||||
* Spreed WebRTC. |
||||
* Copyright (C) 2013-2016 struktur AG |
||||
* |
||||
* This file is part of Spreed WebRTC. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* |
||||
*/ |
||||
|
||||
package channelling |
||||
|
||||
import ( |
||||
"log" |
||||
"sync" |
||||
"time" |
||||
|
||||
"github.com/strukturag/spreed-turnservicecli/turnservicecli" |
||||
) |
||||
|
||||
type TURNServiceManager interface { |
||||
TurnDataCreator |
||||
} |
||||
|
||||
type turnServiceManager struct { |
||||
sync.Mutex |
||||
pleaders map[uint64]Sender // Mapping of clients waiting to receive TURN data.
|
||||
|
||||
uri string |
||||
accessToken string |
||||
clientID string |
||||
turnService *turnservicecli.TURNService |
||||
} |
||||
|
||||
func NewTURNServiceManager(uri string, accessToken string, clientID string) TURNServiceManager { |
||||
turnService := turnservicecli.NewTURNService(uri, 0, nil) |
||||
mgr := &turnServiceManager{ |
||||
uri: uri, |
||||
accessToken: accessToken, |
||||
clientID: clientID, |
||||
|
||||
turnService: turnService, |
||||
pleaders: make(map[uint64]Sender), |
||||
} |
||||
|
||||
turnService.Open(accessToken, clientID, "") |
||||
turnService.BindOnCredentials(mgr.onCredentials) |
||||
log.Println("Fetching TURN credentials from service") |
||||
go func() { |
||||
//time.Sleep(10000 * time.Millisecond)
|
||||
turnService.Autorefresh(true) |
||||
}() |
||||
// Wait a bit, to give TURN service some time to populate credentials, so
|
||||
// we avoid to have send them as an update for fast reconnecting clients.
|
||||
time.Sleep(500 * time.Millisecond) |
||||
if mgr.turnService.Credentials(false) == nil { |
||||
log.Println("No TURN credentials from service on startup - extra traffic for clients connecting before credentials have been received") |
||||
} |
||||
|
||||
return mgr |
||||
} |
||||
|
||||
func (mgr *turnServiceManager) CreateTurnData(sender Sender, session *Session) *DataTurn { |
||||
credentials := mgr.turnService.Credentials(false) |
||||
turn, err := mgr.turnData(credentials) |
||||
if err != nil || turn.Ttl == 0 { |
||||
// When no data was return from service, refresh quickly.
|
||||
mgr.Lock() |
||||
mgr.pleaders[sender.Index()] = sender |
||||
mgr.Unlock() |
||||
|
||||
// Have client come back early.
|
||||
turn.Ttl = 300 |
||||
} |
||||
|
||||
return turn |
||||
} |
||||
|
||||
func (mgr *turnServiceManager) turnData(credentials *turnservicecli.CachedCredentialsData) (*DataTurn, error) { |
||||
turn := &DataTurn{} |
||||
if credentials != nil { |
||||
ttl := credentials.TTL() |
||||
if ttl > 0 { |
||||
turn.Username = credentials.Turn.Username |
||||
turn.Password = credentials.Turn.Password |
||||
turn.Servers = credentials.Turn.Servers |
||||
turn.Ttl = int(ttl) |
||||
turn.GeoURI = credentials.Turn.GeoURI |
||||
|
||||
if len(turn.Servers) > 0 { |
||||
// For backwards compatibility with clients which do not
|
||||
// understand turn.Servers, directly deliver the TURN
|
||||
// server zone URNs with the lowest priority.
|
||||
minPrio := 0 |
||||
minPrioIdx := -1 |
||||
for idx, server := range turn.Servers { |
||||
if minPrioIdx == -1 || server.Prio < minPrio { |
||||
minPrio = server.Prio |
||||
minPrioIdx = idx |
||||
} |
||||
} |
||||
turn.Urls = turn.Servers[minPrioIdx].URNs |
||||
} |
||||
} |
||||
} |
||||
|
||||
return turn, nil |
||||
} |
||||
|
||||
func (mgr *turnServiceManager) onCredentials(credentials *turnservicecli.CachedCredentialsData, err error) { |
||||
if err != nil { |
||||
log.Printf("TURN credentials service error: %s\n", err.Error()) |
||||
return |
||||
} |
||||
|
||||
log.Println("Received TURN credentials from service", credentials.Turn.Username) |
||||
|
||||
mgr.Lock() |
||||
for _, sender := range mgr.pleaders { |
||||
if turn, err := mgr.turnData(credentials); err == nil { |
||||
sender.Outgoing(&DataTurnUpdate{ |
||||
Type: "TurnUpdate", |
||||
Turn: turn, |
||||
}) |
||||
} |
||||
} |
||||
mgr.pleaders = make(map[uint64]Sender) // Clear.
|
||||
mgr.Unlock() |
||||
} |
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
/* |
||||
* Spreed WebRTC. |
||||
* Copyright (C) 2013-2016 struktur AG |
||||
* |
||||
* This file is part of Spreed WebRTC. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* |
||||
*/ |
||||
|
||||
package main |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"html/template" |
||||
) |
||||
|
||||
func templateFuncMap() template.FuncMap { |
||||
return template.FuncMap{ |
||||
"json": func(obj interface{}) (template.JS, error) { |
||||
data, err := json.Marshal(obj) |
||||
if err != nil { |
||||
return "", err |
||||
} |
||||
return template.JS(data), nil |
||||
}, |
||||
} |
||||
} |
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
/* |
||||
* Spreed WebRTC. |
||||
* Copyright (C) 2013-2016 struktur AG |
||||
* |
||||
* This file is part of Spreed WebRTC. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* |
||||
*/ |
||||
|
||||
package main |
||||
|
||||
import ( |
||||
"bytes" |
||||
"html/template" |
||||
"testing" |
||||
) |
||||
|
||||
const ( |
||||
templateString = `<script type="application/json">{{json .}}</script>` |
||||
expectedString = `<script type="application/json">{"name":"Peter"}</script>` |
||||
) |
||||
|
||||
type testPerson struct { |
||||
Name string `json:"name"` |
||||
} |
||||
|
||||
func TestHTMLTemplateWithJSON(t *testing.T) { |
||||
tmpl := template.New("").Funcs(templateFuncMap()) |
||||
if _, err := tmpl.Parse(templateString); err != nil { |
||||
t.Fatalf("Could not parse template '%s': %s", templateString, err.Error()) |
||||
} |
||||
buf := bytes.NewBuffer(nil) |
||||
tmpl.Execute(buf, testPerson{Name: "Peter"}) |
||||
out := buf.String() |
||||
if out != expectedString { |
||||
t.Fatalf("Strings do not match: got '%s', want '%s'", out, expectedString) |
||||
} |
||||
} |
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
{ |
||||
"connect1": [ |
||||
0, |
||||
5179 |
||||
], |
||||
"end1": [ |
||||
5228, |
||||
6199 |
||||
], |
||||
"entry1": [ |
||||
11476, |
||||
3000 |
||||
], |
||||
"leaving1": [ |
||||
14526, |
||||
2126 |
||||
], |
||||
"message1": [ |
||||
16701, |
||||
816 |
||||
], |
||||
"question1": [ |
||||
17567, |
||||
3313 |
||||
], |
||||
"ringtone1": [ |
||||
20929, |
||||
935 |
||||
], |
||||
"whistle1": [ |
||||
21913, |
||||
1405 |
||||
] |
||||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,892 @@
@@ -0,0 +1,892 @@
|
||||
# Spanish translations for Spreed WebRTC. |
||||
# Copyright (C) 2016 struktur AG |
||||
# This file is distributed under the same license as the Spreed WebRTC |
||||
# project. |
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016. |
||||
# |
||||
#, fuzzy |
||||
msgid "" |
||||
msgstr "" |
||||
"Project-Id-Version: Spreed WebRTC 1.0\n" |
||||
"Report-Msgid-Bugs-To: simon@struktur.de\n" |
||||
"POT-Creation-Date: 2016-08-18 18:21+0200\n" |
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
||||
"Last-Translator: Jhon Felipe Urrego Mejia " |
||||
"<ingenierofelipeurrego@gmail.com>\n" |
||||
"Language-Team: es <LL@li.org>\n" |
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n" |
||||
"MIME-Version: 1.0\n" |
||||
"Content-Type: text/plain; charset=utf-8\n" |
||||
"Content-Transfer-Encoding: 8bit\n" |
||||
"Generated-By: Babel 1.3\n" |
||||
|
||||
msgid "Standard view" |
||||
msgstr "Vista estándar" |
||||
|
||||
msgid "Large view" |
||||
msgstr "Vista grande" |
||||
|
||||
msgid "Kiosk view" |
||||
msgstr "Vista de Quiosco" |
||||
|
||||
msgid "Auditorium" |
||||
msgstr "Auditorio" |
||||
|
||||
msgid "Start chat" |
||||
msgstr "Iniciar chat" |
||||
|
||||
msgid "Start video call" |
||||
msgstr "Iniciar videollamada" |
||||
|
||||
msgid "Start audio conference" |
||||
msgstr "Iniciar conferencia de audio" |
||||
|
||||
msgid "No one else here" |
||||
msgstr "No hay nadie aquí" |
||||
|
||||
msgid "Take" |
||||
msgstr "Tomar" |
||||
|
||||
msgid "Retake" |
||||
msgstr "Repetir" |
||||
|
||||
msgid "Cancel" |
||||
msgstr "Cancelar" |
||||
|
||||
msgid "Set as Profile Picture" |
||||
msgstr "Establecer como imagen de perfil" |
||||
|
||||
msgid "Take picture" |
||||
msgstr "Tomar foto" |
||||
|
||||
msgid "Upload picture" |
||||
msgstr "Subir imagen" |
||||
|
||||
msgid "Waiting for camera" |
||||
msgstr "Esperando cámara" |
||||
|
||||
msgid "Picture" |
||||
msgstr "Imagen" |
||||
|
||||
msgid "The file couldn't be read." |
||||
msgstr "El archivo no pudo ser leído." |
||||
|
||||
msgid "The file is not an image." |
||||
msgstr "El archivo no es una imagen." |
||||
|
||||
#, python-format |
||||
msgid "The file is too large. Max. %d MB." |
||||
msgstr "El archivo es demasiado grande. Max. %d MB." |
||||
|
||||
msgid "Select file" |
||||
msgstr "Seleccionar archivo" |
||||
|
||||
msgid "Chat sessions" |
||||
msgstr "Sesiones de chat" |
||||
|
||||
msgid "Room chat" |
||||
msgstr "Sala de chat" |
||||
|
||||
msgid "Peer to peer" |
||||
msgstr "Extremo a extremo" |
||||
|
||||
msgid "Close chat" |
||||
msgstr "Cerrar chat" |
||||
|
||||
msgid "Upload files" |
||||
msgstr "Subir archivos" |
||||
|
||||
msgid "Share my location" |
||||
msgstr "Compartir mi ubicación" |
||||
|
||||
msgid "Clear chat" |
||||
msgstr "Borrar chat" |
||||
|
||||
msgid "is typing..." |
||||
msgstr "está escribiendo..." |
||||
|
||||
msgid "has stopped typing..." |
||||
msgstr "ha dejado de escribir..." |
||||
|
||||
msgid "Type here to chat..." |
||||
msgstr "Escriba aquí para charlar..." |
||||
|
||||
msgid "Send" |
||||
msgstr "Enviar" |
||||
|
||||
msgid "Accept" |
||||
msgstr "Aceptar" |
||||
|
||||
msgid "Reject" |
||||
msgstr "Rechazar" |
||||
|
||||
msgid "You have no contacts." |
||||
msgstr "No dispone de contactos." |
||||
|
||||
msgid "" |
||||
"To add new contacts, join a room and create a contact add request by " |
||||
"clicking on the star icon next to a user entry." |
||||
msgstr "" |
||||
"Para agregar nuevos contactos, unirse a una sala y crear una solicitud de" |
||||
" contacto al hacer click en el icono de la estrella junto al nombre del " |
||||
"usuario." |
||||
|
||||
msgid "Edit contact" |
||||
msgstr "Editar contacto" |
||||
|
||||
msgid "Edit" |
||||
msgstr "Editar" |
||||
|
||||
msgid "Name" |
||||
msgstr "Nombre" |
||||
|
||||
msgid "Remove" |
||||
msgstr "Remover" |
||||
|
||||
msgid "Refresh" |
||||
msgstr "Refrescar" |
||||
|
||||
msgid "Save" |
||||
msgstr "Guardar" |
||||
|
||||
msgid "Close" |
||||
msgstr "Cerrar" |
||||
|
||||
msgid "File sharing" |
||||
msgstr "Compartir archivos" |
||||
|
||||
msgid "File is no longer available" |
||||
msgstr "El archivo ya no está disponible" |
||||
|
||||
msgid "Download" |
||||
msgstr "Descargar" |
||||
|
||||
msgid "Open" |
||||
msgstr "Abierto" |
||||
|
||||
msgid "Unshare" |
||||
msgstr "No compartir" |
||||
|
||||
msgid "Retry" |
||||
msgstr "Reintentar" |
||||
|
||||
msgid "Download failed." |
||||
msgstr "Error de descarga." |
||||
|
||||
msgid "Share a YouTube video" |
||||
msgstr "Compartir un vídeo de YouTube" |
||||
|
||||
msgid "Share a file as presentation" |
||||
msgstr "Compartir un archivo como presentación" |
||||
|
||||
msgid "Share your screen" |
||||
msgstr "Compartir la pantalla" |
||||
|
||||
msgid "Chat" |
||||
msgstr "Chat" |
||||
|
||||
msgid "Contacts" |
||||
msgstr "Contactos" |
||||
|
||||
msgid "Mute microphone" |
||||
msgstr "Silenciar micrófono" |
||||
|
||||
msgid "Turn camera off" |
||||
msgstr "Apagar cámara" |
||||
|
||||
msgid "Settings" |
||||
msgstr "Ajustes" |
||||
|
||||
msgid "Loading presentation ..." |
||||
msgstr "Cargando la presentación ..." |
||||
|
||||
msgid "Please upload a document" |
||||
msgstr "Subir un documento" |
||||
|
||||
msgid "" |
||||
"Documents are shared with everyone in this call. The supported file types" |
||||
" are PDF and OpenDocument files." |
||||
msgstr "" |
||||
"Los documentos son compartidos con todos los participantes en esta " |
||||
"llamada. Los tipos de archivo admitidos son PDF y archivos OpenDocument." |
||||
|
||||
msgid "Upload" |
||||
msgstr "Subir" |
||||
|
||||
msgid "You can drag files here too." |
||||
msgstr "Puede arrastrar archivos aquí también." |
||||
|
||||
msgid "Presentation controls" |
||||
msgstr "Controles de presentación" |
||||
|
||||
msgid "Prev" |
||||
msgstr "Ant" |
||||
|
||||
msgid "Next" |
||||
msgstr "Sig" |
||||
|
||||
msgid "Change room" |
||||
msgstr "Cambiar de sala" |
||||
|
||||
msgid "Room" |
||||
msgstr "Sala" |
||||
|
||||
msgid "Leave room" |
||||
msgstr "Abandonar sala" |
||||
|
||||
msgid "Main" |
||||
msgstr "Principal" |
||||
|
||||
msgid "Current room" |
||||
msgstr "Sala actual" |
||||
|
||||
msgid "Screen sharing options" |
||||
msgstr "Opciones para compartir pantalla" |
||||
|
||||
msgid "Fit screen." |
||||
msgstr "Ajustar pantalla." |
||||
|
||||
msgid "Share screen" |
||||
msgstr "Compartir pantalla" |
||||
|
||||
msgid "Please select what to share." |
||||
msgstr "Seleccione qué compartir." |
||||
|
||||
msgid "Screen" |
||||
msgstr "Pantalla" |
||||
|
||||
msgid "Window" |
||||
msgstr "Ventana" |
||||
|
||||
msgid "Application" |
||||
msgstr "Aplicación" |
||||
|
||||
msgid "Share the whole screen. Click share to select the screen." |
||||
msgstr "" |
||||
"Compartir toda la pantalla. Haga clic en Compartir para seleccionar la " |
||||
"pantalla." |
||||
|
||||
msgid "Share a single window. Click share to select the window." |
||||
msgstr "" |
||||
"Compartir una sola ventana. Haga clic en Compartir para seleccionar la " |
||||
"ventana." |
||||
|
||||
msgid "" |
||||
"Share all windows of a application. This can leak content behind windows " |
||||
"when windows get moved. Click share to select the application." |
||||
msgstr "" |
||||
"Compartir todas las ventanas de una aplicación. Esto puede gotear el " |
||||
"contenido detrás de Windows Cuando Windows se mueven. Haga clic en " |
||||
"Compartir para seleccionar la aplicación." |
||||
|
||||
msgid "Share" |
||||
msgstr "Compartir" |
||||
|
||||
msgid "OK" |
||||
msgstr "OK" |
||||
|
||||
msgid "Profile" |
||||
msgstr "Perfil" |
||||
|
||||
msgid "Your name" |
||||
msgstr "Su nombre" |
||||
|
||||
msgid "Your picture" |
||||
msgstr "Su imagen" |
||||
|
||||
msgid "Status message" |
||||
msgstr "Mensaje de estado" |
||||
|
||||
msgid "What's on your mind?" |
||||
msgstr "¿Qué está pensando?" |
||||
|
||||
msgid "" |
||||
"Your picture, name and status message identify yourself in calls, chats " |
||||
"and rooms." |
||||
msgstr "" |
||||
"Su imagen, nombre y mensaje de estado te identificará en llamadas, chat y" |
||||
" en las salas." |
||||
|
||||
msgid "Your ID" |
||||
msgstr "Su ID" |
||||
|
||||
msgid "" |
||||
"Authenticated by certificate. To log out you have to remove your " |
||||
"certificate from the browser." |
||||
msgstr "" |
||||
"Autentificado por certificado. Para cerrar su sesión tendrá que quitar el" |
||||
" certificado de su navegador." |
||||
|
||||
msgid "Sign in" |
||||
msgstr "Iniciar sesión" |
||||
|
||||
msgid "Create an account" |
||||
msgstr "Crear una cuenta" |
||||
|
||||
msgid "Sign out" |
||||
msgstr "Cerrar sesión" |
||||
|
||||
msgid "Manage account" |
||||
msgstr "Administrar cuenta" |
||||
|
||||
msgid "Media" |
||||
msgstr "Medios" |
||||
|
||||
msgid "Microphone" |
||||
msgstr "Micrófono" |
||||
|
||||
msgid "Camera" |
||||
msgstr "Cámara" |
||||
|
||||
msgid "Video quality" |
||||
msgstr "Calidad de vídeo" |
||||
|
||||
msgid "Low" |
||||
msgstr "Baja" |
||||
|
||||
msgid "High" |
||||
msgstr "Alta" |
||||
|
||||
msgid "HD" |
||||
msgstr "HD" |
||||
|
||||
msgid "Full HD" |
||||
msgstr "Full HD" |
||||
|
||||
msgid "General" |
||||
msgstr "General" |
||||
|
||||
msgid "Language" |
||||
msgstr "Idioma" |
||||
|
||||
msgid "Language changes become active on reload." |
||||
msgstr "Cambios de lenguaje se vuelven activos al recargar." |
||||
|
||||
msgid "Default room" |
||||
msgstr "Sala predeterminada" |
||||
|
||||
msgid "Set alternative room to join at start." |
||||
msgstr "Establecer otra sala para unirse al inicio." |
||||
|
||||
msgid "Notifications" |
||||
msgstr "Notificaciones" |
||||
|
||||
msgid "Desktop notification" |
||||
msgstr "Notificación de escritorio" |
||||
|
||||
msgid "Enable" |
||||
msgstr "Activar" |
||||
|
||||
msgid "Denied - check your browser settings" |
||||
msgstr "Denegado - compruebe la configuración de su navegador" |
||||
|
||||
msgid "Allowed" |
||||
msgstr "Permitido" |
||||
|
||||
msgid "Sounds for incoming messages" |
||||
msgstr "Sonidos para los mensajes entrantes" |
||||
|
||||
msgid "Ring on incoming calls" |
||||
msgstr "Sonar con llamadas entrantes" |
||||
|
||||
msgid "Sounds for users in current room" |
||||
msgstr "Sonidos para usuarios en sala actual" |
||||
|
||||
msgid "Advanced settings" |
||||
msgstr "Configuración avanzada" |
||||
|
||||
msgid "Play audio on same device as selected microphone" |
||||
msgstr "Reproducir audio en el mismo dispositivo seleccionado como micrófono" |
||||
|
||||
msgid "Experimental AEC" |
||||
msgstr "Cancelación de Eco Acústico Experimental" |
||||
|
||||
msgid "Experimental AGC" |
||||
msgstr "Control de Ganancia Automática Experimental" |
||||
|
||||
msgid "Experimental noise suppression" |
||||
msgstr "Supresión de ruido experimental" |
||||
|
||||
msgid "Max video frame rate" |
||||
msgstr "Máx. velocidad de fotogramas de vídeo" |
||||
|
||||
msgid "auto" |
||||
msgstr "auto" |
||||
|
||||
msgid "Send stereo audio" |
||||
msgstr "Enviar audio estéreo" |
||||
|
||||
msgid "" |
||||
"Sending stereo audio disables echo cancellation. Enable only if you have " |
||||
"stereo input." |
||||
msgstr "" |
||||
"Envío de audio estéreo desactiva la cancelación del eco. Activar sólo si " |
||||
"tienes La entrada estéreo." |
||||
|
||||
msgid "Detect CPU over use" |
||||
msgstr "detectar sobreuso de la CPU" |
||||
|
||||
msgid "Automatically reduces video quality as needed." |
||||
msgstr "Reduce automáticamente la calidad de vídeo cuando sea necesario." |
||||
|
||||
msgid "Optimize for high resolution video" |
||||
msgstr "Optimizar para vídeo de alta resolución" |
||||
|
||||
msgid "Reduce video noise" |
||||
msgstr "Reducir el ruido de vídeo" |
||||
|
||||
msgid "Prefer VP9 video codec" |
||||
msgstr "Prefiere VP9 códec de vídeo" |
||||
|
||||
msgid "Enable experiments" |
||||
msgstr "Permitir experimentos" |
||||
|
||||
msgid "Show advanced settings" |
||||
msgstr "Mostrar opciones avanzadas" |
||||
|
||||
msgid "Hide advanced settings" |
||||
msgstr "Ocultar opciones avanzadas" |
||||
|
||||
msgid "Remember settings" |
||||
msgstr "Recordar la configuración" |
||||
|
||||
msgid "" |
||||
"Your ID will still be kept - press the log out button above to delete the" |
||||
" ID." |
||||
msgstr "" |
||||
"Su ID será conservada - Pulse el botón Cerrar sesión anterior para " |
||||
"eliminar el ID." |
||||
|
||||
#, fuzzy |
||||
msgid "Room PIN" |
||||
msgstr "Link de Sala" |
||||
|
||||
msgid "Room link" |
||||
msgstr "Link de Sala" |
||||
|
||||
msgid "Invite by Email" |
||||
msgstr "Invitar por correo electrónico" |
||||
|
||||
msgid "Invite with Facebook" |
||||
msgstr "Invitar con Facebook" |
||||
|
||||
msgid "Invite with Twitter" |
||||
msgstr "Invitar con Twitter" |
||||
|
||||
msgid "Invite with Google Plus" |
||||
msgstr "Invitar con Google Plus" |
||||
|
||||
msgid "Invite with XING" |
||||
msgstr "Invitar con XING" |
||||
|
||||
msgid "Initializing" |
||||
msgstr "Inicializando" |
||||
|
||||
msgid "Online" |
||||
msgstr "En línea" |
||||
|
||||
msgid "Calling" |
||||
msgstr "LLamando" |
||||
|
||||
msgid "Hangup" |
||||
msgstr "Colgar" |
||||
|
||||
msgid "In call with" |
||||
msgstr "En llamada con" |
||||
|
||||
msgid "Conference with" |
||||
msgstr "Conferencia con" |
||||
|
||||
msgid "Your are offline" |
||||
msgstr "está desconectado" |
||||
|
||||
msgid "Go online" |
||||
msgstr "Ir Online" |
||||
|
||||
msgid "Connection interrupted" |
||||
msgstr "Conexión interrumpida" |
||||
|
||||
msgid "An error occured" |
||||
msgstr "Un error ha ocurrido" |
||||
|
||||
msgid "Incoming call" |
||||
msgstr "Llamada entrante" |
||||
|
||||
msgid "from" |
||||
msgstr "desde" |
||||
|
||||
msgid "Accept call" |
||||
msgstr "Aceptar llamada" |
||||
|
||||
msgid "Waiting for camera/microphone access" |
||||
msgstr "Esperando acceso cámara/micrófono" |
||||
|
||||
msgid "Your audio level" |
||||
msgstr "Tu nivel de audio" |
||||
|
||||
msgid "Checking camera and microphone access." |
||||
msgstr "Control de acceso a la cámara y el micrófono." |
||||
|
||||
msgid "Please allow access to your camera and microphone." |
||||
msgstr "Por favor, permitir el acceso a la cámara y al micrófono." |
||||
|
||||
msgid "Camera / microphone access required." |
||||
msgstr "Cámara / micrófono requiere acceso." |
||||
|
||||
msgid "" |
||||
"Please check your browser settings and allow camera and microphone access" |
||||
" for this site." |
||||
msgstr "" |
||||
"Compruebe la configuración de su navegador y permita el acceso a la " |
||||
"cámara y el micrófono para este sitio." |
||||
|
||||
msgid "Skip check" |
||||
msgstr "Saltar la comprobación" |
||||
|
||||
msgid "Click here for help (Google Chrome)." |
||||
msgstr "Haga clic aquí para obtener ayuda (Google Chrome)." |
||||
|
||||
msgid "Please set your user details and settings." |
||||
msgstr "Configure su información de usuario y de configuración." |
||||
|
||||
msgid "Enter a room name" |
||||
msgstr "Introduzca un nombre de sala" |
||||
|
||||
msgid "Random room name" |
||||
msgstr "Nombre de la sala aleatorio" |
||||
|
||||
msgid "Enter room" |
||||
msgstr "Ingresar a sala" |
||||
|
||||
msgid "" |
||||
"Enter the name of an existing room. You can create new rooms when you are" |
||||
" signed in." |
||||
msgstr "" |
||||
"Introduzca el nombre de la sala existente. Puede crear nuevas salas " |
||||
"cuando estás adentro de la aplicación." |
||||
|
||||
msgid "Room history" |
||||
msgstr "Historial de Salas" |
||||
|
||||
msgid "Please sign in." |
||||
msgstr "Identifícate." |
||||
|
||||
msgid "Videos play simultaneously for everyone in this call." |
||||
msgstr "Reproducir videos simultáneamente para todos en esta llamada." |
||||
|
||||
msgid "YouTube URL" |
||||
msgstr "URL de YouTube" |
||||
|
||||
msgid "" |
||||
"Could not load YouTube player API, please check your network / firewall " |
||||
"settings." |
||||
msgstr "" |
||||
"No se pudo cargar API del reproductor de YouTube, compruebe la red / " |
||||
"firewall Ajustes." |
||||
|
||||
msgid "Currently playing" |
||||
msgstr "Actualmente reproduciendo" |
||||
|
||||
msgid "YouTube controls" |
||||
msgstr "Controles en YouTube" |
||||
|
||||
msgid "YouTube video to share" |
||||
msgstr "Compartir video YouTube" |
||||
|
||||
msgid "Peer to peer chat active." |
||||
msgstr "Chat P2P activo." |
||||
|
||||
msgid "Peer to peer chat is now off." |
||||
msgstr "Chat P2P está ahora desactivado." |
||||
|
||||
msgid " is now offline." |
||||
msgstr " está ahora desconectado." |
||||
|
||||
msgid " is now online." |
||||
msgstr " está ahora en línea." |
||||
|
||||
msgid "You share file:" |
||||
msgstr "Compartir archivo:" |
||||
|
||||
msgid "Incoming file:" |
||||
msgstr "Archivo entrante:" |
||||
|
||||
msgid "You shared your location:" |
||||
msgstr "Ha compartido su ubicación:" |
||||
|
||||
msgid "Location received:" |
||||
msgstr "Ubicación recibida:" |
||||
|
||||
msgid "You accepted the contact request." |
||||
msgstr "Ha aceptado la solicitud de contacto." |
||||
|
||||
msgid "You rejected the contact request." |
||||
msgstr "Ha rechazado la solicitud de contacto." |
||||
|
||||
msgid "You sent a contact request." |
||||
msgstr "Ha enviado una solicitud de contacto." |
||||
|
||||
msgid "Your contact request was accepted." |
||||
msgstr "Su solicitud de contacto fue aceptada." |
||||
|
||||
msgid "Incoming contact request." |
||||
msgstr "Solicitud de contacto entrante." |
||||
|
||||
msgid "Your contact request was rejected." |
||||
msgstr "Fue rechazada su solicitud de contacto." |
||||
|
||||
msgid "Edit Contact" |
||||
msgstr "Editar contacto" |
||||
|
||||
msgid "Your browser does not support WebRTC. No calls possible." |
||||
msgstr "Su explorador no soporta WebRTC. No hay posibilidad de realizar llamadas." |
||||
|
||||
msgid "Close this window and disconnect?" |
||||
msgstr "Cerrar esta ventana y desconectar?" |
||||
|
||||
msgid "Contacts Manager" |
||||
msgstr "Administrador de contactos" |
||||
|
||||
msgid "Restart required to apply updates. Click ok to restart now." |
||||
msgstr "" |
||||
"Es necesario reiniciar para aplicar las actualizaciones. Haga clic en " |
||||
"Aceptar para reiniciar el sistema ahora." |
||||
|
||||
msgid "Failed to access camera/microphone." |
||||
msgstr "Error al acceder a la cámara/micrófono." |
||||
|
||||
msgid "Failed to establish peer connection." |
||||
msgstr "Error al establecer conexión P2P." |
||||
|
||||
msgid "We are sorry but something went wrong. Boo boo." |
||||
msgstr "Lo sentimos, pero algo salió mal. AHHHHHHH." |
||||
|
||||
msgid "Oops" |
||||
msgstr "Ooops" |
||||
|
||||
msgid "Peer connection failed. Check your settings." |
||||
msgstr "Conexión P2P fallida. Compruebe su configuración." |
||||
|
||||
msgid "User hung up because of error." |
||||
msgstr "Usuario colgó debido a un error." |
||||
|
||||
msgid " is busy. Try again later." |
||||
msgstr " está ocupado. Vuelva a intentarlo más tarde." |
||||
|
||||
msgid " rejected your call." |
||||
msgstr " rechazó su llamada." |
||||
|
||||
msgid " does not pick up." |
||||
msgstr " no contesta." |
||||
|
||||
msgid " tried to call you" |
||||
msgstr " intentó llamarte" |
||||
|
||||
msgid " called you" |
||||
msgstr " le llamó" |
||||
|
||||
msgid "Your browser is not supported. Please upgrade to a current version." |
||||
msgstr "Su navegador no es compatible. Actualice a una versión actual." |
||||
|
||||
msgid "Chat with" |
||||
msgstr "Chatear con" |
||||
|
||||
msgid "Message from " |
||||
msgstr "Mensaje de " |
||||
|
||||
#, python-format |
||||
msgid "You are now in room %s ..." |
||||
msgstr "Ahora estás en la sala %s ..." |
||||
|
||||
msgid "Your browser does not support file transfer." |
||||
msgstr "Tu navegador no soporta transferencia de archivos." |
||||
|
||||
msgid "Could not load PDF: Please make sure to select a PDF document." |
||||
msgstr "No se pudo cargar el PDF: asegúrese de seleccionar un documento PDF." |
||||
|
||||
msgid "Could not load PDF: Missing PDF file." |
||||
msgstr "No se pudo cargar el PDF: Falta el archivo PDF." |
||||
|
||||
#, python-format |
||||
msgid "An error occurred while loading the PDF (%s)." |
||||
msgstr "Se ha producido un error al cargar el archivo PDF (%s)." |
||||
|
||||
msgid "An unknown error occurred while loading the PDF." |
||||
msgstr "Se ha producido un error desconocido al cargar el PDF." |
||||
|
||||
#, python-format |
||||
msgid "An error occurred while loading the PDF page (%s)." |
||||
msgstr "Se ha producido un error al cargar la página PDF (%s)." |
||||
|
||||
msgid "An unknown error occurred while loading the PDF page." |
||||
msgstr "Se ha producido un error desconocido mientras se carga la página PDF." |
||||
|
||||
#, python-format |
||||
msgid "An error occurred while rendering the PDF page (%s)." |
||||
msgstr "Se ha producido un error al procesar la página PDF (%s)." |
||||
|
||||
msgid "An unknown error occurred while rendering the PDF page." |
||||
msgstr "Se ha producido un error desconocido al procesar la página PDF." |
||||
|
||||
msgid "Only PDF documents and OpenDocument files can be shared at this time." |
||||
msgstr "" |
||||
"Sólo documentos PDF y archivos OpenDocument puede ser compartido en este " |
||||
"momento." |
||||
|
||||
#, python-format |
||||
msgid "Failed to start screen sharing (%s)." |
||||
msgstr "No se pudo iniciar el uso compartido de la pantalla (%s)." |
||||
|
||||
msgid "" |
||||
"Permission to start screen sharing was denied. Make sure to have enabled " |
||||
"screen sharing access for your browser. Copy chrome://flags/#enable-" |
||||
"usermedia-screen-capture and open it with your browser and enable the " |
||||
"flag on top. Then restart the browser and you are ready to go." |
||||
msgstr "" |
||||
"Permiso para comenzar a compartir la pantalla fue denegada. Asegúrese de " |
||||
"haber activado compartir el acceso a la pantalla para su navegador. " |
||||
"Copiar chrome://flags/#enable-usermedia-screen-capture y ábralo con su " |
||||
"navegador y habilitar la bandera en la parte superior. A continuación, " |
||||
"reinicie el navegador y listo." |
||||
|
||||
msgid "Permission to start screen sharing was denied." |
||||
msgstr "Permiso para comenzar a compartir la pantalla fue denegado." |
||||
|
||||
msgid "Use browser language" |
||||
msgstr "Utilizar el idioma del navegador" |
||||
|
||||
msgid "Meet with me here:" |
||||
msgstr "Reunirse conmigo aquí:" |
||||
|
||||
msgid "Please enter a new Room PIN to lock the room" |
||||
msgstr "" |
||||
|
||||
msgid "Do you want to unlock the room?" |
||||
msgstr "" |
||||
|
||||
msgid "Room name" |
||||
msgstr "Nombre de sala" |
||||
|
||||
msgid "" |
||||
"The request contains an invalid parameter value. Please check the URL of " |
||||
"the video you want to share and try again." |
||||
msgstr "" |
||||
"La solicitud contiene un valor de parámetro no válido. Compruebe la " |
||||
"dirección URL de el vídeo que desea compartir e inténtelo de nuevo." |
||||
|
||||
msgid "" |
||||
"The requested content cannot be played in an HTML5 player or another " |
||||
"error related to the HTML5 player has occurred. Please try again later." |
||||
msgstr "" |
||||
"El contenido solicitado no se puede reproducir en un reproductor HTML5 u " |
||||
"otro error relacionado con el reproductor HTML5 ha ocurrido. Por favor, " |
||||
"inténtelo de nuevo más tarde." |
||||
|
||||
msgid "" |
||||
"The video requested was not found. Please check the URL of the video you " |
||||
"want to share and try again." |
||||
msgstr "" |
||||
"El video solicitado no fue encontrado. Compruebe la URL del video que " |
||||
"quieres compartir e inténtelo de nuevo." |
||||
|
||||
msgid "" |
||||
"The owner of the requested video does not allow it to be played in " |
||||
"embedded players." |
||||
msgstr "" |
||||
"El propietario del vídeo solicitado no le permite ser reproducido en " |
||||
"reproductores incrustados." |
||||
|
||||
#, python-format |
||||
msgid "" |
||||
"An unknown error occurred while playing back the video (%s). Please try " |
||||
"again later." |
||||
msgstr "" |
||||
"Se ha producido un error desconocido mientras se reproduce el vídeo (%s)." |
||||
" Por favor intente más tarde." |
||||
|
||||
msgid "" |
||||
"An unknown error occurred while playing back the video. Please try again " |
||||
"later." |
||||
msgstr "" |
||||
"Se ha producido un error desconocido mientras se reproduce el vídeo. Por " |
||||
"favor, inténtelo de nuevo más adelante." |
||||
|
||||
msgid "Unknown URL format. Please make sure to enter a valid YouTube URL." |
||||
msgstr "" |
||||
"Formato URL desconocido. Por favor, asegúrese de escribir una dirección " |
||||
"URL válida de YouTube." |
||||
|
||||
msgid "Error" |
||||
msgstr "Error" |
||||
|
||||
msgid "Hint" |
||||
msgstr "Sugerencia" |
||||
|
||||
msgid "Please confirm" |
||||
msgstr "Confirme" |
||||
|
||||
msgid "More information required" |
||||
msgstr "Se necesita más información" |
||||
|
||||
msgid "Ok" |
||||
msgstr "Ok" |
||||
|
||||
msgid "" |
||||
"Screen sharing requires a browser extension. Please add the Spreed WebRTC" |
||||
" screen sharing extension to Chrome and try again." |
||||
msgstr "" |
||||
"Se requiere una extensión del navegador para Compartir Pantalla. Por " |
||||
"favor, añada la extensión Spreed WebRTC screen sharing a Chrome e " |
||||
"inténtelo de nuevo." |
||||
|
||||
msgid "Access code required" |
||||
msgstr "Código de acceso requerido" |
||||
|
||||
msgid "Access denied" |
||||
msgstr "Acceso denegado" |
||||
|
||||
msgid "Please provide a valid access code." |
||||
msgstr "Proporcione un código de acceso válido." |
||||
|
||||
msgid "" |
||||
"Failed to verify access code. Check your Internet connection and try " |
||||
"again." |
||||
msgstr "" |
||||
"No se ha podido verificar el código de acceso. Compruebe su conexión a " |
||||
"Internet e intente una vez más." |
||||
|
||||
#, python-format |
||||
msgid "PIN for room %s is now '%s'." |
||||
msgstr "PIN de sala %s es ahora '%s'." |
||||
|
||||
#, python-format |
||||
msgid "PIN lock has been removed from room %s." |
||||
msgstr "bloqueo de PIN se ha eliminado desde la sala %s." |
||||
|
||||
#, python-format |
||||
msgid "Enter the PIN for room %s" |
||||
msgstr "Introducir el PIN para sala %s" |
||||
|
||||
msgid "Please sign in to create rooms." |
||||
msgstr "Inicie sesión para crear nuevas salas." |
||||
|
||||
#, python-format |
||||
msgid "and %s" |
||||
msgstr "y %s" |
||||
|
||||
#, python-format |
||||
msgid "and %d others" |
||||
msgstr "y %d otros" |
||||
|
||||
msgid "User" |
||||
msgstr "Usuario" |
||||
|
||||
msgid "Someone" |
||||
msgstr "Alguien" |
||||
|
||||
msgid "Me" |
||||
msgstr "Yo" |
||||
|
||||
#~ msgid "Register" |
||||
#~ msgstr "Registrar" |
||||
|
@ -0,0 +1,886 @@
@@ -0,0 +1,886 @@
|
||||
# Translations template for Spreed WebRTC. |
||||
# Copyright (C) 2016 struktur AG |
||||
# This file is distributed under the same license as the Spreed WebRTC |
||||
# project. |
||||
# Riccardo Olivo <olivo@arkitech.it>, 2016. |
||||
# |
||||
msgid "" |
||||
msgstr "" |
||||
"Project-Id-Version: Spreed WebRTC 1.0\n" |
||||
"Report-Msgid-Bugs-To: simon@struktur.de\n" |
||||
"POT-Creation-Date: 2016-11-11 02:29+0100\n" |
||||
"PO-Revision-Date: 2016-11-11 02:30+0100\n" |
||||
"Last-Translator: \n" |
||||
"Language-Team: Riccardo Olivo <olivo@arkitech.it>\n" |
||||
"Language: it\n" |
||||
"MIME-Version: 1.0\n" |
||||
"Content-Type: text/plain; charset=UTF-8\n" |
||||
"Content-Transfer-Encoding: 8bit\n" |
||||
"Generated-By: Babel 1.3\n" |
||||
"X-Generator: Poedit 1.8.11\n" |
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
||||
|
||||
msgid "Standard view" |
||||
msgstr "Visualizzazione standard" |
||||
|
||||
msgid "Large view" |
||||
msgstr "Visualizzazione estesa" |
||||
|
||||
msgid "Kiosk view" |
||||
msgstr "Visualizzazione chiosco" |
||||
|
||||
msgid "Auditorium" |
||||
msgstr "Auditorium" |
||||
|
||||
msgid "Start chat" |
||||
msgstr "Inizia chat" |
||||
|
||||
msgid "Start video call" |
||||
msgstr "Inizia chiamata video" |
||||
|
||||
msgid "Start audio conference" |
||||
msgstr "Inizia chiamata audio" |
||||
|
||||
msgid "No one else here" |
||||
msgstr "Nessun altro qui" |
||||
|
||||
msgid "Take" |
||||
msgstr "Scatta" |
||||
|
||||
msgid "Retake" |
||||
msgstr "Riscatta" |
||||
|
||||
msgid "Cancel" |
||||
msgstr "Annulla" |
||||
|
||||
msgid "Set as Profile Picture" |
||||
msgstr "Imposta come immagine profilo" |
||||
|
||||
msgid "Take picture" |
||||
msgstr "Scatta immagine" |
||||
|
||||
msgid "Upload picture" |
||||
msgstr "Carica immagine" |
||||
|
||||
msgid "Waiting for camera" |
||||
msgstr "In attesa della fotocamera" |
||||
|
||||
msgid "Picture" |
||||
msgstr "Immagine" |
||||
|
||||
msgid "The file couldn't be read." |
||||
msgstr "Il file non può essere aperto." |
||||
|
||||
msgid "The file is not an image." |
||||
msgstr "Il file non è un immagine." |
||||
|
||||
#, python-format |
||||
msgid "The file is too large. Max. %d MB." |
||||
msgstr "Questo file è di dimensioni eccessive. Max. %d MB." |
||||
|
||||
msgid "Select file" |
||||
msgstr "Seleziona file" |
||||
|
||||
msgid "Chat sessions" |
||||
msgstr "Sessioni di chat" |
||||
|
||||
msgid "Room chat" |
||||
msgstr "Room chat" |
||||
|
||||
msgid "Peer to peer" |
||||
msgstr "Peer-to-peer" |
||||
|
||||
msgid "Close chat" |
||||
msgstr "Chiudi la chat" |
||||
|
||||
msgid "Upload files" |
||||
msgstr "Carica file" |
||||
|
||||
msgid "Share my location" |
||||
msgstr "Condividi la mia posizione" |
||||
|
||||
msgid "Clear chat" |
||||
msgstr "Pulisci chat" |
||||
|
||||
msgid "is typing..." |
||||
msgstr "sta scrivendo..." |
||||
|
||||
msgid "has stopped typing..." |
||||
msgstr "ha smesso di scrivere..." |
||||
|
||||
msgid "Type here to chat..." |
||||
msgstr "Scrivi qui per chattare..." |
||||
|
||||
msgid "Send" |
||||
msgstr "Invia" |
||||
|
||||
msgid "Accept" |
||||
msgstr "Accetta" |
||||
|
||||
msgid "Reject" |
||||
msgstr "Rifiuta" |
||||
|
||||
msgid "You have no contacts." |
||||
msgstr "Non hai contatti." |
||||
|
||||
msgid "" |
||||
"To add new contacts, join a room and create a contact add request by " |
||||
"clicking on the star icon next to a user entry." |
||||
msgstr "" |
||||
"Per aggiungere nuovi contatti unisciti a una room e crea una richiesta di " |
||||
"aggiunta contatto cliccando sull'icona a forma di stella vicina a un utente." |
||||
|
||||
msgid "Edit contact" |
||||
msgstr "Modifica contatto" |
||||
|
||||
msgid "Edit" |
||||
msgstr "Modifica" |
||||
|
||||
msgid "Name" |
||||
msgstr "Nome" |
||||
|
||||
msgid "Remove" |
||||
msgstr "Rimuovi" |
||||
|
||||
msgid "Refresh" |
||||
msgstr "Aggiorna" |
||||
|
||||
msgid "Save" |
||||
msgstr "Salva" |
||||
|
||||
msgid "Close" |
||||
msgstr "Chiudi" |
||||
|
||||
msgid "File sharing" |
||||
msgstr "Condividi file" |
||||
|
||||
msgid "File is no longer available" |
||||
msgstr "Il file non è più disponibile" |
||||
|
||||
msgid "Download" |
||||
msgstr "Scarica" |
||||
|
||||
msgid "Open" |
||||
msgstr "Apri" |
||||
|
||||
msgid "Unshare" |
||||
msgstr "Rimuovi condivisione" |
||||
|
||||
msgid "Retry" |
||||
msgstr "Riprova" |
||||
|
||||
msgid "Download failed." |
||||
msgstr "Scaricamento fallito." |
||||
|
||||
msgid "Share a YouTube video" |
||||
msgstr "Condividi un video YouTube" |
||||
|
||||
msgid "Share a file as presentation" |
||||
msgstr "Condividi un file come presentazione" |
||||
|
||||
msgid "Share your screen" |
||||
msgstr "Condividi il tuo schermo" |
||||
|
||||
msgid "Chat" |
||||
msgstr "Chat" |
||||
|
||||
msgid "Contacts" |
||||
msgstr "Contatti" |
||||
|
||||
msgid "Mute microphone" |
||||
msgstr "Silenzia il microfono" |
||||
|
||||
msgid "Turn camera off" |
||||
msgstr "Spegni la videocamera" |
||||
|
||||
msgid "Settings" |
||||
msgstr "Impostazioni" |
||||
|
||||
msgid "Loading presentation ..." |
||||
msgstr "Caricando la presentazione..." |
||||
|
||||
msgid "Please upload a document" |
||||
msgstr "Carica un documento" |
||||
|
||||
msgid "" |
||||
"Documents are shared with everyone in this call. The supported file types " |
||||
"are PDF and OpenDocument files." |
||||
msgstr "" |
||||
"I documenti sono condivisi con tutti i partecipanti a questa chiamata. I " |
||||
"tipi di file supportati sono PDF e OpenDocument." |
||||
|
||||
msgid "Upload" |
||||
msgstr "Carica" |
||||
|
||||
msgid "You can drag files here too." |
||||
msgstr "Puoi trascinare i file qui." |
||||
|
||||
msgid "Presentation controls" |
||||
msgstr "Controlli presentazione" |
||||
|
||||
msgid "Prev" |
||||
msgstr "Precedente" |
||||
|
||||
msgid "Next" |
||||
msgstr "Prossimo" |
||||
|
||||
msgid "Change room" |
||||
msgstr "Scegli la stanza" |
||||
|
||||
msgid "Room" |
||||
msgstr "Stanza" |
||||
|
||||
msgid "Leave room" |
||||
msgstr "Lascia la stanza" |
||||
|
||||
msgid "Main" |
||||
msgstr "Principale" |
||||
|
||||
msgid "Current room" |
||||
msgstr "Stanza corrente" |
||||
|
||||
msgid "Screen sharing options" |
||||
msgstr "Opzioni condivisione schermo" |
||||
|
||||
msgid "Fit screen." |
||||
msgstr "Adatta allo schermo." |
||||
|
||||
msgid "Share screen" |
||||
msgstr "Condividi schermo" |
||||
|
||||
msgid "Please select what to share." |
||||
msgstr "Scegli cosa condividere." |
||||
|
||||
msgid "Screen" |
||||
msgstr "Schermo" |
||||
|
||||
msgid "Window" |
||||
msgstr "Finestra" |
||||
|
||||
msgid "Application" |
||||
msgstr "Applicazione" |
||||
|
||||
msgid "Share the whole screen. Click share to select the screen." |
||||
msgstr "" |
||||
"Condividi l'intero schermo. Fai click su condividi per selezionare lo " |
||||
"schermo." |
||||
|
||||
msgid "Share a single window. Click share to select the window." |
||||
msgstr "" |
||||
"Condividi una singola finestra. Fai click su condividi per selezionare la " |
||||
"singola finestra." |
||||
|
||||
msgid "" |
||||
"Share all windows of a application. This can leak content behind windows " |
||||
"when windows get moved. Click share to select the application." |
||||
msgstr "" |
||||
"Condividi tutte le finestre di un'applicazione. Questa opzione può mostrare " |
||||
"il contenuto dietro alle finestre quando queste vengono spostate. Fai click " |
||||
"su condividi per selezionare l'applicazione." |
||||
|
||||
msgid "Share" |
||||
msgstr "Condividi" |
||||
|
||||
msgid "OK" |
||||
msgstr "OK" |
||||
|
||||
msgid "Profile" |
||||
msgstr "Profilo" |
||||
|
||||
msgid "Your name" |
||||
msgstr "Il tuo nome" |
||||
|
||||
msgid "Your picture" |
||||
msgstr "La tua immagine" |
||||
|
||||
msgid "Status message" |
||||
msgstr "Stato" |
||||
|
||||
msgid "What's on your mind?" |
||||
msgstr "A cosa pensi?" |
||||
|
||||
msgid "" |
||||
"Your picture, name and status message identify yourself in calls, chats and " |
||||
"rooms." |
||||
msgstr "" |
||||
"La tua immagine, il tuo nome ed il tuo stato vengono visualizzati nelle " |
||||
"chiamate, nelle chat e nelle stanze." |
||||
|
||||
msgid "Your ID" |
||||
msgstr "Il tuo ID" |
||||
|
||||
msgid "" |
||||
"Authenticated by certificate. To log out you have to remove your certificate " |
||||
"from the browser." |
||||
msgstr "" |
||||
"Autenticazione eseguita con certificato. Per disconnettersi rimuovere il " |
||||
"certificato dal browser." |
||||
|
||||
msgid "Sign in" |
||||
msgstr "Accedi" |
||||
|
||||
msgid "Create an account" |
||||
msgstr "Crea un account" |
||||
|
||||
msgid "Sign out" |
||||
msgstr "Disconnettiti" |
||||
|
||||
msgid "Manage account" |
||||
msgstr "Gestisci account" |
||||
|
||||
msgid "Media" |
||||
msgstr "Dispositivi" |
||||
|
||||
msgid "Microphone" |
||||
msgstr "Microfono" |
||||
|
||||
msgid "Camera" |
||||
msgstr "Videocamera" |
||||
|
||||
msgid "Video quality" |
||||
msgstr "Qualità video" |
||||
|
||||
msgid "Low" |
||||
msgstr "Bassa" |
||||
|
||||
msgid "High" |
||||
msgstr "Alta" |
||||
|
||||
msgid "HD" |
||||
msgstr "HD" |
||||
|
||||
msgid "Full HD" |
||||
msgstr "Full HD" |
||||
|
||||
msgid "General" |
||||
msgstr "Generale" |
||||
|
||||
msgid "Language" |
||||
msgstr "Lingua" |
||||
|
||||
msgid "Language changes become active on reload." |
||||
msgstr "" |
||||
"Le modifiche alla lingua diventano effettive con l'aggiornamento della " |
||||
"pagina." |
||||
|
||||
msgid "Default room" |
||||
msgstr "Stanza predefinita" |
||||
|
||||
msgid "Set alternative room to join at start." |
||||
msgstr "Imposta l'ingresso in una stanza alternativa all'avvio." |
||||
|
||||
msgid "Notifications" |
||||
msgstr "Notifiche" |
||||
|
||||
msgid "Desktop notification" |
||||
msgstr "Notifiche Desktop" |
||||
|
||||
msgid "Enable" |
||||
msgstr "Abilita" |
||||
|
||||
msgid "Denied - check your browser settings" |
||||
msgstr "Errore - controlla le impostazioni del tuo browser" |
||||
|
||||
msgid "Allowed" |
||||
msgstr "Permesso" |
||||
|
||||
msgid "Sounds for incoming messages" |
||||
msgstr "Suoni per i messaggi in arrivo" |
||||
|
||||
msgid "Ring on incoming calls" |
||||
msgstr "Suoneria per le chiamate in arrivo" |
||||
|
||||
msgid "Sounds for users in current room" |
||||
msgstr "Suoni per gli utenti nella stanza corrente" |
||||
|
||||
msgid "Advanced settings" |
||||
msgstr "Opzioni avanzate" |
||||
|
||||
msgid "Play audio on same device as selected microphone" |
||||
msgstr "Riproduci l'audio sullo stesso dispositivo del microfono selezionato" |
||||
|
||||
msgid "Experimental AEC" |
||||
msgstr "AEC Sperimentale" |
||||
|
||||
msgid "Experimental AGC" |
||||
msgstr "AGC Sperimentale" |
||||
|
||||
msgid "Experimental noise suppression" |
||||
msgstr "Soppressione del rumore sperimentale" |
||||
|
||||
msgid "Max video frame rate" |
||||
msgstr "Massimo framerate video" |
||||
|
||||
msgid "auto" |
||||
msgstr "automatico" |
||||
|
||||
msgid "Send stereo audio" |
||||
msgstr "Invia audio in stereo" |
||||
|
||||
msgid "" |
||||
"Sending stereo audio disables echo cancellation. Enable only if you have " |
||||
"stereo input." |
||||
msgstr "" |
||||
"Inviare l'audio in stereo disabilita la cancellazione dell eco. Abilitare " |
||||
"solo se si dispone di un input stereo." |
||||
|
||||
msgid "Detect CPU over use" |
||||
msgstr "Rileva utilizzo eccessivo della CPU" |
||||
|
||||
msgid "Automatically reduces video quality as needed." |
||||
msgstr "Riduce automaticamente la qualità video se necessario." |
||||
|
||||
msgid "Optimize for high resolution video" |
||||
msgstr "Ottimizza per i video ad alta risoluzione" |
||||
|
||||
msgid "Reduce video noise" |
||||
msgstr "Riduce il rumore digitale nei video" |
||||
|
||||
msgid "Prefer VP9 video codec" |
||||
msgstr "Prediligi il codec VP9" |
||||
|
||||
msgid "Enable experiments" |
||||
msgstr "Abilita gli esperimenti" |
||||
|
||||
msgid "Show advanced settings" |
||||
msgstr "Mostra opzioni avanzate" |
||||
|
||||
msgid "Hide advanced settings" |
||||
msgstr "Nascondi opzioni avanzate" |
||||
|
||||
msgid "Remember settings" |
||||
msgstr "Ricorda le impostazioni" |
||||
|
||||
msgid "" |
||||
"Your ID will still be kept - press the log out button above to delete the ID." |
||||
msgstr "" |
||||
"Il tuo ID sarà mantenuto - Premi il pulsante disconnetti per cancellare l'ID." |
||||
|
||||
msgid "Room PIN" |
||||
msgstr "PIN della stanza" |
||||
|
||||
msgid "Room link" |
||||
msgstr "Link stanza" |
||||
|
||||
msgid "Invite by Email" |
||||
msgstr "Invita via Email" |
||||
|
||||
msgid "Invite with Facebook" |
||||
msgstr "Invita via Facebook" |
||||
|
||||
msgid "Invite with Twitter" |
||||
msgstr "Invita via Twitter" |
||||
|
||||
msgid "Invite with Google Plus" |
||||
msgstr "Invita via Google Plus" |
||||
|
||||
msgid "Invite with XING" |
||||
msgstr "Invita via XING" |
||||
|
||||
msgid "Initializing" |
||||
msgstr "Inizializzazione" |
||||
|
||||
msgid "Online" |
||||
msgstr "Online" |
||||
|
||||
msgid "Calling" |
||||
msgstr "Sto chiamando" |
||||
|
||||
msgid "Hangup" |
||||
msgstr "Fine chiamata" |
||||
|
||||
msgid "In call with" |
||||
msgstr "In chiamata con" |
||||
|
||||
msgid "Conference with" |
||||
msgstr "In conferenza con" |
||||
|
||||
msgid "Your are offline" |
||||
msgstr "Sei offline" |
||||
|
||||
msgid "Go online" |
||||
msgstr "Connettiti" |
||||
|
||||
msgid "Connection interrupted" |
||||
msgstr "Connessione Interrotta" |
||||
|
||||
msgid "An error occured" |
||||
msgstr "Errore" |
||||
|
||||
msgid "Incoming call" |
||||
msgstr "Chiamata in arrivo" |
||||
|
||||
msgid "from" |
||||
msgstr "da" |
||||
|
||||
msgid "Accept call" |
||||
msgstr "Rispondi" |
||||
|
||||
msgid "Waiting for camera/microphone access" |
||||
msgstr "Attesa accesso videocamera/microfono" |
||||
|
||||
msgid "Your audio level" |
||||
msgstr "Volume" |
||||
|
||||
msgid "Checking camera and microphone access." |
||||
msgstr "Controllo accesso videocamera e microfono." |
||||
|
||||
msgid "Please allow access to your camera and microphone." |
||||
msgstr "Consenti l'accesso alla videocamera ed al microfono." |
||||
|
||||
msgid "Camera / microphone access required." |
||||
msgstr "E' richesto l'accesso alla videocamera/microfono." |
||||
|
||||
msgid "" |
||||
"Please check your browser settings and allow camera and microphone access " |
||||
"for this site." |
||||
msgstr "" |
||||
"Per favore verifica le impostazioni del tuo browser e permetti l'accesso " |
||||
"alla videocamera ed al microfono per questo sito." |
||||
|
||||
msgid "Skip check" |
||||
msgstr "Salta controllo" |
||||
|
||||
msgid "Click here for help (Google Chrome)." |
||||
msgstr "Clicca qui per aiuto (Google Chrome)." |
||||
|
||||
msgid "Please set your user details and settings." |
||||
msgstr "Inserisci i tuoi dati utente e le impostazioni." |
||||
|
||||
msgid "Enter a room name" |
||||
msgstr "Inserisci il nome di una stanza" |
||||
|
||||
msgid "Random room name" |
||||
msgstr "Nome casuale stanza" |
||||
|
||||
msgid "Enter room" |
||||
msgstr "Entra nella stanza" |
||||
|
||||
msgid "" |
||||
"Enter the name of an existing room. You can create new rooms when you are " |
||||
"signed in." |
||||
msgstr "" |
||||
"Inserisci il nome di una stanza esistente. Puoi creare nuove stanze quando " |
||||
"effetui l'accesso." |
||||
|
||||
msgid "Room history" |
||||
msgstr "Cronologia stanza" |
||||
|
||||
msgid "Please sign in." |
||||
msgstr "Prego accedi." |
||||
|
||||
msgid "Videos play simultaneously for everyone in this call." |
||||
msgstr "" |
||||
"I video vengono riprodotti simultaneamente per gli utenti in questa stanza." |
||||
|
||||
msgid "YouTube URL" |
||||
msgstr "YouTube URL" |
||||
|
||||
msgid "" |
||||
"Could not load YouTube player API, please check your network / firewall " |
||||
"settings." |
||||
msgstr "" |
||||
"Impossibile caricare le API del player di YouTube, per favore controlla le " |
||||
"tue impostazioni di rete / firewall." |
||||
|
||||
msgid "Currently playing" |
||||
msgstr "In riproduzione" |
||||
|
||||
msgid "YouTube controls" |
||||
msgstr "Opzioni YouTube" |
||||
|
||||
msgid "YouTube video to share" |
||||
msgstr "Video YouTube da condividere" |
||||
|
||||
msgid "Peer to peer chat active." |
||||
msgstr "Chat Peer-to-peer attiva." |
||||
|
||||
msgid "Peer to peer chat is now off." |
||||
msgstr "Chat Peer-to-peer inattiva." |
||||
|
||||
msgid " is now offline." |
||||
msgstr " è offline." |
||||
|
||||
msgid " is now online." |
||||
msgstr " è online." |
||||
|
||||
msgid "You share file:" |
||||
msgstr "File condiviso:" |
||||
|
||||
msgid "Incoming file:" |
||||
msgstr "File in arrivo:" |
||||
|
||||
msgid "You shared your location:" |
||||
msgstr "Hai condiviso la tua posizione:" |
||||
|
||||
msgid "Location received:" |
||||
msgstr "Posizione ricevuta:" |
||||
|
||||
msgid "You accepted the contact request." |
||||
msgstr "Hai accettato la richiesta contatto." |
||||
|
||||
msgid "You rejected the contact request." |
||||
msgstr "Hai rifiutato la richiesta contatto." |
||||
|
||||
msgid "You sent a contact request." |
||||
msgstr "Hai inviato una richiesta di contatto." |
||||
|
||||
msgid "Your contact request was accepted." |
||||
msgstr "La tua richiesta di contatto è stata accettata." |
||||
|
||||
msgid "Incoming contact request." |
||||
msgstr "Richiesta di contatto in arrivo." |
||||
|
||||
msgid "Your contact request was rejected." |
||||
msgstr "La tua richiesta di contatto è stata rifiutata." |
||||
|
||||
msgid "Edit Contact" |
||||
msgstr "Modifica contatto" |
||||
|
||||
msgid "Your browser does not support WebRTC. No calls possible." |
||||
msgstr "Il tuo browser non supporta WebRTC. Non è possibile chiamare." |
||||
|
||||
msgid "Close this window and disconnect?" |
||||
msgstr "Chiudi questa finestra e disconnetti?" |
||||
|
||||
msgid "Contacts Manager" |
||||
msgstr "Contatti" |
||||
|
||||
msgid "Restart required to apply updates. Click ok to restart now." |
||||
msgstr "" |
||||
"E' necessario riavviare il programma per applicare le modifiche. Fai click " |
||||
"qui per riavviarlo ora." |
||||
|
||||
msgid "Failed to access camera/microphone." |
||||
msgstr "Tentativo fallito di accesso alla videocamera/microfono." |
||||
|
||||
msgid "Failed to establish peer connection." |
||||
msgstr "Impossibile stabilire una connessione." |
||||
|
||||
msgid "We are sorry but something went wrong. Boo boo." |
||||
msgstr "Ci dispiace ma qualcosa è andato storto." |
||||
|
||||
msgid "Oops" |
||||
msgstr "Oops" |
||||
|
||||
msgid "Peer connection failed. Check your settings." |
||||
msgstr "Connessione fallita. Controlla le tue impostazioni." |
||||
|
||||
msgid "User hung up because of error." |
||||
msgstr "L'utente ha riattaccato a causa di un errore." |
||||
|
||||
msgid " is busy. Try again later." |
||||
msgstr " è impegnato. Riprova più tardi." |
||||
|
||||
msgid " rejected your call." |
||||
msgstr " ha rifiutato la tua chiamata." |
||||
|
||||
msgid " does not pick up." |
||||
msgstr " non ha risposto." |
||||
|
||||
msgid " tried to call you" |
||||
msgstr " ha provato a chiamarti." |
||||
|
||||
msgid " called you" |
||||
msgstr " ti ha chiamato." |
||||
|
||||
msgid "Your browser is not supported. Please upgrade to a current version." |
||||
msgstr "Il tuo browser non è supportato. Per favore aggiornalo." |
||||
|
||||
msgid "Chat with" |
||||
msgstr "Parla con" |
||||
|
||||
msgid "Message from " |
||||
msgstr "Messaggio da " |
||||
|
||||
#, python-format |
||||
msgid "You are now in room %s ..." |
||||
msgstr "Ora sei nella stanza %s ..." |
||||
|
||||
msgid "Your browser does not support file transfer." |
||||
msgstr "Il tuo browser non supporta il trasferimento di file." |
||||
|
||||
msgid "Could not load PDF: Please make sure to select a PDF document." |
||||
msgstr "" |
||||
"Impossibile caricare il PDF: Per favore verifica di aver selezionato un file " |
||||
"PDF." |
||||
|
||||
msgid "Could not load PDF: Missing PDF file." |
||||
msgstr "Impossibile caricare il PDF: File mancante." |
||||
|
||||
#, python-format |
||||
msgid "An error occurred while loading the PDF (%s)." |
||||
msgstr "Errore durante il caricamento del PDF (%s)." |
||||
|
||||
msgid "An unknown error occurred while loading the PDF." |
||||
msgstr "Errore sconosciuto durante il caricamento del PDF." |
||||
|
||||
#, python-format |
||||
msgid "An error occurred while loading the PDF page (%s)." |
||||
msgstr "Errore in fase di caricamento della pagina del PDF (%s)." |
||||
|
||||
msgid "An unknown error occurred while loading the PDF page." |
||||
msgstr "Errore sconosciuto in fase di caricamento della pagina PDF (%s)." |
||||
|
||||
#, python-format |
||||
msgid "An error occurred while rendering the PDF page (%s)." |
||||
msgstr "Errore durante il rendering della pagina PDF (%s)." |
||||
|
||||
msgid "An unknown error occurred while rendering the PDF page." |
||||
msgstr "Errore sconosciuto durante il rendering della pagina PDF." |
||||
|
||||
msgid "Only PDF documents and OpenDocument files can be shared at this time." |
||||
msgstr "Possono essere condivisi solamente file PDF ed OpenDocument." |
||||
|
||||
#, python-format |
||||
msgid "Failed to start screen sharing (%s)." |
||||
msgstr "Impossibile avviare condivisione schermo (%s)." |
||||
|
||||
msgid "" |
||||
"Permission to start screen sharing was denied. Make sure to have enabled " |
||||
"screen sharing access for your browser. Copy chrome://flags/#enable-" |
||||
"usermedia-screen-capture and open it with your browser and enable the flag " |
||||
"on top. Then restart the browser and you are ready to go." |
||||
msgstr "" |
||||
"Il permesso per avviare la condivisione dello schermo è stato negato. " |
||||
"Verifica di aver abilitato la condivisione dello schermo per il tuo browser. " |
||||
"Copia chrome://flags/#enable-usermedia-screen-capture, aprilo nel tuo " |
||||
"browser ed abilita la spunta in cima, quindi riavvia il browser." |
||||
|
||||
msgid "Permission to start screen sharing was denied." |
||||
msgstr "Il permesso negato per la condivisione dello schermo." |
||||
|
||||
msgid "Use browser language" |
||||
msgstr "Usa la lingua del browser" |
||||
|
||||
msgid "Meet with me here:" |
||||
msgstr "Incontriamoci qui:" |
||||
|
||||
msgid "Please enter a new Room PIN to lock the room" |
||||
msgstr "Inserisci un nuovo PIN per bloccare la stanza" |
||||
|
||||
msgid "Do you want to unlock the room?" |
||||
msgstr "Vuoi sbloccare la stanza?" |
||||
|
||||
msgid "Room name" |
||||
msgstr "Nome stanza" |
||||
|
||||
msgid "" |
||||
"The request contains an invalid parameter value. Please check the URL of the " |
||||
"video you want to share and try again." |
||||
msgstr "" |
||||
"La richiesta contiene un parametro invalido. Per favore controlla l'URL del " |
||||
"video che vuoi condividere e riprova." |
||||
|
||||
msgid "" |
||||
"The requested content cannot be played in an HTML5 player or another error " |
||||
"related to the HTML5 player has occurred. Please try again later." |
||||
msgstr "" |
||||
"Il contenuto richiesto non può essere riprodotto in un player HTML5 - o si è " |
||||
"verificato un altro errore relativo al player HTML5. Per favore riprova più " |
||||
"tardi." |
||||
|
||||
msgid "" |
||||
"The video requested was not found. Please check the URL of the video you " |
||||
"want to share and try again." |
||||
msgstr "" |
||||
"Il video richiesto non è stato trovato. Per favore controlla la URL del " |
||||
"video che vuoi condividere e riprova." |
||||
|
||||
msgid "" |
||||
"The owner of the requested video does not allow it to be played in embedded " |
||||
"players." |
||||
msgstr "" |
||||
"Il proprietario del video non permette che venga riprodotto nel player " |
||||
"incluso." |
||||
|
||||
#, python-format |
||||
msgid "" |
||||
"An unknown error occurred while playing back the video (%s). Please try " |
||||
"again later." |
||||
msgstr "" |
||||
"Errore sconosciuto durante la riproduzione del video (%s). Per favore " |
||||
"riprova più tardi." |
||||
|
||||
msgid "" |
||||
"An unknown error occurred while playing back the video. Please try again " |
||||
"later." |
||||
msgstr "" |
||||
"Errore sconosciuto durante la riproduzione del video. Riprova più tardi." |
||||
|
||||
msgid "Unknown URL format. Please make sure to enter a valid YouTube URL." |
||||
msgstr "" |
||||
"Formato URL sconosciuto. Per favore verifica di aver inserito un URL Youtube " |
||||
"valido." |
||||
|
||||
msgid "Error" |
||||
msgstr "Errore" |
||||
|
||||
msgid "Hint" |
||||
msgstr "Suggerimento" |
||||
|
||||
msgid "Please confirm" |
||||
msgstr "Prego conferma" |
||||
|
||||
msgid "More information required" |
||||
msgstr "Sono richieste maggiori informazioni" |
||||
|
||||
msgid "Ok" |
||||
msgstr "Ok" |
||||
|
||||
msgid "" |
||||
"Screen sharing requires a browser extension. Please add the Spreed WebRTC " |
||||
"screen sharing extension to Chrome and try again." |
||||
msgstr "" |
||||
"La condivisione dello schermo richiede un'estensione del browser. Per favore " |
||||
"aggiungi l'estensione WebRTC screen sharing a Chrome e riprova." |
||||
|
||||
msgid "Access code required" |
||||
msgstr "Codice d'accesso richiesto" |
||||
|
||||
msgid "Access denied" |
||||
msgstr "Accesso negato" |
||||
|
||||
msgid "Please provide a valid access code." |
||||
msgstr "Per favore inserisci un codice di accesso valido." |
||||
|
||||
msgid "" |
||||
"Failed to verify access code. Check your Internet connection and try again." |
||||
msgstr "" |
||||
"Impossibile verificare il codice d'accesso. Controlla la tua conessione a " |
||||
"Internet e riprova." |
||||
|
||||
#, python-format |
||||
msgid "PIN for room %s is now '%s'." |
||||
msgstr "Il PIN per la stanza %s è '%s'." |
||||
|
||||
#, python-format |
||||
msgid "PIN lock has been removed from room %s." |
||||
msgstr "Il blocco del PIN è stato rimosso per la stanza %s." |
||||
|
||||
#, python-format |
||||
msgid "Enter the PIN for room %s" |
||||
msgstr "Inserisci il PIN per la stanza %s" |
||||
|
||||
msgid "Please sign in to create rooms." |
||||
msgstr "Accedi per creare una stanza." |
||||
|
||||
#, python-format |
||||
msgid "and %s" |
||||
msgstr "e %s" |
||||
|
||||
#, python-format |
||||
msgid "and %d others" |
||||
msgstr "e %d altri" |
||||
|
||||
msgid "User" |
||||
msgstr "Utente" |
||||
|
||||
msgid "Someone" |
||||
msgstr "Qualcuno" |
||||
|
||||
msgid "Me" |
||||
msgstr "Me" |
||||
|
||||
#~ msgid "Register" |
||||
#~ msgstr "Registrati" |
File diff suppressed because one or more lines are too long
@ -0,0 +1,213 @@
@@ -0,0 +1,213 @@
|
||||
/* |
||||
* Spreed WebRTC. |
||||
* Copyright (C) 2013-2016 struktur AG |
||||
* |
||||
* This file is part of Spreed WebRTC. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* |
||||
*/ |
||||
|
||||
"use strict"; |
||||
define(["jquery"], function($) { |
||||
var geoRequestTimeout = 30000; // Timeout for geo requests in milliseconds.
|
||||
var geoFastRetryTimeout = 45000; // Refresh timer in milliseconds, after which GEO requests should be retried if failed before.
|
||||
var refreshPercentile = 90; // Percent of the TTL when TURN credentials should be refreshed.
|
||||
var refreshMinimumInterval = 30000; // Minimal TURN refresh interval in milliseconds.
|
||||
|
||||
// turnData
|
||||
return ["$timeout", "$http", "api", "randomGen", "appData", "translationLanguage", function($timeout, $http, api, randomGen, appData, translationLanguage) { |
||||
var ttlTimeout = null; |
||||
var geoRefresh = null; |
||||
var geoPreferred = null; |
||||
|
||||
var service = this; |
||||
service.e = $({}); |
||||
service.data = {}; |
||||
|
||||
service.apply = function() { |
||||
var turn = service.data; |
||||
var turnData = { |
||||
"username": turn.username, |
||||
"password": turn.password, |
||||
"ttl": turn.ttl |
||||
}; |
||||
if (turn && turn.servers) { |
||||
// Multiple options, need to sort and use settings.
|
||||
var i; |
||||
if (!turn.serverMap) { |
||||
var servers = {}; |
||||
var serversSelectable = []; |
||||
// Sort for prio.
|
||||
turn.servers.sort(function(a, b) { |
||||
servers[a.id] = a; |
||||
servers[b.id] = b; |
||||
return (a.prio > b.prio) ? 1 : ((a.prio < b.prio) ? -1 : 0); |
||||
}); |
||||
turn.first = turn.servers[0]; |
||||
// Create selectable servers.
|
||||
var lang = translationLanguage.lang; |
||||
for (i=0; i<turn.servers.length; i++) { |
||||
var label = turn.servers[i].label; |
||||
if (turn.servers[i].i18n && turn.servers[i].i18n[lang]) { |
||||
label = turn.servers[i].label = turn.servers[i].i18n[lang]; |
||||
} |
||||
|
||||
if (label === "hidden") { |
||||
continue; |
||||
} |
||||
if (!label) { |
||||
// Use id as label.
|
||||
label = turn.servers[i].label = turn.servers[i].id; |
||||
} |
||||
if (!label) { |
||||
// Use index as label.
|
||||
label = turn.servers[i].label = ''+i; |
||||
} |
||||
serversSelectable.push(turn.servers[i]); |
||||
} |
||||
// Add auto zone if geo URI and available zones.
|
||||
if (turn.geo_uri && turn.servers.length > 0) { |
||||
serversSelectable.unshift({ |
||||
"id": "auto", |
||||
"label": "auto" |
||||
}) |
||||
} |
||||
// Make created data available.
|
||||
turn.serverMap = servers; |
||||
turn.serversSelectable = serversSelectable; |
||||
} |
||||
var urls; |
||||
if (turn.preferred) { |
||||
for (i=0; i<turn.preferred.length; i++) { |
||||
if (turn.serverMap.hasOwnProperty(turn.preferred[i])) { |
||||
urls = turn.serverMap[turn.preferred[i]].urns; |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
if (!urls && turn.first) { |
||||
urls = turn.first.urns; |
||||
} |
||||
turnData.urls = urls; |
||||
} else if (turn && turn.urls) { |
||||
// Simple case, single region.
|
||||
turnData.urls = turn.urls |
||||
} else { |
||||
// Unknown data.
|
||||
turnData.urls = []; |
||||
} |
||||
console.log("TURN servers selected: ", turnData.urls, turnData.ttl, turn.preferred || null); |
||||
service.e.triggerHandler("apply", [turnData]); |
||||
|
||||
return turnData; |
||||
}; |
||||
|
||||
service.refresh = function(withGeo) { |
||||
$timeout.cancel(geoRefresh); |
||||
|
||||
var turn = service.data; |
||||
service.e.triggerHandler("refresh", [turn]); |
||||
if (turn.selected === "auto" && turn.geo_uri) { |
||||
if (geoPreferred !== null) { |
||||
// Use existing data.
|
||||
turn.preferred = geoPreferred; |
||||
|
||||
} else { |
||||
if (!withGeo) { |
||||
// Avoid triggering spurious GEO request for fast updates.
|
||||
geoRefresh = $timeout(function() { |
||||
service.refresh(true); |
||||
}, 1000); |
||||
return; |
||||
} |
||||
|
||||
// Run Geo request.
|
||||
var nonce = randomGen.random({hex: true}); |
||||
$http({ |
||||
method: "POST", |
||||
url: turn.geo_uri, |
||||
headers: {"Content-Type": "application/x-www-form-urlencoded"}, |
||||
data: "nonce="+encodeURIComponent(nonce)+"&username="+encodeURIComponent(turn.username)+"&password="+encodeURIComponent(turn.password), |
||||
timeout: geoRequestTimeout |
||||
}).then(function(response) { |
||||
// success
|
||||
if (turn !== service.data) { |
||||
// No longer our data.
|
||||
return; |
||||
} |
||||
if (response.status === 200) { |
||||
var data = response.data; |
||||
if (data.success && data.nonce === nonce) { |
||||
geoPreferred = turn.preferred = data.geo.prefer; |
||||
console.log("TURN GEO auto selected: ", turn.preferred); |
||||
service.apply(); |
||||
} |
||||
} |
||||
}, function(response) { |
||||
// failed
|
||||
if (turn !== service.data) { |
||||
// No longer our data.
|
||||
return; |
||||
} |
||||
console.warn("TURN GEO failed:", response.status, response); |
||||
$timeout.cancel(ttlTimeout); |
||||
ttlTimeout = $timeout(function() { |
||||
// Fast retry.
|
||||
console.warn("TURN GEO failed - refreshing early.") |
||||
api.sendSelf(); |
||||
}, geoFastRetryTimeout) |
||||
}) |
||||
} |
||||
} else { |
||||
// Set directly.
|
||||
turn.preferred = []; |
||||
if (turn.selected) { |
||||
turn.preferred.push(turn.selected); |
||||
} |
||||
} |
||||
service.apply(); |
||||
}; |
||||
|
||||
service.update = function(turn) { |
||||
$timeout.cancel(ttlTimeout); |
||||
if (service.data && service.data.preferred) { |
||||
// Keep preferred list if there is one.
|
||||
turn.preferred = service.data.preferred; |
||||
} |
||||
service.data = turn; |
||||
service.refresh() |
||||
|
||||
// Support to refresh TURN data when ttl was reached.
|
||||
if (turn.ttl) { |
||||
var timer = turn.ttl * 0.01 * refreshPercentile * 1000; |
||||
if (timer < refreshMinimumInterval) { |
||||
timer = refreshMinimumInterval; |
||||
} |
||||
ttlTimeout = $timeout(function() { |
||||
console.log("TURN TTL reached - sending refresh request."); |
||||
api.sendSelf(); |
||||
}, timer); |
||||
} |
||||
}; |
||||
|
||||
service.cancel = function() { |
||||
$timeout.cancel(ttlTimeout); |
||||
} |
||||
|
||||
appData.e.on("userSettingsLoaded", service.refresh); |
||||
|
||||
return service; |
||||
}] |
||||
}) |
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
{ |
||||
"connect1": [ |
||||
0, |
||||
5179 |
||||
], |
||||
"end1": [ |
||||
5228, |
||||
6199 |
||||
], |
||||
"entry1": [ |
||||
11476, |
||||
3000 |
||||
], |
||||
"leaving1": [ |
||||
14526, |
||||
2126 |
||||
], |
||||
"message1": [ |
||||
16701, |
||||
816 |
||||
], |
||||
"question1": [ |
||||
17567, |
||||
3313 |
||||
], |
||||
"ringtone1": [ |
||||
20929, |
||||
935 |
||||
], |
||||
"whistle1": [ |
||||
21913, |
||||
1405 |
||||
] |
||||
} |
Binary file not shown.
Binary file not shown.
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
||||
// This file is auto generated, do not modify.
|
||||
"use strict"; |
||||
define([], function() { |
||||
return {"zh-cn": "\u4e2d\u6587\uff08\u7b80\u4f53\uff09", "fr": "Fran\u00e7ais", "en": "English", "ru": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439", "zh-tw": "\u7e41\u9ad4\u4e2d\u6587", "de": "Deutsch", "ko": "\ud55c\uad6d\uc5b4", "ja": "\u65e5\u672c\u8a9e"}; |
||||
return {"zh-cn": "\u4e2d\u6587\uff08\u7b80\u4f53\uff09", "fr": "Fran\u00e7ais", "en": "English", "ru": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439", "zh-tw": "\u7e41\u9ad4\u4e2d\u6587", "de": "Deutsch", "ko": "\ud55c\uad6d\uc5b4", "ja": "\u65e5\u672c\u8a9e", "es": "Espa\u00f1ol", "it": "Italiano"}; |
||||
}); |
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue