From 8d8e1c3301961089afd4516a2d24076d4d701665 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Tue, 22 Aug 2017 20:17:58 +0000 Subject: [PATCH 01/86] Translated using Weblate (Hungarian) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 7c38e41c9b..7aabdd28f1 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -961,5 +961,14 @@ "Automatically replace plain text Emoji": "Egyszerű szöveg automatikus cseréje Emoji-ra", "Failed to upload image": "Kép feltöltése sikertelen", "Failed to update group": "Csoport frissítése sikertelen", - "Hide avatars in user and room mentions": "Profilképek elrejtése felhasználó és szoba említésekben" + "Hide avatars in user and room mentions": "Profilképek elrejtése felhasználó és szoba említésekben", + "Cannot add any more widgets": "Nem lehet több kisalkalmazást hozzáadni", + "Do you want to load widget from URL:": "Betöltöd a kisalkalmazást erről az URL-ről:", + "Integrations Error": "Integrációs hiba", + "Publish this room to the public in %(domain)s's room directory?": "Publikálod a szobát a(z) %(domain)s szoba listájába?", + "NOTE: Apps are not end-to-end encrypted": "Megjegyzés: Az alkalmazások nem végponttól végpontig titkosítottak", + "The maximum permitted number of widgets have already been added to this room.": "A maximálisan megengedett számú kisalkalmazás már hozzá van adva a szobához.", + "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s kisalkalmazást %(senderName)s hozzáadta", + "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s kisalkalmazást %(senderName)s eltávolította", + "Robot check is currently unavailable on desktop - please use a web browser": "Robot ellenőrzés az asztali verzióban nem érhető el - használd a web böngészőt" } From 859bfff03f15ae7e52f41f940bec9b35a6e288b9 Mon Sep 17 00:00:00 2001 From: Bamstam Date: Tue, 22 Aug 2017 20:47:21 +0000 Subject: [PATCH 02/86] Translated using Weblate (German) Currently translated at 99.2% (964 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 2fbee2717d..45fc57e41b 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -552,10 +552,8 @@ "Failed to forget room %(errCode)s": "Das Entfernen des Raums ist fehlgeschlagen %(errCode)s", "Failed to join the room": "Fehler beim Betreten des Raumes", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Eine Textnachricht wurde an +%(msisdn)s gesendet. Bitte gebe den Verifikationscode ein, den er beinhaltet", - "and %(count)s others...": { - "other": "und %(count)s weitere...", - "one": "und ein(e) weitere(r)..." - }, + "and %(count)s others....other": "und %(count)s weitere...", + "and %(count)s others....one": "und ein(e) weitere(r)...", "Are you sure?": "Bist du sicher?", "Attachment": "Anhang", "Ban": "Dauerhaft aus dem Raum ausschließen", @@ -913,7 +911,7 @@ "Admin tools": "Admin-Werkzeuge", "And %(count)s more...": "Und %(count)s weitere...", "Alias (optional)": "Alias (optional)", - "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Verbindung zum Heimserver fehlgeschlagen - bitte prüfe deine Verbindung, stelle sicher, dass dem SSL-Zertifikat deines Heimservers vertraut wird und keine Browser-Erweiterung Anfragen blockiert.", + "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Verbindung zum Heimserver fehlgeschlagen - bitte überprüfe die Internetverbindung und stelle sicher, dass dem SSL-Zertifikat deines Heimservers vertraut wird und dass Anfragen nicht durch eine Browser-Erweiterung blockiert werden.", "Click here to join the discussion!": "Hier klicken, um an der Diskussion teilzunehmen!", "Close": "Schließen", "Custom": "Erweitert", @@ -1034,5 +1032,6 @@ "Failed to update group": "Aktualisieren der Gruppe fehlgeschlagen", "Hide avatars in user and room mentions": "Verberge Profilbilder in Benutzer- und Raum-Erwähnungen", "AM": "am", - "PM": "pm" + "PM": "pm", + "The maximum permitted number of widgets have already been added to this room.": "Die maximal erlaubte Anzahl an hinzufügbaren Widgets für diesen Raum wurde erreicht." } From 1dfab49349f672f506b9208c21e477e81238545d Mon Sep 17 00:00:00 2001 From: Krombel Date: Wed, 23 Aug 2017 11:02:37 +0000 Subject: [PATCH 03/86] Translated using Weblate (German) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 45fc57e41b..8b49bfddcc 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1033,5 +1033,12 @@ "Hide avatars in user and room mentions": "Verberge Profilbilder in Benutzer- und Raum-Erwähnungen", "AM": "am", "PM": "pm", - "The maximum permitted number of widgets have already been added to this room.": "Die maximal erlaubte Anzahl an hinzufügbaren Widgets für diesen Raum wurde erreicht." + "The maximum permitted number of widgets have already been added to this room.": "Die maximal erlaubte Anzahl an hinzufügbaren Widgets für diesen Raum wurde erreicht.", + "Cannot add any more widgets": "Kann keine weiteren Widgets hinzufügen", + "Do you want to load widget from URL:": "Mögest du das Widget von folgender URL laden:", + "Integrations Error": "Integrations-Error", + "NOTE: Apps are not end-to-end encrypted": "BEACHTE: Apps sind nicht Ende-zu-Ende verschlüsselt", + "%(widgetName)s widget added by %(senderName)s": "Widget \"%(widgetName)s\" von %(senderName)s hinzugefügt", + "%(widgetName)s widget removed by %(senderName)s": "Widget \"%(widgetName)s\" von %(senderName)s entfernt", + "Robot check is currently unavailable on desktop - please use a web browser": "Auf dem Desktop kann aktuell nicht geprüft werden, ob du ein Roboter bist. Bitte nutze einen Browser" } From dad23adfb953c42263bb8a726b0c129bb152a2ed Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 23 Aug 2017 19:28:50 +0000 Subject: [PATCH 04/86] Translated using Weblate (Russian) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ru/ --- src/i18n/strings/ru.json | 56 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 3f3403d716..cd3d6d15ae 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -448,10 +448,8 @@ "sx": "Суту", "zh-hk": "Китайский (Гонконг)", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Текстовое сообщение было отправлено на +%(msisdn)s. Введите проверочный код, который оно содержит", - "and %(count)s others...": { - "other": "и %(count)s других...", - "one": "и ещё один..." - }, + "and %(count)s others....other": "и %(count)s других...", + "and %(count)s others....one": "и ещё один...", "Are you sure?": "Вы уверены?", "Autoplay GIFs and videos": "Автовоспроизведение GIF и видео", "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Невозможно соединиться с домашним сервером - проверьте своё соединение и убедитесь, что SSL-сертификат вашего домашнего сервера включён в доверяемые.", @@ -978,5 +976,53 @@ "Define the power level of a user": "Определить уровень доступа пользователя", "Do you want to load widget from URL:": "Загрузить виджет из URL-адреса:", "Edit": "Изменить", - "Enable automatic language detection for syntax highlighting": "Включить автоматическое определение языка для подсветки синтаксиса" + "Enable automatic language detection for syntax highlighting": "Включить автоматическое определение языка для подсветки синтаксиса", + "Hide Apps": "Скрыть приложения", + "Hide join/leave messages (invites/kicks/bans unaffected)": "Скрыть сообщения о входе/выходе (приглашениях/выкидываниях/банах)", + "Hide avatar and display name changes": "Скрыть сообщения об изменении аватаров и отображаемых имен", + "Integrations Error": "Ошибка интеграции", + "Matrix Apps": "Приложения Matrix", + "AM": "AM", + "PM": "PM", + "NOTE: Apps are not end-to-end encrypted": "ПРИМЕЧАНИЕ: приложения не защищены сквозным шифрованием", + "Revoke widget access": "Отозвать доступ к виджетам", + "Sets the room topic": "Задать тему комнаты", + "Show Apps": "Показать приложения", + "The maximum permitted number of widgets have already been added to this room.": "Максимально допустимое количество виджетов уже добавлено в эту комнату.", + "To get started, please pick a username!": "Чтобы начать, выберите имя пользователя!", + "Unable to create widget.": "Не удалось создать виджет.", + "Unbans user with given id": "Разбанить пользователя с заданным ID", + "You are not in this room.": "Вас нет в этой комнате.", + "You do not have permission to do that in this room.": "У вас нет разрешения на это в этой комнате.", + "Verifies a user, device, and pubkey tuple": "Проверка пользователя, устройства и открытого ключа", + "Autocomplete Delay (ms):": "Задержка автозаполнения (мс):", + "This Home server does not support groups": "Этот домашний сервер не поддерживает группы", + "Loading device info...": "Загрузка информации об устройстве...", + "Groups": "Группы", + "Create a new group": "Создать новую группу", + "Create Group": "Создать группу", + "Group Name": "Название группы", + "Example": "Пример", + "Create": "Создать", + "Group ID": "ID группы", + "+example:%(domain)s": "+пример:%(domain)s", + "Group IDs must be of the form +localpart:%(domain)s": "Идентификаторы групп должны иметь вид +локальная часть:%(domain)s", + "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "В настоящее время возможно создавать группы только на собственном домашнем сервере: используйте идентификатор группы, заканчивающийся на %(domain)s", + "Room creation failed": "Не удалось создать комнату", + "You are a member of these groups:": "Вы являетесь членом этих групп:", + "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Создайте группу для представления своего сообщества! Определите набор комнат и собственную домашнюю страницу, чтобы выделить свое пространство во вселенной Matrix.", + "Join an existing group": "Присоединиться к существующей группе", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Чтобы присоединиться к группе, вам нужно знать ее идентификатор; он выглядит примерно так:+пример:matrix.org.", + "Featured Rooms:": "Рекомендуемые комнаты:", + "Error whilst fetching joined groups": "Ошибка при извлечении объединенных групп", + "Featured Users:": "Избранные пользователи:", + "Edit Group": "Изменить группу", + "Automatically replace plain text Emoji": "Автоматически заменять обычный текст на Emoji", + "Failed to upload image": "Не удалось загрузить изображение", + "Failed to update group": "Не удалось обновить группу", + "Hide avatars in user and room mentions": "Скрыть аватары в упоминаниях пользователей и комнат", + "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s виджет, добавленный %(senderName)s", + "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s виджет, удаленный %(senderName)s", + "Robot check is currently unavailable on desktop - please use a web browser": "Проверка робота в настоящее время недоступна на компьютере - пожалуйста, используйте браузер", + "Publish this room to the public in %(domain)s's room directory?": "Опубликовать эту комнату для пользователей в %(domain)s каталоге комнат?" } From f322df6b0caf5ca2682f60ecefa22e3000b70b9d Mon Sep 17 00:00:00 2001 From: Eric Newport Date: Wed, 23 Aug 2017 23:17:27 +0000 Subject: [PATCH 05/86] Translated using Weblate (English (United States)) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/en_US/ --- src/i18n/strings/en_US.json | 57 +++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index a68ce5d982..1bba6d58b4 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -154,10 +154,8 @@ "%(items)s and %(remaining)s others": "%(items)s and %(remaining)s others", "%(items)s and one other": "%(items)s and one other", "%(items)s and %(lastItem)s": "%(items)s and %(lastItem)s", - "and %(count)s others...": { - "other": "and %(count)s others...", - "one": "and one other..." - }, + "and %(count)s others....other": "and %(count)s others...", + "and %(count)s others....one": "and one other...", "%(names)s and %(lastPerson)s are typing": "%(names)s and %(lastPerson)s are typing", "%(names)s and one other are typing": "%(names)s and one other are typing", "%(names)s and %(count)s others are typing": "%(names)s and %(count)s others are typing", @@ -685,7 +683,7 @@ "quote": "quote", "bullet": "bullet", "numbullet": "numbullet", - "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)s joined %(repeats)s times", + "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)sjoined %(repeats)s times", "%(oneUser)sjoined %(repeats)s times": "%(oneUser)sjoined %(repeats)s times", "%(severalUsers)sjoined": "%(severalUsers)sjoined", "%(oneUser)sjoined": "%(oneUser)sjoined", @@ -940,5 +938,52 @@ "Your unverified device '%(displayName)s' is requesting encryption keys.": "Your unverified device '%(displayName)s' is requesting encryption keys.", "Encryption key request": "Encryption key request", "Updates": "Updates", - "Check for update": "Check for update" + "Check for update": "Check for update", + "Allow": "Allow", + "Cannot add any more widgets": "Cannot add any more widgets", + "Changes colour scheme of current room": "Changes color scheme of current room", + "Define the power level of a user": "Define the power level of a user", + "Do you want to load widget from URL:": "Do you want to load widget from URL:", + "Enable automatic language detection for syntax highlighting": "Enable automatic language detection for syntax highlighting", + "Hide join/leave messages (invites/kicks/bans unaffected)": "Hide join/leave messages (invites/kicks/bans unaffected)", + "Hide avatar and display name changes": "Hide avatar and display name changes", + "Integrations Error": "Integrations Error", + "NOTE: Apps are not end-to-end encrypted": "NOTE: Apps are not end-to-end encrypted", + "Sets the room topic": "Sets the room topic", + "The maximum permitted number of widgets have already been added to this room.": "The maximum permitted number of widgets have already been added to this room.", + "To get started, please pick a username!": "To get started, please pick a username!", + "Unable to create widget.": "Unable to create widget.", + "Unbans user with given id": "Unbans user with given id", + "You are not in this room.": "You are not in this room.", + "You do not have permission to do that in this room.": "You do not have permission to do that in this room.", + "Autocomplete Delay (ms):": "Autocomplete Delay (ms):", + "This Home server does not support groups": "This Home server does not support groups", + "Loading device info...": "Loading device info...", + "Groups": "Groups", + "Create a new group": "Create a new group", + "Create Group": "Create Group", + "Group Name": "Group Name", + "Example": "Example", + "Create": "Create", + "Group ID": "Group ID", + "+example:%(domain)s": "+example:%(domain)s", + "Group IDs must be of the form +localpart:%(domain)s": "Group IDs must be of the form +localpart:%(domain)s", + "Room creation failed": "Room creation failed", + "You are a member of these groups:": "You are a member of these groups:", + "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.", + "Join an existing group": "Join an existing group", + "Featured Rooms:": "Featured Rooms:", + "Error whilst fetching joined groups": "Error while fetching joined groups", + "Featured Users:": "Featured Users:", + "Edit Group": "Edit Group", + "Automatically replace plain text Emoji": "Automatically replace plain text Emoji", + "Failed to upload image": "Failed to upload image", + "Failed to update group": "Failed to update group", + "Hide avatars in user and room mentions": "Hide avatars in user and room mentions", + "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget added by %(senderName)s", + "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget removed by %(senderName)s", + "Robot check is currently unavailable on desktop - please use a web browser": "Robot check is currently unavailable on desktop - please use a web browser", + "Verifies a user, device, and pubkey tuple": "Verifies a user, device, and pubkey tuple", + "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org." } From 5f85bc6d7d2541cfe0eb9253cb3bdbe9f7f7ba18 Mon Sep 17 00:00:00 2001 From: cafade Date: Thu, 24 Aug 2017 01:01:46 +0000 Subject: [PATCH 06/86] Translated using Weblate (Spanish) Currently translated at 80.7% (784 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/es/ --- src/i18n/strings/es.json | 64 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 96a986decc..fca74df9f9 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -140,10 +140,8 @@ "%(items)s and %(remaining)s others": "%(items)s y %(remaining)s otros", "%(items)s and one other": "%(items)s y otro", "%(items)s and %(lastItem)s": "%(items)s y %(lastItem)s", - "and %(count)s others...": { - "other": "y %(count)s otros...", - "one": "y otro..." - }, + "and %(count)s others....other": "y %(count)s otros...", + "and %(count)s others....one": "y otro...", "%(names)s and %(lastPerson)s are typing": "%(names)s y %(lastPerson)s están escribiendo", "%(names)s and one other are typing": "%(names)s y otro están escribiendo", "%(names)s and %(count)s others are typing": "%(names)s y %(count)s otros están escribiendo", @@ -736,5 +734,61 @@ "You do not have permission to do that in this room.": "No tiene permiso para hacer esto en esta sala.", "You're not in any rooms yet! Press to make a room or to browse the directory": "¡Todavía no participa en ninguna sala! Pulsa para crear una sala o para explorar el directorio", "You are trying to access %(roomName)s.": "Está tratando de acceder a %(roomName)s.", - "You cannot place a call with yourself.": "No puede iniciar una llamada con usted mismo." + "You cannot place a call with yourself.": "No puede iniciar una llamada con usted mismo.", + "Cannot add any more widgets": "no es posible agregar mas widgets", + "Do you want to load widget from URL:": "desea cargar widget desde URL:", + "Integrations Error": "error de integracion", + "Publish this room to the public in %(domain)s's room directory?": "Desea publicar esta sala al publico en el directorio de sala de %(domain)s?", + "AM": "AM", + "PM": "PM", + "NOTE: Apps are not end-to-end encrypted": "NOTA: Las Apps no son cifradas de extremo a extremo", + "Revoke widget access": "Revocar acceso del widget", + "The maximum permitted number of widgets have already been added to this room.": "La cantidad máxima de widgets permitida ha sido alcanzada en esta sala.", + "To use it, just wait for autocomplete results to load and tab through them.": "Para usar, solo espere a que carguen los resultados de auto-completar y navegue entre ellos.", + "%(senderName)s unbanned %(targetName)s.": "%(senderName)s levanto la suspensión de %(targetName)s.", + "unencrypted": "no cifrado", + "Unmute": "desactivar el silencio", + "Unrecognised command:": "comando no reconocido:", + "Unrecognised room alias:": "alias de sala no reconocido:", + "uploaded a file": "cargo un archivo", + "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (nivel de permisos %(powerLevelNumber)s)", + "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and device %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "Atención: VERIFICACIÓN DE CLAVE FALLO\" La clave de firma para %(userId)s y el dispositivo %(deviceId)s es \"%(fprint)s\" la cual no concuerda con la clave provista por \"%(fingerprint)s\". Esto puede significar que sus comunicaciones están siendo interceptadas!", + "You cannot place VoIP calls in this browser.": "no puede realizar llamadas de voz en este navegador.", + "You do not have permission to post to this room": "no tiene permiso para publicar en esta sala", + "You have been banned from %(roomName)s by %(userName)s.": "Ha sido expulsado de %(roomName)s por %(userName)s.", + "You have been invited to join this room by %(inviterName)s": "Ha sido invitado a entrar a esta sala por %(inviterName)s", + "You have been kicked from %(roomName)s by %(userName)s.": "Ha sido removido de %(roomName)s por %(userName)s.", + "You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device": "Ha sido desconectado de todos los dispositivos y no continuara recibiendo notificaciones. Para volver a habilitar las notificaciones, vuelva a conectarse en cada dispositivo", + "You have disabled URL previews by default.": "Ha deshabilitado la vista previa de URL por defecto.", + "You have enabled URL previews by default.": "Ha habilitado vista previa de URL por defecto.", + "You have entered an invalid contact. Try using their Matrix ID or email address.": "Ha ingresado un contacto no valido. Intente usando la ID Matrix o e-mail del contacto.", + "You have no visible notifications": "No tiene notificaciones visibles", + "You may wish to login with a different account, or add this email to this account.": "Puede ingresar con una cuenta diferente, o agregar este e-mail a esta cuenta.", + "you must be a": "usted debe ser un", + "You must register to use this functionality": "Usted debe ser un registrar para usar esta funcionalidad", + "You need to be able to invite users to do that.": "Usted debe ser capaz de invitar usuarios para hacer eso.", + "You need to be logged in.": "Necesita estar autenticado.", + "You need to enter a user name.": "Tiene que ingresar un nombre de usuario.", + "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Su e-mail parece no estar asociado con una Id Matrix en este Homeserver.", + "Your password has been reset": "Su contraseña ha sido restablecida", + "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Su contraseña a sido cambiada exitosamente. No recibirá notificaciones en otros dispositivos hasta que ingrese de nuevo en ellos", + "You seem to be in a call, are you sure you want to quit?": "Parece estar en medio de una llamada, ¿esta seguro que desea salir?", + "You seem to be uploading files, are you sure you want to quit?": "Parece estar cargando archivos, ¿esta seguro que desea salir?", + "You should not yet trust it to secure data": "No debería confiarle aun para asegurar su información", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "No podrá revertir este cambio ya que esta promoviendo al usuario para tener el mismo nivel de autoridad que usted.", + "Your home server does not support device management.": "Su servidor privado no suporta la gestión de dispositivos.", + "Sun": "Dom", + "Mon": "Lun", + "Tue": "Mar", + "Wed": "Mie", + "Thu": "Jue", + "Fri": "Vie", + "Sat": "Sab", + "Jan": "Ene", + "Feb": "Feb", + "Mar": "Mar", + "Apr": "Abr", + "May": "May", + "Jun": "Jun", + "Jul": "Jul" } From 2942caf6a2273834d33357c72924444f37ef3f0a Mon Sep 17 00:00:00 2001 From: "Iru Cai (vimacs)" Date: Fri, 25 Aug 2017 03:43:10 +0000 Subject: [PATCH 07/86] Translated using Weblate (Chinese (Simplified)) Currently translated at 51.4% (500 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hans/ --- src/i18n/strings/zh_Hans.json | 144 +++++++++++++++++++++++++++++++--- 1 file changed, 135 insertions(+), 9 deletions(-) diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index cee8f224c4..288b5b4357 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -76,7 +76,7 @@ "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s 从 %(fromPowerLevel)s 变为 %(toPowerLevel)s", "Guests can't set avatars. Please register.": "游客不能设置头像。请注册。.", "Guest users can't create new rooms. Please register to create room and start a chat.": "游客不能创建聊天室。请注册以创建聊天室和聊天.", - "Guest users can't upload files. Please register to upload.": "游客不能上传文件。请注册以上传文件", + "Guest users can't upload files. Please register to upload.": "游客不能上传文件。请注册以上传文件。", "Guests can't use labs features. Please register.": "游客不能使用实验性功能。请注册。.", "Guests cannot join this room even if explicitly invited.": "游客不能加入此聊天室,即使有人主动邀请。.", "had": "已经", @@ -138,7 +138,7 @@ "since the point in time of selecting this option": "从选择此选项起", "since they joined": "从他们加入时起", "since they were invited": "从他们被邀请时起", - "Some of your messages have not been sent.": "部分消息发送失败", + "Some of your messages have not been sent.": "部分消息未发送。", "Someone": "某个用户", "Sorry, this homeserver is using a login which is not recognised ": "很抱歉,无法识别此主服务器使用的登录方式 ", "Start a chat": "创建聊天", @@ -147,7 +147,7 @@ "Success": "成功", "The default role for new room members is": "此聊天室新成员的默认角色是", "The main address for this room is": "此聊天室的主要地址是", - "This action cannot be performed by a guest user. Please register to be able to do this.": "游客不能进行此操作。请注册", + "This action cannot be performed by a guest user. Please register to be able to do this.": "游客不能进行此操作。请注册。", "This email address is already in use": "此邮箱地址已经被使用", "This email address was not found": "未找到此邮箱地址", "%(actionVerb)s this person?": "%(actionVerb)s 这个用户?", @@ -221,7 +221,7 @@ "en-gb": "英语 (英国)", "en-ie": "英语 (爱尔兰)", "en-nz": "英语 (新西兰)", - "Add a topic": "新话题", + "Add a topic": "添加一个主题", "Admin": "管理员", "Admin tools": "管理工具", "VoIP": "IP 电话", @@ -239,10 +239,8 @@ "%(items)s and %(remaining)s others": "%(items)s 和其它 %(remaining)s 个", "%(items)s and one other": "%(items)s 和其它一个", "%(items)s and %(lastItem)s": "%(items)s 和 %(lastItem)s", - "and %(count)s others...": { - "other": "和其它 %(count)s 个...", - "one": "和其它一个..." - }, + "and %(count)s others....other": "和其它 %(count)s 个...", + "and %(count)s others....one": "和其它一个...", "%(names)s and one other are typing": "%(names)s 和另一个人正在打字", "anyone": "任何人", "Anyone": "任何人", @@ -375,5 +373,133 @@ "Welcome page": "欢迎页面", "ar-om": "阿拉伯语(阿曼)", "ar-qa": "阿拉伯语(卡塔尔)", - "ar-sa": "阿拉伯语(沙特阿拉伯)" + "ar-sa": "阿拉伯语(沙特阿拉伯)", + "fi": "芬兰语", + "fr": "法语", + "he": "希伯来语", + "it": "意大利语", + "ja": "日语", + "ko": "韩语", + "Account": "账户", + "Add": "添加", + "Allow": "允许", + "Claimed Ed25519 fingerprint key": "声称的 Ed25519 指纹密钥", + "Could not connect to the integration server": "无法连接集成服务器", + "Curve25519 identity key": "Curve25519 认证密钥", + "Edit": "编辑", + "Hide Apps": "隐藏应用", + "joined and left": "加入并离开", + "Joins room with given alias": "以指定的别名加入聊天室", + "Labs": "实验室", + "left and rejoined": "离开并加入", + "left": "离开", + "%(targetName)s left the room.": "%(targetName)s 离开了聊天室。", + "Logged in as:": "登录为:", + "Logout": "登出", + "Low priority": "低优先级", + "Markdown is disabled": "Markdown 已禁用", + "Markdown is enabled": "Markdown 已启用", + "matrix-react-sdk version:": "matrix-react-sdk 版本:", + "Matrix Apps": "Matrix 应用", + "No more results": "没有更多结果", + "olm version:": "olm 版本:", + "Only people who have been invited": "只有被邀请的人", + "Otherwise, click here to send a bug report.": "否则,点击这里发送一个错误报告。", + "Privacy warning": "隐私警告", + "Private Chat": "私聊", + "Privileged Users": "特权用户", + "Reason": "原因", + "Register": "注册", + "rejected": "拒绝", + "%(targetName)s rejected the invitation.": "%(targetName)s 拒绝了邀请。", + "Reject invitation": "拒绝邀请", + "Rejoin": "重新加入", + "Users": "用户", + "User": "用户", + "Verification": "验证", + "verified": "已验证", + "Verified": "已验证", + "Verified key": "已验证的密钥", + "Video call": "视频通话", + "Voice call": "音频通话", + "VoIP conference finished.": "VoIP 会议结束。", + "VoIP conference started.": "VoIP 会议开始。", + "VoIP is unsupported": "不支持 VoIP", + "Warning!": "警告!", + "you must be a": "你必须是", + "You must register to use this functionality": "你必须注册以使用这个功能", + "You need to be logged in.": "你需要登录。", + "You need to enter a user name.": "你需要输入一个用户名。", + "Your password has been reset": "你的密码已被重置", + "Topic": "主题", + "Make Moderator": "使成为主持人", + "Room": "聊天室", + "Connectivity to the server has been lost.": "到服务器的连接已经丢失。", + "Auto-complete": "自动补全", + "bold": "加粗", + "italic": "斜体", + "strike": "删除线", + "underline": "下划线", + "code": "代码", + "quote": "引用", + "bullet": "项目符号", + "numbullet": "数字项目符号", + "were invited": "被邀请", + "was invited": "被邀请", + "were banned %(repeats)s times": "被封禁 %(repeats)s 次", + "was banned %(repeats)s times": "被封禁 %(repeats)s 次", + "were banned": "被封禁", + "was banned": "被封禁", + "New Password": "新密码", + "Options": "选项", + "Passphrases must match": "密码必须匹配", + "Passphrase must not be empty": "密码不能为空", + "Export room keys": "导出聊天室密钥", + "Confirm passphrase": "确认密码", + "Import room keys": "导入聊天室密钥", + "File to import": "要导入的文件", + "Start new chat": "开始新的聊天", + "Guest users can't invite users. Please register.": "游客不能邀请用户。请注册。", + "Failed to invite": "邀请失败", + "Failed to invite user": "邀请用户失败", + "Unknown error": "未知错误", + "Incorrect password": "密码错误", + "This action is irreversible.": "此操作不可逆。", + "To continue, please enter your password.": "请输入你的密码继续。", + "Device name": "设备名", + "Device Name": "设备名", + "Device key": "设备密钥", + "Verify device": "验证设备", + "I verify that the keys match": "我验证密钥匹配", + "Unable to restore session": "无法恢复会话", + "Continue anyway": "无论如何都继续", + "Blacklist": "列入黑名单", + "Unverify": "取消验证", + "ex. @bob:example.com": "例如 @bob:example.com", + "Add User": "添加用户", + "This Home Server would like to make sure you are not a robot": "这个Home Server想要确认你不是一个机器人", + "Token incorrect": "令牌错误", + "Default server": "默认服务器", + "Custom server": "自定义服务器", + "URL Previews": "URL 预览", + "Drop file here to upload": "把文件拖到这里以上传", + "Online": "在线", + "Idle": "空闲", + "Offline": "离线", + "Start chatting": "开始聊天", + "Start Chatting": "开始聊天", + "Click on the button below to start chatting!": "点击下面的按钮开始聊天!", + "Username available": "用户名可用", + "Username not available": "用户名不可用", + "Skip": "跳过", + "Start verification": "开始验证", + "Ignore request": "忽略请求", + "Loading device info...": "正在加载设备信息...", + "Groups": "群", + "Create a new group": "创建一个新群", + "Group Name": "群名称", + "Example": "例子", + "Create": "创建", + "Edit Group": "编辑群", + "Failed to upload image": "上传图像失败" } From 0927d2c9430827e3d58d1ed73da864de50e03bf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20T=C3=B6tterman?= Date: Thu, 24 Aug 2017 07:26:02 +0000 Subject: [PATCH 08/86] Translated using Weblate (Swedish) Currently translated at 55.2% (536 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sv/ --- src/i18n/strings/sv.json | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index d3b512900c..565a470e4e 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -150,10 +150,8 @@ "%(items)s and %(remaining)s others": "%(items)s och %(remaining)s andra", "%(items)s and one other": "%(items)s och en annan", "%(items)s and %(lastItem)s": "%(items)s och %(lastItem)s", - "and %(count)s others...": { - "other": "och %(count)s andra...", - "one": "och en annan..." - }, + "and %(count)s others....other": "och %(count)s andra...", + "and %(count)s others....one": "och en annan...", "%(names)s and %(lastPerson)s are typing": "%(names)s och %(lastPerson)s skriver", "%(names)s and one other are typing": "%(names)s och en annan skriver", "%(names)s and %(count)s others are typing": "%(names)s och %(count)s andra skriver", @@ -525,5 +523,21 @@ "Sorry, this homeserver is using a login which is not recognised ": "Den här hemsevern använder en login-metod som inte stöds ", "Start a chat": "Starta en chatt", "Start authentication": "Starta autentisering", - "Start Chat": "Starta en chatt" + "Start Chat": "Starta en chatt", + "Cancel": "Avbryt", + "Create new room": "Nytt rum", + "Custom Server Options": "Egna serverinställningar", + "Dismiss": "Avvisa", + "powered by Matrix": "drivs av Matrix", + "Room directory": "Rumskatalog", + "Start chat": "Starta chatt", + "unknown error code": "okänd felkod", + "Sunday": "söndag", + "Monday": "måndag", + "Tuesday": "tisdag", + "Wednesday": "onsdag", + "Thursday": "torsdag", + "Friday": "fredag", + "Saturday": "lördag", + "Welcome page": "Välkomstsida" } From 221935d894ce6ce1311bdcdc15f9d6a6d64a4f0a Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 25 Aug 2017 05:54:07 +0000 Subject: [PATCH 09/86] Translated using Weblate (Russian) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ru/ --- src/i18n/strings/ru.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index cd3d6d15ae..0d605bed5b 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -60,7 +60,7 @@ "Device ID": "ID устройства", "Devices will not yet be able to decrypt history from before they joined the room": "Устройства пока не могут дешифровать историю до их входа в комнату", "Direct Chat": "Прямой чат", - "Disable inline URL previews by default": "Отключить предварительный просмотр URL-адресов по умолчанию", + "Disable inline URL previews by default": "Отключить предпросмотр URL-адресов по умолчанию", "Display name": "Отображаемое имя", "Displays action": "Отображение действий", "Ed25519 fingerprint": "Ed25519 отпечаток", @@ -582,7 +582,7 @@ "This room is not recognised.": "Эта комната не опознана.", "These are experimental features that may break in unexpected ways": "Это экспериментальные функции, которые могут себя вести неожиданным образом", "This doesn't appear to be a valid email address": "Похоже, это недействительный адрес электронной почты", - "This is a preview of this room. Room interactions have been disabled": "Это предварительный просмотр комнаты. Взаимодействие с комнатой отключено", + "This is a preview of this room. Room interactions have been disabled": "Это предпросмотр комнаты. Взаимодействие с комнатой отключено", "This phone number is already in use": "Этот номер телефона уже используется", "This room's internal ID is": "Внутренний ID этой комнаты", "times": "раз", @@ -840,10 +840,10 @@ "Add an Integration": "Добавить интеграцию", "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Вы будете пернаправлены на внешний сайт, где сможете аутентифицировать свою учетную запись для использования с %(integrationsUrl)s. Продолжить?", "Removed or unknown message type": "Удалено или неизвестный тип сообщения", - "Disable URL previews by default for participants in this room": "Отключить предварительный просмотр URL-адресов по умолчанию для участников этой комнаты", + "Disable URL previews by default for participants in this room": "Отключить предпросмотр URL-адресов по умолчанию для участников этой комнаты", "URL previews are %(globalDisableUrlPreview)s by default for participants in this room.": "Предварительный просмотр URL-адресов %(globalDisableUrlPreview)s по умолчанию для участников этой комнаты.", "URL Previews": "Предварительный просмотр URL-адресов", - "Enable URL previews for this room (affects only you)": "Включить предварительный просмотр URL-адресов для этой комнаты (влияет только на вас)", + "Enable URL previews for this room (affects only you)": "Включить предпросмотр URL-адресов для этой комнаты (влияет только на вас)", "Drop file here to upload": "Перетащите файл сюда для отправки", " (unsupported)": " (не поддерживается)", "Ongoing conference call%(supportedText)s.": "Установлен групповой вызов %(supportedText)s.", @@ -854,7 +854,7 @@ "Online": "В сети", "Idle": "Неактивен", "Offline": "Не в сети", - "Disable URL previews for this room (affects only you)": "Отключить предварительный просмотр URL-адресов для этой комнаты (влияет только на вас)", + "Disable URL previews for this room (affects only you)": "Отключить предпросмотр URL-адресов для этой комнаты (влияет только на вас)", "$senderDisplayName changed the room avatar to ": "$senderDisplayName сменил аватар комнаты на ", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s удалил аватар комнаты.", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s сменил аватар для %(roomName)s", From a05d7bb6cbcad296b47a33fad393c15867b92d7f Mon Sep 17 00:00:00 2001 From: Magorak Date: Fri, 25 Aug 2017 14:14:40 +0000 Subject: [PATCH 10/86] Translated using Weblate (Czech) Currently translated at 7.0% (68 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cs/ --- src/i18n/strings/cs.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 25aa1eb1a9..a387958b00 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -51,5 +51,20 @@ "Error": "Chyba", "Failed to join the room": "Nepodařilo se vstoupit do místnosti", "Favourite": "V oblíbených", - "Mute": "Ztišit" + "Mute": "Ztišit", + "Continue": "Pokračovat", + "Failed to change password. Is your password correct?": "Nelze změnit heslo. Je Vaše heslo správné?", + "Welcome page": "Uvítací stránka", + "Operation failed": "Chyba operace", + "Please Register": "Prosím zaregistrujte se", + "Remove": "Odebrat", + "unknown error code": "neznámý kód chyby", + "Sunday": "Neděle", + "Monday": "Pondělí", + "Tuesday": "Úterý", + "Wednesday": "Středa", + "Thursday": "Čtvrtek", + "Friday": "Pátek", + "Saturday": "Sobota", + "OK": "OK" } From 8a27fde38d03fb5142146bcba427397a007f9a86 Mon Sep 17 00:00:00 2001 From: Lauris Mierkalns Date: Fri, 25 Aug 2017 20:47:48 +0000 Subject: [PATCH 11/86] Translated using Weblate (Latvian) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/lv/ --- src/i18n/strings/lv.json | 61 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index c2a55b3fc2..3270975938 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -913,5 +913,64 @@ "Skip": "Izlaist", "Share without verifying": "Kopīgot bez verificēšanas", "Ignore request": "Ignorēt pieprasījumu", - "Encryption key request": "Šifrēšanas atslēgas pieprasījums" + "Encryption key request": "Šifrēšanas atslēgas pieprasījums", + "Add a widget": "Pievienot Widžetu", + "Allow": "Atļaut", + "and %(count)s others....other": "un vēl %(count)s citi...", + "and %(count)s others....one": "un vēl viens cits...", + "Cannot add any more widgets": "Nav iespējams pievienot vairāk vidžetu", + "Changes colour scheme of current room": "Nomaina pašreizējās istabas krāsu paleti", + "Delete widget": "Dzēst widžetu", + "Define the power level of a user": "Definēt lietotāja pakāpes līmeni", + "Do you want to load widget from URL:": "Vai vēlies ielādēt widžetu no URL:", + "Edit": "Labot", + "Enable automatic language detection for syntax highlighting": "Iespējot automātisko valodas noteikšanu sintakses iezīmējumiem", + "Hide Apps": "Slēpt aplikācijas", + "Hide join/leave messages (invites/kicks/bans unaffected)": "Slēpt pievienoties/pamest ziņas (tas neietekmē uzaicinājumus, vai kick/bana darbības)", + "Hide avatar and display name changes": "Slēpt profila attēlu un rādīt redzamā vārda izmaiņas", + "Integrations Error": "Integrācijas kļūda", + "Publish this room to the public in %(domain)s's room directory?": "Publicēt šo istabu publiskajā %(domain)s katalogā?", + "Matrix Apps": "Matrix Aplikācijas", + "AM": "AM", + "PM": "PZ", + "NOTE: Apps are not end-to-end encrypted": "PIEZĪME: Aplikācijās nav ierīce-ierīce šifrēšanas", + "Sets the room topic": "Uzstāda istabas tēmas nosaukumu", + "Show Apps": "Rādīt aplikācijas", + "The maximum permitted number of widgets have already been added to this room.": "Atļautais vidžetu skaits jau ir sasniegts šai istabai.", + "To get started, please pick a username!": "Lai sāktu, lūdzu izvēlies lietotājvārdu!", + "Unable to create widget.": "Nav iespējams izveidot widžetu.", + "Unbans user with given id": "Atceļ pieejas liegumu (atbano) lietotāju pēc norādītā id", + "You are not in this room.": "Tu neatrodies šajā istabā.", + "You do not have permission to do that in this room.": "Tev nav atļaujas šai darbībai šajā istabā.", + "Verifies a user, device, and pubkey tuple": "Verificē lietotāju, ierīci, un publiskās atslēgas", + "Autocomplete Delay (ms):": "Automātiskās aizpildīšanas aiztures laiks (ms):", + "This Home server does not support groups": "Šis serveris neatbalsta grupas", + "Loading device info...": "Ielādē ierīces informāciju...", + "Groups": "Grupas", + "Create a new group": "Izveidot jaunu grupu", + "Create Group": "Izveidot grupu", + "Group Name": "Grupas nosaukums", + "Example": "Piemērs", + "Create": "Izveidot", + "Group ID": "Grupas ID", + "+example:%(domain)s": "+example:%(domain)s", + "Group IDs must be of the form +localpart:%(domain)s": "Grupas ID ir jābūt sekojošā formātā: +localpart:%(domain)s", + "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "Vienīgi ir iespējams izveidot grupas tavā serverī: izmanto grupas ID, kurš beidzas ar %(domain)s", + "Room creation failed": "Neizdevās izveidot istabu", + "You are a member of these groups:": "Tu esi sekojošo grupu biedrs:", + "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Izveido grupu, lai prezentētu savu komūnu! Definē istabu grupu un savu personīgo mājaslapu, lai iezīmētu savu vietu Matrix universumā.", + "Join an existing group": "Pievienoties eksistējošai grupai", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Lai pievienotos eksistējošai grupai, Tev ir jāzina šīs grupas identifikators. Piemēram: +latvija:matrix.org.", + "Featured Rooms:": "Ieteiktās istabas:", + "Error whilst fetching joined groups": "Notika kļūda, nosakot pievienotās grupas", + "Featured Users:": "Ieteiktie lietotāji:", + "Edit Group": "Labot grupu", + "Automatically replace plain text Emoji": "Automātiski aizvieto tekstu ar emocijikonu (emoji)", + "Failed to upload image": "Neizdevās augšupielādēt attēlu", + "Failed to update group": "Neizdevās atjaunināt grupu", + "Hide avatars in user and room mentions": "Slēpt profila attēlus lietotāja un istabas pieminējumatzīmēs (@mention)", + "%(widgetName)s widget added by %(senderName)s": "%(senderName)s pievienoja %(widgetName)s vidžetu", + "%(widgetName)s widget removed by %(senderName)s": "%(senderName)s dzēsa vidžetu %(widgetName)s", + "Robot check is currently unavailable on desktop - please use a web browser": "Robotu pārbaude šobrīd nav pieejama darbvirsmas versijā. Lūdzu izmanto web pārlūku", + "Revoke widget access": "Atsaukt piekļuvi vidžetam" } From f670e0f66b86582009428a17c52e0ca83603e01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Nenad=C3=A1l?= Date: Fri, 25 Aug 2017 19:43:21 +0000 Subject: [PATCH 12/86] Translated using Weblate (Czech) Currently translated at 7.1% (69 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cs/ --- src/i18n/strings/cs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index a387958b00..d10f006254 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -66,5 +66,6 @@ "Thursday": "Čtvrtek", "Friday": "Pátek", "Saturday": "Sobota", - "OK": "OK" + "OK": "OK", + "Failed to forget room %(errCode)s": "Nepodařilo se zapomenout místnost %(errCode)s" } From 5de4e3d2bbf05507739617f97a43a0e31fc08200 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Sat, 26 Aug 2017 13:25:54 +0000 Subject: [PATCH 13/86] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 61 ++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 93ac57330a..35631310ad 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -920,5 +920,64 @@ "Ignore request": "忽略請求", "You added a new device '%(displayName)s', which is requesting encryption keys.": "您加入了新裝置 '%(displayName)s',其將會要求加密金鑰。", "Your unverified device '%(displayName)s' is requesting encryption keys.": "您未驗證的裝置 '%(displayName)s' 正在請求加密金鑰。", - "Encryption key request": "加密金鑰請求" + "Encryption key request": "加密金鑰請求", + "Add a widget": "新增小工具", + "Allow": "允許", + "and %(count)s others....other": "與其他 %(count)s 個……", + "and %(count)s others....one": "與其他 1 個……", + "Cannot add any more widgets": "無法新增更多的小工具", + "Changes colour scheme of current room": "變更目前聊天室的配色方案", + "Delete widget": "刪除小工具", + "Define the power level of a user": "定義使用者的權限等級", + "Do you want to load widget from URL:": "您想要載入小工具的 URL:", + "Edit": "編輯", + "Enable automatic language detection for syntax highlighting": "啟用語法突顯的自動語言偵測", + "Hide Apps": "隱藏應用程式", + "Hide join/leave messages (invites/kicks/bans unaffected)": "隱藏加入/離開訊息(邀請/踢出/封禁不受影響)", + "Hide avatar and display name changes": "隱藏大頭貼與顯示名稱變更", + "Integrations Error": "整合錯誤", + "Publish this room to the public in %(domain)s's room directory?": "將這個聊天室公開到 %(domain)s 的聊天室目錄中?", + "Matrix Apps": "Matrix 應用程式", + "AM": "上午", + "PM": "下午", + "NOTE: Apps are not end-to-end encrypted": "注意:應用程式並未端到端加密", + "Revoke widget access": "撤銷小工具存取", + "Sets the room topic": "設定聊天室主題", + "Show Apps": "顯示應用程式", + "The maximum permitted number of widgets have already been added to this room.": "這個聊天室已經有可加入的最大量的小工具了。", + "To get started, please pick a username!": "要開始,請先取一個使用者名稱!", + "Unable to create widget.": "無法建立小工具。", + "Unbans user with given id": "取消封禁指定 ID 的使用者", + "You are not in this room.": "您不在這個聊天室內。", + "You do not have permission to do that in this room.": "您沒有在這個聊天室做這件事的權限。", + "Verifies a user, device, and pubkey tuple": "驗證使用者、裝置與公開金鑰變數組", + "Autocomplete Delay (ms):": "自動完成延遲(毫秒):", + "This Home server does not support groups": "家伺服器不支援群組", + "Loading device info...": "正在載入裝置資訊……", + "Groups": "群組", + "Create a new group": "建立新群組", + "Create Group": "建立群組", + "Group Name": "群組名稱", + "Example": "範例", + "Create": "建立", + "Group ID": "群組 ID", + "+example:%(domain)s": "+範例:%(domain)s", + "Group IDs must be of the form +localpart:%(domain)s": "群組 ID 必須為這種格式 +localpart:%(domain)s", + "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "目前僅能在您自己的家伺服器上建立群組:使用以 %(domain)s 結尾的群組 ID", + "Room creation failed": "聊天室建立失敗", + "You are a member of these groups:": "您是這些群組的成員:", + "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "建立一個群組來代表您的社群!定義一組聊天室與您自己的自訂首頁來標記您在 Matrix 世界中的空間。", + "Join an existing group": "加入既有的群組", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "要加入既有的群組,您將會需要知道其群組識別符;其看起來會像是 +範例:matrix.org。", + "Featured Rooms:": "特色聊天室:", + "Error whilst fetching joined groups": "在擷取已加入的群組時發生錯誤", + "Featured Users:": "特色使用者:", + "Edit Group": "編輯群組", + "Automatically replace plain text Emoji": "自動取代純文字為顏文字", + "Failed to upload image": "上傳圖片失敗", + "Failed to update group": "更新群組失敗", + "Hide avatars in user and room mentions": "在使用者與聊天室提及中隱藏大頭貼", + "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s 由 %(senderName)s 所新增", + "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s 由 %(senderName)s 所移除", + "Robot check is currently unavailable on desktop - please use a web browser": "機器人檢查目前在桌面端不可用 ── 請使用網路瀏覽器" } From a9fed3a9e79b0886ec7e2a0f068727cf02d38e45 Mon Sep 17 00:00:00 2001 From: "Iru Cai (vimacs)" Date: Mon, 28 Aug 2017 02:08:13 +0000 Subject: [PATCH 14/86] Translated using Weblate (Chinese (Simplified)) Currently translated at 60.5% (588 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hans/ --- src/i18n/strings/zh_Hans.json | 90 ++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 288b5b4357..a026beb68d 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -501,5 +501,93 @@ "Example": "例子", "Create": "创建", "Edit Group": "编辑群", - "Failed to upload image": "上传图像失败" + "Failed to upload image": "上传图像失败", + "Add a widget": "添加一个小部件", + "en-us": "英语(美国)", + "en-za": "英语(南非)", + "es-ar": "西班牙语(阿根廷)", + "es-cl": "西班牙语(智利)", + "es-co": "西班牙语(哥伦比亚)", + "es-cr": "西班牙语(哥斯达黎加)", + "es-mx": "西班牙语(墨西哥)", + "es": "西班牙语(西班牙)", + "fr-be": "法语(比利时)", + "fr-ca": "法语(加拿大)", + "fr-ch": "法语(瑞士)", + "hi": "印地语", + "hr": "克罗地亚语", + "hu": "匈牙利语", + "id": "印尼语", + "is": "冰岛语", + "it-ch": "意大利语(瑞士)", + "ji": "意第绪语", + "a room": "一个聊天室", + "Accept": "接受", + "Access Token:": "访问令牌:", + "Cannot add any more widgets": "无法添加更多小组件", + "Delete widget": "删除小组件", + "Define the power level of a user": "定义一个用户的特权级", + "Drop here to tag %(section)s": "拖拽到这里标记 %(section)s", + "Enable automatic language detection for syntax highlighting": "启用自动语言检测用于语法高亮", + "Failed to change power level": "修改特权级别失败", + "Hide avatar and display name changes": "隐藏头像和显示名称的修改", + "Kick": "踢出", + "Kicks user with given id": "踢出指定 ID 的用户", + "Last seen": "上次看见", + "Level:": "级别:", + "Local addresses for this room:": "这个聊天室的本地地址:", + "New passwords must match each other.": "新密码必须互相匹配。", + "Power level must be positive integer.": "特权级别必须是正整数。", + "Reason: %(reasonText)s": "原因: %(reasonText)s", + "Revoke Moderator": "撤销主持人", + "Revoke widget access": "撤销小部件的访问", + "Remote addresses for this room:": "这个聊天室的远程地址:", + "Remove Contact Information?": "移除联系人信息?", + "Remove %(threePid)s?": "移除 %(threePid)s?", + "Results from DuckDuckGo": "来自 DuckDuckGo 的结果", + "Room contains unknown devices": "聊天室有未知设备", + "%(roomName)s does not exist.": "%(roomName)s 不存在。", + "Save": "保存", + "Searching known users": "搜索已知的用户", + "Send anyway": "无论任何都发送", + "Sets the room topic": "设置聊天室主题", + "Show Text Formatting Toolbar": "显示文字格式工具栏", + "There was a problem logging in.": "登录出现了问题。", + "This room has no local addresses": "这个聊天室没有本地地址", + "This doesn't appear to be a valid email address": "这看起来不是一个合法的电子邮件地址", + "This is a preview of this room. Room interactions have been disabled": "这是这个聊天室的一个预览。聊天室交互已禁用", + "This phone number is already in use": "此电话号码已经被使用", + "This room": "这个聊天室", + "This room is not accessible by remote Matrix servers": "这个聊天室无法被远程 Matrix 服务器访问", + "This room's internal ID is": "这个聊天室的内部 ID 是", + "Turn Markdown off": "关闭 Markdown", + "Turn Markdown on": "打开 Markdown", + "Unable to create widget.": "无法创建小部件。", + "Unban": "解除封禁", + "Unable to capture screen": "无法录制屏幕", + "Unable to enable Notifications": "无法启用通知", + "Unable to load device list": "无法加载设备列表", + "Undecryptable": "无法解密的", + "Unencrypted room": "未加密的聊天室", + "unencrypted": "未加密的", + "Unencrypted message": "未加密的消息", + "unknown caller": "未知的呼叫者", + "unknown device": "未知设备", + "unknown": "未知的", + "Unnamed Room": "未命名的聊天室", + "Unverified": "未验证", + "uploaded a file": "上传一个文件", + "Upload avatar": "上传头像", + "Upload Failed": "上传失败", + "Upload Files": "上传文件", + "Upload file": "上传文件", + "Usage": "用法", + "Who can read history?": "谁可以阅读历史消息?", + "You are not in this room.": "你不在这个聊天室。", + "You have no visible notifications": "你没有可见的通知", + "Missing password.": "缺少密码。", + "Passwords don't match.": "密码不匹配。", + "I already have an account": "我已经有一个帐号", + "Unblacklist": "移出黑名单", + "Not a valid Riot keyfile": "不是一个合法的 Riot 密钥文件" } From ff498e4c3a5a400627292212b1346c6e1a2373d4 Mon Sep 17 00:00:00 2001 From: Osoitz Date: Mon, 28 Aug 2017 08:35:55 +0000 Subject: [PATCH 15/86] Translated using Weblate (Basque) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eu/ --- src/i18n/strings/eu.json | 67 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 308fa36900..8ffc2befa0 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -370,7 +370,7 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s erabiltzaileak gelaren izena kendu du.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s erabiltzaileak gaia aldatu du beste honetara: \"%(topic)s\".", "Changes to who can read history will only apply to future messages in this room": "Historiala irakurtzeko baimenen aldaketak gela honetara hemendik aurrera heldutako mezuei aplikatuko zaizkie", - "Clear Cache and Reload": "Garbitu cache eta birkargatu", + "Clear Cache and Reload": "Garbitu cachea eta birkargatu", "Devices will not yet be able to decrypt history from before they joined the room": "Gailuek ezin izango dute taldera elkartu aurretiko historiala deszifratu", "Disable inline URL previews by default": "Desgaitu URLen aurrebista lehenetsita", "Disinvite": "Kendu gonbidapena", @@ -530,7 +530,7 @@ "%(senderName)s removed their profile picture.": "%(senderName)s erabiltzaileak bere profileko argazkia kendu du.", "Remove %(threePid)s?": "Kendu %(threePid)s?", "%(senderName)s requested a VoIP conference.": "%(senderName)s erabiltzaileak VoIP konferentzia bat eskatu du.", - "Report it": "Salatu", + "Report it": "Eman berri", "Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Oraingoz pasahitza aldatzeak gailu guztietako muturretik muturrerako zifratze-gakoak berrezarriko ditu, eta ezin izango dituzu zifratutako txatetako historialak irakurri ez badituzu aurretik zure gelako gakoak esportatzen eta aldaketa eta gero berriro inportatzen.", "You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Une honetan egiaztatu gabeko gailuak blokeatzen ari zara, gailu hauetara mezuak bidali ahal izateko egiaztatu behar dituzu.", "restore": "berreskuratu", @@ -885,7 +885,7 @@ "for %(amount)sh": "%(amount)sh", "for %(amount)sd": "%(amount)se", "Updates": "Eguneraketak", - "Check for update": "Egiaztatu eguneraketa", + "Check for update": "Bilatu ekuneraketa", "Start chatting": "Hasi txateatzen", "Start Chatting": "Hasi txateatzen", "Click on the button below to start chatting!": "Egin klik beheko botoian txateatzen hasteko!", @@ -913,5 +913,64 @@ "Encryption key request": "Zifratze-gakoa eskatuta", "Deops user with given id": "Emandako ID-a duen erabiltzailea mailaz jaisten du", "had": "zuen", - "Disable Peer-to-Peer for 1:1 calls": "Desgaitu P2P biren arteko deietan" + "Disable Peer-to-Peer for 1:1 calls": "Desgaitu P2P biren arteko deietan", + "Add a widget": "Gehitu trepeta bat", + "Allow": "Baimendu", + "and %(count)s others....other": "eta beste %(count)s...", + "and %(count)s others....one": "eta beste bat...", + "Cannot add any more widgets": "Ezin dira trepeta gehiago gehitu", + "Changes colour scheme of current room": "Gela honen kolore eskema aldatzen du", + "Delete widget": "Ezabatu trepeta", + "Define the power level of a user": "Zehaztu erabiltzaile baten botere maila", + "Do you want to load widget from URL:": "Trepeta bat kargatu nahi duzu URL honetatik:", + "Edit": "Editatu", + "Enable automatic language detection for syntax highlighting": "Gaitu hizkuntza antzemate automatikoa sintaxia nabarmentzeko", + "Hide Apps": "Ezkutatu aplikazioak", + "Hide join/leave messages (invites/kicks/bans unaffected)": "Ezkutatu elkartze/irtete mezuak (gonbidapenak/ateratzeak/debekuak ez dira aldatzen)", + "Hide avatar and display name changes": "Ezkutatu abatarra eta pantaila-izen aldaketak", + "Integrations Error": "Integrazio errorea", + "Publish this room to the public in %(domain)s's room directory?": "Argitaratu gela hau publikora %(domain)s domeinuko gelen direktorioan?", + "Matrix Apps": "Matrix Aplikazioak", + "AM": "AM", + "PM": "PM", + "NOTE: Apps are not end-to-end encrypted": "OHARRA: Aplikazioek ez dute muturretik muturrerako zifratzea", + "Revoke widget access": "Indargabetu trepetaren sarbidea", + "Sets the room topic": "Gelaren gaia ezartzen du", + "Show Apps": "Erakutsi aplikazioak", + "The maximum permitted number of widgets have already been added to this room.": "Gehienez onartzen diren trepeta kopurua gehitu da gela honetara.", + "To get started, please pick a username!": "Hasteko, hautatu erabiltzaile-izen bat!", + "Unable to create widget.": "Ezin izan da trepeta sortu.", + "Unbans user with given id": "ID zehatz bat duen erabiltzaileari debekua kentzen dio", + "You are not in this room.": "Ez zaude gela honetan.", + "You do not have permission to do that in this room.": "Ez duzu gela honetan hori egiteko baimenik.", + "Autocomplete Delay (ms):": "Osatze automatikoaren atzerapena (ms):", + "This Home server does not support groups": "Hasiera zerbitzari honek ez ditu taldeak onartzen", + "Loading device info...": "Gailuaren informazioa kargatzen...", + "Groups": "Taldeak", + "Create a new group": "Sortu talde berria", + "Create Group": "Sortu taldea", + "Group Name": "Taldearen izena", + "Example": "Adibidea", + "Create": "Sortu", + "Group ID": "Taldearen IDa", + "+example:%(domain)s": "+adibidea:%(domain)s", + "Room creation failed": "Taldea sortzeak huts egin du", + "You are a member of these groups:": "Talde hauetako kidea zara:", + "Join an existing group": "Elkartu badagoen talde batetara", + "Featured Rooms:": "Nabarmendutako gelak:", + "Featured Users:": "Nabarmendutako erabiltzaileak:", + "Edit Group": "Editatu taldea", + "Failed to update group": "Taldea eguneratzeak huts egin du", + "Group IDs must be of the form +localpart:%(domain)s": "Taldeen IDek forma hau dute +partelokala:%(domain)s", + "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "Une honetan zure hasiera zerbitzarian besterik ezin dituzu sortu taldeak: erabili %(domain)s bukaera duen talde ID bat", + "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Sortu talde bat zure komunitatea adierazteko! Zehaztu talde multzo bat eta zure hasiera horri pertsonalizatua zure espazioa markatzeko Matrix unibertsoan.", + "Error whilst fetching joined groups": "Errorea elkartutako taldeak eskuratzean", + "Automatically replace plain text Emoji": "Automatikoki ordezkatu Emoji testu soila", + "Failed to upload image": "Irudia igotzeak huts egin du", + "Hide avatars in user and room mentions": "Ezkutatu abatarrak erabiltzaile eta gelen aipamenetan", + "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s trepeta gehitu du %(senderName)s erabiltzaileak", + "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s trepeta kendu du %(senderName)s erabiltzaileak", + "Verifies a user, device, and pubkey tuple": "Erabiltzaile, gailu eta gako publiko multzoa egiaztatzen du", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Dagoen talde batetara elkartzeko taldearen identifikatzailea ezagutu behar duzu, honen antza du: +adibidea:matrix.org.", + "Robot check is currently unavailable on desktop - please use a web browser": "Robot egiaztaketa orain ez dago eskuragarri mahaigainean - erabili web nabigatzailea" } From e66c7bf623bcd30f783e83131b4bfcbb47187192 Mon Sep 17 00:00:00 2001 From: Silke Date: Sun, 27 Aug 2017 14:27:15 +0000 Subject: [PATCH 16/86] Translated using Weblate (Dutch) Currently translated at 94.2% (915 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 41 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 234fc8c03a..f56cc613da 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -141,10 +141,8 @@ "%(items)s and %(remaining)s others": "%(items)s en %(remaining)s andere", "%(items)s and one other": "%(items)s en één andere", "%(items)s and %(lastItem)s": "%(items)s en %(lastItem)s", - "and %(count)s others...": { - "other": "en %(count)s andere...", - "one": "en één andere..." - }, + "and %(count)s others....other": "en %(count)s andere...", + "and %(count)s others....one": "en één andere...", "%(names)s and %(lastPerson)s are typing": "%(names)s en %(lastPerson)s zijn aan het typen", "%(names)s and one other are typing": "%(names)s en één andere zijn aan het typen", "%(names)s and %(count)s others are typing": "%(names)s en %(count)s andere zijn aan het typen", @@ -174,7 +172,7 @@ "Change Password": "Wachtwoord veranderen", "%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s heeft zijn of haar weergave naam veranderd van %(oldDisplayName)s naar %(displayName)s.", "%(senderName)s changed their profile picture.": "%(senderName)s heeft zijn of haar profiel foto veranderd.", - "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s heeft de rank van %(powerLevelDiffText)s gewijzigd.", + "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s heeft het machtsniveau van %(powerLevelDiffText)s gewijzigd.", "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s heeft de kamer naam van %(roomName)s gewijzigd.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s heeft het onderwerp gewijzigd naar \"%(topic)s\".", "Changes to who can read history will only apply to future messages in this room": "Veranderingen aan wie de historie kan lezen worden alleen maar toegepast op toekomstige berichten in deze kamer", @@ -336,15 +334,15 @@ "Cryptography": "Cryptografie", "Current password": "Huidig wachtwoord", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s heeft de naam van de kamer verwijderd.", - "Create a new chat or reuse an existing one": "Maak een nieuwe chat aan of gebruik een reeds bestaande", + "Create a new chat or reuse an existing one": "Maak een nieuwe chat aan of ga verder met een bestaande", "Create Room": "Maak een kamer", - "Curve25519 identity key": "Curve25519 identiteitssleutel", + "Curve25519 identity key": "Curve25519-identiteitssleutel", "/ddg is not a command": "/ddg is geen commando", "Deactivate Account": "Account Deactiveren", "Deactivate my account": "Mijn account deactiveren", "Decline": "Weigeren", "Decrypt %(text)s": "Ontsleutel %(text)s", - "Decryption error": "Fout bij het ontsleutelen", + "Decryption error": "Ontsleutelfout", "Delete": "Verwijderen", "demote": "degraderen", "Device already verified!": "Apparaat reeds geverifieerd!", @@ -356,10 +354,10 @@ "Devices will not yet be able to decrypt history from before they joined the room": "Apparaten kunnen nog niet de geschiedenis van voordat ze de ruimte betraden ontsleutelen", "Direct chats": "Privégesprekken", "Disable Notifications": "Notificaties uitschakelen", - "Disable markdown formatting": "Opmaak formatering uitschakelen", + "Disable markdown formatting": "Markdown-opmaak uitschakelen", "Disinvite": "Uitnodiging terugtrekken", "Display name": "Weergavenaam", - "Don't send typing notifications": "Geen typ notificatie sturen", + "Don't send typing notifications": "Geen typnotificatie sturen", "Download %(text)s": "%(text)s Downloaden", "Drop File Here": "Plaats Bestand Hier", "Ed25519 fingerprint": "Ed25519 vingerafdruk", @@ -369,13 +367,13 @@ "Claimed Ed25519 fingerprint key": "Vereiste Ed25519 vingerafdruk sleutel", "Custom": "Aangepast", "Custom level": "Aangepast niveau", - "Deops user with given id": "Ontmachtigd gebruiker met het gegeven id", + "Deops user with given id": "Ontmachtigd gebruiker met het gegeven ID", "Default": "Standaard", - "Disable inline URL previews by default": "URL voorvertoning standaard uitschakelen", + "Disable inline URL previews by default": "URL-voorvertoningen standaard uitschakelen", "Displays action": "Weergeeft actie", "Drop here to tag %(section)s": "Hiernaartoe verplaatsen om %(section)s te etiketteren", "Email, name or matrix ID": "E-mail, naam of matrix ID", - "Emoji": "Emoticon", + "Emoji": "Emoji", "Enable encryption": "Versleuteling inschakelen", "Enable Notifications": "Notificaties inschakelen", "enabled": "ingeschakeld", @@ -392,7 +390,7 @@ "Enter passphrase": "Voer wachtzin in", "Error decrypting attachment": "Fout tijdens het ontsleutelen van de bijlage", "Error: Problem communicating with the given homeserver.": "Fout: Er doet zich een probleem voor met het communiceren met de gegeven thuisserver.", - "Event information": "Gebeurtenis informatie", + "Event information": "Gebeurtenis-informatie", "Existing Call": "Bestaande oproep", "Export": "Exporteren", "Export E2E room keys": "Exporteer E2E ruimte sleutels", @@ -414,7 +412,7 @@ "Failed to set avatar.": "Niet gelukt om de avatar in te stellen.", "Failed to set display name": "Niet gelukt om de weergavenaam in te stellen", "Failed to set up conference call": "Niet gelukt om een vergadergesprek te maken", - "Failed to toggle moderator status": "Niet gelukt om de moderator status te veranderen", + "Failed to toggle moderator status": "Niet gelukt om de moderatorstatus te veranderen", "Failed to unban": "Niet gelukt om te ontbannen", "Failed to upload file": "Niet gelukt om het bestand te uploaden", "Failed to upload profile picture!": "Niet gelukt om een profiel foto te uploaden!", @@ -439,7 +437,7 @@ "had": "had", "Hangup": "Ophangen", "Hide read receipts": "Leesbewijzen verbergen", - "Hide Text Formatting Toolbar": "Tekst formaterings-gereedschapsbalk verbergen", + "Hide Text Formatting Toolbar": "Tekstopmaakgereedschapsbalk verbergen", "Historical": "Historische", "Home": "Home", "Homeserver is": "Thuisserver is", @@ -500,7 +498,7 @@ "Never send encrypted messages to unverified devices in this room": "Nooit versleutelde berichten naar niet geverifieerde apparaten sturen in deze ruimte", "Never send encrypted messages to unverified devices in this room from this device": "Nooit vanaf dit apparaat versleutelde berichten naar niet geverifieerde apparaten in deze ruimte sturen", "New address (e.g. #foo:%(localDomain)s)": "Nieuw adres (bijv. #foo:%(localDomain)s)", - "New Composer & Autocomplete": "Nieuwe Componist & Automatisch Aanvullen", + "New Composer & Autocomplete": "Nieuw tekstopmaakvenster & automatisch aanvullen", "New passwords don't match": "Nieuwe wachtwoorden komen niet overeen", "New passwords must match each other.": "Nieuwe wachtwoorden moeten overeenkomen.", "Once encryption is enabled for a room it cannot be turned off again (for now)": "Zodra versleuteling in een kamer is ingeschakeld kan het niet meer worden uitgeschakeld (voor nu)", @@ -508,7 +506,7 @@ "Only people who have been invited": "Alleen personen die zijn uitgenodigd", "Otherwise, click here to send a bug report.": "Klik anders hier om een foutmelding te versturen.", "Please check your email and click on the link it contains. Once this is done, click continue.": "Bekijk je e-mail en klik op de link die het bevat. Zodra dit klaar is, klik op verder gaan.", - "Power level must be positive integer.": "Machtsniveau moet een positief heel getal zijn.", + "Power level must be positive integer.": "Machtsniveau moet een positief geheel getal zijn.", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s heeft zijn of haar weergavenaam (%(oldDisplayName)s) verwijderd.", "%(senderName)s removed their profile picture.": "%(senderName)s heeft zijn of haar profielfoto verwijderd.", "Failed to kick": "Niet gelukt om te er uit te zetten", @@ -615,7 +613,7 @@ "to start a chat with someone": "om een gesprek met iemand te starten", "to tag as %(tagName)s": "om als %(tagName)s te etiketteren", "to tag direct chat": "als directe chat etiketteren", - "To use it, just wait for autocomplete results to load and tab through them.": "Om het te gebruiken, wacht voor de automatisch aanvullen resultaten om te laden en kijk er door heen.", + "To use it, just wait for autocomplete results to load and tab through them.": "Om het te gebruiken, wacht tot de automatisch aangevulde resultaten geladen zijn en tab er doorheen.", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Je probeerde een specifiek punt in de tijdlijn van deze ruimte te laden maar je hebt niet de permissie om de desbetreffende berichten te zien.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Het is niet gelukt om een specifiek punt in de tijdlijn van deze ruimte te laden.", "Turn Markdown off": "Doe opmaak uit", @@ -765,7 +763,7 @@ "%(oneUser)sjoined and left": "%(oneUser)s is toegetreden en weer vertrokken", "%(severalUsers)sleft and rejoined %(repeats)s times": "%(severalUsers)s zijn %(repeats)s keer vertrokken en opnieuw toegetreden", "%(oneUser)sleft and rejoined %(repeats)s times": "%(oneUser)s is %(repeats)s keer vertrokken en opnieuw toegetreden", - "%(severalUsers)sleft and rejoined": "%(severalUsers) zijn vertrokken en opnieuw toegetreden", + "%(severalUsers)sleft and rejoined": "%(severalUsers)s zijn vertrokken en opnieuw toegetreden", "%(oneUser)sleft and rejoined": "%(oneUser)s is vertrokken en opnieuw toegetreden", "%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)s hebben hun uitnodiging uitnodiging %(repeats)s keer afgewezen", "%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)s heeft zijn of haar uitnodiging %(repeats)s keer afgewezen", @@ -920,5 +918,6 @@ "Ignore request": "Verzoek negeren", "You added a new device '%(displayName)s', which is requesting encryption keys.": "Je hebt een nieuwe apparaat '%(displayName)s' toegevoegd die om versleutelingssleutels vraagt.", "Your unverified device '%(displayName)s' is requesting encryption keys.": "Je niet geverifieerde apparaat '%(displayName)s' vraagt naar versleutelingssleutels.", - "Encryption key request": "Verzoek voor versleutelingssleutel" + "Encryption key request": "Verzoek voor versleutelingssleutel", + "Define the power level of a user": "Definieer het machtsniveau van een gebruiker" } From 4a55fcbc269c83fb82a3d21ef1df52d1b4614f3f Mon Sep 17 00:00:00 2001 From: Nathan van Beelen Date: Mon, 28 Aug 2017 15:01:04 +0000 Subject: [PATCH 17/86] Translated using Weblate (Dutch) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/nl/ --- src/i18n/strings/nl.json | 58 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index f56cc613da..d8710bde2d 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -919,5 +919,61 @@ "You added a new device '%(displayName)s', which is requesting encryption keys.": "Je hebt een nieuwe apparaat '%(displayName)s' toegevoegd die om versleutelingssleutels vraagt.", "Your unverified device '%(displayName)s' is requesting encryption keys.": "Je niet geverifieerde apparaat '%(displayName)s' vraagt naar versleutelingssleutels.", "Encryption key request": "Verzoek voor versleutelingssleutel", - "Define the power level of a user": "Definieer het machtsniveau van een gebruiker" + "Define the power level of a user": "Definieer het machtsniveau van een gebruiker", + "Add a widget": "Voeg een widget toe", + "Allow": "Toestaan", + "Cannot add any more widgets": "Er kunnen niet meer widgets toegevoegd worden", + "Changes colour scheme of current room": "Verander het kleurenschema van de huidige ruimte", + "Delete widget": "Widget verwijderen", + "Do you want to load widget from URL:": "Wil je de widget laden van de URL:", + "Edit": "Wijzigen", + "Enable automatic language detection for syntax highlighting": "Automatische taaldetectie voor zinsbouw markeringen aanzetten", + "Hide Apps": "Apps verbergen", + "Hide join/leave messages (invites/kicks/bans unaffected)": "Toetreed/verlaat berichten verbergen (uitnodigingen/verwijderingen/verbanningen zullen ongeschonden blijven)", + "Hide avatar and display name changes": "Avatar en weergavenaam wijzigingen verbergen", + "Integrations Error": "Integraties Fout", + "Publish this room to the public in %(domain)s's room directory?": "Deze ruimte publiekelijk maken in %(domain)s's ruimte catalogus?", + "Matrix Apps": "Matrix Apps", + "AM": "AM", + "PM": "PM", + "NOTE: Apps are not end-to-end encrypted": "OPMERKING: Apps zijn niet eind-tot-eind versleuteld", + "Revoke widget access": "Toegang tot widget intrekken", + "Sets the room topic": "Wijzigt het ruimte onderwerp", + "Show Apps": "Apps Weergeven", + "The maximum permitted number of widgets have already been added to this room.": "Het maximum aantal toegestane widgets is al aan deze ruimte toegevoegd.", + "To get started, please pick a username!": "Om te beginnen, kies een gebruikersnaam!", + "Unable to create widget.": "Niet in staat om een widget te maken.", + "Unbans user with given id": "Ontbant de gebruiker met het gegeven id", + "You are not in this room.": "Je zit niet in deze ruimte.", + "You do not have permission to do that in this room.": "Je hebt geen permissie om dat te doen in deze ruimte.", + "Verifies a user, device, and pubkey tuple": "Verifieert een gebruiker, apparaat en pubkey tupel", + "Autocomplete Delay (ms):": "Automatisch aanvullen vertraging (ms):", + "This Home server does not support groups": "Deze thuisserver ondersteunt geen groepen", + "Loading device info...": "Apparaat info aan het laden...", + "Groups": "Groepen", + "Create a new group": "Maak een nieuwe groep", + "Create Group": "Groep Aanmaken", + "Group Name": "Groepnaam", + "Example": "Voorbeeld", + "Create": "Creëer", + "Group ID": "Groep ID", + "+example:%(domain)s": "+voorbeeld:%(domain)s", + "Group IDs must be of the form +localpart:%(domain)s": "Groep IDs moeten er als +lokaalgedeelte:%(domain)s uit zien", + "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "Het is momenteel mogelijk om groepen op je eigen thuisserver aan te maken: gebruik een groep ID dat eindigt met %(domain)s", + "Room creation failed": "Het aanmaken van de ruimte is niet gelukt", + "You are a member of these groups:": "Je bent een deelnemer van deze groepen:", + "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Maak een groep aan om je gemeenschap te representateren! Defineer een set van ruimtes en maak je eigen aangepaste homepagina om je eigen plek in het Matrix universum te creëren.", + "Join an existing group": "Treed tot een bestaande groep toe", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Om tot een bestaande groep toe te treden moet je groep identificatie weten; dit zal er ongeveer uit zien als +voorbeeld:matrix.org.", + "Featured Rooms:": "Prominente Ruimtes:", + "Error whilst fetching joined groups": "Er is een fout opgetreden tijdens het ophalen van de tot toegretreden groepen", + "Featured Users:": "Prominente Gebruikers:", + "Edit Group": "Groep Wijzigen", + "Automatically replace plain text Emoji": "Automatisch normale tekst vervangen met Emoji", + "Failed to upload image": "Het is niet gelukt om de afbeelding te uploaden", + "Failed to update group": "Het is niet gelukt om de groep bij te werken", + "Hide avatars in user and room mentions": "Avatars in gebruiker en ruimte vermeldingen verbergen", + "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget toegevoegd door %(senderName)s", + "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget verwijderd door %(senderName)s", + "Robot check is currently unavailable on desktop - please use a web browser": "Robot check is momenteel niet beschikbaar op de desktop - gebruik in plaats daarvan een webbrowser" } From fdfa33b6032375d0e5183bf04b57b9564dbc4993 Mon Sep 17 00:00:00 2001 From: Bamstam Date: Mon, 28 Aug 2017 15:05:39 +0000 Subject: [PATCH 18/86] Translated using Weblate (German) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 58 ++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 8b49bfddcc..6e51145b28 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -9,7 +9,7 @@ "Historical": "Archiv", "New passwords must match each other.": "Die neuen Passwörter müssen identisch sein.", "A new password must be entered.": "Es muss ein neues Passwort eingegeben werden.", - "The email address linked to your account must be entered.": "Es muss die mit dem Benutzerkonto verbundene Email-Adresse eingegeben werden.", + "The email address linked to your account must be entered.": "Es muss die mit dem Benutzerkonto verbundene E-Mail-Adresse eingegeben werden.", "Failed to send email: ": "Email konnte nicht versendet werden: ", "unknown device": "Unbekanntes Gerät", "NOT verified": "NICHT verifiziert", @@ -21,15 +21,15 @@ "Ed25519 fingerprint": "Ed25519-Fingerprint", "User ID": "Benutzer-ID", "Curve25519 identity key": "Curve25519-Identitäts-Schlüssel", - "Claimed Ed25519 fingerprint key": "Geforderter Ed25519 Fingerprint Schlüssel", + "Claimed Ed25519 fingerprint key": "Geforderter Ed25519-Fingerprint-Schlüssel", "none": "keiner", "Algorithm": "Algorithmus", "unencrypted": "unverschlüsselt", "Decryption error": "Entschlüsselungs Fehler", "Session ID": "Sitzungs-ID", - "End-to-end encryption information": "Ende-zu-Ende-Verschlüsselungs-Informationen", + "End-to-end encryption information": "Informationen zur Ende-zu-Ende-Verschlüsselung", "Event information": "Ereignis-Information", - "Sender device information": "Absender Geräte Informationen", + "Sender device information": "Geräte-Informationen des Absenders", "Displays action": "Zeigt Aktionen an", "Bans user with given id": "Schließt den Benutzer mit der angegebenen ID dauerhaft aus dem Raum aus", "Deops user with given id": "Entfernt OP beim Benutzer mit der angegebenen ID", @@ -84,7 +84,7 @@ "Deactivate Account": "Benutzerkonto deaktivieren", "Deactivate my account": "Mein Benutzerkonto deaktivieren", "decline": "Ablehnen", - "Devices will not yet be able to decrypt history from before they joined the room": "Geräte werden nicht in der Lage sein, den Chatverlauf vor dem Betreten des Raumes zu entschlüsseln", + "Devices will not yet be able to decrypt history from before they joined the room": "Geräte werden nicht in der Lage sein, den bisherigen Chatverlauf vor dem Betreten des Raumes zu entschlüsseln", "Display name": "Anzeigename", "Email Address": "E-Mail-Adresse", "Email, name or matrix ID": "E-Mail, Name oder Matrix-ID", @@ -95,7 +95,7 @@ "ended the call.": "beendete den Anruf.", "End-to-end encryption is in beta and may not be reliable": "Die Ende-zu-Ende-Verschlüsselung befindet sich aktuell im Beta-Stadium und ist eventuell noch nicht hundertprozentig zuverlässig", "Failed to send email": "Fehler beim Senden der E-Mail", - "Account": "Konto", + "Account": "Benutzerkonto", "Add phone number": "Telefonnummer hinzufügen", "an address": "an Adresse", "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Dein Passwort wurde erfolgreich geändert. Du wirst erst Benachrichtigungen auf anderen Geräten empfangen können, wenn du dich dort erneut anmeldest", @@ -551,7 +551,7 @@ "Sunday": "Sonntag", "Failed to forget room %(errCode)s": "Das Entfernen des Raums ist fehlgeschlagen %(errCode)s", "Failed to join the room": "Fehler beim Betreten des Raumes", - "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Eine Textnachricht wurde an +%(msisdn)s gesendet. Bitte gebe den Verifikationscode ein, den er beinhaltet", + "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Eine Textnachricht wurde an +%(msisdn)s gesendet. Bitte den darin enthaltenen Verifizierungscode eingeben", "and %(count)s others....other": "und %(count)s weitere...", "and %(count)s others....one": "und ein(e) weitere(r)...", "Are you sure?": "Bist du sicher?", @@ -566,7 +566,7 @@ "Decrypt %(text)s": "%(text)s entschlüsseln", "Delete": "Löschen", "Devices": "Geräte", - "Direct chats": "Direkte Chats", + "Direct chats": "Direkt-Chats", "Disinvite": "Einladung zurückziehen", "Download %(text)s": "%(text)s herunterladen", "Enter Code": "Code eingeben", @@ -617,7 +617,7 @@ "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Es wurde versucht, einen bestimmten Punkt im Chatverlauf dieses Raumes zu laden. Dir fehlt jedoch die Berechtigung, die betreffende Nachricht zu sehen.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Es wurde versucht, einen bestimmten Punkt im Chatverlauf dieses Raumes zu laden, der Punkt konnte jedoch nicht gefunden werden.", "Turn Markdown off": "Markdown deaktiveren", - "Turn Markdown on": "Markdown einschalten", + "Turn Markdown on": "Markdown aktivieren", "Unable to load device list": "Geräteliste konnte nicht geladen werden", "Unknown room %(roomId)s": "Unbekannter Raum %(roomId)s", "Usage: /markdown on|off": "Verwendung: /markdown on|off", @@ -628,10 +628,10 @@ "Room": "Raum", "(~%(searchCount)s results)": "(~%(searchCount)s Ergebnisse)", "Cancel": "Abbrechen", - "bold": "fett", - "italic": "kursiv", - "strike": "durchstreichen", - "underline": "unterstreichen", + "bold": "Fett", + "italic": "Kursiv", + "strike": "Durchgestrichen", + "underline": "Unterstrichen", "code": "Code", "quote": "Zitat", "bullet": "Aufzählung", @@ -743,9 +743,9 @@ "To continue, please enter your password.": "Zum fortfahren bitte Passwort eingeben.", "Device name": "Geräte-Name", "Device key": "Geräte-Schlüssel", - "In future this verification process will be more sophisticated.": "Zukünftig wird dieser Verifizierungsprozess technisch ausgereifter und eleganter gestaltet werden.", + "In future this verification process will be more sophisticated.": "Zukünftig wird der Verifizierungsprozess technisch ausgereifter und eleganter gestaltet werden.", "Verify device": "Gerät verifizieren", - "I verify that the keys match": "Ich bestätige, dass die Schlüssel passen", + "I verify that the keys match": "Ich bestätige, dass die Schlüssel identisch sind", "Unable to restore session": "Sitzungswiederherstellung fehlgeschlagen", "Continue anyway": "Trotzdem fortfahren", "Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Dein Anzeigename ist der Name, der anderen Nutzern angezeigt wird, wenn du in Räumen kommunizierst. Welchen Anzeigenamen möchtest du wählen?", @@ -759,7 +759,7 @@ "Sign in with CAS": "Mit CAS anmelden", "Custom Server Options": "Erweiterte Server-Optionen", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Du kannst die erweiterten Server-Optionen nutzen, um dich an anderen Matrix-Servern anzumelden, indem du eine andere Heimserver-URL angibst.", - "This allows you to use this app with an existing Matrix account on a different home server.": "Dies erlaubt dir diese App mit einem existierenden Matrix-Konto auf einem anderen Heimserver zu verwenden.", + "This allows you to use this app with an existing Matrix account on a different home server.": "Dies erlaubt es dir, diese App mit einem existierenden Matrix-Benutzerkonto auf einem anderen Heimserver zu verwenden.", "Dismiss": "Ablehnen", "You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "Du kannst auch einen angepassten Idantitätsserver angeben aber dies wird typischerweise Interaktionen mit anderen Nutzern auf Basis der E-Mail-Adresse verhindern.", "Please check your email to continue registration.": "Bitte prüfe deine E-Mails, um mit der Registrierung fortzufahren.", @@ -798,9 +798,9 @@ "Online": "Online", " (unsupported)": " (nicht unterstützt)", "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Dieser Prozess erlaubt es dir, die zuvor von einem anderen Matrix-Client exportierten Verschlüsselungs-Schlüssel zu importieren. Danach kannst du alle Nachrichten entschlüsseln, die auch bereits auf dem anderen Client entschlüsselt werden konnten.", - "This will make your account permanently unusable. You will not be able to re-register the same user ID.": "Dies wird dein Konto permanent unbenutzbar machen. Du wirst dich nicht mit derselben Nutzer-ID erneut registrieren können.", + "This will make your account permanently unusable. You will not be able to re-register the same user ID.": "Dies wird dein Benutzerkonto dauerhaft unbenutzbar machen. Du wirst nicht in der Lage sein, dich mit derselben Benutzer-ID erneut zu registrieren.", "To verify that this device can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this device matches the key below:": "Um sicherzustellen, dass diesem Gerät vertraut werden kann, kontaktiere bitte den Eigentümer des Geräts über ein anderes Kommunikationsmittel (z.B. im persönlichen Gespräch oder durch einen Telefon-Anruf) und vergewissere dich, dass der Schlüssel, den der Eigentümer in den Nutzer-Einstellungen für dieses Gerät sieht, mit dem folgenden Schlüssel identisch ist:", - "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this device and you probably want to press the blacklist button instead.": "Wenn er passt, betätige den Bestätigen-Button unten. Wenn nicht, fängt jemand anderes dieses Gerät ab und du möchtest wahrscheinlich lieber den Blacklist-Button betätigen.", + "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this device and you probably want to press the blacklist button instead.": "Wenn er identisch ist, bitte den Bestätigen-Button unten verwenden. Falls er nicht identisch sein sollte, hat eine Fremdperson Kontrolle über dieses Gerät und es sollte gesperrt werden.", "We encountered an error trying to restore your previous session. If you continue, you will need to log in again, and encrypted chat history will be unreadable.": "Bei der Wiederherstellung deiner letzten Sitzung ist ein Fehler aufgetreten. Um fortzufahren, musst du dich erneut anmelden. Ein zuvor verschlüsselter Chatverlauf wird in der Folge nicht mehr lesbar sein.", "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Wenn du zuvor eine aktuellere Version von Riot verwendet hast, ist deine Sitzung eventuell inkompatibel mit dieser Version. Bitte schließe dieses Fenster und kehre zur aktuelleren Version zurück.", "Blacklist": "Blockieren", @@ -811,7 +811,7 @@ "Idle": "Untätig", "We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Wir empfehlen dir, für jedes Gerät den Verifizierungsprozess durchzuführen, um sicherzustellen, dass sie tatsächlich ihrem rechtmäßigem Eigentümer gehören. Alternativ kannst du die Nachrichten auch ohne Verifizierung erneut senden.", "Ongoing conference call%(supportedText)s.": "Laufendes Konferenzgespräch%(supportedText)s.", - "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Du wirst jetzt auf die Website eines Drittanbieters weitergeleitet, damit du dein Konto für die Verwendung von %(integrationsUrl)s authentifizieren kannst. Möchtest du fortfahren?", + "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Du wirst jetzt auf die Website eines Drittanbieters weitergeleitet, damit du dein Benutzerkonto für die Verwendung von %(integrationsUrl)s authentifizieren kannst. Möchtest du fortfahren?", "Disable URL previews for this room (affects only you)": "URL-Vorschau für diesen Raum deaktivieren (betrifft nur dich)", "Start automatically after system login": "Nach System-Login automatisch starten", "Desktop specific": "Desktopspezifisch", @@ -839,7 +839,7 @@ "Export": "Export", "Failed to register as guest:": "Die Registrierung als Gast ist fehlgeschlagen:", "Guest access is disabled on this Home Server.": "Gastzugang ist auf diesem Heimserver deaktivert.", - "Import": "Import", + "Import": "Importieren", "Incorrect username and/or password.": "Inkorrekter Nutzername und/oder Passwort.", "Results from DuckDuckGo": "Ergebnisse von DuckDuckGo", "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Den Signaturschlüssel den du bereitstellst stimmt mit dem Schlüssel den du von %(userId)s's Gerät %(deviceId)s empfangen hast überein. Gerät als verifiziert markiert.", @@ -851,7 +851,7 @@ "device id: ": "Geräte-ID: ", "Device key:": "Geräte-Schlüssel:", "Email address (optional)": "E-Mail-Adresse (optional)", - "Publish this room to the public in %(domain)s's room directory?": "Diesen Raum mittels Raum-Verzeichnis von %(domain)s veröffentlichen?", + "Publish this room to the public in %(domain)s's room directory?": "Diesen Raum im Raum-Verzeichnis von %(domain)s veröffentlichen?", "Mobile phone number (optional)": "Mobilfunknummer (optional)", "Password:": "Passwort:", "Register": "Registrieren", @@ -943,7 +943,7 @@ "Set": "Setze", "Start authentication": "Authentifizierung beginnen", "Show Text Formatting Toolbar": "Text-Formatierungs-Werkzeugleiste anzeigen", - "This invitation was sent to an email address which is not associated with this account:": "Diese Einledung wurde an eine E-Mail-Adresse gesendet, die nicht mit diesem Konto verknüpft ist:", + "This invitation was sent to an email address which is not associated with this account:": "Diese Einladung wurde an eine E-Mail-Adresse gesendet, die nicht mit diesem Benutzerkonto verknüpft ist:", "This room": "In diesem Raum", "To link to a room it must have an address.": "Um einen Raum zu verlinken, muss er eine Adresse haben.", "Undecryptable": "Nicht entschlüsselbar", @@ -977,11 +977,11 @@ "You're not in any rooms yet! Press to make a room or to browse the directory": "Du bist bislang keinem Raum beigetreten! Auf klicken, um einen Raum zu erstellen, oder auf klicken, um das Raum-Verzeichnis zu durchsuchen", "To return to your account in future you need to set a password": "Um in Zukunft auf dein Benutzerkonto zugreifen zu können, musst du ein Passwort einrichten", "Skip": "Überspringen", - "Start verification": "Verifikation starten", - "Share without verifying": "Ohne Verifizierung teilen", - "Ignore request": "Anfrage ignorieren", - "You added a new device '%(displayName)s', which is requesting encryption keys.": "Du hast das neue Gerät '%(displayName)s' hinzugefügt, welches nun Verschlüsselungs-Schlüssel anfragt.", - "Encryption key request": "Verschlüsselungs-Schlüssel-Anfrage", + "Start verification": "Verifizierung starten", + "Share without verifying": "Ohne Verifizierung verwenden", + "Ignore request": "Anforderung ignorieren", + "You added a new device '%(displayName)s', which is requesting encryption keys.": "Du hast das neue Gerät '%(displayName)s' hinzugefügt, welches nun Verschlüsselungs-Schlüssel anfordert.", + "Encryption key request": "Anforderung von Verschlüsselungs-Schlüsseln", "Your unverified device '%(displayName)s' is requesting encryption keys.": "Dein nicht verifiziertes Gerät '%(displayName)s' fordert Verschlüsselungs-Schlüssel an.", "Updates": "Updates", "Check for update": "Suche nach Updates", @@ -998,7 +998,7 @@ "Matrix Apps": "Matrix Apps", "Revoke widget access": "Ziehe Widget-Zugriff zurück", "Sets the room topic": "Setzt das Raum-Thema", - "Show Apps": "Zeige Apps", + "Show Apps": "Apps anzeigen", "To get started, please pick a username!": "Um zu starten, wähle bitte einen Nutzernamen!", "Unable to create widget.": "Widget kann nicht erstellt werden.", "Unbans user with given id": "Entbanne Nutzer mit angegebener ID", @@ -1022,7 +1022,7 @@ "You are a member of these groups:": "Du bist Mitglied in folgenden Gruppen:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Erstelle eine Gruppe um deine Community darzustellen! Definiere eine Menge von Räumen und deine eigene angepasste Startseite um deinen Bereich im Matrix-Universum zu markieren.", "Join an existing group": "Trete eine existierenden Gruppe bei", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Um einer existierenden Gruppe beizutreten, musst du ihre Gruppen-Kennung wissen. Diese sieht z.B. aus wie '+example:matrix.org'.", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Um einer bereits vorhandenen Gruppe beitreten zu können, muss dir die Gruppen-Kennung bekannt sein. Diese sieht ungefähr so aus: '+example:matrix.org'.", "Featured Rooms:": "Hervorgehobene Räume:", "Error whilst fetching joined groups": "Fehler beim Laden beigetretener Gruppen", "Featured Users:": "Hervorgehobene Nutzer:", From 511e5d2d23571d9f4e242a46b94411aeec1d727f Mon Sep 17 00:00:00 2001 From: "Iru Cai (vimacs)" Date: Wed, 30 Aug 2017 10:18:43 +0000 Subject: [PATCH 19/86] Translated using Weblate (Chinese (Simplified)) Currently translated at 63.6% (618 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hans/ --- src/i18n/strings/zh_Hans.json | 36 ++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index a026beb68d..483112005c 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -236,8 +236,8 @@ "Hide removed messages": "隐藏被删除的消息", "Authentication": "认证", "Alias (optional)": "别名 (可选)", - "%(items)s and %(remaining)s others": "%(items)s 和其它 %(remaining)s 个", - "%(items)s and one other": "%(items)s 和其它一个", + "%(items)s and %(remaining)s others": "%(items)s 和其它 %(remaining)s 个人", + "%(items)s and one other": "%(items)s 和另一个人", "%(items)s and %(lastItem)s": "%(items)s 和 %(lastItem)s", "and %(count)s others....other": "和其它 %(count)s 个...", "and %(count)s others....one": "和其它一个...", @@ -589,5 +589,35 @@ "Passwords don't match.": "密码不匹配。", "I already have an account": "我已经有一个帐号", "Unblacklist": "移出黑名单", - "Not a valid Riot keyfile": "不是一个合法的 Riot 密钥文件" + "Not a valid Riot keyfile": "不是一个合法的 Riot 密钥文件", + "en-jm": "英语(牙买加)", + "es-pe": "西班牙语(秘鲁)", + "lv": "拉脱维亚语", + "ms": "马来西亚语", + "pl": "波兰语", + "pt": "葡萄牙语", + "ro": "罗马尼亚语", + "ru": "俄语", + "sk": "斯洛伐克语", + "sl": "斯洛文尼亚语", + "sr": "塞尔维亚语", + "th": "泰语", + "tr": "土耳其语", + "vi": "越南语", + "%(targetName)s accepted an invitation.": "%(targetName)s 接受了一个邀请。", + "Do you want to load widget from URL:": "你想从此 URL 加载小组件吗:", + "Hide join/leave messages (invites/kicks/bans unaffected)": "隐藏加入/离开消息(邀请/踢出/封禁不受影响)", + "Integrations Error": "集成错误", + "Publish this room to the public in %(domain)s's room directory?": "把这个聊天室发布到 %(domain)s 的聊天室目录吗?", + "Manage Integrations": "管理集成", + "Members only": "只有成员", + "No users have specific privileges in this room": "没有用户在这个聊天室有特殊权限", + "%(senderName)s placed a %(callType)s call.": "%(senderName)s 发起了一个 %(callType)s 通话。", + "Please check your email and click on the link it contains. Once this is done, click continue.": "请检查你的电子邮箱并点击里面包含的链接。完成时请点击继续。", + "Press to start a chat with someone": "按下 来开始和某个人聊天。", + "%(senderName)s removed their profile picture.": "%(senderName)s 移除了他们的头像。", + "%(senderName)s requested a VoIP conference.": "%(senderName)s 请求一个 VoIP 会议。", + "Seen by %(userName)s at %(dateTime)s": "在 %(dateTime)s 被 %(userName)s 看到", + "Show Apps": "显示应用", + "Tagged as: ": "标记为:" } From d516906b368fdc23154567526417825dd910bae2 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 30 Aug 2017 13:52:46 +0100 Subject: [PATCH 20/86] Implement sticky date separators Use `react-sticky` to implement sticky date separators. This will pin a date separator to the top of the timeline panel when the separator scrolls out of the top of the view. A known issue of this is that the spinner, which is in line with event tiles in the timeline, will appear to push the stuck date separator down. In reality the first date separator after the spinner is in line with event tiles and is not stuck because the spinner forces the timeline to be scrolled slightly further down than it would be otherwise. But also, date separators in the timeline (not "stuck") have a greater height. Ideally the date separator would be suppressed whilst back paginating, but this will cause the stuck separator to flicker on and off. This is why the suppression has been removed. --- package.json | 1 + src/DateUtils.js | 44 ++++ src/components/structures/MessagePanel.js | 9 +- src/components/structures/ScrollPanel.js | 274 +++++++++++---------- src/components/structures/TimelinePanel.js | 1 - 5 files changed, 189 insertions(+), 140 deletions(-) diff --git a/package.json b/package.json index 661db4b6bc..c323e67ecf 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "react-addons-css-transition-group": "15.3.2", "react-dom": "^15.4.0", "react-gemini-scrollbar": "matrix-org/react-gemini-scrollbar#5e97aef", + "react-sticky": "^6.0.1", "sanitize-html": "^1.14.1", "text-encoding-utf-8": "^1.0.1", "url": "^0.11.0", diff --git a/src/DateUtils.js b/src/DateUtils.js index 78eef57eae..e7be394c17 100644 --- a/src/DateUtils.js +++ b/src/DateUtils.js @@ -30,6 +30,18 @@ function getDaysArray() { ]; } +function getLongDaysArray() { + return [ + _t('Sunday'), + _t('Monday'), + _t('Tuesday'), + _t('Wednesday'), + _t('Thursday'), + _t('Friday'), + _t('Saturday'), + ]; +} + function getMonthsArray() { return [ _t('Jan'), @@ -96,6 +108,38 @@ module.exports = { }); }, + formatDateSeparator: function(date) { + const days = getDaysArray(); + const longDays = getLongDaysArray(); + const months = getMonthsArray(); + + const today = new Date(); + const yesterday = new Date(); + yesterday.setDate(today.getDate() - 1); + + if (date.toDateString() === today.toDateString()) { + return _t('Today'); + } else if (date.toDateString() === yesterday.toDateString()) { + return _t('Yesterday'); + } else if (today.getTime() - date.getTime() < 6 * 24 * 60 * 60 * 1000) { + return longDays[date.getDay()]; + } else if (today.getTime() - date.getTime() < 365 * 24 * 60 * 60 * 1000) { + return _t('%(weekDayName)s, %(monthName)s %(day)s', { + weekDayName: days[date.getDay()], + monthName: months[date.getMonth()], + day: date.getDate(), + fullYear: date.getFullYear(), + }); + } else { + return _t('%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s', { + weekDayName: days[date.getDay()], + monthName: months[date.getMonth()], + day: date.getDate(), + fullYear: date.getFullYear(), + }); + } + }, + formatTime: function(date, showTwelveHour=false) { if (showTwelveHour) { return twelveHourTime(date); diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index 460ed43e82..6d999c9619 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -61,9 +61,6 @@ module.exports = React.createClass({ // for pending messages. ourUserId: React.PropTypes.string, - // true to suppress the date at the start of the timeline - suppressFirstDateSeparator: React.PropTypes.bool, - // whether to show read receipts manageReadReceipts: React.PropTypes.bool, @@ -517,10 +514,10 @@ module.exports = React.createClass({ _wantsDateSeparator: function(prevEvent, nextEventDate) { if (prevEvent == null) { - // first event in the panel: depends if we could back-paginate from - // here. - return !this.props.suppressFirstDateSeparator; + // First event in the panel always wants a DateSeparator + return true; } + const prevEventDate = prevEvent.getDate(); if (!nextEventDate || !prevEventDate) { return false; diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index a8a2ec181b..cbd2954918 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -17,6 +17,7 @@ limitations under the License. var React = require("react"); var ReactDOM = require("react-dom"); var GeminiScrollbar = require('react-gemini-scrollbar'); +import { StickyContainer } from 'react-sticky'; import Promise from 'bluebird'; var KeyCode = require('../../KeyCode'); @@ -77,111 +78,48 @@ if (DEBUG_SCROLL) { * scroll down further. If stickyBottom is disabled, we just save the scroll * offset as normal. */ -module.exports = React.createClass({ - displayName: 'ScrollPanel', +export default class ScrollPanel extends StickyContainer { - propTypes: { - /* stickyBottom: if set to true, then once the user hits the bottom of - * the list, any new children added to the list will cause the list to - * scroll down to show the new element, rather than preserving the - * existing view. - */ - stickyBottom: React.PropTypes.bool, + constructor() { + super(); + this.onResize = this.onResize.bind(this); + this.onScroll = this.onScroll.bind(this); + } - /* startAtBottom: if set to true, the view is assumed to start - * scrolled to the bottom. - * XXX: It's likley this is unecessary and can be derived from - * stickyBottom, but I'm adding an extra parameter to ensure - * behaviour stays the same for other uses of ScrollPanel. - * If so, let's remove this parameter down the line. - */ - startAtBottom: React.PropTypes.bool, - - /* onFillRequest(backwards): a callback which is called on scroll when - * the user nears the start (backwards = true) or end (backwards = - * false) of the list. - * - * This should return a promise; no more calls will be made until the - * promise completes. - * - * The promise should resolve to true if there is more data to be - * retrieved in this direction (in which case onFillRequest may be - * called again immediately), or false if there is no more data in this - * directon (at this time) - which will stop the pagination cycle until - * the user scrolls again. - */ - onFillRequest: React.PropTypes.func, - - /* onUnfillRequest(backwards): a callback which is called on scroll when - * there are children elements that are far out of view and could be removed - * without causing pagination to occur. - * - * This function should accept a boolean, which is true to indicate the back/top - * of the panel and false otherwise, and a scroll token, which refers to the - * first element to remove if removing from the front/bottom, and last element - * to remove if removing from the back/top. - */ - onUnfillRequest: React.PropTypes.func, - - /* onScroll: a callback which is called whenever any scroll happens. - */ - onScroll: React.PropTypes.func, - - /* onResize: a callback which is called whenever the Gemini scroll - * panel is resized - */ - onResize: React.PropTypes.func, - - /* className: classnames to add to the top-level div - */ - className: React.PropTypes.string, - - /* style: styles to add to the top-level div - */ - style: React.PropTypes.object, - }, - - getDefaultProps: function() { - return { - stickyBottom: true, - startAtBottom: true, - onFillRequest: function(backwards) { return Promise.resolve(false); }, - onUnfillRequest: function(backwards, scrollToken) {}, - onScroll: function() {}, - }; - }, - - componentWillMount: function() { + componentWillMount() { this._pendingFillRequests = {b: null, f: null}; this.resetScrollState(); - }, + } - componentDidMount: function() { + componentDidMount() { this.checkFillState(); - }, + } - componentDidUpdate: function() { + componentDidUpdate() { // after adding event tiles, we may need to tweak the scroll (either to // keep at the bottom of the timeline, or to maintain the view after // adding events to the top). // // This will also re-check the fill state, in case the paginate was inadequate this.checkScroll(); - }, + } - componentWillUnmount: function() { + componentWillUnmount() { // set a boolean to say we've been unmounted, which any pending // promises can use to throw away their results. // // (We could use isMounted(), but facebook have deprecated that.) this.unmounted = true; - }, + } - onScroll: function(ev) { + onScroll(ev) { var sn = this._getScrollNode(); debuglog("Scroll event: offset now:", sn.scrollTop, "_lastSetScroll:", this._lastSetScroll); + this.node = sn; + this.notifySubscribers(ev); + // Sometimes we see attempts to write to scrollTop essentially being // ignored. (Or rather, it is successfully written, but on the next // scroll event, it's been reset again). @@ -217,27 +155,27 @@ module.exports = React.createClass({ this.props.onScroll(ev); this.checkFillState(); - }, + } - onResize: function() { + onResize() { this.props.onResize(); this.checkScroll(); this.refs.geminiPanel.forceUpdate(); - }, + } // after an update to the contents of the panel, check that the scroll is // where it ought to be, and set off pagination requests if necessary. - checkScroll: function() { + checkScroll() { this._restoreSavedScrollState(); this.checkFillState(); - }, + } // return true if the content is fully scrolled down right now; else false. // // note that this is independent of the 'stuckAtBottom' state - it is simply // about whether the the content is scrolled down right now, irrespective of // whether it will stay that way when the children update. - isAtBottom: function() { + isAtBottom() { var sn = this._getScrollNode(); // there seems to be some bug with flexbox/gemini/chrome/richvdh's @@ -247,7 +185,7 @@ module.exports = React.createClass({ // that we're at the bottom when we're still a few pixels off. return sn.scrollHeight - Math.ceil(sn.scrollTop) <= sn.clientHeight + 3; - }, + } // returns the vertical height in the given direction that can be removed from // the content box (which has a height of scrollHeight, see checkFillState) without @@ -280,17 +218,17 @@ module.exports = React.createClass({ // |#########| - | // |#########| | // `---------' - - _getExcessHeight: function(backwards) { + _getExcessHeight(backwards) { var sn = this._getScrollNode(); if (backwards) { return sn.scrollTop - sn.clientHeight - UNPAGINATION_PADDING; } else { return sn.scrollHeight - (sn.scrollTop + 2*sn.clientHeight) - UNPAGINATION_PADDING; } - }, + } // check the scroll state and send out backfill requests if necessary. - checkFillState: function() { + checkFillState() { if (this.unmounted) { return; } @@ -329,10 +267,10 @@ module.exports = React.createClass({ // need to forward-fill this._maybeFill(false); } - }, + } // check if unfilling is possible and send an unfill request if necessary - _checkUnfillState: function(backwards) { + _checkUnfillState(backwards) { let excessHeight = this._getExcessHeight(backwards); if (excessHeight <= 0) { return; @@ -373,10 +311,10 @@ module.exports = React.createClass({ this.props.onUnfillRequest(backwards, markerScrollToken); }, UNFILL_REQUEST_DEBOUNCE_MS); } - }, + } // check if there is already a pending fill request. If not, set one off. - _maybeFill: function(backwards) { + _maybeFill(backwards) { var dir = backwards ? 'b' : 'f'; if (this._pendingFillRequests[dir]) { debuglog("ScrollPanel: Already a "+dir+" fill in progress - not starting another"); @@ -408,7 +346,7 @@ module.exports = React.createClass({ this.checkFillState(); } }).done(); - }, + } /* get the current scroll state. This returns an object with the following * properties: @@ -424,9 +362,9 @@ module.exports = React.createClass({ * the number of pixels the bottom of the tracked child is above the * bottom of the scroll panel. */ - getScrollState: function() { + getScrollState() { return this.scrollState; - }, + } /* reset the saved scroll state. * @@ -440,46 +378,46 @@ module.exports = React.createClass({ * no use if no children exist yet, or if you are about to replace the * child list.) */ - resetScrollState: function() { + resetScrollState() { this.scrollState = {stuckAtBottom: this.props.startAtBottom}; - }, + } /** * jump to the top of the content. */ - scrollToTop: function() { + scrollToTop() { this._setScrollTop(0); this._saveScrollState(); - }, + } /** * jump to the bottom of the content. */ - scrollToBottom: function() { + scrollToBottom() { // the easiest way to make sure that the scroll state is correctly // saved is to do the scroll, then save the updated state. (Calculating // it ourselves is hard, and we can't rely on an onScroll callback // happening, since there may be no user-visible change here). this._setScrollTop(Number.MAX_VALUE); this._saveScrollState(); - }, + } /** * Page up/down. * * mult: -1 to page up, +1 to page down */ - scrollRelative: function(mult) { + scrollRelative(mult) { var scrollNode = this._getScrollNode(); var delta = mult * scrollNode.clientHeight * 0.5; this._setScrollTop(scrollNode.scrollTop + delta); this._saveScrollState(); - }, + } /** * Scroll up/down in response to a scroll key */ - handleScrollKey: function(ev) { + handleScrollKey(ev) { switch (ev.keyCode) { case KeyCode.PAGE_UP: if (!ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { @@ -505,7 +443,7 @@ module.exports = React.createClass({ } break; } - }, + } /* Scroll the panel to bring the DOM node with the scroll token * `scrollToken` into view. @@ -518,7 +456,7 @@ module.exports = React.createClass({ * node (specifically, the bottom of it) will be positioned. If omitted, it * defaults to 0. */ - scrollToToken: function(scrollToken, pixelOffset, offsetBase) { + scrollToToken(scrollToken, pixelOffset, offsetBase) { pixelOffset = pixelOffset || 0; offsetBase = offsetBase || 0; @@ -540,11 +478,11 @@ module.exports = React.createClass({ // ... then make it so. this._restoreSavedScrollState(); - }, + } // set the scrollTop attribute appropriately to position the given child at the // given offset in the window. A helper for _restoreSavedScrollState. - _scrollToToken: function(scrollToken, pixelOffset) { + _scrollToToken(scrollToken, pixelOffset) { /* find the dom node with the right scrolltoken */ var node; var messages = this.refs.itemlist.children; @@ -576,9 +514,9 @@ module.exports = React.createClass({ this._setScrollTop(scrollNode.scrollTop + scrollDelta); } - }, + } - _saveScrollState: function() { + _saveScrollState() { if (this.props.stickyBottom && this.isAtBottom()) { this.scrollState = { stuckAtBottom: true }; debuglog("ScrollPanel: Saved scroll state", this.scrollState); @@ -616,9 +554,9 @@ module.exports = React.createClass({ } else { debuglog("ScrollPanel: unable to save scroll state: found no children in the viewport"); } - }, + } - _restoreSavedScrollState: function() { + _restoreSavedScrollState() { var scrollState = this.scrollState; var scrollNode = this._getScrollNode(); @@ -628,9 +566,9 @@ module.exports = React.createClass({ this._scrollToToken(scrollState.trackedScrollToken, scrollState.pixelOffset); } - }, + } - _setScrollTop: function(scrollTop) { + _setScrollTop(scrollTop) { var scrollNode = this._getScrollNode(); var prevScroll = scrollNode.scrollTop; @@ -652,12 +590,12 @@ module.exports = React.createClass({ debuglog("ScrollPanel: set scrollTop:", scrollNode.scrollTop, "requested:", scrollTop, "_lastSetScroll:", this._lastSetScroll); - }, + } /* get the DOM node which has the scrollTop property we care about for our * message panel. */ - _getScrollNode: function() { + _getScrollNode() { if (this.unmounted) { // this shouldn't happen, but when it does, turn the NPE into // something more meaningful. @@ -665,21 +603,91 @@ module.exports = React.createClass({ } return this.refs.geminiPanel.scrollbar.getViewElement(); - }, + } - render: function() { + render() { // TODO: the classnames on the div and ol could do with being updated to // reflect the fact that we don't necessarily contain a list of messages. // it's not obvious why we have a separate div and ol anyway. - return ( -
-
    - {this.props.children} -
-
-
- ); - }, -}); + return ( + +
+
    + {this.props.children} +
+
+
+ ); + } +} + +ScrollPanel.propTypes = { + /* stickyBottom: if set to true, then once the user hits the bottom of + * the list, any new children added to the list will cause the list to + * scroll down to show the new element, rather than preserving the + * existing view. + */ + stickyBottom: React.PropTypes.bool, + + /* startAtBottom: if set to true, the view is assumed to start + * scrolled to the bottom. + * XXX: It's likley this is unecessary and can be derived from + * stickyBottom, but I'm adding an extra parameter to ensure + * behaviour stays the same for other uses of ScrollPanel. + * If so, let's remove this parameter down the line. + */ + startAtBottom: React.PropTypes.bool, + + /* onFillRequest(backwards): a callback which is called on scroll when + * the user nears the start (backwards = true) or end (backwards = + * false) of the list. + * + * This should return a promise; no more calls will be made until the + * promise completes. + * + * The promise should resolve to true if there is more data to be + * retrieved in this direction (in which case onFillRequest may be + * called again immediately), or false if there is no more data in this + * directon (at this time) - which will stop the pagination cycle until + * the user scrolls again. + */ + onFillRequest: React.PropTypes.func, + + /* onUnfillRequest(backwards): a callback which is called on scroll when + * there are children elements that are far out of view and could be removed + * without causing pagination to occur. + * + * This function should accept a boolean, which is true to indicate the back/top + * of the panel and false otherwise, and a scroll token, which refers to the + * first element to remove if removing from the front/bottom, and last element + * to remove if removing from the back/top. + */ + onUnfillRequest: React.PropTypes.func, + + /* onScroll: a callback which is called whenever any scroll happens. + */ + onScroll: React.PropTypes.func, + + /* onResize: a callback which is called whenever the Gemini scroll + * panel is resized + */ + onResize: React.PropTypes.func, + + /* className: classnames to add to the top-level div + */ + className: React.PropTypes.string, + + /* style: styles to add to the top-level div + */ + style: React.PropTypes.object, +}; + +ScrollPanel.defaultProps = { + stickyBottom: true, + startAtBottom: true, + onFillRequest: function(backwards) { return Promise.resolve(false); }, + onUnfillRequest: function(backwards, scrollToken) {}, + onScroll: function() {}, +}; diff --git a/src/components/structures/TimelinePanel.js b/src/components/structures/TimelinePanel.js index 6be31361dd..6c7073fd63 100644 --- a/src/components/structures/TimelinePanel.js +++ b/src/components/structures/TimelinePanel.js @@ -1125,7 +1125,6 @@ var TimelinePanel = React.createClass({ highlightedEventId={ this.props.highlightedEventId } readMarkerEventId={ this.state.readMarkerEventId } readMarkerVisible={ this.state.readMarkerVisible } - suppressFirstDateSeparator={ this.state.canBackPaginate } showUrlPreview = { this.props.showUrlPreview } manageReadReceipts = { this.props.manageReadReceipts } ourUserId={ MatrixClientPeg.get().credentials.userId } From c3fc366039524de14ec88383c8d1f45cc16f9586 Mon Sep 17 00:00:00 2001 From: Eric Newport Date: Wed, 23 Aug 2017 23:36:28 +0000 Subject: [PATCH 21/86] Translated using Weblate (French) Currently translated at 98.8% (960 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 50d9113245..eb4b46e63b 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -191,10 +191,8 @@ "%(names)s and %(lastPerson)s are typing": "%(names)s et %(lastPerson)s sont en train d'écrire", "%(names)s and one other are typing": "%(names)s et un autre sont en train d'écrire", "%(names)s and %(count)s others are typing": "%(names)s et %(count)s d'autres sont en train d'écrire", - "and %(count)s others...": { - "other": "et %(count)s autres...", - "one": "et un autre..." - }, + "and %(count)s others....other": "et %(count)s autres...", + "and %(count)s others....one": "et un autre...", "An email has been sent to": "Un e-mail a été envoyé à", "A new password must be entered.": "Un nouveau mot de passe doit être entré.", "Anyone who knows the room's link, apart from guests": "Tout ceux qui connaissent le lien du salon, à part les visiteurs", @@ -979,5 +977,8 @@ "Automatically replace plain text Emoji": "Remplacer automatiquement le texte par des Emoji", "Failed to upload image": "Impossible de télécharger l'image", "Failed to update group": "Impossible de modifier le groupe", - "Hide avatars in user and room mentions": "Masquer les avatars dans les mentions d'utilisateur et de salon" + "Hide avatars in user and room mentions": "Masquer les avatars dans les mentions d'utilisateur et de salon", + "Do you want to load widget from URL:": "Charger un widget d’URL:", + "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget ajouté par %(senderName)s", + "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget supprimé par %(senderName)s" } From 69bce6aee51e6300fc1d1ed6e916c66a0e1f1d24 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 30 Aug 2017 17:35:26 +0100 Subject: [PATCH 22/86] Update tests to reflect not supressing first date separator --- test/components/structures/TimelinePanel-test.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/components/structures/TimelinePanel-test.js b/test/components/structures/TimelinePanel-test.js index 98ec65b8e8..c13d149ed0 100644 --- a/test/components/structures/TimelinePanel-test.js +++ b/test/components/structures/TimelinePanel-test.js @@ -234,7 +234,6 @@ describe('TimelinePanel', function() { // 5 times, and we should have given up paginating expect(client.paginateEventTimeline.callCount).toEqual(5); expect(messagePanel.props.backPaginating).toBe(false); - expect(messagePanel.props.suppressFirstDateSeparator).toBe(false); // now, if we update the events, there shouldn't be any // more requests. @@ -339,7 +338,6 @@ describe('TimelinePanel', function() { awaitScroll().then(() => { // we should now have loaded the first few events expect(messagePanel.props.backPaginating).toBe(false); - expect(messagePanel.props.suppressFirstDateSeparator).toBe(true); // back-paginate until we hit the start return backPaginate(); @@ -347,7 +345,6 @@ describe('TimelinePanel', function() { // hopefully, we got to the start of the timeline expect(messagePanel.props.backPaginating).toBe(false); - expect(messagePanel.props.suppressFirstDateSeparator).toBe(false); var events = scryEventTiles(panel); expect(events[0].props.mxEvent).toBe(timeline.getEvents()[0]); From 8f0b7db0d78562c972da2cc38d616c399dda01f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ange=20des=20t=C3=A9n=C3=A8bres?= Date: Wed, 30 Aug 2017 15:36:14 +0000 Subject: [PATCH 23/86] Translated using Weblate (French) Currently translated at 99.2% (964 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index eb4b46e63b..8d20b8e4c3 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -978,7 +978,11 @@ "Failed to upload image": "Impossible de télécharger l'image", "Failed to update group": "Impossible de modifier le groupe", "Hide avatars in user and room mentions": "Masquer les avatars dans les mentions d'utilisateur et de salon", - "Do you want to load widget from URL:": "Charger un widget d’URL:", + "Do you want to load widget from URL:": "Charger un widget venant de l’URL :", "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget ajouté par %(senderName)s", - "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget supprimé par %(senderName)s" + "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget supprimé par %(senderName)s", + "Publish this room to the public in %(domain)s's room directory?": "Publier ce salon dans le l'annuaire public de %(domain)s ?", + "Integrations Error": "Erreur d'intégration", + "Cannot add any more widgets": "Impossible d'ajouter plus de widgets", + "The maximum permitted number of widgets have already been added to this room.": "Le nombre maximum de widgets autorisés a déjà été atteint pour ce salon." } From cdb28f956e5cab941cf66e94238ca7e5be23c1a0 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Thu, 31 Aug 2017 16:29:31 +0100 Subject: [PATCH 24/86] Add comment for StickyContainer extension --- src/components/structures/ScrollPanel.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index cbd2954918..abb9ddff49 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -117,7 +117,11 @@ export default class ScrollPanel extends StickyContainer { debuglog("Scroll event: offset now:", sn.scrollTop, "_lastSetScroll:", this._lastSetScroll); + // Set the node and notify subscribers of the StickContainer + // By extending StickyContainer, we can set the scroll node to be that of the + // ScrolPanel to allow any `` children to be sticky, namely DateSeparators. this.node = sn; + // Update subscribers - arbitrarily nested `` children this.notifySubscribers(ev); // Sometimes we see attempts to write to scrollTop essentially being From c9c07713557b92eb341552bce87c440bfd63277d Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Thu, 31 Aug 2017 16:29:45 +0100 Subject: [PATCH 25/86] Spelling --- src/components/structures/ScrollPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index abb9ddff49..3ea699798e 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -117,7 +117,7 @@ export default class ScrollPanel extends StickyContainer { debuglog("Scroll event: offset now:", sn.scrollTop, "_lastSetScroll:", this._lastSetScroll); - // Set the node and notify subscribers of the StickContainer + // Set the node and notify subscribers of the StickyContainer // By extending StickyContainer, we can set the scroll node to be that of the // ScrolPanel to allow any `` children to be sticky, namely DateSeparators. this.node = sn; From aa0b94847b088c83bc3a4ea242420c3ef98c6598 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 1 Sep 2017 16:17:22 +0100 Subject: [PATCH 26/86] Prepare changelog for v0.10.3-rc.1 --- CHANGELOG.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5e596144e..f4e9ae9a78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,36 @@ +Changes in [0.10.3-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.3-rc.1) (2017-09-01) +=============================================================================================================== +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.2...v0.10.3-rc.1) + + * Fix room change sometimes being very slow + [\#1354](https://github.com/matrix-org/matrix-react-sdk/pull/1354) + * apply shouldHideEvent fn to onRoomTimeline for RoomStatusBar + [\#1346](https://github.com/matrix-org/matrix-react-sdk/pull/1346) + * text4event widget modified, used to show widget added each time. + [\#1345](https://github.com/matrix-org/matrix-react-sdk/pull/1345) + * separate concepts of showing and managing RRs to fix regression + [\#1352](https://github.com/matrix-org/matrix-react-sdk/pull/1352) + * Make staging widgets work with live and vice versa. + [\#1350](https://github.com/matrix-org/matrix-react-sdk/pull/1350) + * Avoid breaking /sync with uncaught exceptions + [\#1349](https://github.com/matrix-org/matrix-react-sdk/pull/1349) + * we need to pass whether it is an invite RoomSubList explicitly (i18n) + [\#1343](https://github.com/matrix-org/matrix-react-sdk/pull/1343) + * Percent encoding isn't a valid thing within _t + [\#1348](https://github.com/matrix-org/matrix-react-sdk/pull/1348) + * Fix spurious notifications + [\#1339](https://github.com/matrix-org/matrix-react-sdk/pull/1339) + * Unbreak password reset with a non-default HS + [\#1347](https://github.com/matrix-org/matrix-react-sdk/pull/1347) + * Remove unnecessary 'load' on notif audio element + [\#1341](https://github.com/matrix-org/matrix-react-sdk/pull/1341) + * _tJsx returns a React Object, the sub fn must return a React Object + [\#1340](https://github.com/matrix-org/matrix-react-sdk/pull/1340) + * Fix deprecation warning about promise.defer() + [\#1292](https://github.com/matrix-org/matrix-react-sdk/pull/1292) + * Fix click to insert completion + [\#1331](https://github.com/matrix-org/matrix-react-sdk/pull/1331) + Changes in [0.10.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.2) (2017-08-24) ===================================================================================================== [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.1...v0.10.2) From c07362d7c159c83f1ea0568765e13baa78b4cb29 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 1 Sep 2017 16:17:22 +0100 Subject: [PATCH 27/86] v0.10.3-rc.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cc352cb8db..0610d42c0d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "0.10.2", + "version": "0.10.3-rc.1", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 26ebb530ee60288d2f85a28449a011ad21aa2b94 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Fri, 1 Sep 2017 15:20:27 +0000 Subject: [PATCH 28/86] Added translation using Weblate (Finnish) --- src/i18n/strings/fi.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/i18n/strings/fi.json diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/i18n/strings/fi.json @@ -0,0 +1 @@ +{} \ No newline at end of file From 839b1cf1948b76a13668d0c866102f768e19b732 Mon Sep 17 00:00:00 2001 From: Brendan Abolivier Date: Thu, 31 Aug 2017 15:11:06 +0000 Subject: [PATCH 29/86] Translated using Weblate (French) Currently translated at 99.3% (965 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 8d20b8e4c3..595bccfe12 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -984,5 +984,6 @@ "Publish this room to the public in %(domain)s's room directory?": "Publier ce salon dans le l'annuaire public de %(domain)s ?", "Integrations Error": "Erreur d'intégration", "Cannot add any more widgets": "Impossible d'ajouter plus de widgets", - "The maximum permitted number of widgets have already been added to this room.": "Le nombre maximum de widgets autorisés a déjà été atteint pour ce salon." + "The maximum permitted number of widgets have already been added to this room.": "Le nombre maximum de widgets autorisés a déjà été atteint pour ce salon.", + "NOTE: Apps are not end-to-end encrypted": "NOTE : Les applications ne sont pas chiffrées de bout en bout" } From 53a09144fb208fd1107d8e4d00c49d8fc70ac295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ange=20des=20t=C3=A9n=C3=A8bres?= Date: Fri, 1 Sep 2017 17:38:15 +0000 Subject: [PATCH 30/86] Translated using Weblate (French) Currently translated at 99.4% (966 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 595bccfe12..57b4c302ea 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -969,7 +969,7 @@ "You are a member of these groups:": "Vous êtes membre des groupes suivants :", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Créez un groupe pour représenter votre communauté ! Définissez un jeu de salons et votre propre page d'accueil pour marquer votre espace dans l'univers Matrix.", "Join an existing group": "Rejoindre un groupe existant", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Pour rejoindre un groupe existant, vous devez connaître son identifiant de groupe ; il ressemble à +exemple:matrix.org.", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Pour rejoindre un groupe existant, vous devez connaître l'identifiant de ce groupe ; il ressemblera à +exemple:matrix.org.", "Featured Rooms:": "Salons mis en avant :", "Error whilst fetching joined groups": "Erreur en récupérant la liste des groupes", "Featured Users:": "Utilisateurs mis en avant :", From 95fa0f0cb7e936328aeda384c88fa15cf934509e Mon Sep 17 00:00:00 2001 From: Bamstam Date: Mon, 28 Aug 2017 20:52:45 +0000 Subject: [PATCH 31/86] Translated using Weblate (German) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 6e51145b28..0e3a2fa2d3 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -995,7 +995,7 @@ "Hide Apps": "Apps verbergen", "Hide join/leave messages (invites/kicks/bans unaffected)": "Verberge Beitritt-/Verlassen-Meldungen (nicht Einladungen/Kicks/Bannungen)", "Hide avatar and display name changes": "Verberge Avatar- und Anzeigenamen-Änderungen", - "Matrix Apps": "Matrix Apps", + "Matrix Apps": "Matrix-Apps", "Revoke widget access": "Ziehe Widget-Zugriff zurück", "Sets the room topic": "Setzt das Raum-Thema", "Show Apps": "Apps anzeigen", From 1e79fd84632ca8a663ed59ecc722e6c43aac6252 Mon Sep 17 00:00:00 2001 From: lazz0 Date: Sun, 3 Sep 2017 14:26:35 +0000 Subject: [PATCH 32/86] Translated using Weblate (German) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 0e3a2fa2d3..ab181efe7d 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -241,7 +241,7 @@ "turned on end-to-end encryption (algorithm": "aktivierte Ende-zu-Ende-Verschlüsselung (Algorithmus", "Unable to add email address": "E-Mail-Adresse konnte nicht hinzugefügt werden", "Unable to remove contact information": "Die Kontakt-Informationen konnten nicht gelöscht werden", - "Unable to verify email address.": "Unfähig die E-Mail-Adresse zu verifizieren.", + "Unable to verify email address.": "Die E-Mail-Adresse konnte nicht verifiziert werden.", "Unban": "Dauerhaftes Ausschließen aus dem Raum aufheben", "Unencrypted room": "Unverschlüsselter Raum", "unknown error code": "Unbekannter Fehlercode", @@ -993,7 +993,7 @@ "Edit": "Bearbeiten", "Enable automatic language detection for syntax highlighting": "Aktiviere automatische Spracherkennung zum Syntax-Hervorheben", "Hide Apps": "Apps verbergen", - "Hide join/leave messages (invites/kicks/bans unaffected)": "Verberge Beitritt-/Verlassen-Meldungen (nicht Einladungen/Kicks/Bannungen)", + "Hide join/leave messages (invites/kicks/bans unaffected)": "Verberge Beitritt-/Verlassen-Meldungen (außer Einladungen/Kicks/Bans)", "Hide avatar and display name changes": "Verberge Avatar- und Anzeigenamen-Änderungen", "Matrix Apps": "Matrix-Apps", "Revoke widget access": "Ziehe Widget-Zugriff zurück", @@ -1035,7 +1035,7 @@ "PM": "pm", "The maximum permitted number of widgets have already been added to this room.": "Die maximal erlaubte Anzahl an hinzufügbaren Widgets für diesen Raum wurde erreicht.", "Cannot add any more widgets": "Kann keine weiteren Widgets hinzufügen", - "Do you want to load widget from URL:": "Mögest du das Widget von folgender URL laden:", + "Do you want to load widget from URL:": "Möchtest du das Widget von folgender URL laden:", "Integrations Error": "Integrations-Error", "NOTE: Apps are not end-to-end encrypted": "BEACHTE: Apps sind nicht Ende-zu-Ende verschlüsselt", "%(widgetName)s widget added by %(senderName)s": "Widget \"%(widgetName)s\" von %(senderName)s hinzugefügt", From 6abb8f4464980dc32b86bd76aba4ceeebfc8fa26 Mon Sep 17 00:00:00 2001 From: Bamstam Date: Mon, 4 Sep 2017 07:26:09 +0000 Subject: [PATCH 33/86] Translated using Weblate (German) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 68 ++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index ab181efe7d..d0f98973c6 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -31,11 +31,11 @@ "Event information": "Ereignis-Information", "Sender device information": "Geräte-Informationen des Absenders", "Displays action": "Zeigt Aktionen an", - "Bans user with given id": "Schließt den Benutzer mit der angegebenen ID dauerhaft aus dem Raum aus", + "Bans user with given id": "Verbannt den Benutzer mit der angegebenen ID", "Deops user with given id": "Entfernt OP beim Benutzer mit der angegebenen ID", "Invites user with given id to current room": "Lädt den Benutzer mit der angegebenen ID in den aktuellen Raum ein", "Joins room with given alias": "Betrete Raum mit angegebenen Alias", - "Kicks user with given id": "Entfernt den Benutzer mit der angegebenen ID aus dem Raum", + "Kicks user with given id": "Benutzer mit der angegebenen ID kicken", "Changes your display nickname": "Ändert deinen angezeigten Nicknamen", "Change Password": "Passwort ändern", "Searches DuckDuckGo for results": "Verwendet DuckDuckGo für Suchergebnisse", @@ -66,7 +66,7 @@ "Are you sure you want to reject the invitation?": "Bist du sicher, dass du die Einladung ablehnen willst?", "Are you sure you want to upload the following files?": "Bist du sicher, dass du die folgenden Dateien hochladen möchtest?", "banned": "gebannt", - "Banned users": "Dauerhaft aus dem Raum ausgeschlossene Benutzer", + "Banned users": "Verbannte Benutzer", "Bug Report": "Fehlerbericht", "changed avatar": "änderte Avatar", "changed their display name from": "änderte seinen Anzeigenamen von", @@ -116,7 +116,7 @@ "Failed to leave room": "Verlassen des Raums fehlgeschlagen", "Failed to reject invitation": "Einladung konnte nicht abgelehnt werden", "Failed to set avatar.": "Fehler beim Setzen des Profilbilds.", - "Failed to unban": "Dauerhaftes Ausschließen aus dem Raum konnte nicht aufgehoben werden", + "Failed to unban": "Aufheben der Verbannung fehlgeschlagen", "Failed to upload file": "Datei-Upload fehlgeschlagen", "Favourite": "Favorit", "favourite": "Favorit", @@ -221,11 +221,11 @@ "This is a preview of this room. Room interactions have been disabled": "Dies ist eine Vorschau dieses Raumes. Raum-Interaktionen wurden deaktiviert", "This room is not accessible by remote Matrix servers": "Remote-Matrix-Server können auf diesen Raum nicht zugreifen", "This room's internal ID is": "Die interne ID dieses Raumes ist", - "To ban users": "Um Benutzer dauerhaft aus dem Raum auszuschließen", + "To ban users": "Um Benutzer zu verbannen", "To configure the room": "Um den Raum zu konfigurieren", "To invite users into the room": "Um Nutzer in den Raum einzuladen", "to join the discussion": "um an der Diskussion teilzunehmen", - "To kick users": "Um Benutzer aus dem Raum zu entfernen", + "To kick users": "Um Benutzer zu kicken", "Admin": "Administrator", "Server may be unavailable, overloaded, or you hit a bug.": "Server ist nicht verfügbar, überlastet oder du bist auf einen Fehler gestoßen.", "Could not connect to the integration server": "Konnte keine Verbindung zum Integrations-Server herstellen", @@ -242,7 +242,7 @@ "Unable to add email address": "E-Mail-Adresse konnte nicht hinzugefügt werden", "Unable to remove contact information": "Die Kontakt-Informationen konnten nicht gelöscht werden", "Unable to verify email address.": "Die E-Mail-Adresse konnte nicht verifiziert werden.", - "Unban": "Dauerhaftes Ausschließen aus dem Raum aufheben", + "Unban": "Verbannung aufheben", "Unencrypted room": "Unverschlüsselter Raum", "unknown error code": "Unbekannter Fehlercode", "unknown": "unbekannt", @@ -260,10 +260,10 @@ "VoIP conference finished.": "VoIP-Konferenz wurde beendet.", "VoIP conference started.": "VoIP-Konferenz gestartet.", "(warning: cannot be disabled again!)": "(Warnung: Kann nicht wieder deaktiviert werden!)", - "was banned": "wurde dauerhaft aus dem Raum ausgeschlossen", + "was banned": "wurde aus dem Raum verbannt", "was invited": "wurde eingeladen", - "was kicked": "wurde aus dem Raum entfernt", - "was unbanned": "wurde vom dauerhaften Ausschluss aus dem Raum befreit", + "was kicked": "wurde gekickt", + "was unbanned": "wurde von der Verbannung aus dem Raum befreit", "was": "wurde", "Who can access this room?": "Wer hat Zugang zu diesem Raum?", "Who can read history?": "Wer kann den bisherigen Chatverlauf lesen?", @@ -350,7 +350,7 @@ "%(names)s and one other are typing": "%(names)s und ein weiteres Raum-Mitglied schreiben", "%(names)s and %(count)s others are typing": "%(names)s und %(count)s weitere Raum-Mitglieder schreiben", "%(senderName)s answered the call.": "%(senderName)s hat den Anruf angenommen.", - "%(senderName)s banned %(targetName)s.": "%(senderName)s hat %(targetName)s dauerhaft aus dem Raum ausgeschlossen.", + "%(senderName)s banned %(targetName)s.": "%(senderName)s hat %(targetName)s dauerhaft aus dem Raum verbannt.", "%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s hat den Anzeigenamen von \"%(oldDisplayName)s\" auf \"%(displayName)s\" geändert.", "%(senderName)s changed their profile picture.": "%(senderName)s hat das Profilbild geändert.", "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s hat das Berechtigungslevel von %(powerLevelDiffText)s geändert.", @@ -364,7 +364,7 @@ "%(senderName)s invited %(targetName)s.": "%(senderName)s hat %(targetName)s eingeladen.", "%(displayName)s is typing": "%(displayName)s schreibt", "%(targetName)s joined the room.": "%(targetName)s hat den Raum betreten.", - "%(senderName)s kicked %(targetName)s.": "%(senderName)s hat %(targetName)s aus dem Raum entfernt.", + "%(senderName)s kicked %(targetName)s.": "%(senderName)s hat %(targetName)s aus dem Raum gekickt.", "%(targetName)s left the room.": "%(targetName)s hat den Raum verlassen.", "%(senderName)s made future room history visible to": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für", "Missing room_id in request": "Fehlende room_id in Anfrage", @@ -388,7 +388,7 @@ "These are experimental features that may break in unexpected ways": "Dies sind experimentelle Funktionen, die in unerwarteter Weise Fehler verursachen können", "To use it, just wait for autocomplete results to load and tab through them.": "Um diese Funktion zu nutzen, warte einfach auf die Autovervollständigungsergebnisse und benutze dann die TAB-Taste zum durchblättern.", "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s hat die Ende-zu-Ende-Verschlüsselung aktiviert (Algorithmus: %(algorithm)s).", - "%(senderName)s unbanned %(targetName)s.": "%(senderName)s hat das dauerhafte Ausschließen von %(targetName)s aus dem Raum aufgehoben.", + "%(senderName)s unbanned %(targetName)s.": "%(senderName)s hat die Verbannung von %(targetName)s aufgehoben.", "Usage": "Verwendung", "Use with caution": "Mit Vorsicht zu verwenden", "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s hat die Einladung für %(targetName)s zurückgezogen.", @@ -556,7 +556,7 @@ "and %(count)s others....one": "und ein(e) weitere(r)...", "Are you sure?": "Bist du sicher?", "Attachment": "Anhang", - "Ban": "Dauerhaft aus dem Raum ausschließen", + "Ban": "Verbannen", "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Verbindungsaufbau zum Heimserver nicht möglich - bitte Internetverbindung überprüfen und sicherstellen, ob das SSL-Zertifikat des Heimservers vertrauenswürdig ist.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Es kann keine Verbindung zum Heimserver via HTTP aufgebaut werden, wenn die Adresszeile des Browsers eine HTTPS-URL enthält. Entweder HTTPS verwenden oder alternativ unsichere Skripte erlauben.", "changing room on a RoomView is not supported": "Das Ändern eines Raumes in einer RaumAnsicht wird nicht unterstützt", @@ -570,7 +570,7 @@ "Disinvite": "Einladung zurückziehen", "Download %(text)s": "%(text)s herunterladen", "Enter Code": "Code eingeben", - "Failed to ban user": "Dauerhaftes Ausschließen des Benutzers aus dem Raum fehlgeschlagen", + "Failed to ban user": "Verbannen des Benutzers fehlgeschlagen", "Failed to change power level": "Ändern des Berechtigungslevels fehlgeschlagen", "Failed to delete device": "Löschen des Geräts fehlgeschlagen", "Failed to join room": "Betreten des Raumes ist fehlgeschlagen", @@ -587,7 +587,7 @@ "'%(alias)s' is not a valid format for an address": "'%(alias)s' ist kein gültiges Adressformat", "'%(alias)s' is not a valid format for an alias": "'%(alias)s' ist kein gültiges Alias-Format", "Join Room": "Dem Raum beitreten", - "Kick": "Aus dem Raum entfernen", + "Kick": "Kicken", "Level": "Berechtigungslevel", "Local addresses for this room:": "Lokale Adressen dieses Raumes:", "Markdown is disabled": "Markdown ist deaktiviert", @@ -649,7 +649,7 @@ "%(items)s and %(remaining)s others": "%(items)s und %(remaining)s weitere", "%(items)s and one other": "%(items)s und ein(e) weitere(r)", "%(items)s and %(lastItem)s": "%(items)s und %(lastItem)s", - "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)ssind dem Raum %(repeats)s mal beigetreten", + "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)shaben den Raum %(repeats)s-mal betreten", "%(oneUser)sjoined %(repeats)s times": "%(oneUser)shat den Raum %(repeats)s mal betreten", "%(severalUsers)sjoined": "%(severalUsers)shaben den Raum betreten", "%(oneUser)sjoined": "%(oneUser)shat den Raum betreten", @@ -676,15 +676,15 @@ "were invited %(repeats)s times": "wurden %(repeats)s mal eingeladen", "was invited %(repeats)s times": "wurde %(repeats)s mal eingeladen", "were invited": "wurden eingeladen", - "were banned %(repeats)s times": "wurden %(repeats)s-mal dauerhaft aus dem Raum ausgeschlossen", - "was banned %(repeats)s times": "wurde %(repeats)s-mal aus dem Raum ausgeschlossen", - "were banned": "wurden dauerhaft aus dem Raum ausgeschlossen", - "were unbanned %(repeats)s times": "wurden %(repeats)s mal vom dauerhaften Ausschluss aus dem Raum befreit", - "was unbanned %(repeats)s times": "wurde %(repeats)s mal vom dauerhaften Ausschluss aus dem Raum befreit", - "were unbanned": "wurden vom dauerhaften Ausschluss aus dem Raum befreit", - "were kicked %(repeats)s times": "wurden %(repeats)s-mal aus dem Raum entfernt", - "was kicked %(repeats)s times": "wurde %(repeats)s-mal aus dem Raum entfernt", - "were kicked": "wurden aus dem Raum entfernt", + "were banned %(repeats)s times": "wurden %(repeats)s-mal aus dem Raum verbannt", + "was banned %(repeats)s times": "wurde %(repeats)s-mal aus dem Raum verbannt", + "were banned": "wurden aus dem Raum verbannt", + "were unbanned %(repeats)s times": "wurden %(repeats)s-mal von der Verbannung aus dem Raum befreit", + "was unbanned %(repeats)s times": "wurde %(repeats)s-mal von der Verbannung aus dem Raum befreit", + "were unbanned": "wurden von der Verbannung aus dem Raum befreit", + "were kicked %(repeats)s times": "wurden %(repeats)s-mal gekickt", + "was kicked %(repeats)s times": "wurde %(repeats)s-mal gekickt", + "were kicked": "wurden gekickt", "%(severalUsers)schanged their name %(repeats)s times": "%(severalUsers)shaben ihren Namen %(repeats)s mal geändert", "%(oneUser)schanged their name %(repeats)s times": "%(oneUser)shat den Namen %(repeats)s mal geändert", "%(severalUsers)schanged their name": "%(severalUsers)shaben ihre Namen geändert", @@ -957,8 +957,8 @@ "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (Berechtigungslevel %(powerLevelNumber)s)", "Verified": "Verifiziert", "Would you like to accept or decline this invitation?": "Möchtest du diese Einladung akzeptieren oder ablehnen?", - "You have been banned from %(roomName)s by %(userName)s.": "Du wurdest von %(userName)s dauerhaft aus dem Raum %(roomName)s ausgeschlossen.", - "You have been kicked from %(roomName)s by %(userName)s.": "Du wurdest von %(userName)s aus dem Raum %(roomName)s entfernt.", + "You have been banned from %(roomName)s by %(userName)s.": "Du wurdest von %(userName)s aus dem Raum %(roomName)s verbannt.", + "You have been kicked from %(roomName)s by %(userName)s.": "Du wurdest von %(userName)s aus dem Raum \"%(roomName)s\" gekickt.", "You may wish to login with a different account, or add this email to this account.": "Du möchtest dich eventuell mit einem anderen Konto anmelden oder alternativ diese E-Mail-Adresse diesem Konto hinzufügen.", "Your home server does not support device management.": "Dein Heimserver unterstützt kein Geräte-Management.", "(~%(count)s results).one": "(~%(count)s Ergebnis)", @@ -991,7 +991,7 @@ "Delete widget": "Widget entfernen", "Define the power level of a user": "Setze das Berechtigungslevel eines Benutzers", "Edit": "Bearbeiten", - "Enable automatic language detection for syntax highlighting": "Aktiviere automatische Spracherkennung zum Syntax-Hervorheben", + "Enable automatic language detection for syntax highlighting": "Automatische Spracherkennung für die Syntax-Hervorhebung aktivieren", "Hide Apps": "Apps verbergen", "Hide join/leave messages (invites/kicks/bans unaffected)": "Verberge Beitritt-/Verlassen-Meldungen (außer Einladungen/Kicks/Bans)", "Hide avatar and display name changes": "Verberge Avatar- und Anzeigenamen-Änderungen", @@ -1001,7 +1001,7 @@ "Show Apps": "Apps anzeigen", "To get started, please pick a username!": "Um zu starten, wähle bitte einen Nutzernamen!", "Unable to create widget.": "Widget kann nicht erstellt werden.", - "Unbans user with given id": "Entbanne Nutzer mit angegebener ID", + "Unbans user with given id": "Verbannung aufheben für Benutzer mit angegebener ID", "You are not in this room.": "Du bist nicht in diesem Raum.", "You do not have permission to do that in this room.": "Du hast keine Berechtigung, dies in diesem Raum zu tun.", "Verifies a user, device, and pubkey tuple": "Verifiziert ein Tupel aus Nutzer, Gerät und öffentlichem Schlüssel", @@ -1027,12 +1027,12 @@ "Error whilst fetching joined groups": "Fehler beim Laden beigetretener Gruppen", "Featured Users:": "Hervorgehobene Nutzer:", "Edit Group": "Gruppe bearbeiten", - "Automatically replace plain text Emoji": "Automatisch Klarzeichen-Emoji ersetzen", + "Automatically replace plain text Emoji": "Klartext-Emoji automatisch ersetzen", "Failed to upload image": "Bild-Hochladen fehlgeschlagen", "Failed to update group": "Aktualisieren der Gruppe fehlgeschlagen", "Hide avatars in user and room mentions": "Verberge Profilbilder in Benutzer- und Raum-Erwähnungen", - "AM": "am", - "PM": "pm", + "AM": "a. m.", + "PM": "p. m.", "The maximum permitted number of widgets have already been added to this room.": "Die maximal erlaubte Anzahl an hinzufügbaren Widgets für diesen Raum wurde erreicht.", "Cannot add any more widgets": "Kann keine weiteren Widgets hinzufügen", "Do you want to load widget from URL:": "Möchtest du das Widget von folgender URL laden:", @@ -1040,5 +1040,5 @@ "NOTE: Apps are not end-to-end encrypted": "BEACHTE: Apps sind nicht Ende-zu-Ende verschlüsselt", "%(widgetName)s widget added by %(senderName)s": "Widget \"%(widgetName)s\" von %(senderName)s hinzugefügt", "%(widgetName)s widget removed by %(senderName)s": "Widget \"%(widgetName)s\" von %(senderName)s entfernt", - "Robot check is currently unavailable on desktop - please use a web browser": "Auf dem Desktop kann aktuell nicht geprüft werden, ob du ein Roboter bist. Bitte nutze einen Browser" + "Robot check is currently unavailable on desktop - please use a web browser": "In der Desktop-Version kann derzeit nicht geprüft werden, ob ein Benutzer ein Roboter ist. Bitte einen Webbrowser verwenden" } From 6847dddcc428e3c47aebb05221e16e5f5e37a1f3 Mon Sep 17 00:00:00 2001 From: lazz0 Date: Mon, 4 Sep 2017 07:29:13 +0000 Subject: [PATCH 34/86] Translated using Weblate (German) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index d0f98973c6..877bad9bfe 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -298,7 +298,7 @@ "The remote side failed to pick up": "Die Gegenstelle konnte nicht abheben", "This phone number is already in use": "Diese Telefonnummer wird bereits verwendet", "Unable to restore previous session": "Die vorherige Sitzung konnte nicht wiederhergestellt werden", - "Unable to capture screen": "Unfähig den Bildschirm aufzunehmen", + "Unable to capture screen": "Der Bildschirm konnte nicht aufgenommen werden.", "Unable to enable Notifications": "Benachrichtigungen konnten nicht aktiviert werden", "Upload Failed": "Upload fehlgeschlagen", "VoIP is unsupported": "VoIP wird nicht unterstützt", From ce914349ce9a274bcec8c6383ed5e69dcd5a08ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E8=BF=9B?= Date: Sat, 2 Sep 2017 05:00:46 +0000 Subject: [PATCH 35/86] Translated using Weblate (Chinese (Simplified)) Currently translated at 72.5% (704 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hans/ --- src/i18n/strings/zh_Hans.json | 90 ++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 483112005c..77c2232619 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -26,7 +26,7 @@ "Email": "电子邮箱", "Email address": "电子邮箱地址", "Email, name or matrix ID": "电子邮箱,姓名或者matrix ID", - "Emoji": "Emoji", + "Emoji": "表情", "Enable encryption": "启用加密", "Encrypted messages will not be visible on clients that do not yet implement encryption": "不支持加密的客户端将看不到加密的消息", "Encrypted room": "加密聊天室", @@ -619,5 +619,91 @@ "%(senderName)s requested a VoIP conference.": "%(senderName)s 请求一个 VoIP 会议。", "Seen by %(userName)s at %(dateTime)s": "在 %(dateTime)s 被 %(userName)s 看到", "Show Apps": "显示应用", - "Tagged as: ": "标记为:" + "Tagged as: ": "标记为:", + "ar-sy": "阿拉伯语(Syria)", + "ar-tn": "阿拉伯语(Tunisia)", + "be": "白俄罗斯", + "bg": "保加利亚", + "de-li": "德语(列支敦士登)", + "en-bz": "英语(伯利兹)", + "en-tt": "英语(特立尼达)", + "es-bo": "西班牙语(玻利维亚)", + "es-do": "西班牙语(Dominican)", + "es-ec": "西班牙语(Ecuador)", + "es-gt": "西班牙语(Guatemala)", + "es-hn": "西班牙语(Honduras)", + "es-ni": "西班牙语(Nicaragua)", + "es-pa": "西班牙语(Panama)", + "es-pr": "西班牙语(Puerto Rico)", + "es-py": "西班牙语(Paraguay)", + "es-sv": "西班牙语(El Salvador)", + "es-uy": "西班牙语(Uruguay)", + "es-ve": "西班牙语(Venezuela)", + "et": "爱沙尼亚", + "eu": "巴斯克", + "fa": "波斯语", + "fo": "法罗群岛", + "fr-lu": "法语(Luxembourg)", + "ga": "爱尔兰", + "gd": "盖尔", + "lt": "立陶宛", + "mk": "马其顿", + "mt": "马耳他", + "nl-be": "荷兰语(Belgium)", + "nl": "荷兰语", + "no": "挪威", + "pt-br": "巴西葡萄牙语", + "rm": "瑞士南部", + "sb": "索布语", + "ru-mo": "俄语(Moldova)", + "ro-mo": "罗马尼亚(Moldova)", + "sq": "阿尔巴尼亚", + "sv-fi": "瑞典(Finland)", + "sv": "瑞典", + "sx": "苏图", + "sz": "萨米(Lappish)", + "tn": "茨瓦纳语", + "ts": "聪加", + "uk": "乌克兰", + "ur": "乌尔都语", + "ve": "文达", + "xh": "科萨", + "zu": "祖鲁语", + "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "验证码将发送到+%(msisdn),请输入接收到的验证码", + "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName) 接受了 %(displayName)的邀请。", + "Active call (%(roomName)s)": "%(roomName)的呼叫", + "And %(count)s more...": "添加%(count)个...", + "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName) 将级别调整到%(powerLevelDiffText)。", + "Changes colour scheme of current room": "修改了样式", + "changing room on a RoomView is not supported": "暂不支持修改", + "demote": "降级", + "Deops user with given id": "Deops user", + "Join as voice or video.": "通过 语言 或者 视频加入.", + "%(senderName)s made future room history visible to": "%(senderName) 设定历史浏览功能为", + "AM": "上午", + "PM": "下午", + "NOTE: Apps are not end-to-end encrypted": "提示:APP不支持端对端加密", + "People": "联系人", + "Press": "点击", + "Profile": "个人配置", + "Public Chat": "公开的", + "Refer a friend to Riot:": "介绍朋友加入Riot:", + "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName) 删除了显示名称。", + "%(roomName)s is not accessible at this time.": "%(roomName)此时无法访问。", + "Set": "设置", + "Start authentication": "开始认证", + "tag as %(tagName)s": "标签", + "tag direct chat": "标签", + "The maximum permitted number of widgets have already been added to this room.": "小部件的最大允许数量已经添加到这个房间了。", + "The phone number entered looks invalid": "输入的电话号码看起来无效", + "The remote side failed to pick up": "远端未能接收到", + "This Home Server does not support login using email address.": "HS不支持使用电子邮件地址登陆。", + "This invitation was sent to an email address which is not associated with this account:": "此邀请被发送到与此帐户不相关的电子邮件地址:", + "This room is not recognised.": "这个房间未匹配。", + "times": "次", + "To get started, please pick a username!": "请点击用户名!", + "Unable to add email address": "无法添加电子邮件地址", + "Failed to update group": "更新群组失败", + "Automatically replace plain text Emoji": "文字、表情自动转换", + "Join an existing group": "试图加入一个不存在的群组" } From b3a53c43fd3c0b7046628ad66dbe4e8186e5b556 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Sat, 26 Aug 2017 13:46:47 +0000 Subject: [PATCH 36/86] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 72 +++++++++++++++++------------------ 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 35631310ad..dd071153bf 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -9,7 +9,7 @@ "Are you sure you want to reject the invitation?": "您確認要謝絕邀請嗎?", "Are you sure you want to upload the following files?": "您確認要上傳以下文件嗎?", "Attachment": "附件", - "Autoplay GIFs and videos": "自動播放GIF和視頻", + "Autoplay GIFs and videos": "自動播放 GIF 和影片", "%(senderName)s banned %(targetName)s.": "%(senderName)s 封禁了 %(targetName)s.", "Ban": "封禁", "Banned users": "被封禁的用戶", @@ -96,7 +96,7 @@ "Admin": "管理者", "Advanced": "高級", "Algorithm": "算法", - "Always show message timestamps": "總是顯示消息時間戳", + "Always show message timestamps": "總是顯示訊息時間戳", "Authentication": "授權", "all room members": "所有聊天室成員", "all room members, from the point they are invited": "所有聊天室成員,從他們被邀請開始", @@ -127,13 +127,13 @@ "Decrypt %(text)s": "解密 %(text)s", "Decryption error": "解密出錯", "Delete": "刪除", - "Default": "默認", - "Device ID": "設備識別碼", - "Devices": "設備列表", - "Devices will not yet be able to decrypt history from before they joined the room": "新加入聊天室的設備不能解密加入之前的聊天記錄", + "Default": "預設", + "Device ID": "裝置識別碼", + "Devices": "裝置列表", + "Devices will not yet be able to decrypt history from before they joined the room": "新加入聊天室的裝置不能解密加入之前的聊天記錄", "Direct Chat": "私人聊天", "Direct chats": "私聊", - "Disable inline URL previews by default": "默認禁用自動網址預覽", + "Disable inline URL previews by default": "預設停用自動網址預覽", "Disinvite": "取消邀請", "Display name": "顯示名稱", "Displays action": "顯示操作", @@ -141,12 +141,12 @@ "Download %(text)s": "下載 %(text)s", "Drop here %(toAction)s": "拖曳到這裡 %(toAction)s", "Ed25519 fingerprint": "Ed25519指紋", - "Email": "電子郵箱", - "Email address": "電子郵箱地址", - "Email, name or matrix ID": "電子郵箱,姓名或者matrix ID", + "Email": "電子郵件", + "Email address": "電子郵件地址", + "Email, name or matrix ID": "電子郵件、名稱或者matrix ID", "Emoji": "顏文字", "Enable encryption": "啟用加密", - "Encrypted messages will not be visible on clients that do not yet implement encryption": "不支持加密的客戶端將看不到加密的消息", + "Encrypted messages will not be visible on clients that do not yet implement encryption": "不支援加密的客戶端將看不到加密的訊息", "Encrypted room": "加密聊天室", "%(senderName)s ended the call.": "%(senderName)s 結束了通話。.", "End-to-end encryption information": "端到端加密信息", @@ -159,7 +159,7 @@ "Export E2E room keys": "導出聊天室的端到端加密密鑰", "Failed to ban user": "封禁用戶失敗", "Failed to change password. Is your password correct?": "變更密碼失敗。您的密碼正確嗎?", - "Failed to delete device": "刪除設備失敗", + "Failed to delete device": "刪除裝置失敗", "Failed to forget room %(errCode)s": "無法忘記聊天室 %(errCode)s", "Failed to join room": "無法加入聊天室", "Failed to join the room": "無法加入此聊天室", @@ -179,7 +179,7 @@ "Failed to toggle moderator status": "無法切換管理員權限", "Failed to unban": "解除封禁失敗", "Failed to upload file": "上傳文件失敗", - "Failed to verify email address: make sure you clicked the link in the email": "郵箱驗證失敗: 請確保你已點擊郵件中的鏈接", + "Failed to verify email address: make sure you clicked the link in the email": "電子郵件地址驗證失敗: 請確保你已點擊郵件中的連結", "Failure to create room": "創建聊天室失敗", "Favourite": "我的最愛", "favourite": "收藏", @@ -188,8 +188,8 @@ "Filter room members": "過濾聊天室成員", "Forget room": "忘記聊天室", "Forgot your password?": "忘記密碼?", - "For security, this session has been signed out. Please sign in again.": "出於安全考慮,此會話已被注銷。請重新登錄。.", - "For security, logging out will delete any end-to-end encryption keys from this browser. If you want to be able to decrypt your conversation history from future Riot sessions, please export your room keys for safe-keeping.": "出於安全考慮,用戶注銷時會清除瀏覽器里的端到端加密密鑰。如果你想要下次登錄 Riot 時能解密過去的聊天記錄,請導出你的聊天室密鑰。", + "For security, this session has been signed out. Please sign in again.": "因為安全因素,此工作階段已被登出。請重新登入。", + "For security, logging out will delete any end-to-end encryption keys from this browser. If you want to be able to decrypt your conversation history from future Riot sessions, please export your room keys for safe-keeping.": "因為安全因素,登出將會從此瀏覽器刪除任何端到端加密的金鑰。若您想要在未來的 Riot 工作階段中解密您的對話紀錄,請將您的聊天室金鑰匯出並好好存放。", "Found a bug?": "發現漏洞?", "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s 從 %(fromPowerLevel)s 變為 %(toPowerLevel)s", "Guests can't set avatars. Please register.": "游客不能設置頭像。請注冊。.", @@ -204,49 +204,49 @@ "Historical": "曆史", "Homeserver is": "主服務器是", "Identity Server is": "身份認證服務器是", - "I have verified my email address": "我已經驗證了我的郵箱地址", + "I have verified my email address": "我已經驗證了我的電子郵件地址", "Import E2E room keys": "導入聊天室端對端加密密鑰", "Incorrect verification code": "驗證碼錯誤", "Interface Language": "界面語言", "Invalid alias format": "別名格式錯誤", "Invalid address format": "地址格式錯誤", - "Invalid Email Address": "郵箱地址格式錯誤", + "Invalid Email Address": "無效的電子郵件地址", "Invalid file%(extra)s": "非法文件%(extra)s", "Invite new room members": "邀請新的聊天室成員", "Join Room": "加入聊天室", "joined": "加入了", "%(targetName)s joined the room.": "%(targetName)s 加入了聊天室。.", - "Jump to first unread message.": "跳到第一條未讀消息。", + "Jump to first unread message.": "跳到第一則未讀訊息。", "%(senderName)s kicked %(targetName)s.": "%(senderName)s 把 %(targetName)s 踢出了聊天室。.", "Leave room": "離開聊天室", "Login as guest": "以游客的身份登錄", "New password": "新密碼", "Report it": "報告", - "Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "重設密碼會導致所有設備上的端到端加密密鑰被重置,使得加密的聊天記錄不可讀,除非你事先導出密鑰,修改密碼后再導入。此問題將來會得到改善。.", + "Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "重設密碼目前會把所有裝置上的端到端加密金鑰重設,讓已加密的聊天歷史不可讀,除非您先匯出您的聊天室金鑰並在稍後重新匯入。這會在未來改進。", "restore": "恢復", "Return to app": "返回 App", "Return to login screen": "返回登錄頁面", - "Riot does not have permission to send you notifications - please check your browser settings": "Riot 未被允許向你推送消息 - 請檢查瀏覽器設置", - "Riot was not given permission to send notifications - please try again": "Riot 未被允許推送消息通知 - 請重試", + "Riot does not have permission to send you notifications - please check your browser settings": "Riot 未被允許向你推送通知 ── 請檢查您的瀏覽器設定", + "Riot was not given permission to send notifications - please try again": "Riot 未被允許向你推送通知 ── 請重試", "riot-web version:": "riot-網頁版:", "Room %(roomId)s not visible": "聊天室 %(roomId)s 已隱藏", "Room Colour": "聊天室顏色", "Room name (optional)": "聊天室名稱 (可選)", "Rooms": "聊天室", "Scroll to bottom of page": "滾動到頁面底部", - "Scroll to unread messages": "滾動到未讀消息", + "Scroll to unread messages": "捲動到未讀訊息", "Search": "搜尋", "Search failed": "搜索失敗", "Searches DuckDuckGo for results": "搜索 DuckDuckGo", - "Send a message (unencrypted)": "發送消息 (非加密)", - "Send an encrypted message": "發送加密消息", - "Sender device information": "發送者的設備信息", + "Send a message (unencrypted)": "傳送訊息(未加密)", + "Send an encrypted message": "傳送加密訊息", + "Sender device information": "發送者的裝置信息", "Send Invites": "發送邀請", "Send Reset Email": "發送密碼重設郵件", "sent an image": "發了一張圖片", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s 發了一張圖片。.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s 向 %(targetDisplayName)s 發了加入聊天室的邀請。.", - "sent a video": "發了一個視頻", + "sent a video": "影片已傳送", "Server error": "伺服器錯誤", "Server may be unavailable or overloaded": "服務器可能不可用或者超載", "Server may be unavailable, overloaded, or search timed out :(": "服務器可能不可用、超載,或者搜索超時 :(", @@ -261,7 +261,7 @@ "Show timestamps in 12 hour format (e.g. 2:30pm)": "用12小時制顯示時間戳 (如:下午 2:30)", "Signed Out": "已退出登錄", "Sign in": "登錄", - "Sign out": "注銷", + "Sign out": "登出", "since the point in time of selecting this option": "從選擇此選項起", "since they joined": "從他們加入時起", "since they were invited": "從他們被邀請時起", @@ -272,13 +272,13 @@ "Start Chat": "開始聊天", "Submit": "提交", "Success": "成功", - "The default role for new room members is": "此聊天室新成員的默認角色是", + "The default role for new room members is": "此聊天室新成員的預設角色是", "The main address for this room is": "此聊天室的主要地址是", "This action cannot be performed by a guest user. Please register to be able to do this.": "訪客無法執行此動作。請註冊以執行此動作。", - "This email address is already in use": "此郵箱地址已經被使用", - "This email address was not found": "未找到此郵箱地址", + "This email address is already in use": "此電子郵件地址已經被使用", + "This email address was not found": "未找到此電子郵件地址", "%(actionVerb)s this person?": "%(actionVerb)s 這個用戶?", - "The email address linked to your account must be entered.": "必須輸入和你帳號關聯的郵箱地址。", + "The email address linked to your account must be entered.": "必須輸入和你帳號關聯的電子郵件地址。", "The file '%(fileName)s' exceeds this home server's size limit for uploads": "文件 '%(fileName)s' 超過了此主伺服器的上傳大小限制", "The file '%(fileName)s' failed to upload": "文件 '%(fileName)s' 上傳失敗", "Turn Markdown off": "關閉Markdown 語法", @@ -329,7 +329,7 @@ "Please Register": "請註冊", "Add a topic": "新增標題", "VoIP": "VoIP", - "Default Device": "默認裝置", + "Default Device": "預設裝置", "Microphone": "麥克風", "Camera": "攝影機", "Anyone": "任何人", @@ -341,7 +341,7 @@ "Reason": "原因", "Register": "注冊", "rejected": "拒絕", - "Default server": "默認的伺服器", + "Default server": "預設伺服器", "Custom server": "自定的伺服器", "Home server URL": "自家伺服器網址", "Identity server URL": "識別伺服器網址", @@ -353,12 +353,12 @@ "Error decrypting video": "解密影片出錯", "Add an Integration": "新增整合器", "Ongoing conference call%(supportedText)s.": "%(supportedText)s 正在進行會議通話。", - " (unsupported)": " (不支持)", + " (unsupported)": " (不支援)", "URL Previews": "網址預覽", "Enable URL previews for this room (affects only you)": "啟用此房間的網址預覽(僅影響您)", "Drop file here to upload": "把文件放在這裡上傳", - "Disable URL previews by default for participants in this room": "默認情況下,此房間的參與者禁用網址預覽", - "URL previews are %(globalDisableUrlPreview)s by default for participants in this room.": "默認情況下,這個房間的參與者的網址預覽是%(globalDisableUrlPreview)s。", + "Disable URL previews by default for participants in this room": "預設情況下,此房間的參與者停用網址預覽", + "URL previews are %(globalDisableUrlPreview)s by default for participants in this room.": "預設情況下,這個房間的參與者的網址預覽是%(globalDisableUrlPreview)s。", "Removed or unknown message type": "已刪除或未知的信息類型", "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "您即將被帶到第三方網站,以便您可以驗證您的帳戶以使用%(integrationsUrl)s。你想繼續嗎?", "Close": "關閉", From 0186bfc483a963093d7ca1c5a37b3e470ea0cb0e Mon Sep 17 00:00:00 2001 From: Jan Kudrik Date: Sat, 26 Aug 2017 18:46:42 +0000 Subject: [PATCH 37/86] Translated using Weblate (Czech) Currently translated at 23.8% (232 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/cs/ --- src/i18n/strings/cs.json | 167 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 165 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index d10f006254..c592e14076 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -53,7 +53,7 @@ "Favourite": "V oblíbených", "Mute": "Ztišit", "Continue": "Pokračovat", - "Failed to change password. Is your password correct?": "Nelze změnit heslo. Je Vaše heslo správné?", + "Failed to change password. Is your password correct?": "Nepodařilo se změnit heslo. Je vaše heslo správné?", "Welcome page": "Uvítací stránka", "Operation failed": "Chyba operace", "Please Register": "Prosím zaregistrujte se", @@ -67,5 +67,168 @@ "Friday": "Pátek", "Saturday": "Sobota", "OK": "OK", - "Failed to forget room %(errCode)s": "Nepodařilo se zapomenout místnost %(errCode)s" + "Failed to forget room %(errCode)s": "Nepodařilo se zapomenout místnost %(errCode)s", + "Dismiss": "Zahodit", + "powered by Matrix": "poháněno Matrixem", + "Custom Server Options": "Vlastní serverové volby", + "to favourite": "oblíbíte", + "to demote": "upozadíte", + "Drop here %(toAction)s": "Přetažením sem %(toAction)s", + "Add a widget": "Přidat widget", + "af": "Afrikánština", + "ar-ae": "Arabština (SAE)", + "ar-bh": "Arabština (Bahrajn)", + "ar-dz": "Arabština (Alžírsko)", + "ar-eg": "Arabština (Egypt)", + "ar-iq": "Arabština (Irák)", + "ar-jo": "Arabština (Jordánsko)", + "ar-kw": "Arabština (Kuvajt)", + "ar-lb": "Arabština (Libanon)", + "ar-ly": "Arabština (Libye)", + "ar-ma": "Arabština (Maroko)", + "ar-om": "Arabština (Omán)", + "ar-qa": "Arabština (Katar)", + "ar-sa": "Arabština (Saúdská Arábie)", + "ar-sy": "Arabština (Sýrie)", + "ar-tn": "Arabština (Tunisko)", + "ar-ye": "Arabština (Jemen)", + "be": "Běloruština", + "bg": "Bulharština", + "ca": "Katalánština", + "cs": "Čeština", + "da": "Dánština", + "de-at": "Němčina (Rakousko)", + "de-ch": "Němčina (Švýcarsko)", + "de": "Němčina", + "de-li": "Němčina (Lichtenštejnsko)", + "de-lu": "Němčina (Lucembursko)", + "el": "Řečtina", + "en-au": "Angličtina (Austrálie)", + "en-bz": "Angličtina (Belize)", + "en-ca": "Angličtina (Kanada)", + "en": "Angličtina", + "en-gb": "Angličtina (Spojené království)", + "en-ie": "Angličtina (Irsko)", + "en-jm": "Angličtina (Jamajka)", + "en-nz": "Angličtina (Nový Zéland)", + "en-tt": "Angličtina (Trinidad)", + "en-us": "Angličtina (Spojené státy)", + "en-za": "Angličtina (Jihoafrická republika)", + "es-ar": "Španělština (Argentina)", + "es-bo": "Španělština (Bolívie)", + "es-cl": "Španělština (Chile)", + "es-co": "Španělština (Kolumbie)", + "es-cr": "Španělština (Kostarika)", + "es-do": "Španělština (Dominikánská republika)", + "es-ec": "Španělština (Ekvádor)", + "es-gt": "Španělština (Guatemala)", + "es-hn": "Španělština (Honduras)", + "es-mx": "Španělština (Mexiko)", + "es-ni": "Španělština (Nikaragua)", + "es-pa": "Španělština (Panama)", + "es-pe": "Španělština (Peru)", + "es-pr": "Španělština (Portoriko)", + "es-py": "Španělština (Paraguay)", + "es": "Španělština (Španělsko)", + "es-sv": "Španělština (Salvador)", + "es-uy": "Španělština (Uruguay)", + "es-ve": "Španělština (Venezuela)", + "et": "Estonština", + "eu": "Baskičtina (Baskicko)", + "fa": "Perština", + "fi": "Finština", + "fo": "Faerština", + "fr-be": "Francouzština (Belgie)", + "fr-ca": "Francouzština (Kanada)", + "fr-ch": "Francouzština (Švýcarsko)", + "fr": "Francouzština", + "fr-lu": "Francouzština (Lucembursko)", + "ga": "Irština", + "gd": "Gaelština (Skotsko)", + "he": "Hebrejština", + "hi": "Hindština", + "hr": "Chorvatština", + "hu": "Maďarština", + "id": "Indonéština", + "is": "Islandština", + "it-ch": "Italština (Švýcarsko)", + "it": "Italština", + "ja": "Japonština", + "ji": "Jidiš", + "ko": "Korejština", + "lt": "Litevština", + "lv": "Lotyština", + "mk": "Makedonština (Makedonie)", + "ms": "Malajština", + "mt": "Maltština", + "nl-be": "Nizozemština (Belgie)", + "nl": "Nizozemština", + "no": "Norština", + "pl": "Polština", + "pt-br": "Brazilská portugalština", + "pt": "Portugalština", + "rm": "Rétorománština", + "ro-mo": "Rumunština (Moldavsko)", + "ro": "Rumunština", + "ru-mo": "Ruština (Moldavsko)", + "ru": "Ruština", + "sb": "Lužická srbština", + "sk": "Slovenština", + "sl": "Slovinština", + "sq": "Albánština", + "sr": "Srbština", + "sv-fi": "Švédština (Finsko)", + "sv": "Švédština", + "sz": "Sámština (Laponsko)", + "th": "Thajština", + "tr": "Turečtina", + "uk": "Ukrajinština", + "ur": "Urdština", + "vi": "Vietnamština", + "zh-cn": "Čínština (ČLR)", + "zh-hk": "Čínština (Hongkong)", + "xh": "Xhoština", + "ve": "Luvendština", + "ts": "Tsonga", + "tn": "Setswanština", + "zh-sg": "Čínština (Singapur)", + "zh-tw": "Čínština (Tchaj-wan)", + "zu": "Zuluština", + "a room": "místnost", + "Accept": "Přijmout", + "%(targetName)s accepted an invitation.": "%(targetName)s přijal/a pozvání.", + "Account": "Účet", + "Access Token:": "Přístupový žeton:", + "Add": "Přidat", + "Add a topic": "Přidat téma", + "Add email address": "Přidat e-mailovou adresu", + "Add phone number": "Přidat telefonní číslo", + "Admin": "Správce", + "Admin tools": "Nástroje pro správu", + "Allow": "Povolit", + "VoIP": "VoIP", + "No Microphones detected": "Nerozpoznány žádné mikrofony", + "No Webcams detected": "Nerozpoznány žádné webkamery", + "Default Device": "Výchozí zařízení", + "Microphone": "Mikrofon", + "Camera": "Kamera", + "Advanced": "Pokročilé", + "Algorithm": "Algoritmus", + "Hide removed messages": "Skrýt odstraněné zprávy", + "Always show message timestamps": "Vždy zobrazovat časové značky zpráv", + "Authentication": "Ověření", + "all room members": "všichni členové místnosti", + "and": "a", + "A new password must be entered.": "Musíte zadat nové heslo.", + "anyone": "kdokoliv", + "An error has occurred.": "Nastala chyba.", + "Anyone": "Kdokoliv", + "Are you sure?": "Určitě?", + "Are you sure you want to leave the room '%(roomName)s'?": "Určitě chcete odejít z místnosti '%(roomName)s'?", + "Are you sure you want to reject the invitation?": "Určitě chcete odmítnout pozvání?", + "Are you sure you want to upload the following files?": "Určitě chcete nahrát následující soubory?", + "Attachment": "Příloha", + "Autoplay GIFs and videos": "Automaticky přehrávat GIFy a videa", + "Bug Report": "Hlášení o chybě", + "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Nelze se připojit k domovskému serveru – zkontrolujte prosím své připojení, prověřte, zdali je SSL certifikát vašeho domovského serveru důvěryhodný, a že některé z rozšíření prohlížeče neblokuje komunikaci." } From 197c449badbe1686db7751b074a8e320353fa72e Mon Sep 17 00:00:00 2001 From: Kaj Printz Date: Wed, 23 Aug 2017 20:45:58 +0000 Subject: [PATCH 38/86] Translated using Weblate (Danish) Currently translated at 23.6% (230 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/da/ --- src/i18n/strings/da.json | 69 ++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json index 8ac311d315..dec3219da9 100644 --- a/src/i18n/strings/da.json +++ b/src/i18n/strings/da.json @@ -144,10 +144,10 @@ "ar-sy": "Arabisk (Syrien)", "be": "Hviderussisk", "bg": "Bulgarisk", - "ca": "Katalansk", + "ca": "Catalansk", "cs": "Tjekkisk", "de-at": "Tysk (Østrig)", - "de-ch": "Tysk (Schweitz)", + "de-ch": "Tysk (Schweiz)", "el": "Græsk", "en-au": "Engelsk (Australien)", "en-ca": "Engelsk (Canada)", @@ -166,42 +166,42 @@ "es": "Spansk (Spanien)", "es-uy": "Spansk (Uruguay)", "es-ve": "Spansk (Venezuela)", - "et": "Estonsk", + "et": "Estisk", "fa": "Farsi", "fi": "Finsk", "fr-be": "Fransk (Belgien)", "fr-ca": "Fransk (Canada)", - "fr-ch": "Fransk (Schweitz)", - "fr": "French", + "fr-ch": "Fransk (Schweiz)", + "fr": "Fransk", "ga": "Irsk", - "he": "Hebræisk", + "he": "Hebraisk", "hi": "Hindi", "hr": "Kroatisk", "hu": "Ungarsk", "id": "Indonesisk", "is": "Islandsk", - "it": "Italian", + "it": "Italiensk", "ja": "Japansk", - "ji": "Yiddish", - "lt": "Littauisk", + "ji": "Jiddisch", + "lt": "Litauisk", "lv": "Lettisk", "ms": "Malaysisk", "mt": "Maltesisk", - "nl": "Dutch", + "nl": "Hollandsk", "no": "Norsk", "pl": "Polsk", - "pt": "Portuguese", + "pt": "Portugisisk", "ro": "Rumænsk", "sb": "Sorbisk", "sk": "Slovakisk", "sl": "Slovensk", "sq": "Albansk", - "sr": "Serbisk (Latin)", + "sr": "Serbisk", "sv": "Svensk", "th": "Thai", "tn": "Tswana", "tr": "Tyrkisk", - "ts": "Tonga", + "ts": "Tsonga", "uk": "Ukrainsk", "ur": "Urdu", "ve": "Venda", @@ -210,5 +210,46 @@ "zh-cn": "Kinesisk (Folkerepublikken Kina)", "zh-sg": "Kinesisk (Singapore)", "zh-tw": "Kinesisk (Taiwan)", - "zu": "Zulu" + "zu": "Zulu", + "Add a widget": "Tilføj en widget", + "ar-ae": "Arabisk (U.A.E.)", + "ar-bh": "Arabisk (Bahrain)", + "ar-dz": "Arabisk (Algeriet)", + "ar-iq": "Arabisk (Irak)", + "ar-jo": "Arabisk (Jordan)", + "ar-kw": "Arabisk (Kuwait)", + "ar-lb": "Arabisk (Libanon)", + "ar-ly": "Arabisk (Libyen)", + "ar-om": "Arabisk (Oman)", + "ar-qa": "Arabisk (Qatar)", + "ar-ye": "Arabisk (Jemen)", + "ar-tn": "Arabisk (Tunesien)", + "de-li": "Tysk (Liechtenstein)", + "de-lu": "Tysk (Luxembourg)", + "en-bz": "Engelsk (Belize)", + "en-gb": "Engelsk (United Kingdom)", + "en-jm": "Engelsk (Jamaica)", + "en-tt": "Engelsk (Trinidad)", + "es-co": "Spansk (Colombia)", + "es-cr": "Spansk (Costa Rica)", + "es-do": "Spansk (Dominikanske Republik)", + "es-gt": "Spansk (Guatemala)", + "es-pa": "Spansk (Panama)", + "es-pe": "Spansk (Peru)", + "es-pr": "Spansk (Puerto Rico)", + "es-sv": "Spansk (El Salvador)", + "eu": "Baskisk (Baskien)", + "fo": "Færøsk", + "fr-lu": "Fransk (Luxembourg)", + "gd": "Gælisk (Skotland)", + "it-ch": "Italiensk (Schweiz)", + "ko": "Koreansk", + "mk": "Makedonsk (FYROM)", + "nl-be": "Nederlandsk (Belgien)", + "rm": "Rætoromansk", + "ro-mo": "Rumænsk (Republikken Moldova)", + "ru-mo": "Russisk (Republikken Moldova)", + "sv-fi": "Svensk (Finland)", + "sx": "Sutu", + "sz": "Samisk (Lappisk)" } From ea929aac84f0826a827af48997493bfb0c6a17de Mon Sep 17 00:00:00 2001 From: Eric Newport Date: Wed, 23 Aug 2017 23:18:28 +0000 Subject: [PATCH 39/86] Translated using Weblate (English) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/en_EN/ --- src/i18n/strings/en_EN.json | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index c1ba1d0c74..7cde0bb9d1 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -158,10 +158,8 @@ "%(items)s and %(remaining)s others": "%(items)s and %(remaining)s others", "%(items)s and one other": "%(items)s and one other", "%(items)s and %(lastItem)s": "%(items)s and %(lastItem)s", - "and %(count)s others...": { - "other": "and %(count)s others...", - "one": "and one other..." - }, + "and %(count)s others....other": "and %(count)s others...", + "and %(count)s others....one": "and one other...", "%(names)s and %(lastPerson)s are typing": "%(names)s and %(lastPerson)s are typing", "%(names)s and one other are typing": "%(names)s and one other are typing", "%(names)s and %(count)s others are typing": "%(names)s and %(count)s others are typing", @@ -224,10 +222,8 @@ "Confirm your new password": "Confirm your new password", "Continue": "Continue", "Could not connect to the integration server": "Could not connect to the integration server", - "%(count)s new messages": { - "one": "%(count)s new message", - "other": "%(count)s new messages" - }, + "%(count)s new messages.one": "%(count)s new message", + "%(count)s new messages.other": "%(count)s new messages", "Create a new chat or reuse an existing one": "Create a new chat or reuse an existing one", "Create an account": "Create an account", "Create Room": "Create Room", @@ -627,11 +623,9 @@ "Unrecognised command:": "Unrecognised command:", "Unrecognised room alias:": "Unrecognised room alias:", "Unverified": "Unverified", - "Uploading %(filename)s and %(count)s others": { - "zero": "Uploading %(filename)s", - "one": "Uploading %(filename)s and %(count)s other", - "other": "Uploading %(filename)s and %(count)s others" - }, + "Uploading %(filename)s and %(count)s others.zero": "Uploading %(filename)s", + "Uploading %(filename)s and %(count)s others.one": "Uploading %(filename)s and %(count)s other", + "Uploading %(filename)s and %(count)s others.other": "Uploading %(filename)s and %(count)s others", "uploaded a file": "uploaded a file", "Upload avatar": "Upload avatar", "Upload Failed": "Upload Failed", @@ -749,10 +743,8 @@ "Sent messages will be stored until your connection has returned.": "Sent messages will be stored until your connection has returned.", "Auto-complete": "Auto-complete", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Resend all or cancel all now. You can also select individual messages to resend or cancel.", - "(~%(count)s results)": { - "one": "(~%(count)s result)", - "other": "(~%(count)s results)" - }, + "(~%(count)s results).one": "(~%(count)s result)", + "(~%(count)s results).other": "(~%(count)s results)", "Cancel": "Cancel", "or": "or", "Active call": "Active call", @@ -966,7 +958,7 @@ "You are a member of these groups:": "You are a member of these groups:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.", "Join an existing group": "Join an existing group", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.", "Featured Rooms:": "Featured Rooms:", "Error whilst fetching joined groups": "Error whilst fetching joined groups", "Featured Users:": "Featured Users:", From 3549c660be2f63c78fc875172c5f686ed36696cd Mon Sep 17 00:00:00 2001 From: kaiyou Date: Fri, 1 Sep 2017 17:42:18 +0000 Subject: [PATCH 40/86] Translated using Weblate (French) Currently translated at 99.4% (966 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 57b4c302ea..8c2f61fa93 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -337,7 +337,7 @@ "Login as guest": "S'identifier en tant que visiteur", "Logout": "Se déconnecter", "Low priority": "Priorité basse", - "%(senderName)s made future room history visible to": "%(senderName)s a rendu l'historique visible de", + "%(senderName)s made future room history visible to": "%(senderName)s a rendu l'historique visible à", "Manage Integrations": "Gestion des intégrations", "Markdown is disabled": "Le formatage \"Markdown\" est désactivé", "Markdown is enabled": "Le formatage “Markdown” est activé", From 05c4b042adfcd8a181aebb2f07fd6450b32c0cd2 Mon Sep 17 00:00:00 2001 From: Bamstam Date: Mon, 4 Sep 2017 07:30:02 +0000 Subject: [PATCH 41/86] Translated using Weblate (German) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 877bad9bfe..11c7ac9dd5 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -757,7 +757,7 @@ "ex. @bob:example.com": "z. B. @bob:example.com", "Add User": "Benutzer hinzufügen", "Sign in with CAS": "Mit CAS anmelden", - "Custom Server Options": "Erweiterte Server-Optionen", + "Custom Server Options": "Benutzerdefinierte Server-Optionen", "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Du kannst die erweiterten Server-Optionen nutzen, um dich an anderen Matrix-Servern anzumelden, indem du eine andere Heimserver-URL angibst.", "This allows you to use this app with an existing Matrix account on a different home server.": "Dies erlaubt es dir, diese App mit einem existierenden Matrix-Benutzerkonto auf einem anderen Heimserver zu verwenden.", "Dismiss": "Ablehnen", From 1996c02adb015d9cb4e935f0171f9b37b28cd0dd Mon Sep 17 00:00:00 2001 From: Lauris Mierkalns Date: Fri, 25 Aug 2017 20:56:35 +0000 Subject: [PATCH 42/86] Translated using Weblate (Latvian) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/lv/ --- src/i18n/strings/lv.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 3270975938..c222b69a79 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -91,7 +91,7 @@ "pl": "Poļu", "pt-br": "Brazīlijas portugāļu", "pt": "Portugāļu", - "rm": "Rhaeto-Rumāņu", + "rm": "Retoromāņu", "ro-mo": "Rumāņu (Moldovas Republika)", "ro": "Rumāņu", "ru-mo": "Krievu (Moldovas Republika)", @@ -972,5 +972,5 @@ "%(widgetName)s widget added by %(senderName)s": "%(senderName)s pievienoja %(widgetName)s vidžetu", "%(widgetName)s widget removed by %(senderName)s": "%(senderName)s dzēsa vidžetu %(widgetName)s", "Robot check is currently unavailable on desktop - please use a web browser": "Robotu pārbaude šobrīd nav pieejama darbvirsmas versijā. Lūdzu izmanto web pārlūku", - "Revoke widget access": "Atsaukt piekļuvi vidžetam" + "Revoke widget access": "Atsaukt vidžeta piekļuvi" } From a294a2c54520aea67330b0a8d82440983f25d2e9 Mon Sep 17 00:00:00 2001 From: anmcp Date: Sat, 26 Aug 2017 14:00:05 +0000 Subject: [PATCH 43/86] Translated using Weblate (Portuguese) Currently translated at 91.8% (892 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/pt/ --- src/i18n/strings/pt.json | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 827efeb16a..fae9e3a12a 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -556,10 +556,8 @@ "%(items)s and %(remaining)s others": "%(items)s e %(remaining)s outros", "%(items)s and one other": "%(items)s e um outro", "%(items)s and %(lastItem)s": "%(items)s e %(lastItem)s", - "and %(count)s others...": { - "other": "e %(count)s outros...", - "one": "e um outro..." - }, + "and %(count)s others....other": "e %(count)s outros...", + "and %(count)s others....one": "e um outro...", "Are you sure?": "Você tem certeza?", "Attachment": "Anexo", "Autoplay GIFs and videos": "Reproduzir automaticamente GIFs e videos", @@ -882,7 +880,7 @@ "Uploading %(filename)s and %(count)s others.one": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", "Hide removed messages": "Ocultar mensagens removidas", "You may wish to login with a different account, or add this email to this account.": "Você pode querer fazer login com uma conta diferente, ou adicionar este e-mail a esta conta.", - "Welcome page": "Página de boas vindas", + "Welcome page": "Página de boas-vindas", "Upload new:": "Enviar novo:", "Private Chat": "Conversa privada", "You must register to use this functionality": "Você deve se registrar para poder usar esta funcionalidade", @@ -907,7 +905,7 @@ "Failed to upload profile picture!": "Falha ao enviar a imagem de perfil!", "This invitation was sent to an email address which is not associated with this account:": "Este convite foi enviado para um endereço de e-mail que não é associado a esta conta:", "Show Text Formatting Toolbar": "Exibir barra de formatação de texto", - "Room directory": "Lista pública de salas", + "Room directory": "Lista de salas", "Failed to fetch avatar URL": "Falha ao obter a URL da imagem de perfil", "Incoming call from %(name)s": "Chamada de %(name)s recebida", "Last seen": "Último uso", @@ -956,7 +954,7 @@ "Home": "Início", "Something went wrong!": "Algo deu errado!", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (nível de permissão %(powerLevelNumber)s)", - "Start chat": "Iniciar conversa pessoal", + "Start chat": "Iniciar conversa", "You already have existing direct chats with this user:": "Você já tem conversas pessoais com esta pessoa:", "Accept": "Aceitar", "%(roomName)s is not accessible at this time.": "%(roomName)s não está acessível neste momento." From e215e7a4030b44c4f2a9f6847e4c3185ee2d7546 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 25 Aug 2017 06:50:54 +0000 Subject: [PATCH 44/86] Translated using Weblate (Russian) Currently translated at 100.0% (971 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ru/ --- src/i18n/strings/ru.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 0d605bed5b..f4444e01f6 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -736,7 +736,7 @@ "This room is not accessible by remote Matrix servers": "Это комната недоступна с удаленных серверов Matrix", "To ban users": "Для блокировки пользователей", "to browse the directory": "для просмотра каталога", - "To configure the room": "для настройки комнаты", + "To configure the room": "Для настройки комнаты", "To invite users into the room": "Чтобы приглашать пользователей в комнату", "to join the discussion": "присоединиться к дискуссии", "To kick users": "Чтобы удалять пользователей", @@ -957,7 +957,7 @@ "Do you want to set an email address?": "Хотите указать адрес электронной почты?", "This will allow you to reset your password and receive notifications.": "Это позволит при необходимости сбросить пароль и получать уведомления.", "Press to start a chat with someone": "Нажмите для начала чата с кем-либо", - "You're not in any rooms yet! Press to make a room or to browse the directory": "Вы ещё не находитесь ни в одной комнате! Нажмите , чтобы создать комнату или для просмотра каталога", + "You're not in any rooms yet! Press to make a room or to browse the directory": "Вы еще не вошли ни в одну из комнат! Нажмите , чтобы создать комнату или для просмотра каталога", "To return to your account in future you need to set a password": "Чтобы вернуться к учетной записи в будущем, необходимо задать пароль", "Skip": "Пропустить", "Start verification": "Начать проверку", From abbff254544b27a500f0cd1cc922b12c5ba2f653 Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 24 Aug 2017 21:41:33 +0000 Subject: [PATCH 45/86] Translated using Weblate (Spanish) Currently translated at 80.8% (785 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/es/ --- src/i18n/strings/es.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index fca74df9f9..5b2b87c5a4 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -790,5 +790,6 @@ "Apr": "Abr", "May": "May", "Jun": "Jun", - "Jul": "Jul" + "Jul": "Jul", + "Aug": "August" } From 5d194107237aed3bed1ee70f9e4e702962a01077 Mon Sep 17 00:00:00 2001 From: tompatulpan Date: Fri, 25 Aug 2017 06:20:24 +0000 Subject: [PATCH 46/86] Translated using Weblate (Swedish) Currently translated at 56.4% (548 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sv/ --- src/i18n/strings/sv.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 565a470e4e..aa57720502 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -539,5 +539,17 @@ "Thursday": "torsdag", "Friday": "fredag", "Saturday": "lördag", - "Welcome page": "Välkomstsida" + "Welcome page": "Välkomstsida", + "Add a widget": "Lägg till en widget", + "Allow": "Tillåt", + "Cannot add any more widgets": "Det går inte att lägga till fler widgets", + "Changes colour scheme of current room": "Ändrar färgschema för nuvarande rum", + "Delete widget": "Ta bort widget", + "Define the power level of a user": "Definiera anseende för en användare", + "Do you want to load widget from URL:": "Vill du ladda widgeten från URL:", + "Edit": "Redigera", + "Enable automatic language detection for syntax highlighting": "Aktivera automatisk språkdetektering för syntaxmarkering", + "Hide Apps": "Dölj Appar", + "Hide avatar and display name changes": "Dölj avatar och visningsnamns ändringar", + "Integrations Error": "Integrationsfel" } From 102a4dfac054b7c39287044197ec00ece743f4d2 Mon Sep 17 00:00:00 2001 From: sahajkoka Date: Thu, 24 Aug 2017 09:20:06 +0000 Subject: [PATCH 47/86] Translated using Weblate (Telugu) Currently translated at 34.6% (336 of 971 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/te/ --- src/i18n/strings/te.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index 0f1d5b9a6d..f3c65d808f 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -305,7 +305,7 @@ "strike": "సమ్మె", "underline": "అండర్లైన్", "Enter Code": "కోడ్ వ్రాయండి", - "Failed to forget room %(errCode)s": "గది %(errCode)s మర్చిపోవడంలో విఫలమైంది", + "Failed to forget room %(errCode)s": "గది మర్చిపోవడం విఫలమైంది %(errCode)s", "Incorrect verification code": "ధృవీకరణ కోడ్ సరిగా లెదు", "unknown error code": "తెలియని కోడ్ లోపం", "code": "కోడ్", @@ -331,7 +331,7 @@ "Failed to join the room": "గదిలో చేరడం విఫలమైంది", "Favourite": "గుర్తుంచు", "Mute": "నిశబ్ధము", - "Notifications": "తాఖీదు", + "Notifications": "ప్రకటనలు", "Operation failed": "కార్యం విఫలమైంది", "Search": "శోధన", "Settings": "అమరికలు", From ce57464dd1c4c37f7eb327e6890c36163f72816e Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 25 Aug 2017 06:50:54 +0000 Subject: [PATCH 48/86] Translated using Weblate (Russian) Currently translated at 100.0% (972 of 972 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ru/ --- src/i18n/strings/ru.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 8f537d3abb..3ff15f4f5c 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -1024,5 +1024,6 @@ "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s виджет, добавленный %(senderName)s", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s виджет, удаленный %(senderName)s", "Robot check is currently unavailable on desktop - please use a web browser": "Проверка робота в настоящее время недоступна на компьютере - пожалуйста, используйте браузер", - "Publish this room to the public in %(domain)s's room directory?": "Опубликовать эту комнату для пользователей в %(domain)s каталоге комнат?" + "Publish this room to the public in %(domain)s's room directory?": "Опубликовать эту комнату для пользователей в %(domain)s каталоге комнат?", + "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s виджет, измененный %(senderName)s" } From b66b6b6d9470f91bef2eb984afdd4769c3c27c80 Mon Sep 17 00:00:00 2001 From: Osoitz Date: Mon, 4 Sep 2017 10:59:38 +0000 Subject: [PATCH 49/86] Translated using Weblate (Basque) Currently translated at 100.0% (972 of 972 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eu/ --- src/i18n/strings/eu.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index d14054ad98..f0821f57df 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -972,5 +972,6 @@ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s trepeta kendu du %(senderName)s erabiltzaileak", "Verifies a user, device, and pubkey tuple": "Erabiltzaile, gailu eta gako publiko multzoa egiaztatzen du", "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Dagoen talde batetara elkartzeko taldearen identifikatzailea ezagutu behar duzu, honen antza du: +adibidea:matrix.org.", - "Robot check is currently unavailable on desktop - please use a web browser": "Robot egiaztaketa orain ez dago eskuragarri mahaigainean - erabili web nabigatzailea" + "Robot check is currently unavailable on desktop - please use a web browser": "Robot egiaztaketa orain ez dago eskuragarri mahaigainean - erabili web nabigatzailea", + "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s trepeta aldatu du %(senderName)s erabiltzaileak" } From c902652f6cf3535c4048545c88a17d85820d196f Mon Sep 17 00:00:00 2001 From: Eric Newport Date: Wed, 23 Aug 2017 23:18:28 +0000 Subject: [PATCH 50/86] Translated using Weblate (English) Currently translated at 100.0% (972 of 972 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/en_EN/ --- src/i18n/strings/en_EN.json | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 9be04ccab8..2ef0fba86d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -158,8 +158,10 @@ "%(items)s and %(remaining)s others": "%(items)s and %(remaining)s others", "%(items)s and one other": "%(items)s and one other", "%(items)s and %(lastItem)s": "%(items)s and %(lastItem)s", - "and %(count)s others....other": "and %(count)s others...", - "and %(count)s others....one": "and one other...", + "and %(count)s others...": { + "other": "and %(count)s others...", + "one": "and one other..." + }, "%(names)s and %(lastPerson)s are typing": "%(names)s and %(lastPerson)s are typing", "%(names)s and one other are typing": "%(names)s and one other are typing", "%(names)s and %(count)s others are typing": "%(names)s and %(count)s others are typing", @@ -222,8 +224,10 @@ "Confirm your new password": "Confirm your new password", "Continue": "Continue", "Could not connect to the integration server": "Could not connect to the integration server", - "%(count)s new messages.one": "%(count)s new message", - "%(count)s new messages.other": "%(count)s new messages", + "%(count)s new messages": { + "one": "%(count)s new message", + "other": "%(count)s new messages" + }, "Create a new chat or reuse an existing one": "Create a new chat or reuse an existing one", "Create an account": "Create an account", "Create Room": "Create Room", @@ -623,9 +627,11 @@ "Unrecognised command:": "Unrecognised command:", "Unrecognised room alias:": "Unrecognised room alias:", "Unverified": "Unverified", - "Uploading %(filename)s and %(count)s others.zero": "Uploading %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "Uploading %(filename)s and %(count)s other", - "Uploading %(filename)s and %(count)s others.other": "Uploading %(filename)s and %(count)s others", + "Uploading %(filename)s and %(count)s others": { + "zero": "Uploading %(filename)s", + "one": "Uploading %(filename)s and %(count)s other", + "other": "Uploading %(filename)s and %(count)s others" + }, "uploaded a file": "uploaded a file", "Upload avatar": "Upload avatar", "Upload Failed": "Upload Failed", @@ -743,8 +749,10 @@ "Sent messages will be stored until your connection has returned.": "Sent messages will be stored until your connection has returned.", "Auto-complete": "Auto-complete", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Resend all or cancel all now. You can also select individual messages to resend or cancel.", - "(~%(count)s results).one": "(~%(count)s result)", - "(~%(count)s results).other": "(~%(count)s results)", + "(~%(count)s results)": { + "one": "(~%(count)s result)", + "other": "(~%(count)s results)" + }, "Cancel": "Cancel", "or": "or", "Active call": "Active call", @@ -958,7 +966,7 @@ "You are a member of these groups:": "You are a member of these groups:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.", "Join an existing group": "Join an existing group", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.", + "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.", "Featured Rooms:": "Featured Rooms:", "Error whilst fetching joined groups": "Error whilst fetching joined groups", "Featured Users:": "Featured Users:", From 79ee41351c106b6504236020b193915775dd27d9 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 4 Sep 2017 15:45:28 +0100 Subject: [PATCH 51/86] Fix typo --- src/components/structures/MyGroups.js | 2 +- src/i18n/strings/basefile.json | 2 +- src/i18n/strings/be.json | 2 +- src/i18n/strings/de_DE.json | 2 +- src/i18n/strings/en_EN.json | 2 +- src/i18n/strings/en_US.json | 2 +- src/i18n/strings/eu.json | 2 +- src/i18n/strings/fi.json | 2 +- src/i18n/strings/fr.json | 2 +- src/i18n/strings/hu.json | 2 +- src/i18n/strings/lv.json | 2 +- src/i18n/strings/nl.json | 2 +- src/i18n/strings/ru.json | 2 +- src/i18n/strings/zh_Hant.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/structures/MyGroups.js b/src/components/structures/MyGroups.js index 0b8055beda..624f3c67dd 100644 --- a/src/components/structures/MyGroups.js +++ b/src/components/structures/MyGroups.js @@ -125,7 +125,7 @@ export default withMatrixClient(React.createClass({ {_tJsx( - 'To join an exisitng group you\'ll have to '+ + 'To join an existing group you\'ll have to '+ 'know its group identifier; this will look '+ 'something like +example:matrix.org.', /(.*)<\/i>/, diff --git a/src/i18n/strings/basefile.json b/src/i18n/strings/basefile.json index 9e26dfeeb6..0967ef424b 100644 --- a/src/i18n/strings/basefile.json +++ b/src/i18n/strings/basefile.json @@ -1 +1 @@ -{} \ No newline at end of file +{} diff --git a/src/i18n/strings/be.json b/src/i18n/strings/be.json index 9e26dfeeb6..0967ef424b 100644 --- a/src/i18n/strings/be.json +++ b/src/i18n/strings/be.json @@ -1 +1 @@ -{} \ No newline at end of file +{} diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 24786418a8..d4e61ca310 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1022,7 +1022,7 @@ "You are a member of these groups:": "Du bist Mitglied in folgenden Gruppen:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Erstelle eine Gruppe um deine Community darzustellen! Definiere eine Menge von Räumen und deine eigene angepasste Startseite um deinen Bereich im Matrix-Universum zu markieren.", "Join an existing group": "Trete eine existierenden Gruppe bei", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Um einer bereits vorhandenen Gruppe beitreten zu können, muss dir die Gruppen-Kennung bekannt sein. Diese sieht ungefähr so aus: '+example:matrix.org'.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Um einer bereits vorhandenen Gruppe beitreten zu können, muss dir die Gruppen-Kennung bekannt sein. Diese sieht ungefähr so aus: '+example:matrix.org'.", "Featured Rooms:": "Hervorgehobene Räume:", "Error whilst fetching joined groups": "Fehler beim Laden beigetretener Gruppen", "Featured Users:": "Hervorgehobene Nutzer:", diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 2ef0fba86d..2340def67c 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -966,7 +966,7 @@ "You are a member of these groups:": "You are a member of these groups:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.", "Join an existing group": "Join an existing group", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.", "Featured Rooms:": "Featured Rooms:", "Error whilst fetching joined groups": "Error whilst fetching joined groups", "Featured Users:": "Featured Users:", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index ae9c075683..d75c3d7408 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -985,5 +985,5 @@ "Robot check is currently unavailable on desktop - please use a web browser": "Robot check is currently unavailable on desktop - please use a web browser", "Verifies a user, device, and pubkey tuple": "Verifies a user, device, and pubkey tuple", "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org." + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org." } diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index f0821f57df..1c80c9e338 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -971,7 +971,7 @@ "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s trepeta gehitu du %(senderName)s erabiltzaileak", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s trepeta kendu du %(senderName)s erabiltzaileak", "Verifies a user, device, and pubkey tuple": "Erabiltzaile, gailu eta gako publiko multzoa egiaztatzen du", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Dagoen talde batetara elkartzeko taldearen identifikatzailea ezagutu behar duzu, honen antza du: +adibidea:matrix.org.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Dagoen talde batetara elkartzeko taldearen identifikatzailea ezagutu behar duzu, honen antza du: +adibidea:matrix.org.", "Robot check is currently unavailable on desktop - please use a web browser": "Robot egiaztaketa orain ez dago eskuragarri mahaigainean - erabili web nabigatzailea", "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s trepeta aldatu du %(senderName)s erabiltzaileak" } diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 9e26dfeeb6..0967ef424b 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -1 +1 @@ -{} \ No newline at end of file +{} diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index aeebc64c83..5ce9eaf02c 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -969,7 +969,7 @@ "You are a member of these groups:": "Vous êtes membre des groupes suivants :", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Créez un groupe pour représenter votre communauté ! Définissez un jeu de salons et votre propre page d'accueil pour marquer votre espace dans l'univers Matrix.", "Join an existing group": "Rejoindre un groupe existant", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Pour rejoindre un groupe existant, vous devez connaître l'identifiant de ce groupe ; il ressemblera à +exemple:matrix.org.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Pour rejoindre un groupe existant, vous devez connaître l'identifiant de ce groupe ; il ressemblera à +exemple:matrix.org.", "Featured Rooms:": "Salons mis en avant :", "Error whilst fetching joined groups": "Erreur en récupérant la liste des groupes", "Featured Users:": "Utilisateurs mis en avant :", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index e935f63cff..a51fc01044 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -953,7 +953,7 @@ "You are a member of these groups:": "Ezeknek a csoportoknak vagy a tagja:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Hozz létre csoportot a közösség meghatározásához! Jelölj ki szobákat és saját kezdőoldalt amivel meghatározhatod a territóriumodat a Matrix univerzumában.", "Join an existing group": "Csatlakozz meglévő csoporthoz", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Ahhoz, hogy meglévő csoporthoz csatlakozhass tudnod kell a csoport azonosítóját ami valahogy így nézhet ki: +példa:matrix.org.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Ahhoz, hogy meglévő csoporthoz csatlakozhass tudnod kell a csoport azonosítóját ami valahogy így nézhet ki: +példa:matrix.org.", "Featured Rooms:": "Kiemelt szobák:", "Error whilst fetching joined groups": "Hiba a csatlakozott csoportok betöltésénél", "Featured Users:": "Kiemelt felhasználók:", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index d4b4052941..6deceac02b 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -960,7 +960,7 @@ "You are a member of these groups:": "Tu esi sekojošo grupu biedrs:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Izveido grupu, lai prezentētu savu komūnu! Definē istabu grupu un savu personīgo mājaslapu, lai iezīmētu savu vietu Matrix universumā.", "Join an existing group": "Pievienoties eksistējošai grupai", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Lai pievienotos eksistējošai grupai, Tev ir jāzina šīs grupas identifikators. Piemēram: +latvija:matrix.org.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Lai pievienotos eksistējošai grupai, Tev ir jāzina šīs grupas identifikators. Piemēram: +latvija:matrix.org.", "Featured Rooms:": "Ieteiktās istabas:", "Error whilst fetching joined groups": "Notika kļūda, nosakot pievienotās grupas", "Featured Users:": "Ieteiktie lietotāji:", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 1010b31a87..d72813177b 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -964,7 +964,7 @@ "You are a member of these groups:": "Je bent een deelnemer van deze groepen:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Maak een groep aan om je gemeenschap te representateren! Defineer een set van ruimtes en maak je eigen aangepaste homepagina om je eigen plek in het Matrix universum te creëren.", "Join an existing group": "Treed tot een bestaande groep toe", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Om tot een bestaande groep toe te treden moet je groep identificatie weten; dit zal er ongeveer uit zien als +voorbeeld:matrix.org.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Om tot een bestaande groep toe te treden moet je groep identificatie weten; dit zal er ongeveer uit zien als +voorbeeld:matrix.org.", "Featured Rooms:": "Prominente Ruimtes:", "Error whilst fetching joined groups": "Er is een fout opgetreden tijdens het ophalen van de tot toegretreden groepen", "Featured Users:": "Prominente Gebruikers:", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 3ff15f4f5c..e15fce90c4 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -1012,7 +1012,7 @@ "You are a member of these groups:": "Вы являетесь членом этих групп:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Создайте группу для представления своего сообщества! Определите набор комнат и собственную домашнюю страницу, чтобы выделить свое пространство во вселенной Matrix.", "Join an existing group": "Присоединиться к существующей группе", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Чтобы присоединиться к группе, вам нужно знать ее идентификатор; он выглядит примерно так:+пример:matrix.org.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Чтобы присоединиться к группе, вам нужно знать ее идентификатор; он выглядит примерно так:+пример:matrix.org.", "Featured Rooms:": "Рекомендуемые комнаты:", "Error whilst fetching joined groups": "Ошибка при извлечении объединенных групп", "Featured Users:": "Избранные пользователи:", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 27ec122709..2f3d36b481 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -968,7 +968,7 @@ "You are a member of these groups:": "您是這些群組的成員:", "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "建立一個群組來代表您的社群!定義一組聊天室與您自己的自訂首頁來標記您在 Matrix 世界中的空間。", "Join an existing group": "加入既有的群組", - "To join an exisitng group you'll have to know its group identifier; this will look something like +example:matrix.org.": "要加入既有的群組,您將會需要知道其群組識別符;其看起來會像是 +範例:matrix.org。", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "要加入既有的群組,您將會需要知道其群組識別符;其看起來會像是 +範例:matrix.org。", "Featured Rooms:": "特色聊天室:", "Error whilst fetching joined groups": "在擷取已加入的群組時發生錯誤", "Featured Users:": "特色使用者:", From de2940f469730b7278cf0cf0d72906c56457a811 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 4 Sep 2017 17:09:36 +0100 Subject: [PATCH 52/86] Fix plurals in translations Weblate doesn't understand counterpart's multi-level format for plurals and helpfully mangles them to be dot-separated keys when it saves the translation file. Store the source files with pipe separators and convert to counterpart format at build time. --- src/i18n/strings/de_DE.json | 18 +++++++++--------- src/i18n/strings/el.json | 20 +++++++++----------- src/i18n/strings/en_EN.json | 26 +++++++++----------------- src/i18n/strings/en_US.json | 18 +++++++++--------- src/i18n/strings/es.json | 14 +++++++------- src/i18n/strings/eu.json | 18 +++++++++--------- src/i18n/strings/fr.json | 18 +++++++++--------- src/i18n/strings/hu.json | 18 +++++++++--------- src/i18n/strings/ja.json | 4 ++-- src/i18n/strings/ko.json | 20 +++++++++----------- src/i18n/strings/lv.json | 18 +++++++++--------- src/i18n/strings/nl.json | 18 +++++++++--------- src/i18n/strings/pt.json | 18 +++++++++--------- src/i18n/strings/pt_BR.json | 20 +++++++++----------- src/i18n/strings/ru.json | 18 +++++++++--------- src/i18n/strings/sv.json | 8 ++++---- src/i18n/strings/te.json | 4 ++-- src/i18n/strings/th.json | 20 +++++++++----------- src/i18n/strings/tr.json | 20 +++++++++----------- src/i18n/strings/uk.json | 6 ++---- src/i18n/strings/zh_Hans.json | 8 ++++---- src/i18n/strings/zh_Hant.json | 18 +++++++++--------- 22 files changed, 165 insertions(+), 185 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index d4e61ca310..e4a3d335a3 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -552,8 +552,8 @@ "Failed to forget room %(errCode)s": "Das Entfernen des Raums ist fehlgeschlagen %(errCode)s", "Failed to join the room": "Fehler beim Betreten des Raumes", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Eine Textnachricht wurde an +%(msisdn)s gesendet. Bitte den darin enthaltenen Verifizierungscode eingeben", - "and %(count)s others....other": "und %(count)s weitere...", - "and %(count)s others....one": "und ein(e) weitere(r)...", + "and %(count)s others...|other": "und %(count)s weitere...", + "and %(count)s others...|one": "und ein(e) weitere(r)...", "Are you sure?": "Bist du sicher?", "Attachment": "Anhang", "Ban": "Verbannen", @@ -877,15 +877,15 @@ "Start new chat": "Neuen Chat starten", "Disable markdown formatting": "Markdown-Formatierung deaktivieren", "Add": "Hinzufügen", - "%(count)s new messages.one": "%(count)s neue Nachricht", - "%(count)s new messages.other": "%(count)s neue Nachrichten", + "%(count)s new messages|one": "%(count)s neue Nachricht", + "%(count)s new messages|other": "%(count)s neue Nachrichten", "Error: Problem communicating with the given homeserver.": "Fehler: Problem bei der Kommunikation mit dem angegebenen Home-Server.", "Failed to fetch avatar URL": "Abrufen der Avatar-URL fehlgeschlagen", "The phone number entered looks invalid": "Die eingegebene Telefonnummer scheint ungültig zu sein", "This room is private or inaccessible to guests. You may be able to join if you register.": "Dieser Raum ist privat oder für Gäste nicht betretbar. Du kannst evtl. beitreten wenn du dich registrierst.", - "Uploading %(filename)s and %(count)s others.zero": "%(filename)s wird hochgeladen", - "Uploading %(filename)s and %(count)s others.one": "%(filename)s und %(count)s weitere Dateien werden hochgeladen", - "Uploading %(filename)s and %(count)s others.other": "%(filename)s und %(count)s weitere Dateien werden hochgeladen", + "Uploading %(filename)s and %(count)s others|zero": "%(filename)s wird hochgeladen", + "Uploading %(filename)s and %(count)s others|one": "%(filename)s und %(count)s weitere Dateien werden hochgeladen", + "Uploading %(filename)s and %(count)s others|other": "%(filename)s und %(count)s weitere Dateien werden hochgeladen", "You must register to use this functionality": "Du musst dich registrieren, um diese Funktionalität nutzen zu können", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Alle erneut senden oder alle verwerfen. Du kannst auch einzelne Nachrichten erneut senden oder verwerfen.", "Create new room": "Neuen Raum erstellen", @@ -961,8 +961,8 @@ "You have been kicked from %(roomName)s by %(userName)s.": "Du wurdest von %(userName)s aus dem Raum \"%(roomName)s\" gekickt.", "You may wish to login with a different account, or add this email to this account.": "Du möchtest dich eventuell mit einem anderen Konto anmelden oder alternativ diese E-Mail-Adresse diesem Konto hinzufügen.", "Your home server does not support device management.": "Dein Heimserver unterstützt kein Geräte-Management.", - "(~%(count)s results).one": "(~%(count)s Ergebnis)", - "(~%(count)s results).other": "(~%(count)s Ergebnis)", + "(~%(count)s results)|one": "(~%(count)s Ergebnis)", + "(~%(count)s results)|other": "(~%(count)s Ergebnis)", "Device Name": "Geräte-Name", "(could not connect media)": "(Medienverbindung konnte nicht hergestellt werden)", "(no answer)": "(keine Antwort)", diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index b1b676b505..1211aab6ad 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -175,10 +175,8 @@ "an address": "μία διεύθηνση", "%(items)s and %(remaining)s others": "%(items)s και %(remaining)s ακόμα", "%(items)s and one other": "%(items)s και ένας ακόμα", - "and %(count)s others...": { - "other": "και %(count)s άλλοι...", - "one": "και ένας ακόμα..." - }, + "and %(count)s others...|one": "και ένας ακόμα...", + "and %(count)s others...|other": "και %(count)s άλλοι...", "%(names)s and %(lastPerson)s are typing": "%(names)s και %(lastPerson)s γράφουν", "%(names)s and one other are typing": "%(names)s και ένας ακόμα γράφουν", "%(names)s and %(count)s others are typing": "%(names)s και %(count)s άλλοι γράφουν", @@ -405,8 +403,8 @@ "click to reveal": "κάντε κλικ για εμφάνιση", "Click to unmute video": "Κάντε κλικ για άρση σίγασης του βίντεο", "Click to unmute audio": "Κάντε κλικ για άρση σίγασης του ήχου", - "%(count)s new messages.one": "%(count)s νέο μήνυμα", - "%(count)s new messages.other": "%(count)s νέα μηνύματα", + "%(count)s new messages|one": "%(count)s νέο μήνυμα", + "%(count)s new messages|other": "%(count)s νέα μηνύματα", "Custom": "Προσαρμοσμένο", "Decline": "Απόρριψη", "Disable Notifications": "Απενεργοποίηση ειδοποιήσεων", @@ -569,8 +567,8 @@ "Encrypt room": "Κρυπτογράφηση δωματίου", "Room": "Δωμάτιο", "Auto-complete": "Αυτόματη συμπλήρωση", - "(~%(count)s results).one": "(~%(count)s αποτέλεσμα)", - "(~%(count)s results).other": "(~%(count)s αποτελέσματα)", + "(~%(count)s results)|one": "(~%(count)s αποτέλεσμα)", + "(~%(count)s results)|other": "(~%(count)s αποτελέσματα)", "Active call": "Ενεργή κλήση", "strike": "επιγράμμιση", "bullet": "κουκκίδα", @@ -719,8 +717,8 @@ "to start a chat with someone": "για να ξεκινήσετε μια συνομιλία με κάποιον", "Unable to capture screen": "Αδυναμία σύλληψης οθόνης", "Unknown (user, device) pair:": "Άγνωστο ζεύγος (χρήστη, συσκευής):", - "Uploading %(filename)s and %(count)s others.zero": "Γίνεται αποστολή του %(filename)s", - "Uploading %(filename)s and %(count)s others.other": "Γίνεται αποστολή του %(filename)s και %(count)s υπολοίπων", + "Uploading %(filename)s and %(count)s others|zero": "Γίνεται αποστολή του %(filename)s", + "Uploading %(filename)s and %(count)s others|other": "Γίνεται αποστολή του %(filename)s και %(count)s υπολοίπων", "uploaded a file": "ανέβασε ένα αρχείο", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (δύναμη %(powerLevelNumber)s)", "Verification Pending": "Εκκρεμεί επιβεβαίωση", @@ -820,7 +818,7 @@ "to tag direct chat": "για να οριστεί ετικέτα σε απευθείας συνομιλία", "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "Ο %(senderName)s ενεργοποίησε την από άκρο σε άκρο κρυπτογράφηση (algorithm %(algorithm)s).", "Undecryptable": "Μη αποκρυπτογραφημένο", - "Uploading %(filename)s and %(count)s others.one": "Γίνεται αποστολή του %(filename)s και %(count)s υπολοίπα", + "Uploading %(filename)s and %(count)s others|one": "Γίνεται αποστολή του %(filename)s και %(count)s υπολοίπα", "Would you like to accept or decline this invitation?": "Θα θέλατε να δεχθείτε ή να απορρίψετε την πρόσκληση;", "You already have existing direct chats with this user:": "Έχετε ήδη απευθείας συνομιλίες με τον χρήστη:", "You are trying to access %(roomName)s.": "Προσπαθείτε να έχετε πρόσβαση στο %(roomName)s.", diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 2340def67c..35ca698c03 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -158,10 +158,8 @@ "%(items)s and %(remaining)s others": "%(items)s and %(remaining)s others", "%(items)s and one other": "%(items)s and one other", "%(items)s and %(lastItem)s": "%(items)s and %(lastItem)s", - "and %(count)s others...": { - "other": "and %(count)s others...", - "one": "and one other..." - }, + "and %(count)s others...|other": "and %(count)s others...", + "and %(count)s others...|one": "and one other...", "%(names)s and %(lastPerson)s are typing": "%(names)s and %(lastPerson)s are typing", "%(names)s and one other are typing": "%(names)s and one other are typing", "%(names)s and %(count)s others are typing": "%(names)s and %(count)s others are typing", @@ -224,10 +222,8 @@ "Confirm your new password": "Confirm your new password", "Continue": "Continue", "Could not connect to the integration server": "Could not connect to the integration server", - "%(count)s new messages": { - "one": "%(count)s new message", - "other": "%(count)s new messages" - }, + "%(count)s new messages|one": "%(count)s new message", + "%(count)s new messages|other": "%(count)s new messages", "Create a new chat or reuse an existing one": "Create a new chat or reuse an existing one", "Create an account": "Create an account", "Create Room": "Create Room", @@ -627,11 +623,9 @@ "Unrecognised command:": "Unrecognised command:", "Unrecognised room alias:": "Unrecognised room alias:", "Unverified": "Unverified", - "Uploading %(filename)s and %(count)s others": { - "zero": "Uploading %(filename)s", - "one": "Uploading %(filename)s and %(count)s other", - "other": "Uploading %(filename)s and %(count)s others" - }, + "Uploading %(filename)s and %(count)s others|zero": "Uploading %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Uploading %(filename)s and %(count)s other", + "Uploading %(filename)s and %(count)s others|other": "Uploading %(filename)s and %(count)s others", "uploaded a file": "uploaded a file", "Upload avatar": "Upload avatar", "Upload Failed": "Upload Failed", @@ -749,10 +743,8 @@ "Sent messages will be stored until your connection has returned.": "Sent messages will be stored until your connection has returned.", "Auto-complete": "Auto-complete", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Resend all or cancel all now. You can also select individual messages to resend or cancel.", - "(~%(count)s results)": { - "one": "(~%(count)s result)", - "other": "(~%(count)s results)" - }, + "(~%(count)s results)|one": "(~%(count)s result)", + "(~%(count)s results)|other": "(~%(count)s results)", "Cancel": "Cancel", "or": "or", "Active call": "Active call", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index d75c3d7408..bb6a6e8c9b 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -154,8 +154,8 @@ "%(items)s and %(remaining)s others": "%(items)s and %(remaining)s others", "%(items)s and one other": "%(items)s and one other", "%(items)s and %(lastItem)s": "%(items)s and %(lastItem)s", - "and %(count)s others....other": "and %(count)s others...", - "and %(count)s others....one": "and one other...", + "and %(count)s others...|other": "and %(count)s others...", + "and %(count)s others...|one": "and one other...", "%(names)s and %(lastPerson)s are typing": "%(names)s and %(lastPerson)s are typing", "%(names)s and one other are typing": "%(names)s and one other are typing", "%(names)s and %(count)s others are typing": "%(names)s and %(count)s others are typing", @@ -841,8 +841,8 @@ "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.", "Click here to join the discussion!": "Click here to join the discussion!", "Close": "Close", - "%(count)s new messages.one": "%(count)s new message", - "%(count)s new messages.other": "%(count)s new messages", + "%(count)s new messages|one": "%(count)s new message", + "%(count)s new messages|other": "%(count)s new messages", "Custom": "Custom", "Decline": "Decline", "Disable markdown formatting": "Disable markdown formatting", @@ -893,9 +893,9 @@ "unknown caller": "unknown caller", "Unnamed Room": "Unnamed Room", "Unverified": "Unverified", - "Uploading %(filename)s and %(count)s others.zero": "Uploading %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "Uploading %(filename)s and %(count)s other", - "Uploading %(filename)s and %(count)s others.other": "Uploading %(filename)s and %(count)s others", + "Uploading %(filename)s and %(count)s others|zero": "Uploading %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Uploading %(filename)s and %(count)s other", + "Uploading %(filename)s and %(count)s others|other": "Uploading %(filename)s and %(count)s others", "Upload new:": "Upload new:", "%(user)s is a": "%(user)s is a", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (power %(powerLevelNumber)s)", @@ -909,8 +909,8 @@ "You must register to use this functionality": "You must register to use this functionality", "Your home server does not support device management.": "Your home server does not support device management.", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Resend all or cancel all now. You can also select individual messages to resend or cancel.", - "(~%(count)s results).one": "(~%(count)s result)", - "(~%(count)s results).other": "(~%(count)s results)", + "(~%(count)s results)|one": "(~%(count)s result)", + "(~%(count)s results)|other": "(~%(count)s results)", "New Password": "New Password", "Device Name": "Device Name", "Start chatting": "Start chatting", diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 49f7f76b0b..499da6e819 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -140,8 +140,8 @@ "%(items)s and %(remaining)s others": "%(items)s y %(remaining)s otros", "%(items)s and one other": "%(items)s y otro", "%(items)s and %(lastItem)s": "%(items)s y %(lastItem)s", - "and %(count)s others....other": "y %(count)s otros...", - "and %(count)s others....one": "y otro...", + "and %(count)s others...|other": "y %(count)s otros...", + "and %(count)s others...|one": "y otro...", "%(names)s and %(lastPerson)s are typing": "%(names)s y %(lastPerson)s están escribiendo", "%(names)s and one other are typing": "%(names)s y otro están escribiendo", "%(names)s and %(count)s others are typing": "%(names)s y %(count)s otros están escribiendo", @@ -341,8 +341,8 @@ "Anyone": "Cualquiera", "Click here to join the discussion!": "¡Pulse aquí para unirse a la conversación!", "Close": "Cerrar", - "%(count)s new messages.one": "%(count)s mensaje nuevo", - "%(count)s new messages.other": "%(count)s mensajes nuevos", + "%(count)s new messages|one": "%(count)s mensaje nuevo", + "%(count)s new messages|other": "%(count)s mensajes nuevos", "Create a new chat or reuse an existing one": "Cree una nueva conversación o reutilice una existente", "Custom": "Personalizado", "Custom level": "Nivel personalizado", @@ -688,9 +688,9 @@ "unknown": "desconocido", "Unnamed Room": "Sala sin nombre", "Unverified": "Sin verificar", - "Uploading %(filename)s and %(count)s others.zero": "Subiendo %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "Subiendo %(filename)s y %(count)s otros", - "Uploading %(filename)s and %(count)s others.other": "Subiendo %(filename)s y %(count)s otros", + "Uploading %(filename)s and %(count)s others|zero": "Subiendo %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Subiendo %(filename)s y %(count)s otros", + "Uploading %(filename)s and %(count)s others|other": "Subiendo %(filename)s y %(count)s otros", "Upload avatar": "Subir avatar", "Upload Failed": "Error al subir", "Upload Files": "Subir archivos", diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 1c80c9e338..aa9857c3dd 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -337,8 +337,8 @@ "Confirm password": "Berretsi pasahitza", "Conference calls are not supported in this client": "Bezero honek ez ditu konferentzia deiak onartzen", "Could not connect to the integration server": "Ezin izan da integrazio zerbitzarira konektatu", - "%(count)s new messages.one": "mezu berri %(count)s", - "%(count)s new messages.other": "%(count)s mezu berri", + "%(count)s new messages|one": "mezu berri %(count)s", + "%(count)s new messages|other": "%(count)s mezu berri", "Create a new chat or reuse an existing one": "Sortu txat berria edo berrerabili aurreko bat", "Create an account": "Sortu kontua", "Create Room": "Sortu gela", @@ -647,9 +647,9 @@ "Unrecognised command:": "Agindu ezezaguna:", "Unrecognised room alias:": "Gelaren ezizen ezezaguna:", "Unverified": "Egiaztatu gabea", - "Uploading %(filename)s and %(count)s others.zero": "%(filename)s igotzen", - "Uploading %(filename)s and %(count)s others.one": "%(filename)s eta beste %(count)s igotzen", - "Uploading %(filename)s and %(count)s others.other": "%(filename)s eta beste %(count)s igotzen", + "Uploading %(filename)s and %(count)s others|zero": "%(filename)s igotzen", + "Uploading %(filename)s and %(count)s others|one": "%(filename)s eta beste %(count)s igotzen", + "Uploading %(filename)s and %(count)s others|other": "%(filename)s eta beste %(count)s igotzen", "uploaded a file": "fitxategi bat igo du", "Upload avatar": "Igo abatarra", "Upload Failed": "Igoerak huts egin du", @@ -754,8 +754,8 @@ "Sent messages will be stored until your connection has returned.": "Bidalitako mezuak zure konexioa berreskuratu arte gordeko dira.", "Auto-complete": "Osatze automatikoa", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Birbidali guztiak edo baztertu guztiak orain. Mezuak banaka aukeratu ditzakezu ere birbidali ala baztertzeko.", - "(~%(count)s results).one": "(~%(count)s emaitza)", - "(~%(count)s results).other": "(~%(count)s emaitza)", + "(~%(count)s results)|one": "(~%(count)s emaitza)", + "(~%(count)s results)|other": "(~%(count)s emaitza)", "bold": "lodia", "italic": "etzana", "strike": "marratua", @@ -916,8 +916,8 @@ "Disable Peer-to-Peer for 1:1 calls": "Desgaitu P2P biren arteko deietan", "Add a widget": "Gehitu trepeta bat", "Allow": "Baimendu", - "and %(count)s others....other": "eta beste %(count)s...", - "and %(count)s others....one": "eta beste bat...", + "and %(count)s others...|other": "eta beste %(count)s...", + "and %(count)s others...|one": "eta beste bat...", "Cannot add any more widgets": "Ezin dira trepeta gehiago gehitu", "Changes colour scheme of current room": "Gela honen kolore eskema aldatzen du", "Delete widget": "Ezabatu trepeta", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 5ce9eaf02c..f6da302fad 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -191,8 +191,8 @@ "%(names)s and %(lastPerson)s are typing": "%(names)s et %(lastPerson)s sont en train d'écrire", "%(names)s and one other are typing": "%(names)s et un autre sont en train d'écrire", "%(names)s and %(count)s others are typing": "%(names)s et %(count)s d'autres sont en train d'écrire", - "and %(count)s others....other": "et %(count)s autres...", - "and %(count)s others....one": "et un autre...", + "and %(count)s others...|other": "et %(count)s autres...", + "and %(count)s others...|one": "et un autre...", "An email has been sent to": "Un e-mail a été envoyé à", "A new password must be entered.": "Un nouveau mot de passe doit être entré.", "Anyone who knows the room's link, apart from guests": "Tout ceux qui connaissent le lien du salon, à part les visiteurs", @@ -822,16 +822,16 @@ "You have entered an invalid contact. Try using their Matrix ID or email address.": "Vous avez entré un contact invalide. Essayez d’utiliser leur identifiant Matrix ou leur adresse email.", "Hide removed messages": "Cacher les messages supprimés", "Add": "Ajouter", - "%(count)s new messages.one": "%(count)s nouveau message", - "%(count)s new messages.other": "%(count)s nouveaux messages", + "%(count)s new messages|one": "%(count)s nouveau message", + "%(count)s new messages|other": "%(count)s nouveaux messages", "Disable markdown formatting": "Désactiver le formattage markdown", "Error: Problem communicating with the given homeserver.": "Erreur : problème de communication avec le homeserver.", "Failed to fetch avatar URL": "Échec lors de la récupération de l’URL de l’avatar", "The phone number entered looks invalid": "Le numéro de téléphone entré semble être invalide", "This room is private or inaccessible to guests. You may be able to join if you register.": "Ce salon est privé ou interdits aux visiteurs. Vous pourrez peut-être le joindre si vous vous enregistrez.", - "Uploading %(filename)s and %(count)s others.zero": "Téléchargement de %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "Téléchargement de %(filename)s et %(count)s autre", - "Uploading %(filename)s and %(count)s others.other": "Téléchargement de %(filename)s et %(count)s autres", + "Uploading %(filename)s and %(count)s others|zero": "Téléchargement de %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Téléchargement de %(filename)s et %(count)s autre", + "Uploading %(filename)s and %(count)s others|other": "Téléchargement de %(filename)s et %(count)s autres", "You must register to use this functionality": "Vous devez vous inscrire pour utiliser cette fonctionnalité", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Tout renvoyer ou tout annuler maintenant. Vous pouvez aussi sélectionner des messages individuels à envoyer ou annuler.", "Create new room": "Créer un nouveau salon", @@ -895,8 +895,8 @@ "You have been kicked from %(roomName)s by %(userName)s.": "Vous avez été expulsé de %(roomName)s by %(userName)s.", "You may wish to login with a different account, or add this email to this account.": "Vous souhaiteriez peut-être vous identifier avec un autre compte, ou ajouter cette e-mail à votre compte.", "Your home server does not support device management.": "Votre homeserver ne supporte pas la gestion d'appareils.", - "(~%(count)s results).one": "(~%(count)s résultat)", - "(~%(count)s results).other": "(~%(count)s résultats)", + "(~%(count)s results)|one": "(~%(count)s résultat)", + "(~%(count)s results)|other": "(~%(count)s résultats)", "Device Name": "Nom de l'appareil", "Encrypted by a verified device": "Chiffré par un appareil vérifié", "Encrypted by an unverified device": "Chiffré par un appareil non vérifié", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index a51fc01044..eea96f9ea3 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -190,8 +190,8 @@ "%(items)s and %(remaining)s others": "%(items)s és még: %(remaining)s", "%(items)s and one other": "%(items)s és még egy", "%(items)s and %(lastItem)s": "%(items)s és %(lastItem)s", - "and %(count)s others....other": "és még: %(count)s ...", - "and %(count)s others....one": "és még egy...", + "and %(count)s others...|other": "és még: %(count)s ...", + "and %(count)s others...|one": "és még egy...", "%(names)s and %(lastPerson)s are typing": "%(names)s és %(lastPerson)s írnak", "%(names)s and one other are typing": "%(names)s és még valaki ír", "%(names)s and %(count)s others are typing": "%(names)s és %(count)s ember ír", @@ -250,8 +250,8 @@ "Confirm password": "Jelszó megerősítése", "Confirm your new password": "Új jelszó megerősítése", "Could not connect to the integration server": "Az integrációs szerverhez nem lehet kapcsolódni", - "%(count)s new messages.one": "%(count)s új üzenet", - "%(count)s new messages.other": "%(count)s új üzenet", + "%(count)s new messages|one": "%(count)s új üzenet", + "%(count)s new messages|other": "%(count)s új üzenet", "Create a new chat or reuse an existing one": "Új csevegés indítása vagy egy meglévő használata", "Create an account": "Fiók készítése", "Create Room": "Szoba készítése", @@ -610,9 +610,9 @@ "Unrecognised command:": "Ismeretlen parancs:", "Unrecognised room alias:": "Ismeretlen szoba becenév:", "Unverified": "Nem ellenőrzött", - "Uploading %(filename)s and %(count)s others.zero": "%(filename)s feltöltése", - "Uploading %(filename)s and %(count)s others.one": "%(filename)s és még %(count)s db másik feltöltése", - "Uploading %(filename)s and %(count)s others.other": "%(filename)s és még %(count)s db másik feltöltése", + "Uploading %(filename)s and %(count)s others|zero": "%(filename)s feltöltése", + "Uploading %(filename)s and %(count)s others|one": "%(filename)s és még %(count)s db másik feltöltése", + "Uploading %(filename)s and %(count)s others|other": "%(filename)s és még %(count)s db másik feltöltése", "uploaded a file": "fájl feltöltése", "Upload avatar": "Avatar kép feltöltése", "Upload Failed": "Feltöltés sikertelen", @@ -729,8 +729,8 @@ "Sent messages will be stored until your connection has returned.": "Az elküldött üzenetek addig lesznek tárolva amíg a kapcsolatod újra elérhető lesz.", "Auto-complete": "Automatikus kiegészítés", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Most újraküldöd mind vagy eldobod mind. Újraküldésre vagy eldobásra egyenként is kiválaszthatod az üzeneteket.", - "(~%(count)s results).one": "(~%(count)s db eredmény)", - "(~%(count)s results).other": "(~%(count)s db eredmény)", + "(~%(count)s results)|one": "(~%(count)s db eredmény)", + "(~%(count)s results)|other": "(~%(count)s db eredmény)", "or": "vagy", "Active call": "Folyamatban lévő hívás", "bold": "félkövér", diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index 04a7c8877c..f0be3024a5 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -44,8 +44,8 @@ "Only people who have been invited": "この部屋に招待された人のみ参加可能", "Hide removed messages": "削除された発言の印を表示しない", "Always show message timestamps": "発言時刻を常に表示", - "%(count)s new messages.one": "新しい発言 %(count)s", - "%(count)s new messages.other": "新しい発言 %(count)s", + "%(count)s new messages|one": "新しい発言 %(count)s", + "%(count)s new messages|other": "新しい発言 %(count)s", "Don't send typing notifications": "文字入力中であることを公表しない", "Filter room members": "参加者検索", "Send a message (unencrypted)": "ここに送信文を入力 (暗号化なし)", diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index b76dd40c5e..e5faf01da7 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -225,10 +225,8 @@ "%(items)s and %(remaining)s others": "%(items)s과 %(remaining)s", "%(items)s and one other": "%(items)s과 다른 하나", "%(items)s and %(lastItem)s": "%(items)s과 %(lastItem)s", - "and %(count)s others...": { - "other": "그리고 %(count)s...", - "one": "그리고 다른 하나..." - }, + "and %(count)s others...|one": "그리고 다른 하나...", + "and %(count)s others...|other": "그리고 %(count)s...", "%(names)s and %(lastPerson)s are typing": "%(names)s님과 %(lastPerson)s님이 입력중", "%(names)s and one other are typing": "%(names)s님과 다른 분이 입력중", "%(names)s and %(count)s others are typing": "%(names)s님과 %(count)s 분들이 입력중", @@ -267,8 +265,8 @@ "Conference calls are not supported in encrypted rooms": "암호화한 방에서는 전화 회의를 할 수 없어요", "Conference calls are not supported in this client": "이 클라이언트에서는 전화 회의를 할 수 없어요", "Could not connect to the integration server": "통합 서버에 연결할 수 없어요", - "%(count)s new messages.one": "%(count)s 새 메시지", - "%(count)s new messages.other": "%(count)s 새 메시지", + "%(count)s new messages|one": "%(count)s 새 메시지", + "%(count)s new messages|other": "%(count)s 새 메시지", "Create a new chat or reuse an existing one": "새 이야기를 시작하거나 기존에 하던 이야기를 이어하세요", "Cryptography": "암호화", "Current password": "현재 비밀번호", @@ -617,9 +615,9 @@ "Unrecognised command:": "인식 할 수 없는 명령:", "Unrecognised room alias:": "인식할 수 없는 방 가명:", "Unverified": "인증하지 않음", - "Uploading %(filename)s and %(count)s others.zero": "%(filename)s 올리는 중", - "Uploading %(filename)s and %(count)s others.one": "%(filename)s 외 %(count)s 올리는 중", - "Uploading %(filename)s and %(count)s others.other": "%(filename)s 외 %(count)s 올리는 중", + "Uploading %(filename)s and %(count)s others|zero": "%(filename)s 올리는 중", + "Uploading %(filename)s and %(count)s others|one": "%(filename)s 외 %(count)s 올리는 중", + "Uploading %(filename)s and %(count)s others|other": "%(filename)s 외 %(count)s 올리는 중", "uploaded a file": "파일을 올렸어요", "Upload avatar": "아바타 올리기", "Upload Failed": "파일을 올리지 못했어요", @@ -736,8 +734,8 @@ "Sent messages will be stored until your connection has returned.": "보내신 메시지는 다시 연결될 때까지 저장할 거에요.", "Auto-complete": "자동 완성", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "전부 다시 보내거나 취소하세요. 다시 보내거나 취소할 메시지를 하나씩 고르실 수도 있어요.", - "(~%(count)s results).one": "(~%(count)s 결과)", - "(~%(count)s results).other": "(~%(count)s 결과)", + "(~%(count)s results)|one": "(~%(count)s 결과)", + "(~%(count)s results)|other": "(~%(count)s 결과)", "or": "혹은", "Active call": "전화 중", "bold": "굵은 획", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 6deceac02b..041403b32f 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -218,8 +218,8 @@ "Confirm your new password": "Apstiprini jauno paroli", "Continue": "Turpināt", "Could not connect to the integration server": "Neizdevās savienoties ar integrācijas serveri", - "%(count)s new messages.one": "jaunu ziņu skaits: %(count)s", - "%(count)s new messages.other": "%(count)s jaunas ziņas", + "%(count)s new messages|one": "jaunu ziņu skaits: %(count)s", + "%(count)s new messages|other": "%(count)s jaunas ziņas", "Create a new chat or reuse an existing one": "Izveidot jaunu čatu vai izmantot eksistējošu", "Create an account": "Reģistrēt kontu", "Create Room": "Izveidot istabu", @@ -494,9 +494,9 @@ "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s ieslēdza ierīce-ierīce šifrēšanu (algorithm %(algorithm)s).", "%(senderName)s unbanned %(targetName)s.": "%(senderName)s atcēla pieejas ierobežojumu (atbanoja) %(targetName)s.", "Unknown room %(roomId)s": "Nezināma istaba %(roomId)s", - "Uploading %(filename)s and %(count)s others.zero": "Tiek augšuplādēts %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "Tiek augšuplādēts %(filename)s un %(count)s citi", - "Uploading %(filename)s and %(count)s others.other": "Tiek augšuplādēts %(filename)s un %(count)s citi", + "Uploading %(filename)s and %(count)s others|zero": "Tiek augšuplādēts %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Tiek augšuplādēts %(filename)s un %(count)s citi", + "Uploading %(filename)s and %(count)s others|other": "Tiek augšuplādēts %(filename)s un %(count)s citi", "%(user)s is a": "%(user)s ir", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (power %(powerLevelNumber)s)", "Username invalid: %(errMessage)s": "Neatbilstošs lietotājvārds: %(errMessage)s", @@ -512,8 +512,8 @@ "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", "Password too short (min %(MIN_PASSWORD_LENGTH)s).": "Parole ir par īsu (jābūt vismaz %(MIN_PASSWORD_LENGTH)s zīmēm).", "An error occurred: %(error_string)s": "Notikusi kļūda: %(error_string)s", - "(~%(count)s results).one": "(~%(count)s rezultāts)", - "(~%(count)s results).other": "(~%(count)s rezultāti)", + "(~%(count)s results)|one": "(~%(count)s rezultāts)", + "(~%(count)s results)|other": "(~%(count)s rezultāti)", "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)s pievienojās %(repeats)s reizes", "%(oneUser)sjoined %(repeats)s times": "%(oneUser)s pievienojās %(repeats)s reizes", "%(severalUsers)sjoined": "%(severalUsers)s pievienojās", @@ -916,8 +916,8 @@ "Encryption key request": "Šifrēšanas atslēgas pieprasījums", "Add a widget": "Pievienot Widžetu", "Allow": "Atļaut", - "and %(count)s others....other": "un vēl %(count)s citi...", - "and %(count)s others....one": "un vēl viens cits...", + "and %(count)s others...|other": "un vēl %(count)s citi...", + "and %(count)s others...|one": "un vēl viens cits...", "Cannot add any more widgets": "Nav iespējams pievienot vairāk vidžetu", "Changes colour scheme of current room": "Nomaina pašreizējās istabas krāsu paleti", "Delete widget": "Dzēst widžetu", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index d72813177b..ebb1c42056 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -141,8 +141,8 @@ "%(items)s and %(remaining)s others": "%(items)s en %(remaining)s andere", "%(items)s and one other": "%(items)s en één andere", "%(items)s and %(lastItem)s": "%(items)s en %(lastItem)s", - "and %(count)s others....other": "en %(count)s andere...", - "and %(count)s others....one": "en één andere...", + "and %(count)s others...|other": "en %(count)s andere...", + "and %(count)s others...|one": "en één andere...", "%(names)s and %(lastPerson)s are typing": "%(names)s en %(lastPerson)s zijn aan het typen", "%(names)s and one other are typing": "%(names)s en één andere zijn aan het typen", "%(names)s and %(count)s others are typing": "%(names)s en %(count)s andere zijn aan het typen", @@ -222,7 +222,7 @@ "Are you sure you want to upload the following files?": "Weet u zeker dat u de volgende bestanden wil uploaden?", "Click here to join the discussion!": "Klik hier om mee te doen aan de discussie!", "Close": "Sluiten", - "%(count)s new messages.one": "%(count)s nieuw bericht", + "%(count)s new messages|one": "%(count)s nieuw bericht", "Create new room": "Een nieuwe kamer maken", "Custom Server Options": "Aangepaste serverinstellingen", "Dismiss": "Afwijzen", @@ -329,7 +329,7 @@ "Set a Display Name": "Weergavenaam instellen", "Upload an avatar:": "Een avatar uploaden:", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Geen verbinding met de thuisserver - controleer je verbinding. Controleer het SSL-certificaat van de thuisserver en browser-extensies die verzoeken kunnen blokkeren.", - "%(count)s new messages.other": "%(count)s nieuwe berichten", + "%(count)s new messages|other": "%(count)s nieuwe berichten", "Create an account": "Open een account", "Cryptography": "Cryptografie", "Current password": "Huidig wachtwoord", @@ -644,9 +644,9 @@ "Unrecognised command:": "Onbekende commando:", "Unrecognised room alias:": "Onbekende ruimte alias:", "Unverified": "Niet geverifieerd", - "Uploading %(filename)s and %(count)s others.zero": "Aan het uploaden %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "%(filename)s en %(count)s andere aan het uploaden", - "Uploading %(filename)s and %(count)s others.other": "%(filename)s en %(count)s anderen aan het uploaden", + "Uploading %(filename)s and %(count)s others|zero": "Aan het uploaden %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "%(filename)s en %(count)s andere aan het uploaden", + "Uploading %(filename)s and %(count)s others|other": "%(filename)s en %(count)s anderen aan het uploaden", "uploaded a file": "Bestand geüpload", "Upload avatar": "Avatar uploaden", "Upload Failed": "Uploaden Mislukt", @@ -737,8 +737,8 @@ "Sent messages will be stored until your connection has returned.": "Verstuurde berichten zullen opgeslagen worden tot je connectie weer terug is.", "Auto-complete": "Automatisch aanvullen", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Verstuur alle of annuleer alle nu. Je kan ook individuele berichten selecteren om te versturen of te annuleren.", - "(~%(count)s results).one": "(~%(count)s resultaat)", - "(~%(count)s results).other": "(~%(count)s resultaten)", + "(~%(count)s results)|one": "(~%(count)s resultaat)", + "(~%(count)s results)|other": "(~%(count)s resultaten)", "or": "of", "Active call": "Actief gesprek", "bold": "vetgedrukt", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 9fd0a6c1a2..cb4ba65ec4 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -556,8 +556,8 @@ "%(items)s and %(remaining)s others": "%(items)s e %(remaining)s outros", "%(items)s and one other": "%(items)s e um outro", "%(items)s and %(lastItem)s": "%(items)s e %(lastItem)s", - "and %(count)s others....other": "e %(count)s outros...", - "and %(count)s others....one": "e um outro...", + "and %(count)s others...|other": "e %(count)s outros...", + "and %(count)s others...|one": "e um outro...", "Are you sure?": "Você tem certeza?", "Attachment": "Anexo", "Autoplay GIFs and videos": "Reproduzir automaticamente GIFs e videos", @@ -877,7 +877,7 @@ "Disable markdown formatting": "Desabilitar formatação MarkDown", "No display name": "Sem nome público de usuária(o)", "This will be your account name on the homeserver, or you can pick a different server.": "Este será seu nome de conta no Servidor de Base , ou então você pode escolher um servidor diferente.", - "Uploading %(filename)s and %(count)s others.one": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", + "Uploading %(filename)s and %(count)s others|one": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", "Hide removed messages": "Ocultar mensagens removidas", "You may wish to login with a different account, or add this email to this account.": "Você pode querer fazer login com uma conta diferente, ou adicionar este e-mail a esta conta.", "Welcome page": "Página de boas-vindas", @@ -887,7 +887,7 @@ "And %(count)s more...": "E mais %(count)s...", "Start chatting": "Iniciar a conversa", "Public Chat": "Conversa pública", - "Uploading %(filename)s and %(count)s others.zero": "Enviando o arquivo %(filename)s", + "Uploading %(filename)s and %(count)s others|zero": "Enviando o arquivo %(filename)s", "Room contains unknown devices": "Esta sala contém dispositivos desconhecidos", "Admin tools": "Ferramentas de administração", "You have been kicked from %(roomName)s by %(userName)s.": "Você foi removido(a) da sala %(roomName)s por %(userName)s.", @@ -918,14 +918,14 @@ "Enable Notifications": "Habilitar notificações", "Username not available": "Nome de usuária(o) indisponível", "Encrypted by a verified device": "Criptografado por um dispositivo verificado", - "(~%(count)s results).other": "(~%(count)s resultados)", + "(~%(count)s results)|other": "(~%(count)s resultados)", "unknown caller": "a pessoa que está chamando é desconhecida", "Start authentication": "Iniciar autenticação", - "(~%(count)s results).one": "(~%(count)s resultado)", + "(~%(count)s results)|one": "(~%(count)s resultado)", "New Password": "Nova senha", "Username invalid: %(errMessage)s": "Nome de usuária(o) inválido: %(errMessage)s", "Disable Notifications": "Desabilitar notificações", - "%(count)s new messages.one": "%(count)s nova mensagem", + "%(count)s new messages|one": "%(count)s nova mensagem", "Device Name": "Nome do dispositivo", "Incoming voice call from %(name)s": "Chamada de voz de %(name)s recebida", "If you already have a Matrix account you can log in instead.": "Se você já tem uma conta Matrix, pode também fazer login.", @@ -934,11 +934,11 @@ "Set": "Definir", "Unencrypted message": "Mensagem não criptografada", "Join as voice or video.": "Participar por voz ou por vídeo.", - "Uploading %(filename)s and %(count)s others.other": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", + "Uploading %(filename)s and %(count)s others|other": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", "Username available": "Nome de usuária(o) disponível", "Close": "Fechar", "Level:": "Nível:", - "%(count)s new messages.other": "%(count)s novas mensagens", + "%(count)s new messages|other": "%(count)s novas mensagens", "Unverified": "Não verificado", "Click here to join the discussion!": "Clique aqui para participar da conversa!", "Decline": "Recusar", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 63efda25d9..cd6230cd68 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -557,10 +557,8 @@ "%(items)s and %(remaining)s others": "%(items)s e %(remaining)s outros", "%(items)s and one other": "%(items)s e um outro", "%(items)s and %(lastItem)s": "%(items)s e %(lastItem)s", - "and %(count)s others...": { - "other": "e %(count)s outros...", - "one": "e um outro..." - }, + "and %(count)s others...|one": "e um outro...", + "and %(count)s others...|other": "e %(count)s outros...", "Are you sure?": "Você tem certeza?", "Attachment": "Anexo", "Autoplay GIFs and videos": "Reproduzir automaticamente GIFs e videos", @@ -874,16 +872,16 @@ "You have entered an invalid contact. Try using their Matrix ID or email address.": "Você inseriu um contato inválido. Tente usar o ID Matrix ou endereço de e-mail da pessoa que está buscando.", "Hide removed messages": "Ocultar mensagens removidas", "Add": "Adicionar", - "%(count)s new messages.one": "%(count)s nova mensagem", - "%(count)s new messages.other": "%(count)s novas mensagens", + "%(count)s new messages|one": "%(count)s nova mensagem", + "%(count)s new messages|other": "%(count)s novas mensagens", "Disable markdown formatting": "Desabilitar formatação MarkDown", "Error: Problem communicating with the given homeserver.": "Erro: problema de comunicação com o Servidor de Base fornecido.", "Failed to fetch avatar URL": "Falha ao obter a URL da imagem de perfil", "Home": "Início", "The phone number entered looks invalid": "O número de telefone inserido parece ser inválido", - "Uploading %(filename)s and %(count)s others.zero": "Enviando o arquivo %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", - "Uploading %(filename)s and %(count)s others.other": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", + "Uploading %(filename)s and %(count)s others|zero": "Enviando o arquivo %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", + "Uploading %(filename)s and %(count)s others|other": "Enviando o arquivo %(filename)s e %(count)s outros arquivos", "Username invalid: %(errMessage)s": "Nome de usuária(o) inválido: %(errMessage)s", "Searching known users": "Buscando pessoas conhecidas", "You must register to use this functionality": "Você deve se registrar para poder usar esta funcionalidade", @@ -958,8 +956,8 @@ "You have been kicked from %(roomName)s by %(userName)s.": "Você foi removido(a) da sala %(roomName)s por %(userName)s.", "You may wish to login with a different account, or add this email to this account.": "Você pode querer fazer login com uma conta diferente, ou adicionar este e-mail a esta conta.", "Your home server does not support device management.": "O seu Servidor de Base não suporta o gerenciamento de dispositivos.", - "(~%(count)s results).one": "(~%(count)s resultado)", - "(~%(count)s results).other": "(~%(count)s resultados)", + "(~%(count)s results)|one": "(~%(count)s resultado)", + "(~%(count)s results)|other": "(~%(count)s resultados)", "Device Name": "Nome do dispositivo", "(could not connect media)": "(não foi possível conectar-se à mídia)", "(no answer)": "(sem resposta)", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index e15fce90c4..9a49fca9cb 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -448,8 +448,8 @@ "sx": "Суту", "zh-hk": "Китайский (Гонконг)", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Текстовое сообщение было отправлено на +%(msisdn)s. Введите проверочный код, который оно содержит", - "and %(count)s others....other": "и %(count)s других...", - "and %(count)s others....one": "и ещё один...", + "and %(count)s others...|other": "и %(count)s других...", + "and %(count)s others...|one": "и ещё один...", "Are you sure?": "Вы уверены?", "Autoplay GIFs and videos": "Автовоспроизведение GIF и видео", "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Невозможно соединиться с домашним сервером - проверьте своё соединение и убедитесь, что SSL-сертификат вашего домашнего сервера включён в доверяемые.", @@ -863,14 +863,14 @@ "Start chat": "Начать чат", "Welcome page": "Страница приветствия", "Add": "Добавить", - "%(count)s new messages.one": "%(count)s новое сообщение", - "%(count)s new messages.other": "%(count)s новых сообщений", + "%(count)s new messages|one": "%(count)s новое сообщение", + "%(count)s new messages|other": "%(count)s новых сообщений", "Error: Problem communicating with the given homeserver.": "Ошибка: проблема связи с данным сервером.", "Failed to fetch avatar URL": "Не удалось извлечь URL-адрес аватара", "The phone number entered looks invalid": "Введенный номер телефона недействителен", - "Uploading %(filename)s and %(count)s others.zero": "Отправка %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "Отправка %(filename)s и %(count)s другой", - "Uploading %(filename)s and %(count)s others.other": "Отправка %(filename)s и %(count)s других", + "Uploading %(filename)s and %(count)s others|zero": "Отправка %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Отправка %(filename)s и %(count)s другой", + "Uploading %(filename)s and %(count)s others|other": "Отправка %(filename)s и %(count)s других", "Username invalid: %(errMessage)s": "Неверное имя пользователя: %(errMessage)s", "Searching known users": "Поиск известных пользователей", "You must register to use this functionality": "Вы должны зарегистрироваться, чтобы использовать эту функцию", @@ -918,7 +918,7 @@ "Set": "Установить", "Start authentication": "Начать проверку подлинности", "This room": "В этой комнате", - "(~%(count)s results).other": "(~%(count)s результаты)", + "(~%(count)s results)|other": "(~%(count)s результаты)", "Device Name": "Имя устройства", "Custom": "Пользовательские", "Decline": "Отклонить", @@ -941,7 +941,7 @@ "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (уровень доступа %(powerLevelNumber)s)", "Verified": "Проверено", "Would you like to accept or decline this invitation?": "Вы хотели бы подтвердить или отклонить это приглашение?", - "(~%(count)s results).one": "(~%(count)s результат)", + "(~%(count)s results)|one": "(~%(count)s результат)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Не удается подключиться к домашнему серверу - проверьте подключение, убедитесь, что ваш SSL-сертификат домашнего сервера является доверенным и что расширение браузера не блокирует запросы.", "You have been banned from %(roomName)s by %(userName)s.": "%(userName)s заблокировал вас в %(roomName)s.", "You have been kicked from %(roomName)s by %(userName)s.": "%(userName)s выгнал вас из %(roomName)s.", diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 662215b541..c38aeec36e 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -150,8 +150,8 @@ "%(items)s and %(remaining)s others": "%(items)s och %(remaining)s andra", "%(items)s and one other": "%(items)s och en annan", "%(items)s and %(lastItem)s": "%(items)s och %(lastItem)s", - "and %(count)s others....other": "och %(count)s andra...", - "and %(count)s others....one": "och en annan...", + "and %(count)s others...|other": "och %(count)s andra...", + "and %(count)s others...|one": "och en annan...", "%(names)s and %(lastPerson)s are typing": "%(names)s och %(lastPerson)s skriver", "%(names)s and one other are typing": "%(names)s och en annan skriver", "%(names)s and %(count)s others are typing": "%(names)s och %(count)s andra skriver", @@ -303,8 +303,8 @@ "changing room on a RoomView is not supported": "det går inte att byta rum i en RoomView", "Click here to join the discussion!": "Klicka här för att gå med i diskussionen!", "Close": "Stäng", - "%(count)s new messages.one": "%(count)s nytt meddelande", - "%(count)s new messages.other": "%(count)s nya meddelanden", + "%(count)s new messages|one": "%(count)s nytt meddelande", + "%(count)s new messages|other": "%(count)s nya meddelanden", "Create a new chat or reuse an existing one": "Skapa en ny chatt eller använd en existerande", "Custom": "Egen", "Decline": "Avvisa", diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index f3c65d808f..a1487a594e 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -214,8 +214,8 @@ "Confirm your new password": "మీ క్రొత్త పాస్వర్డ్ను నిర్ధారించండి", "Continue": "కొనసాగించు", "Could not connect to the integration server": "ఇంటిగ్రేషన్ సర్వర్కు కనెక్ట్ చేయడం సాధ్యం కాలేదు", - "%(count)s new messages.one": "%(count)s కొత్త సందేశం", - "%(count)s new messages.other": "%(count)s కొత్త సందేశాలు", + "%(count)s new messages|one": "%(count)s కొత్త సందేశం", + "%(count)s new messages|other": "%(count)s కొత్త సందేశాలు", "Create a new chat or reuse an existing one": "క్రొత్త చాట్ ను సృష్టించుకోండి లేదా ఇప్పటికే ఉన్న ఒకదాన్ని తిరిగి ఉపయోగించండి", "Create an account": "ఒక ఎకౌంటు ను సృష్టించండి", "Create Room": "రూమ్ ని సృష్టించండి", diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index f5471db7cf..3cf4355821 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -98,10 +98,8 @@ "%(items)s and %(remaining)s others": "%(items)s และอีก %(remaining)s ผู้ใช้", "%(items)s and one other": "%(items)s และอีกหนึ่งผู้ใช้", "%(items)s and %(lastItem)s": "%(items)s และ %(lastItem)s", - "and %(count)s others...": { - "other": "และอีก %(count)s ผู้ใช้...", - "one": "และอีกหนึ่งผู้ใช้..." - }, + "and %(count)s others...|one": "และอีกหนึ่งผู้ใช้...", + "and %(count)s others...|other": "และอีก %(count)s ผู้ใช้...", "%(names)s and %(lastPerson)s are typing": "%(names)s และ %(lastPerson)s กำลังพิมพ์", "%(names)s and one other are typing": "%(names)s และอีกหนึ่งคนกำลังพิมพ์", "%(names)s and %(count)s others are typing": "%(names)s และอีก %(count)s คนกำลังพิมพ์", @@ -330,8 +328,8 @@ "Start chat": "เริ่มแชท", "Welcome page": "หน้าต้อนรับ", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "ไม่สามารถเชื่อมต่อไปยังเซิร์ฟเวอร์บ้านผ่านทาง HTTP ได้เนื่องจาก URL ที่อยู่บนเบราว์เซอร์เป็น HTTPS กรุณาใช้ HTTPS หรือเปิดใช้งานสคริปต์ที่ไม่ปลอดภัย.", - "%(count)s new messages.one": "มี %(count)s ข้อความใหม่", - "%(count)s new messages.other": "มี %(count)s ข้อความใหม่", + "%(count)s new messages|one": "มี %(count)s ข้อความใหม่", + "%(count)s new messages|other": "มี %(count)s ข้อความใหม่", "Disable inline URL previews by default": "ตั้งค่าเริ่มต้นให้ไม่แสดงตัวอย่าง URL ในแชท", "Disable markdown formatting": "ปิดใช้งานการจัดรูปแบบ markdown", "End-to-end encryption information": "ข้อมูลการเข้ารหัสจากปลายทางถึงปลายทาง", @@ -368,9 +366,9 @@ "unknown": "ไม่รู้จัก", "Unrecognised command:": "คำสั่งที่ไม่รู้จัก:", "Unrecognised room alias:": "นามแฝงห้องที่ไม่รู้จัก:", - "Uploading %(filename)s and %(count)s others.zero": "กำลังอัปโหลด %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "กำลังอัปโหลด %(filename)s และอีก %(count)s ไฟล์", - "Uploading %(filename)s and %(count)s others.other": "กำลังอัปโหลด %(filename)s และอีก %(count)s ไฟล์", + "Uploading %(filename)s and %(count)s others|zero": "กำลังอัปโหลด %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "กำลังอัปโหลด %(filename)s และอีก %(count)s ไฟล์", + "Uploading %(filename)s and %(count)s others|other": "กำลังอัปโหลด %(filename)s และอีก %(count)s ไฟล์", "uploaded a file": "อัปโหลดไฟล์", "Upload Failed": "การอัปโหลดล้มเหลว", "Upload Files": "อัปโหลดไฟล์", @@ -598,8 +596,8 @@ "This room": "ห้องนี้", "Unnamed Room": "ห้องที่ยังไม่ได้ตั้งชื่อ", "%(user)s is a": "%(user)s เป็น", - "(~%(count)s results).one": "(~%(count)s ผลลัพท์)", - "(~%(count)s results).other": "(~%(count)s ผลลัพท์)", + "(~%(count)s results)|one": "(~%(count)s ผลลัพท์)", + "(~%(count)s results)|other": "(~%(count)s ผลลัพท์)", "Admin tools": "เครื่องมือผู้ดูแล", "And %(count)s more...": "เพิ่มอีก %(count)s ชิ้น...", "Missing Media Permissions, click here to request.": "ไม่มีสิทธิ์เข้าถึงสื่อ, คลิกที่นี่เพื่อขอสิทธิ์", diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 035fd69e8a..fccef004dc 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -156,10 +156,8 @@ "%(items)s and %(remaining)s others": "%(items)s ve %(remaining)s diğerleri", "%(items)s and one other": "%(items)s ve bir başkası", "%(items)s and %(lastItem)s": "%(items)s ve %(lastItem)s", - "and %(count)s others...": { - "other": "ve %(count)s diğerleri...", - "one": "ve bir diğeri..." - }, + "and %(count)s others...|one": "ve bir diğeri...", + "and %(count)s others...|other": "ve %(count)s diğerleri...", "%(names)s and %(lastPerson)s are typing": "%(names)s ve %(lastPerson)s yazıyorlar", "%(names)s and one other are typing": "%(names)s ve birisi yazıyor", "%(names)s and %(count)s others are typing": "%(names)s ve %(count)s diğeri yazıyor", @@ -220,8 +218,8 @@ "Confirm your new password": "Yeni Şifrenizi Onaylayın", "Continue": "Devam Et", "Could not connect to the integration server": "Bütünleştirme (Integration) Sunucusuna bağlanamadı", - "%(count)s new messages.one": "%(count)s yeni mesaj", - "%(count)s new messages.other": "%(count)s yeni mesajlar", + "%(count)s new messages|one": "%(count)s yeni mesaj", + "%(count)s new messages|other": "%(count)s yeni mesajlar", "Create a new chat or reuse an existing one": "Yeni sohbet oluştur veya mevcut sohbetinizi tekrar kullanın", "Create an account": "Hesap Oluştur", "Create Room": "Oda Oluştur", @@ -600,9 +598,9 @@ "Unrecognised command:": "Tanınmayan komut :", "Unrecognised room alias:": "Tanınmayan oda isimleri :", "Unverified": "Doğrulanmamış", - "Uploading %(filename)s and %(count)s others.zero": "%(filename)s yükleniyor", - "Uploading %(filename)s and %(count)s others.one": "%(filename)s ve %(count)s kadarı yükleniyor", - "Uploading %(filename)s and %(count)s others.other": "%(filename)s ve %(count)s kadarları yükleniyor", + "Uploading %(filename)s and %(count)s others|zero": "%(filename)s yükleniyor", + "Uploading %(filename)s and %(count)s others|one": "%(filename)s ve %(count)s kadarı yükleniyor", + "Uploading %(filename)s and %(count)s others|other": "%(filename)s ve %(count)s kadarları yükleniyor", "uploaded a file": "bir dosya yüklendi", "Upload avatar": "Avatar yükle", "Upload Failed": "Yükleme Başarısız", @@ -719,8 +717,8 @@ "Sent messages will be stored until your connection has returned.": "Gönderilen iletiler bağlantınız geri gelene kadar saklanacak.", "Auto-complete": "Otomatik tamamlama", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": " Hepsini yeniden gönderin veya Hepsini iptal edin şimdi . Ayrıca yeniden göndermek veya iptal etmek için özel iletiler seçebilirsin.", - "(~%(count)s results).one": "(~%(count)s sonuç)", - "(~%(count)s results).other": "(~%(count)s sonuçlar)", + "(~%(count)s results)|one": "(~%(count)s sonuç)", + "(~%(count)s results)|other": "(~%(count)s sonuçlar)", "Cancel": "İptal Et", "or": "veya", "Active call": "Aktif çağrı", diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index ae538d76bf..15ddefc956 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -192,10 +192,8 @@ "%(items)s and %(remaining)s others": "%(items)s та інші %(remaining)s", "%(items)s and one other": "%(items)s і ще один інший", "%(items)s and %(lastItem)s": "%(items)s та %(lastItem)s", - "and %(count)s others...": { - "other": "та %(count)s інші...", - "one": "і інше..." - }, + "and %(count)s others...|one": "і інше...", + "and %(count)s others...|other": "та %(count)s інші...", "%(names)s and %(lastPerson)s are typing": "%(names)s та %(lastPerson)s пишуть", "%(names)s and one other are typing": "%(names)s та інші пишуть", "%(names)s and %(count)s others are typing": "%(names)s та %(count)s інших пишуть", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 77c2232619..f8ee16f67e 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -239,8 +239,8 @@ "%(items)s and %(remaining)s others": "%(items)s 和其它 %(remaining)s 个人", "%(items)s and one other": "%(items)s 和另一个人", "%(items)s and %(lastItem)s": "%(items)s 和 %(lastItem)s", - "and %(count)s others....other": "和其它 %(count)s 个...", - "and %(count)s others....one": "和其它一个...", + "and %(count)s others...|other": "和其它 %(count)s 个...", + "and %(count)s others...|one": "和其它一个...", "%(names)s and one other are typing": "%(names)s 和另一个人正在打字", "anyone": "任何人", "Anyone": "任何人", @@ -282,8 +282,8 @@ "Conference calling is in development and may not be reliable.": "视频会议功能还在开发状态,可能不稳定。", "Conference calls are not supported in encrypted rooms": "加密聊天室不支持视频会议", "Conference calls are not supported in this client": "此客户端不支持视频会议", - "%(count)s new messages.one": "%(count)s 条新消息", - "%(count)s new messages.other": "%(count)s 新消息", + "%(count)s new messages|one": "%(count)s 条新消息", + "%(count)s new messages|other": "%(count)s 新消息", "Create a new chat or reuse an existing one": "创建新聊天或使用已有的聊天", "Custom": "自定义", "Custom level": "自定义级别", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 2f3d36b481..028336f3be 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -463,8 +463,8 @@ "Conference calls are not supported in encrypted rooms": "不支援在加密房間的會議通話", "Conference calls are not supported in this client": "這個客戶端不支援會議通話", "Could not connect to the integration server": "無法連線到整合的伺服器", - "%(count)s new messages.one": "%(count)s 個訊息", - "%(count)s new messages.other": "%(count)s 個訊息", + "%(count)s new messages|one": "%(count)s 個訊息", + "%(count)s new messages|other": "%(count)s 個訊息", "Create a new chat or reuse an existing one": "建立新聊天或重新使用既有的", "Curve25519 identity key": "Curve25519 辨識金鑰", "Custom": "自訂", @@ -661,9 +661,9 @@ "Unrecognised command:": "無法識別的命令:", "Unrecognised room alias:": "無法室別的房間別名:", "Unverified": "未驗證", - "Uploading %(filename)s and %(count)s others.zero": "正在上傳 %(filename)s", - "Uploading %(filename)s and %(count)s others.one": "正在上傳 %(filename)s 與另外 %(count)s 個", - "Uploading %(filename)s and %(count)s others.other": "正在上傳 %(filename)s 與另外 %(count)s 個", + "Uploading %(filename)s and %(count)s others|zero": "正在上傳 %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "正在上傳 %(filename)s 與另外 %(count)s 個", + "Uploading %(filename)s and %(count)s others|other": "正在上傳 %(filename)s 與另外 %(count)s 個", "uploaded a file": "已上傳檔案", "Upload avatar": "上傳大頭貼", "Upload Failed": "上傳失敗", @@ -772,8 +772,8 @@ "Sent messages will be stored until your connection has returned.": "傳送的訊息會在您的連線恢復前先儲存起來。", "Auto-complete": "自動完成", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "現在重新傳送全部或是取消全部。您也可以單獨選擇訊息來重新傳送或取消。", - "(~%(count)s results).one": "(~%(count)s 結果)", - "(~%(count)s results).other": "(~%(count)s 結果)", + "(~%(count)s results)|one": "(~%(count)s 結果)", + "(~%(count)s results)|other": "(~%(count)s 結果)", "or": "或", "Active call": "活躍的通話", "bold": "粗體", @@ -923,8 +923,8 @@ "Encryption key request": "加密金鑰請求", "Add a widget": "新增小工具", "Allow": "允許", - "and %(count)s others....other": "與其他 %(count)s 個……", - "and %(count)s others....one": "與其他 1 個……", + "and %(count)s others...|other": "與其他 %(count)s 個……", + "and %(count)s others...|one": "與其他 1 個……", "Cannot add any more widgets": "無法新增更多的小工具", "Changes colour scheme of current room": "變更目前聊天室的配色方案", "Delete widget": "刪除小工具", From c67a6e9d2ec71a6bbb743e928d8a8994ee93137c Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 5 Sep 2017 13:13:02 +0100 Subject: [PATCH 53/86] Prepare changelog for v0.10.3-rc.2 --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4e9ae9a78..af82ef2e1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +Changes in [0.10.3-rc.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.3-rc.2) (2017-09-05) +=============================================================================================================== +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.3-rc.1...v0.10.3-rc.2) + + * Fix plurals in translations + [\#1358](https://github.com/matrix-org/matrix-react-sdk/pull/1358) + * Fix typo + [\#1357](https://github.com/matrix-org/matrix-react-sdk/pull/1357) + * Update from Weblate. + [\#1356](https://github.com/matrix-org/matrix-react-sdk/pull/1356) + Changes in [0.10.3-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.3-rc.1) (2017-09-01) =============================================================================================================== [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.2...v0.10.3-rc.1) From c75bc42585c8aa5e8e193ca7f6096d83734f921a Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 5 Sep 2017 13:13:02 +0100 Subject: [PATCH 54/86] v0.10.3-rc.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0610d42c0d..e1fbfb58d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "0.10.3-rc.1", + "version": "0.10.3-rc.2", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 5684b6a23c4e14ec5feda73add2b135f9fc7948a Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 5 Sep 2017 17:35:03 +0200 Subject: [PATCH 55/86] Remove unused translation code translations --- src/i18n/strings/en_EN.json | 120 ------------------------------------ 1 file changed, 120 deletions(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 35ca698c03..1d706a135d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1,125 +1,5 @@ { "Add a widget": "Add a widget", - "af": "Afrikaans", - "ar-ae": "Arabic (U.A.E.)", - "ar-bh": "Arabic (Bahrain)", - "ar-dz": "Arabic (Algeria)", - "ar-eg": "Arabic (Egypt)", - "ar-iq": "Arabic (Iraq)", - "ar-jo": "Arabic (Jordan)", - "ar-kw": "Arabic (Kuwait)", - "ar-lb": "Arabic (Lebanon)", - "ar-ly": "Arabic (Libya)", - "ar-ma": "Arabic (Morocco)", - "ar-om": "Arabic (Oman)", - "ar-qa": "Arabic (Qatar)", - "ar-sa": "Arabic (Saudi Arabia)", - "ar-sy": "Arabic (Syria)", - "ar-tn": "Arabic (Tunisia)", - "ar-ye": "Arabic (Yemen)", - "be": "Belarusian", - "bg": "Bulgarian", - "ca": "Catalan", - "cs": "Czech", - "da": "Danish", - "de-at": "German (Austria)", - "de-ch": "German (Switzerland)", - "de": "German", - "de-li": "German (Liechtenstein)", - "de-lu": "German (Luxembourg)", - "el": "Greek", - "en-au": "English (Australia)", - "en-bz": "English (Belize)", - "en-ca": "English (Canada)", - "en": "English", - "en-gb": "English (United Kingdom)", - "en-ie": "English (Ireland)", - "en-jm": "English (Jamaica)", - "en-nz": "English (New Zealand)", - "en-tt": "English (Trinidad)", - "en-us": "English (United States)", - "en-za": "English (South Africa)", - "es-ar": "Spanish (Argentina)", - "es-bo": "Spanish (Bolivia)", - "es-cl": "Spanish (Chile)", - "es-co": "Spanish (Colombia)", - "es-cr": "Spanish (Costa Rica)", - "es-do": "Spanish (Dominican Republic)", - "es-ec": "Spanish (Ecuador)", - "es-gt": "Spanish (Guatemala)", - "es-hn": "Spanish (Honduras)", - "es-mx": "Spanish (Mexico)", - "es-ni": "Spanish (Nicaragua)", - "es-pa": "Spanish (Panama)", - "es-pe": "Spanish (Peru)", - "es-pr": "Spanish (Puerto Rico)", - "es-py": "Spanish (Paraguay)", - "es": "Spanish (Spain)", - "es-sv": "Spanish (El Salvador)", - "es-uy": "Spanish (Uruguay)", - "es-ve": "Spanish (Venezuela)", - "et": "Estonian", - "eu": "Basque (Basque)", - "fa": "Farsi", - "fi": "Finnish", - "fo": "Faeroese", - "fr-be": "French (Belgium)", - "fr-ca": "French (Canada)", - "fr-ch": "French (Switzerland)", - "fr": "French", - "fr-lu": "French (Luxembourg)", - "ga": "Irish", - "gd": "Gaelic (Scotland)", - "he": "Hebrew", - "hi": "Hindi", - "hr": "Croatian", - "hu": "Hungarian", - "id": "Indonesian", - "is": "Icelandic", - "it-ch": "Italian (Switzerland)", - "it": "Italian", - "ja": "Japanese", - "ji": "Yiddish", - "ko": "Korean", - "lt": "Lithuanian", - "lv": "Latvian", - "mk": "Macedonian (FYROM)", - "ms": "Malaysian", - "mt": "Maltese", - "nl-be": "Dutch (Belgium)", - "nl": "Dutch", - "no": "Norwegian", - "pl": "Polish", - "pt-br": "Brazilian Portuguese", - "pt": "Portuguese", - "rm": "Rhaeto-Romanic", - "ro-mo": "Romanian (Republic of Moldova)", - "ro": "Romanian", - "ru-mo": "Russian (Republic of Moldova)", - "ru": "Russian", - "sb": "Sorbian", - "sk": "Slovak", - "sl": "Slovenian", - "sq": "Albanian", - "sr": "Serbian", - "sv-fi": "Swedish (Finland)", - "sv": "Swedish", - "sx": "Sutu", - "sz": "Sami (Lappish)", - "th": "Thai", - "tn": "Tswana", - "tr": "Turkish", - "ts": "Tsonga", - "uk": "Ukrainian", - "ur": "Urdu", - "ve": "Venda", - "vi": "Vietnamese", - "xh": "Xhosa", - "zh-cn": "Chinese (PRC)", - "zh-hk": "Chinese (Hong Kong SAR)", - "zh-sg": "Chinese (Singapore)", - "zh-tw": "Chinese (Taiwan)", - "zu": "Zulu", "a room": "a room", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains", "Accept": "Accept", From 4a362c141ad124e3e04ca1f8af93bfd6f9ccec23 Mon Sep 17 00:00:00 2001 From: MTRNord Date: Tue, 5 Sep 2017 17:54:49 +0200 Subject: [PATCH 56/86] Cleanup unused language code translations --- src/i18n/strings/ar.json | 1 - src/i18n/strings/cs.json | 119 --------------------------------- src/i18n/strings/da.json | 74 --------------------- src/i18n/strings/de_DE.json | 115 -------------------------------- src/i18n/strings/el.json | 120 --------------------------------- src/i18n/strings/en_US.json | 120 --------------------------------- src/i18n/strings/eo.json | 16 +---- src/i18n/strings/es.json | 120 --------------------------------- src/i18n/strings/eu.json | 121 ---------------------------------- src/i18n/strings/fr.json | 120 --------------------------------- src/i18n/strings/he.json | 22 +------ src/i18n/strings/hu.json | 117 -------------------------------- src/i18n/strings/it.json | 115 -------------------------------- src/i18n/strings/ja.json | 120 --------------------------------- src/i18n/strings/ko.json | 118 --------------------------------- src/i18n/strings/lv.json | 120 --------------------------------- src/i18n/strings/ml.json | 5 +- src/i18n/strings/nl.json | 121 ---------------------------------- src/i18n/strings/pl.json | 117 -------------------------------- src/i18n/strings/pt.json | 114 -------------------------------- src/i18n/strings/pt_BR.json | 118 --------------------------------- src/i18n/strings/ru.json | 120 --------------------------------- src/i18n/strings/sv.json | 120 --------------------------------- src/i18n/strings/te.json | 117 -------------------------------- src/i18n/strings/th.json | 117 -------------------------------- src/i18n/strings/tr.json | 120 --------------------------------- src/i18n/strings/uk.json | 120 --------------------------------- src/i18n/strings/zh_Hans.json | 120 --------------------------------- src/i18n/strings/zh_Hant.json | 120 --------------------------------- 29 files changed, 3 insertions(+), 2964 deletions(-) diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json index c1aba2edeb..8718e842a7 100644 --- a/src/i18n/strings/ar.json +++ b/src/i18n/strings/ar.json @@ -1,5 +1,4 @@ { - "ar-iq": "العربية", "Continue": "استمر", "Username available": "اسم المستخدم متاح", "Username not available": "الإسم المستخدم غير موجود", diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index c592e14076..797b045386 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -75,125 +75,6 @@ "to demote": "upozadíte", "Drop here %(toAction)s": "Přetažením sem %(toAction)s", "Add a widget": "Přidat widget", - "af": "Afrikánština", - "ar-ae": "Arabština (SAE)", - "ar-bh": "Arabština (Bahrajn)", - "ar-dz": "Arabština (Alžírsko)", - "ar-eg": "Arabština (Egypt)", - "ar-iq": "Arabština (Irák)", - "ar-jo": "Arabština (Jordánsko)", - "ar-kw": "Arabština (Kuvajt)", - "ar-lb": "Arabština (Libanon)", - "ar-ly": "Arabština (Libye)", - "ar-ma": "Arabština (Maroko)", - "ar-om": "Arabština (Omán)", - "ar-qa": "Arabština (Katar)", - "ar-sa": "Arabština (Saúdská Arábie)", - "ar-sy": "Arabština (Sýrie)", - "ar-tn": "Arabština (Tunisko)", - "ar-ye": "Arabština (Jemen)", - "be": "Běloruština", - "bg": "Bulharština", - "ca": "Katalánština", - "cs": "Čeština", - "da": "Dánština", - "de-at": "Němčina (Rakousko)", - "de-ch": "Němčina (Švýcarsko)", - "de": "Němčina", - "de-li": "Němčina (Lichtenštejnsko)", - "de-lu": "Němčina (Lucembursko)", - "el": "Řečtina", - "en-au": "Angličtina (Austrálie)", - "en-bz": "Angličtina (Belize)", - "en-ca": "Angličtina (Kanada)", - "en": "Angličtina", - "en-gb": "Angličtina (Spojené království)", - "en-ie": "Angličtina (Irsko)", - "en-jm": "Angličtina (Jamajka)", - "en-nz": "Angličtina (Nový Zéland)", - "en-tt": "Angličtina (Trinidad)", - "en-us": "Angličtina (Spojené státy)", - "en-za": "Angličtina (Jihoafrická republika)", - "es-ar": "Španělština (Argentina)", - "es-bo": "Španělština (Bolívie)", - "es-cl": "Španělština (Chile)", - "es-co": "Španělština (Kolumbie)", - "es-cr": "Španělština (Kostarika)", - "es-do": "Španělština (Dominikánská republika)", - "es-ec": "Španělština (Ekvádor)", - "es-gt": "Španělština (Guatemala)", - "es-hn": "Španělština (Honduras)", - "es-mx": "Španělština (Mexiko)", - "es-ni": "Španělština (Nikaragua)", - "es-pa": "Španělština (Panama)", - "es-pe": "Španělština (Peru)", - "es-pr": "Španělština (Portoriko)", - "es-py": "Španělština (Paraguay)", - "es": "Španělština (Španělsko)", - "es-sv": "Španělština (Salvador)", - "es-uy": "Španělština (Uruguay)", - "es-ve": "Španělština (Venezuela)", - "et": "Estonština", - "eu": "Baskičtina (Baskicko)", - "fa": "Perština", - "fi": "Finština", - "fo": "Faerština", - "fr-be": "Francouzština (Belgie)", - "fr-ca": "Francouzština (Kanada)", - "fr-ch": "Francouzština (Švýcarsko)", - "fr": "Francouzština", - "fr-lu": "Francouzština (Lucembursko)", - "ga": "Irština", - "gd": "Gaelština (Skotsko)", - "he": "Hebrejština", - "hi": "Hindština", - "hr": "Chorvatština", - "hu": "Maďarština", - "id": "Indonéština", - "is": "Islandština", - "it-ch": "Italština (Švýcarsko)", - "it": "Italština", - "ja": "Japonština", - "ji": "Jidiš", - "ko": "Korejština", - "lt": "Litevština", - "lv": "Lotyština", - "mk": "Makedonština (Makedonie)", - "ms": "Malajština", - "mt": "Maltština", - "nl-be": "Nizozemština (Belgie)", - "nl": "Nizozemština", - "no": "Norština", - "pl": "Polština", - "pt-br": "Brazilská portugalština", - "pt": "Portugalština", - "rm": "Rétorománština", - "ro-mo": "Rumunština (Moldavsko)", - "ro": "Rumunština", - "ru-mo": "Ruština (Moldavsko)", - "ru": "Ruština", - "sb": "Lužická srbština", - "sk": "Slovenština", - "sl": "Slovinština", - "sq": "Albánština", - "sr": "Srbština", - "sv-fi": "Švédština (Finsko)", - "sv": "Švédština", - "sz": "Sámština (Laponsko)", - "th": "Thajština", - "tr": "Turečtina", - "uk": "Ukrajinština", - "ur": "Urdština", - "vi": "Vietnamština", - "zh-cn": "Čínština (ČLR)", - "zh-hk": "Čínština (Hongkong)", - "xh": "Xhoština", - "ve": "Luvendština", - "ts": "Tsonga", - "tn": "Setswanština", - "zh-sg": "Čínština (Singapur)", - "zh-tw": "Čínština (Tchaj-wan)", - "zu": "Zuluština", "a room": "místnost", "Accept": "Přijmout", "%(targetName)s accepted an invitation.": "%(targetName)s přijal/a pozvání.", diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json index dec3219da9..11d7bffdd3 100644 --- a/src/i18n/strings/da.json +++ b/src/i18n/strings/da.json @@ -137,80 +137,6 @@ "%(names)s and one other are typing": "%(names)s og den anden skriver", "%(names)s and %(count)s others are typing": "%(names)s og %(count)s andre skriver", "%(senderName)s answered the call.": "%(senderName)s besvarede opkaldet.", - "af": "Afrikaans", - "ar-eg": "Arabisk (Egypten)", - "ar-ma": "Arabisk (Marokko)", - "ar-sa": "Arabisk (Saudiarabien", - "ar-sy": "Arabisk (Syrien)", - "be": "Hviderussisk", - "bg": "Bulgarisk", - "ca": "Catalansk", - "cs": "Tjekkisk", - "de-at": "Tysk (Østrig)", - "de-ch": "Tysk (Schweiz)", - "el": "Græsk", - "en-au": "Engelsk (Australien)", - "en-ca": "Engelsk (Canada)", - "en-ie": "Engelsk (Irland)", - "en-nz": "Engelsk (New Zealand)", - "en-us": "Engelsk (USA)", - "en-za": "Engelsk (Sydafrika)", - "es-ar": "Spansk (Argentina)", - "es-bo": "Spansk (Bolivia)", - "es-cl": "Spansk (Chile)", - "es-ec": "Spansk (Ecuador)", - "es-hn": "Spansk (Honduras)", - "es-mx": "Spansk (Mexico)", - "es-ni": "Spansk (Nicaragua)", - "es-py": "Spansk (Paraguay)", - "es": "Spansk (Spanien)", - "es-uy": "Spansk (Uruguay)", - "es-ve": "Spansk (Venezuela)", - "et": "Estisk", - "fa": "Farsi", - "fi": "Finsk", - "fr-be": "Fransk (Belgien)", - "fr-ca": "Fransk (Canada)", - "fr-ch": "Fransk (Schweiz)", - "fr": "Fransk", - "ga": "Irsk", - "he": "Hebraisk", - "hi": "Hindi", - "hr": "Kroatisk", - "hu": "Ungarsk", - "id": "Indonesisk", - "is": "Islandsk", - "it": "Italiensk", - "ja": "Japansk", - "ji": "Jiddisch", - "lt": "Litauisk", - "lv": "Lettisk", - "ms": "Malaysisk", - "mt": "Maltesisk", - "nl": "Hollandsk", - "no": "Norsk", - "pl": "Polsk", - "pt": "Portugisisk", - "ro": "Rumænsk", - "sb": "Sorbisk", - "sk": "Slovakisk", - "sl": "Slovensk", - "sq": "Albansk", - "sr": "Serbisk", - "sv": "Svensk", - "th": "Thai", - "tn": "Tswana", - "tr": "Tyrkisk", - "ts": "Tsonga", - "uk": "Ukrainsk", - "ur": "Urdu", - "ve": "Venda", - "vi": "Vietnamesisk", - "xh": "Xhosa", - "zh-cn": "Kinesisk (Folkerepublikken Kina)", - "zh-sg": "Kinesisk (Singapore)", - "zh-tw": "Kinesisk (Taiwan)", - "zu": "Zulu", "Add a widget": "Tilføj en widget", "ar-ae": "Arabisk (U.A.E.)", "ar-bh": "Arabisk (Bahrain)", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index e4a3d335a3..241cce3135 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -427,121 +427,6 @@ "click to reveal": "anzeigen", "To remove other users' messages": "Um Nachrichten anderer Nutzer zu verbergen", "You are trying to access %(roomName)s.": "Du versuchst, auf den Raum \"%(roomName)s\" zuzugreifen.", - "af": "Afrikaans", - "ar-ae": "Arabisch (VAE)", - "ar-bh": "Arabisch (Bahrain)", - "ar-dz": "Arabisch (Algerien)", - "ar-eg": "Arabisch (Ägypten)", - "ar-iq": "Arabisch (Irak)", - "ar-jo": "Arabisch (Jordanien)", - "ar-kw": "Arabisch (Kuwait)", - "ar-lb": "Arabisch (Libanon)", - "ar-ly": "Arabisch (Lybien)", - "ar-ma": "Arabisch (Marokko)", - "ar-om": "Arabisch (Oman)", - "ar-qa": "Arabisch (Katar)", - "ar-sa": "Arabisch (Saudi Arabien)", - "ar-sy": "Arabisch (Syrien)", - "ar-tn": "Arabisch (Tunesien)", - "ar-ye": "Arabisch (Jemen)", - "be": "Weißrussisch", - "bg": "Bulgarisch", - "cs": "Tschechisch", - "de-at": "Deutsch (Österreich)", - "de-ch": "Deutsch (Schweiz)", - "de-li": "Deutsch (Liechtenstein)", - "de-lu": "Deutsch (Luxemburg)", - "el": "Neugriechisch", - "en-au": "Englisch (Australien)", - "en-bz": "Englisch (Belize)", - "en-ca": "Englisch (Kanada)", - "en-gb": "Englisch (Vereinigtes Königreich)", - "en-ie": "Englisch (Irland)", - "en-jm": "Englisch (Jamaika)", - "en-nz": "Englisch (Neuseeland)", - "en-tt": "Englisch (Trinidad)", - "en-us": "Englisch (Vereinigte Staaten)", - "en-za": "Englisch (Südafrika)", - "es-ar": "Spanisch (Argentinien)", - "es-bo": "Spanisch (Bolivien)", - "es-cl": "Spanisch (Chile)", - "es-co": "Spanisch (Kolumbien)", - "es-cr": "Spanisch (Costa Rica)", - "es-do": "Spanisch (Dominikanische Republik)", - "es-ec": "Spanisch (Ecuador)", - "es-gt": "Spanisch (Guatemala)", - "es-hn": "Spanisch (Honduras)", - "es-mx": "Spanisch (Mexiko)", - "es-ni": "Spanisch (Nicaragua)", - "es-pa": "Spanisch (Panama)", - "es-pe": "Spanisch (Peru)", - "es-pr": "Spanisch (Puerto Rico)", - "es-py": "Spanisch (Paraguay)", - "es": "Spanisch (Spanien)", - "es-sv": "Spanisch (El Salvador)", - "es-uy": "Spanisch (Uruguay)", - "es-ve": "Spanisch (Venezuela)", - "et": "Estländisch", - "eu": "Baskisch (Baskenland)", - "fa": "Persisch (Farsi)", - "fr-be": "Französisch (Belgien)", - "fr-ca": "Französisch (Kanada)", - "fr-ch": "Französisch (Schweiz)", - "fr": "Französisch", - "fr-lu": "Französisch (Luxemburg)", - "gd": "Gälisch (Schottland)", - "he": "Hebräisch", - "hr": "Kroatisch", - "hu": "Ungarisch", - "id": "Indonesisch", - "is": "Isländisch", - "it-ch": "Italienisch (Schweiz)", - "it": "Italienisch", - "ja": "Japanisch", - "ji": "Jiddisch", - "ko": "Koreanisch", - "lt": "Litauisch", - "lv": "Lettisch", - "mk": "Mazedonisch (FYROM)", - "ms": "Malaysisch", - "mt": "Maltesisch", - "nl-be": "Niederländisch (Belgien)", - "nl": "Niederländisch", - "no": "Norwegisch", - "pl": "Polnisch", - "pt": "Portugiesisch", - "rm": "Rätoromanisch", - "ro-mo": "Rumänisch (Republik Moldau/Moldawien)", - "ro": "Rumänisch", - "ru-mo": "Russisch (Republik Moldau/Moldawien)", - "sb": "Sorbisch", - "sk": "Slowakisch", - "sl": "Slowenisch", - "sq": "Albanisch", - "sr": "Serbisch", - "sv-fi": "Schwedisch (Finnland)", - "sv": "Schwedisch", - "sx": "Sutu", - "sz": "Samisch (Lappisch)", - "th": "Thailändisch", - "tn": "Setswana", - "tr": "Türkisch", - "ts": "Tsonga", - "uk": "Ukrainisch", - "ur": "Urdu", - "ve": "Tshivenda", - "vi": "Vietnamesisch", - "zh-cn": "Chinesisch (Volksrepublik China)", - "zh-hk": "Chinesisch (Hong Kong SAR)", - "zh-sg": "Chinesisch (Singapur)", - "zh-tw": "Chinesisch (Taiwan)", - "zu": "Zulu", - "ca": "Katalanisch", - "fi": "Finnisch", - "fo": "Färöisch", - "ga": "Irisch", - "hi": "Hindi", - "xh": "Xhosa", "Monday": "Montag", "Tuesday": "Dienstag", "Wednesday": "Mittwoch", diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index 1211aab6ad..9b127f3c4f 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -1,5 +1,4 @@ { - "af": "Αφρικάνικα", "Error": "Σφάλμα", "Failed to forget room %(errCode)s": "Δεν ήταν δυνατή η διαγραφή του δωματίου (%(errCode)s)", "Failed to join the room": "Δεν ήταν δυνατή η σύνδεση στο δωμάτιο", @@ -12,22 +11,6 @@ "Settings": "Ρυθμίσεις", "unknown error code": "άγνωστος κωδικός σφάλματος", "Sunday": "Κυριακή", - "ar-ae": "Αραβικά (Η.Α.Ε)", - "ar-bh": "Αραβικά (Μπαχρέιν)", - "ar-dz": "Αραβικά (Αλγερία)", - "ar-eg": "Αραβικά (Αίγυπτος)", - "ar-iq": "Αραβικά (Ιράκ)", - "ar-jo": "Αραβικά (Ιορδανία)", - "ar-kw": "Αραβικά (Κουβέιτ)", - "ar-lb": "Αραβικά (Λίβανος)", - "ar-ly": "Αραβικά (Λιβύη)", - "ar-ma": "Αραβικά (Μαρόκο)", - "ar-om": "Αραβικά (Ομάν)", - "ar-qa": "Αραβικά (Κατάρ)", - "ar-sa": "Αραβικά (Σαουδική Αραβία)", - "ar-sy": "Αραβικά (Συρία)", - "ar-tn": "Αραβικά (Τυνισία)", - "ar-ye": "Αραβικά (Υεμένη)", "accept": "αποδοχή", "%(targetName)s accepted an invitation.": "%(targetName)s δέχτηκε την πρόσκληση.", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s δέχτηκες την πρόσκληση για %(displayName)s.", @@ -64,109 +47,6 @@ "Anyone who knows the room's link, apart from guests": "Oποιοσδήποτε", "all room members, from the point they joined": "όλα τα μέλη, από τη στιγμή που συνδέθηκαν", "%(items)s and %(lastItem)s": "%(items)s %(lastItem)s", - "be": "Λευκορώσικα", - "bg": "Βουλγάρικα", - "ca": "Καταλανικά", - "cs": "Τσέχικα", - "da": "Δανέζικα", - "de-at": "Γερμανικά (Αυστρία)", - "de-ch": "Γερμανικά (Ελβετία)", - "de": "Γερμανικά", - "de-li": "Γερμανικά (Λιχτενστάιν)", - "de-lu": "Γερμανικά (Λουξεμβούργο)", - "el": "Ελληνικά", - "en-au": "Αγγλικά (Αυστραλία)", - "en-bz": "Αγγλικά (Μπελίζε)", - "en-ca": "Αγγλικά (Καναδάς)", - "en": "Αγγλικά", - "en-gb": "Αγγλικά (Ηνωμένο Βασίλειο)", - "en-ie": "Αγγλικά (Ιρλανδία)", - "en-jm": "Αγγλικά (Τζαμάικα)", - "en-nz": "Αγγλικά (Νέα Ζηλανδία)", - "en-tt": "Αγγλικά (Τρινιντάντ)", - "en-us": "Αγγλικά (Ηνωμένες Πολιτείες)", - "en-za": "Αγγλικά (Νότια Αφρική)", - "es-ar": "Ισπανικά (Αργεντινή)", - "es-bo": "Ισπανικά (Βολιβία)", - "es-cl": "Ισπανικά (Χιλή)", - "es-co": "Ισπανικά (Κολομβία)", - "es-cr": "Ισπανικά (Κόστα Ρίκα)", - "es-do": "Ισπανικά (Δομινικανή Δημοκρατία)", - "es-ec": "Ισπανικά (Ισημερινός)", - "es-gt": "Ισπανικά (Γουατεμάλα)", - "es-hn": "Ισπανικά (Ονδούρα)", - "es-mx": "Ισπανικά (Μεξικό)", - "es-ni": "Ισπανικά (Νικαράγουα)", - "es-pa": "Ισπανικά (Παναμάς)", - "es-pe": "Ισπανικά (Περού)", - "es-pr": "Ισπανικά (Πουέρτο Ρίκο)", - "es-py": "Ισπανικά (Παραγουάη)", - "es": "Ισπανικά (Ισπανία)", - "es-sv": "Ισπανικά (Ελ Σαλβαδόρ)", - "es-uy": "Ισπανικά (Ουρουγουάη)", - "es-ve": "Ισπανικά (Βενεζουέλα)", - "et": "Εσθονικά", - "eu": "Βασκική (Βασκική)", - "fa": "Φάρσι", - "fi": "Φινλανδικά", - "fo": "Φαρόε", - "fr-be": "Γαλλικά (Βέλγιο)", - "fr-ca": "Γαλλικά (Καναδάς)", - "fr-ch": "Γαλλικά (Ελβετία)", - "fr": "Γαλλικά", - "fr-lu": "Γαλλικά (Λουξεμβούργο)", - "ga": "Ιρλανδικά", - "gd": "Γαελική (Σκωτία)", - "he": "Εβραϊκά", - "hi": "Χίντι", - "hr": "Κροατικά", - "hu": "Ουγγρικά", - "is": "Ισλανδικά", - "it-ch": "Ιταλικά (Ελβετία)", - "it": "Ιταλικά", - "ja": "Ιαπωνικά", - "ji": "Γίντις", - "ko": "Κορεάτικα", - "lt": "Λιθουανικά", - "mk": "Μακεδονική (ΠΓΔΜ)", - "ms": "Μαλαισίας", - "mt": "Μαλτέζικα", - "nl-be": "Ολλανδικά (Βέλγιο)", - "nl": "Ολλανδικά", - "no": "Νορβηγικά", - "pl": "Πολωνέζικα", - "pt-br": "Πορτογαλικά Βραζιλίας", - "pt": "Πορτογαλικά", - "rm": "Ραιτορωμαϊκά", - "ro-mo": "Ρουμάνικα (Δημοκρατία της Μολδαβίας)", - "ro": "Ρουμάνικα", - "ru-mo": "Ρώσικα (Δημοκρατία της Μολδαβίας)", - "ru": "Ρώσικα", - "sb": "Σορβικά", - "sk": "Σλοβάκικα", - "sl": "Σλοβενικά", - "sq": "Αλβανικά", - "sr": "Σερβικά", - "sv-fi": "Σουηδικά (Φινλανδία)", - "sv": "Σουηδικά", - "sx": "Σούτου", - "sz": "Σάμη (Λαπωνικά)", - "th": "Ταϊλανδέζικα", - "tn": "Τσουάνα", - "tr": "Τουρκικά", - "ts": "Τσονγκά", - "uk": "Ουκρανικά", - "ur": "Ουρντού", - "ve": "Venda", - "vi": "Βιετναμέζικα", - "xh": "Ξόσα", - "zh-cn": "Κινέζικα (ΛΔΚ)", - "zh-hk": "Κινέζικα (ΕΔΠ Χονγκ Κονγκ)", - "zh-sg": "Κινέζικα (Σιγκαπούρη)", - "zh-tw": "Κινέζικα (Ταϊβάν)", - "zu": "Ζουλού", - "id": "Ινδονησιακά", - "lv": "Λετονικά", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Ένα μήνυμα στάλθηκε στο +%(msisdn)s. Παρακαλώ γράψε τον κωδικό επαλήθευσης που περιέχει", "Access Token:": "Κωδικός πρόσβασης:", "Always show message timestamps": "Εμφάνιση πάντα της ένδειξης ώρας στα μηνύματα", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index bb6a6e8c9b..3e08c386f8 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -1,125 +1,5 @@ { "Add a widget": "Add a widget", - "af": "Afrikaans", - "ar-ae": "Arabic (U.A.E.)", - "ar-bh": "Arabic (Bahrain)", - "ar-dz": "Arabic (Algeria)", - "ar-eg": "Arabic (Egypt)", - "ar-iq": "Arabic (Iraq)", - "ar-jo": "Arabic (Jordan)", - "ar-kw": "Arabic (Kuwait)", - "ar-lb": "Arabic (Lebanon)", - "ar-ly": "Arabic (Libya)", - "ar-ma": "Arabic (Morocco)", - "ar-om": "Arabic (Oman)", - "ar-qa": "Arabic (Qatar)", - "ar-sa": "Arabic (Saudi Arabia)", - "ar-sy": "Arabic (Syria)", - "ar-tn": "Arabic (Tunisia)", - "ar-ye": "Arabic (Yemen)", - "be": "Belarusian", - "bg": "Bulgarian", - "ca": "Catalan", - "cs": "Czech", - "da": "Danish", - "de-at": "German (Austria)", - "de-ch": "German (Switzerland)", - "de": "German", - "de-li": "German (Liechtenstein)", - "de-lu": "German (Luxembourg)", - "el": "Greek", - "en-au": "English (Australia)", - "en-bz": "English (Belize)", - "en-ca": "English (Canada)", - "en": "English", - "en-gb": "English (United Kingdom)", - "en-ie": "English (Ireland)", - "en-jm": "English (Jamaica)", - "en-nz": "English (New Zealand)", - "en-tt": "English (Trinidad)", - "en-us": "English (United States)", - "en-za": "English (South Africa)", - "es-ar": "Spanish (Argentina)", - "es-bo": "Spanish (Bolivia)", - "es-cl": "Spanish (Chile)", - "es-co": "Spanish (Colombia)", - "es-cr": "Spanish (Costa Rica)", - "es-do": "Spanish (Dominican Republic)", - "es-ec": "Spanish (Ecuador)", - "es-gt": "Spanish (Guatemala)", - "es-hn": "Spanish (Honduras)", - "es-mx": "Spanish (Mexico)", - "es-ni": "Spanish (Nicaragua)", - "es-pa": "Spanish (Panama)", - "es-pe": "Spanish (Peru)", - "es-pr": "Spanish (Puerto Rico)", - "es-py": "Spanish (Paraguay)", - "es": "Spanish (Spain)", - "es-sv": "Spanish (El Salvador)", - "es-uy": "Spanish (Uruguay)", - "es-ve": "Spanish (Venezuela)", - "et": "Estonian", - "eu": "Basque (Basque)", - "fa": "Farsi", - "fi": "Finnish", - "fo": "Faeroese", - "fr-be": "French (Belgium)", - "fr-ca": "French (Canada)", - "fr-ch": "French (Switzerland)", - "fr": "French", - "fr-lu": "French (Luxembourg)", - "ga": "Irish", - "gd": "Gaelic (Scotland)", - "he": "Hebrew", - "hi": "Hindi", - "hr": "Croatian", - "hu": "Hungarian", - "id": "Indonesian", - "is": "Icelandic", - "it-ch": "Italian (Switzerland)", - "it": "Italian", - "ja": "Japanese", - "ji": "Yiddish", - "ko": "Korean", - "lt": "Lithuanian", - "lv": "Latvian", - "mk": "Macedonian (FYROM)", - "ms": "Malaysian", - "mt": "Maltese", - "nl-be": "Dutch (Belgium)", - "nl": "Dutch", - "no": "Norwegian", - "pl": "Polish", - "pt-br": "Brazilian Portuguese", - "pt": "Portuguese", - "rm": "Rhaeto-Romanic", - "ro-mo": "Romanian (Republic of Moldova)", - "ro": "Romanian", - "ru-mo": "Russian (Republic of Moldova)", - "ru": "Russian", - "sb": "Sorbian", - "sk": "Slovak", - "sl": "Slovenian", - "sq": "Albanian", - "sr": "Serbian", - "sv-fi": "Swedish (Finland)", - "sv": "Swedish", - "sx": "Sutu", - "sz": "Sami (Lappish)", - "th": "Thai", - "tn": "Tswana", - "tr": "Turkish", - "ts": "Tsonga", - "uk": "Ukrainian", - "ur": "Urdu", - "ve": "Venda", - "vi": "Vietnamese", - "xh": "Xhosa", - "zh-cn": "Chinese (PRC)", - "zh-hk": "Chinese (Hong Kong SAR)", - "zh-sg": "Chinese (Singapore)", - "zh-tw": "Chinese (Taiwan)", - "zu": "Zulu", "AM": "AM", "PM": "PM", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains", diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 91cd6c3450..0967ef424b 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -1,15 +1 @@ -{ - "ar-ae": "la araba (Unuiĝintaj Arabaj Emirlandoj)", - "ar-bh": "la araba (Bareijno)", - "ar-dz": "la araba (Alĝerio)", - "ar-eg": "la araba (Egiptio)", - "ar-iq": "la araba (Irako)", - "ar-jo": "la araba (Jordanio)", - "ar-kw": "la araba (Kuvayto)", - "ar-lb": "la araba (Libano)", - "ar-ly": "la araba (Libio)", - "ar-ma": "la araba (Maroko)", - "ar-om": "la araba (Omano)", - "ar-qa": "la araba (Kataro)", - "ar-sa": "la araba (Sauda Arabio)" -} +{} diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 499da6e819..ecadaa31d7 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -1,124 +1,4 @@ { - "af": "Afrikáans", - "ar-ae": "Árabe (Emiratos Árabes Unidos)", - "ar-bh": "Árabe (Baréin)", - "ar-dz": "Árabe (Argelia)", - "ar-eg": "Árabe (Egipto)", - "ar-iq": "Árabe (Irak)", - "ar-jo": "Árabe (Jordania)", - "ar-kw": "Árabe (Kuwait)", - "ar-lb": "Árabe (Líbano)", - "ar-ly": "Árabe (Libia)", - "ar-ma": "Árabe (Marruecos)", - "ar-om": "Árabe (Omán)", - "ar-qa": "Árabe (Catar)", - "ar-sa": "Árabe (Arabia Saudita)", - "ar-sy": "Árabe (Siria)", - "ar-tn": "Árabe (Túnez)", - "ar-ye": "Árabe (Yemen)", - "be": "Bielorrusia", - "bg": "Bulgaria", - "ca": "Catalán", - "cs": "Checo", - "da": "Danés", - "de-at": "Alemán (Austria)", - "de-ch": "Alemán (Suiza)", - "de": "Alemán", - "de-li": "Alemán (Liechtenstein)", - "de-lu": "Alemán (Luxemburgo)", - "el": "Griego", - "en-au": "Inglés (Australia)", - "en-bz": "Inglés (Belice)", - "en-ca": "Inglés (Canadá)", - "en": "Inglés", - "en-gb": "Inglés (Reino Unido)", - "en-ie": "Inglés (Irlanda)", - "en-jm": "Inglés (Jamaica)", - "en-nz": "Inglés (Nueva Zelanda)", - "en-tt": "Inglés (Trinidad y Tobago)", - "en-us": "Inglés (Estados Unidos)", - "en-za": "Inglés (Sudáfrica)", - "es-ar": "Español (Argentina)", - "es-bo": "Español (Bolivia)", - "es-cl": "Español (Chile)", - "es-co": "Español (Colombia)", - "es-cr": "Español (Costa Rica)", - "es-do": "Español (República Dominicana)", - "es-ec": "Español (Ecuador)", - "es-gt": "Español (Guatemala)", - "es-hn": "Español (Honduras)", - "es-mx": "Español (México)", - "es-ni": "Español (Nicaragua)", - "es-pa": "Español (Panamá)", - "es-pe": "Español (Perú)", - "es-pr": "Español (Puerto Rico)", - "es-py": "Español (Paraguay)", - "es": "Español (España)", - "es-sv": "Español (El Salvador)", - "es-uy": "Español (Uruguay)", - "es-ve": "Español (Venezuela)", - "et": "Estonio", - "eu": "Vasco", - "fa": "Persa", - "fi": "Finés", - "fo": "Feroés", - "fr-be": "Francés (Bélgica)", - "fr-ca": "Francés (Canadá)", - "fr-ch": "Francés (Suiza)", - "fr": "Francés", - "fr-lu": "Francés (Luxemburgo)", - "ga": "Irlandés", - "gd": "Gaélico (Escocia)", - "he": "Hebreo", - "hi": "Hindi", - "hr": "Croata", - "hu": "Húngaro", - "id": "Indonesio", - "is": "Islandés", - "it-ch": "Italiano (Suiza)", - "it": "Italiano", - "ja": "Japonés", - "ji": "Yidis", - "ko": "Coreano", - "lt": "Lituano", - "lv": "Letón", - "mk": "Macedonio", - "ms": "Malayo", - "mt": "Maltés", - "nl-be": "Holandés (Bélgica)", - "nl": "Holandés", - "no": "Noruego", - "pl": "Polaco", - "pt-br": "Portugués (Brasil)", - "pt": "Portugués", - "rm": "Retorrománico", - "ro-mo": "Rumano (República de Moldavia)", - "ro": "Rumano", - "ru-mo": "Ruso (República de Moldavia)", - "ru": "Ruso", - "sb": "Sorbio", - "sk": "Eslovaco", - "sl": "Esloveno", - "sq": "Albanés", - "sr": "Serbio", - "sv-fi": "Sueco (Finlandia)", - "sv": "Sueco", - "sx": "Sotho", - "sz": "Sami (Lapón)", - "th": "Tailandés", - "tn": "Setsuana", - "tr": "Turco", - "ts": "Songa", - "uk": "Ucraniano", - "ur": "Urdú", - "ve": "Venda", - "vi": "Vietnamita", - "xh": "Josa", - "zh-cn": "Chino Mandarín", - "zh-hk": "Chino (Hong Kong RAE)", - "zh-sg": "Chino (Singapur)", - "zh-tw": "Chino (Taiwanés)", - "zu": "Zulú", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Un mensaje de texto ha sido enviado a +%(msisdn)s. Por favor ingrese el código de verificación que lo contiene", "accept": "Aceptar", "%(targetName)s accepted an invitation.": "%(targetName)s ha aceptado una invitación.", diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index aa9857c3dd..3a17e46c98 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -1,125 +1,4 @@ { - "af": "Afrikaans", - "ar-ae": "Arabiera (Arabiar Emirerri Batuak)", - "ar-bh": "Arabiera (Bahrain)", - "ar-dz": "Arabiera (Algeria)", - "ar-eg": "Arabiera (Egipto)", - "ar-iq": "Arabiera (Irak)", - "ar-jo": "Arabiera (Jordania)", - "ar-kw": "Arabiera (Kuwait)", - "ar-lb": "Arabiera (Libano)", - "ar-ly": "Arabiera (Libia)", - "ar-ma": "Arabiera (Maroko)", - "ar-om": "Arabiera (Oman)", - "ar-qa": "Arabiera (Qatar)", - "ar-sa": "Arabiera (Saudi Arabia)", - "Cancel": "Utzi", - "ar-sy": "Arabiera (Siria)", - "ar-tn": "Arabiera (Tunisia)", - "ar-ye": "Arabiera (Yemen)", - "be": "Bielorrusiera", - "bg": "Bulgariera", - "ca": "Katalana", - "cs": "Txekiera", - "da": "Daniera", - "de-at": "Alemana (Austria)", - "de-ch": "Alemana (Suitza)", - "de": "Alemana", - "de-li": "Alemana (Liechtenstein)", - "de-lu": "Alemana (Luxenburgo)", - "el": "Greziera", - "en-au": "Ingelesa (Australia)", - "en-bz": "Ingelesa (Belize)", - "en-ca": "Ingelesa (Kanada)", - "en": "Ingelesa", - "en-gb": "Ingelesa (Erresuma batua)", - "en-ie": "Ingelesa (Irlanda)", - "en-jm": "Ingelesa (Jamaika)", - "en-nz": "Ingelesa (Zeelanda Berria)", - "en-tt": "Ingelesa (Trinidad)", - "en-us": "Ingelesa (Estatu Batuak)", - "en-za": "Ingelesa (Hego Afrika)", - "es-ar": "Espainiera (Argentina)", - "es-bo": "Espainiera (Bolivia)", - "es-cl": "Espainiera (Txile)", - "es-co": "Espainiera (Kolonbia)", - "es-cr": "Espainiera (Costa Rica)", - "es-do": "Espainiera (Dominikar Errepublika)", - "es-ec": "Espainiera (Ekuador)", - "es-gt": "Espainiera (Guatemala)", - "es-hn": "Espainiera (Honduras)", - "es-mx": "Espainiera (Mexiko)", - "es-ni": "Espainiera (Nikaragua)", - "es-pa": "Espainiera (Panama)", - "es-pe": "Espainiera (Peru)", - "es-pr": "Espainiera (Puerto Rico)", - "es-py": "Espainiera (Paraguay)", - "es": "Espainiera (Espainia)", - "es-sv": "Espainiera (El Salvador)", - "es-uy": "Espainiera (Uruguai)", - "es-ve": "Espainiera (Venezuela)", - "et": "Estoniera", - "eu": "Euskara", - "fa": "Farsiera", - "fi": "Finlandiera", - "fo": "Faroera", - "fr-be": "Frantsesa (Belgika)", - "fr-ca": "Frantsesa (Kanada)", - "fr-ch": "Frantsesa (Suitza)", - "fr": "Frantsesa", - "fr-lu": "Frantsesa (Luxenburgo)", - "ga": "Irlandera", - "gd": "Gaelikoa (Eskozia)", - "he": "Hebreera", - "hi": "Hindi", - "hr": "Kroaziera", - "hu": "Hungariera", - "id": "Indonesiera", - "is": "Islandiera", - "it-ch": "Italiera (Suitza)", - "it": "Italiera", - "ja": "Japoniera", - "ji": "Yiddish", - "ko": "Korearra", - "lt": "Lituaniera", - "lv": "Letoniera", - "mk": "Mazedoniera (FYROM)", - "ms": "Malaysiera", - "mt": "Maltera", - "nl-be": "Nederlandera (Belgika)", - "nl": "Nederlandera", - "no": "Norvegiera", - "pl": "Poloniera", - "pt-br": "Brasilgo portugalera", - "pt": "Portugalera", - "rm": "Erretorromaniera", - "ro-mo": "Errumaniera (Moldavia)", - "ro": "Errumaniera", - "ru-mo": "Errusiera (Moldavia)", - "ru": "Errusiera", - "sb": "Sorbiera", - "sk": "Eslovakiera", - "sl": "Esloveniera", - "sq": "Albaniera", - "sr": "Serbiera", - "sv-fi": "Suediera (Finlandia)", - "sv": "Suediera", - "sx": "Sutu", - "sz": "Sami (Laponiera)", - "th": "Thailandiera", - "tn": "Tswanera", - "tr": "Turkiera", - "ts": "Tsonga", - "uk": "Ukrainera", - "ur": "Urdu", - "ve": "Vendera", - "vi": "Vietnamera", - "xh": "Xhosera", - "zh-cn": "Txinera (PRC)", - "zh-hk": "Txinera (Hong Kong)", - "zh-sg": "Txinera (Singapur)", - "zh-tw": "Txinera (Taiwan)", - "zu": "Zulu", "a room": "gela bat", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Mezu bat bidali da +%(msisdn)s zenbakira. Sartu hemen mezuko egiaztaketa kodea", "Accept": "Onartu", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index f6da302fad..0dd2a6fcbb 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -1,124 +1,4 @@ { - "af": "Afrikaans", - "ar-ae": "Arabic (U.A.E.)", - "ar-bh": "Arabic (Bahrain)", - "ar-dz": "Arabic (Algeria)", - "ar-eg": "Arabic (Egypt)", - "ar-iq": "Arabic (Iraq)", - "ar-jo": "Arabic (Jordan)", - "ar-kw": "Arabic (Kuwait)", - "ar-lb": "Arabic (Lebanon)", - "ar-ly": "Arabic (Libya)", - "ar-ma": "Arabic (Morocco)", - "ar-om": "Arabic (Oman)", - "ar-qa": "Arabic (Qatar)", - "ar-sa": "Arabic (Saudi Arabia)", - "ar-sy": "Arabic (Syria)", - "ar-tn": "Arabic (Tunisia)", - "ar-ye": "Arabic (Yemen)", - "be": "Belarusian", - "bg": "Bulgarian", - "ca": "Catalan", - "cs": "Czech", - "da": "Danish", - "de-at": "German (Austria)", - "de-ch": "German (Switzerland)", - "de": "German", - "de-li": "German (Liechtenstein)", - "de-lu": "German (Luxembourg)", - "el": "Greek", - "en-au": "English (Australia)", - "en-bz": "English (Belize)", - "en-ca": "English (Canada)", - "en": "English", - "en-gb": "English (United Kingdom)", - "en-ie": "English (Ireland)", - "en-jm": "English (Jamaica)", - "en-nz": "English (New Zealand)", - "en-tt": "English (Trinidad)", - "en-us": "English (United States)", - "en-za": "English (South Africa)", - "es-ar": "Spanish (Argentina)", - "es-bo": "Spanish (Bolivia)", - "es-cl": "Spanish (Chile)", - "es-co": "Spanish (Colombia)", - "es-cr": "Spanish (Costa Rica)", - "es-do": "Spanish (Dominican Republic)", - "es-ec": "Spanish (Ecuador)", - "es-gt": "Spanish (Guatemala)", - "es-hn": "Spanish (Honduras)", - "es-mx": "Spanish (Mexico)", - "es-ni": "Spanish (Nicaragua)", - "es-pa": "Spanish (Panama)", - "es-pe": "Spanish (Peru)", - "es-pr": "Spanish (Puerto Rico)", - "es-py": "Spanish (Paraguay)", - "es": "Spanish (Spain)", - "es-sv": "Spanish (El Salvador)", - "es-uy": "Spanish (Uruguay)", - "es-ve": "Spanish (Venezuela)", - "et": "Estonian", - "eu": "Basque (Basque)", - "fa": "Farsi", - "fi": "Finnish", - "fo": "Faeroese", - "fr-be": "French (Belgium)", - "fr-ca": "French (Canada)", - "fr-ch": "French (Switzerland)", - "fr": "French", - "fr-lu": "French (Luxembourg)", - "ga": "Irish", - "gd": "Gaelic (Scotland)", - "he": "Hebrew", - "hi": "Hindi", - "hr": "Croatian", - "hu": "Hungarian", - "id": "Indonesian", - "is": "Icelandic", - "it-ch": "Italian (Switzerland)", - "it": "Italian", - "ja": "Japanese", - "ji": "Yiddish", - "ko": "Coréen", - "lt": "Lithuanian", - "lv": "Latvian", - "mk": "Macedonian (FYROM)", - "ms": "Malaysian", - "mt": "Maltese", - "nl-be": "Dutch (Belgium)", - "nl": "Dutch", - "no": "Norwegian", - "pl": "Polish", - "pt-br": "Brazilian Portuguese", - "pt": "Portuguese", - "rm": "Rhaeto-Romanic", - "ro-mo": "Romanian (Republic of Moldova)", - "ro": "Romanian", - "ru-mo": "Russian (Republic of Moldova)", - "ru": "Russian", - "sb": "Sorbian", - "sk": "Slovak", - "sl": "Slovenian", - "sq": "Albanian", - "sr": "Serbe", - "sv-fi": "Swedish (Finland)", - "sv": "Swedish", - "sx": "Sutu", - "sz": "Sami (Lappish)", - "th": "Thai", - "tn": "Tswana", - "tr": "Turkish", - "ts": "Tsonga", - "uk": "Ukrainian", - "ur": "Urdu", - "ve": "Venda", - "vi": "Vietnamese", - "xh": "Xhosa", - "zh-cn": "Chinese (PRC)", - "zh-hk": "Chinese (Hong Kong SAR)", - "zh-sg": "Chinese (Singapore)", - "zh-tw": "Chinese (Taiwan)", - "zu": "Zulu", "anyone": "n'importe qui", "Direct Chat": "Discussion directe", "Direct chats": "Conversations directes", diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json index 2d9daecc49..0967ef424b 100644 --- a/src/i18n/strings/he.json +++ b/src/i18n/strings/he.json @@ -1,21 +1 @@ -{ - "ar-ae": "ערבית (U.A.E)", - "ar-bh": "ערבית (בחריין)", - "ar-dz": "ערבית (אלג'יריה)", - "ar-eg": "ערבית (מצריים)", - "ar-iq": "ערבית (עיראק)", - "ar-jo": "ערבית (ירדן)", - "af": "אפריקאית", - "ar-kw": "ערבית (כווית)", - "ar-lb": "ערבית (לבנון)", - "ar-ly": "ערבית (לוב)", - "ar-ma": "ערבית (מרוקו)", - "ar-om": "ערבית (אומן)", - "ar-qa": "ערבית (קטאר)", - "ar-sa": "ערבית (ערב הסעודית)", - "ar-sy": "ערבית (סוריה)", - "ar-tn": "ערבית (תוניסיה)", - "ar-ye": "ערבית (תימן)", - "be": "בלארוסית", - "bg": "בולגרית" -} +{} diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index eea96f9ea3..4809cb6559 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -25,123 +25,6 @@ "Thursday": "Csütörtök", "Friday": "Péntek", "Saturday": "Szombat", - "af": "Afrikaans", - "ar-ae": "Arabic (U.A.E.)", - "ar-bh": "Arab (Bahrain)", - "ar-dz": "Arab (Algeria)", - "ar-eg": "Arab (Egypt)", - "ar-iq": "Arab (Iraq)", - "ar-jo": "Arab (Jordan)", - "ar-kw": "Arab (Kuwait)", - "ar-lb": "Arab (Lebanon)", - "ar-ly": "Arab (Libya)", - "ar-ma": "Arab (Morocco)", - "ar-om": "Arab (Oman)", - "ar-qa": "Arab (Qatar)", - "ar-sa": "Arab (Saudi Arabia)", - "ar-sy": "Arab (Syria)", - "ar-tn": "Arab (Tunisia)", - "ar-ye": "Arab (Yemen)", - "be": "Belorusz", - "bg": "Bolgár", - "ca": "Katalán", - "cs": "Cseh", - "da": "Dán", - "de-at": "Német (Osztrák)", - "de-ch": "Német (Svájci)", - "de": "Német", - "de-li": "Német (Lichtenstein)", - "de-lu": "Német (Luxemburg)", - "el": "Görög", - "en-au": "Angol (Ausztrál)", - "en-bz": "Angol (Belize)", - "en-ca": "Angol (Kanada)", - "en": "Angol", - "en-gb": "Angol (Egyesült Királyság)", - "en-ie": "Angol (Ír)", - "en-jm": "Angol (Jamaika)", - "en-nz": "Angol (Új-Zéland)", - "en-tt": "Angol (Trinidad)", - "en-us": "Angol (Egyesült Államok)", - "en-za": "Angol (Dél-Afrika)", - "es-ar": "Spanyol (Argentína)", - "es-bo": "Spanyol (Bolívia)", - "es-cl": "Spanyol (Chile)", - "es-co": "Spanyol (Kolumbia)", - "es-cr": "Spanyol (Costa Rica)", - "es-do": "Spanyol (Dominikai Köztársaság)", - "es-ec": "Spanyol (Ecuador)", - "es-gt": "Spanyol (Guatemala)", - "es-hn": "Spanyol (Honduras)", - "es-mx": "Spanyol (Mexikó)", - "es-ni": "Spanyol (Nicaragua)", - "es-pa": "Spanyol (Panama)", - "es-pe": "Spanyol (Peru)", - "es-pr": "Spanyol (Puerto Rico)", - "es-py": "Spanyol (Paraguay)", - "es": "Spanyol (Spanyol)", - "es-sv": "Spanyol (El Salvador)", - "es-uy": "Spanyol (Uruguay)", - "es-ve": "Spanyol (Venezuela)", - "et": "Észt", - "eu": "Baszk (Baszk)", - "fa": "Perzsa", - "fi": "Finn", - "fo": "Feröer", - "fr-be": "Francia (Belgium)", - "fr-ca": "Francia (Kanada)", - "fr-ch": "Francia (Svájc)", - "fr": "Francia", - "fr-lu": "Francia (Luxemburg)", - "ga": "Ír", - "gd": "Gall (Skót)", - "he": "Héber", - "hi": "Hindu", - "hr": "Horvát", - "hu": "Magyar", - "id": "Indonéz", - "is": "Izland", - "it-ch": "Olasz (Svájc)", - "it": "Olasz", - "ja": "Japán", - "ji": "Jiddis", - "ko": "Korea", - "lt": "Litván", - "lv": "Lett", - "mk": "Macedónia (FYROM)", - "ms": "Maláj", - "mt": "Málta", - "nl-be": "Holland (Belgium)", - "nl": "Holland", - "no": "Norvég", - "pl": "Lengyel", - "pt-br": "Portugál (Brazil)", - "pt": "Portugál", - "ro-mo": "Román (Moldova)", - "ro": "Román", - "ru-mo": "Orosz (Moldova)", - "ru": "Orosz", - "sk": "Szlovák", - "sl": "Szlovén", - "sq": "Albán", - "sr": "Szerb", - "sv-fi": "Svéd (Finn)", - "sv": "Svéd", - "sx": "Sutu", - "sz": "Sami (Lapp)", - "th": "Thai", - "tr": "Török", - "ts": "Tsonga", - "uk": "Ukrán", - "ur": "Urdu", - "ve": "Venda", - "vi": "Vietnám", - "xh": "Xhosa", - "zh-cn": "Kína (PRC)", - "zh-hk": "Kína (Hong Kong SAR)", - "zh-sg": "Kína (Szingapúr)", - "zh-tw": "Kína (Tajvan)", - "zu": "Zulu", "A registered account is required for this action": "Regisztrált fiókra van szükség ehhez a művelethez", "a room": "egy szoba", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Elküldtük a szöveges üzenetet ide: +%(msisdn)s. Kérlek add meg az ellenőrző kódot ami benne van", diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 71b2f145a6..67df5bc332 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -20,10 +20,6 @@ "Error": "Errore", "Failed to join the room": "Impossibile entrare nella stanza", "Favourite": "Preferito", - "ar-ae": "Arabo (U.A.E.)", - "ar-bh": "Arabo (Bahrain)", - "ar-dz": "Arabo (Algeria)", - "ar-eg": "Arabo (Egitto)", "Sunday": "Domenica", "Monday": "Lunedì", "Tuesday": "Martedì", @@ -36,117 +32,6 @@ "Drop here %(toAction)s": "Rilascia qui %(toAction)s", "Failed to change password. Is your password correct?": "Modifica password fallita. La tua password è corretta?", "Continue": "Continua", - "ar-iq": "Arabo (Iraq)", - "ar-jo": "Arabo (Giordania)", - "ar-kw": "Arabo (Kuwait)", - "ar-lb": "Arabo (Libano)", - "ar-ly": "Arabo (Libia)", - "ar-ma": "Arabo (Marocco)", - "ar-om": "Arabo (Oman)", - "ar-qa": "Arabo (Qatar)", - "ar-sa": "Arabo (Arabia Saudita)", - "ar-sy": "Arabo (Siria)", - "ar-tn": "Arabo (Tunisia)", - "ar-ye": "Arabo (Yemen)", - "be": "Bielorusso", - "bg": "Bulgaro", - "ca": "Catalano", - "da": "Danese", - "de-at": "Tedesco (Austria)", - "de-ch": "Tedesco (Svizzera)", - "de": "Tedesco", - "de-li": "Tedesco (Liechtenstein)", - "de-lu": "Tedesco (Lussemburgo)", - "el": "Greco", - "en-au": "Inglese (Australia)", - "en-bz": "Inglese (Belize)", - "en-ca": "Inglese (Canada)", - "en": "Inglese", - "en-gb": "Inglese (Regno Unito)", - "en-ie": "Inglese (Irlanda)", - "en-jm": "Inglese (Jamaica)", - "en-nz": "Inglese (Nuova Zelanda)", - "en-tt": "Inglese (Trinidad)", - "en-us": "Inglese (Stati Uniti)", - "en-za": "Inglese (Sud Africa)", - "es-ar": "Spagnolo (Argentina)", - "es-bo": "Spagnolo (Bolivia)", - "es-cl": "Spagnolo (Cile)", - "es-co": "Spagnolo (Colombia)", - "es-cr": "Spagnolo (Costa Rica)", - "es-do": "Spagnolo (Repubblica Dominicana)", - "es-ec": "Spagnolo (Ecuador)", - "es-gt": "Spagnolo (Guatemala)", - "es-hn": "Spagnolo (Honduras)", - "es-mx": "Spagnolo (Messico)", - "es-ni": "Spagnolo (Nicaragua)", - "es-pa": "Spagnolo (Panama)", - "es-pe": "Spagnolo (Perù)", - "es-pr": "Spagnolo (Porto Rico)", - "es-py": "Spagnolo (Paraguay)", - "es": "Spagnolo (Spagna)", - "es-sv": "Spagnolo (El Salvador)", - "es-uy": "Spagnolo (Uruguay)", - "es-ve": "Spagnolo (Venezuela)", - "et": "Estone", - "eu": "Basco (Basco)", - "fa": "Farsi", - "fi": "Finlandese", - "fo": "Faeroese", - "fr-be": "Francese (Belgio)", - "fr-ca": "Francese (Canada)", - "fr-ch": "Francese (Svizzera)", - "fr": "Francese", - "fr-lu": "Francese (Lussemburgo)", - "ga": "Irlandese", - "gd": "Gaelico (Scozia)", - "he": "Ebraico", - "hi": "Hindi", - "hr": "Croato", - "hu": "Ungherese", - "id": "Indonesiano", - "is": "Islandese", - "it-ch": "Italiano (Svizzera)", - "it": "Italiano", - "ja": "Giapponese", - "ji": "Yiddish", - "ko": "Coreano", - "lt": "Lituano", - "lv": "Lettone", - "mk": "Macedone (FYROM)", - "ms": "Malese", - "mt": "Maltese", - "nl-be": "Olandese (Belgio)", - "nl": "Olandese", - "no": "Norvegese", - "pl": "Polacco", - "pt-br": "Portoghese Brasiliano", - "pt": "Portoghese", - "rm": "Romancio", - "ro-mo": "Rumeno (Repubblica di Moldavia)", - "ro": "Rumeno", - "ru-mo": "Russo (Repubblica di Moldavia)", - "ru": "Russo", - "sk": "Slovacco", - "sl": "Sloveno", - "sq": "Albanese", - "sr": "Serbo", - "sv-fi": "Svedese (Finlandia)", - "sv": "Svedese", - "sx": "Sutu", - "th": "Tailandese", - "tn": "Tswana", - "tr": "Turco", - "ts": "Tsonga", - "uk": "Ucraino", - "ur": "Urdu", - "vi": "Vietnamese", - "xh": "Xhosa", - "zh-cn": "Cinese (PRC)", - "zh-hk": "Cinese (Honk Kong SAR)", - "zh-sg": "Cinese (Singapore)", - "zh-tw": "Cinese (Taiwan)", - "zu": "Zulu", "a room": "una stanza", "%(targetName)s accepted an invitation.": "%(targetName)s ha accettato un invito.", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s ha accettato l'invito per %(displayName)s.", diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index f0be3024a5..37eb3cfa5c 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -1,5 +1,4 @@ { - "ja": "日本語", "Anyone": "誰でも", "Anyone who knows the room's link, apart from guests": "誰でも部屋に参加できる (ゲストユーザは不可)", "Anyone who knows the room's link, including guests": "誰でも部屋に参加できる (ゲストユーザも可能)", @@ -63,125 +62,6 @@ "Riot collects anonymous analytics to allow us to improve the application.": "Riotはアプリケーションを改善するために匿名の分析情報を収集しています。", "Start chatting": "対話開始", "Start Chatting": "対話開始", - "af": "アフリカーンス語", - "be": "ベラルーシ語", - "bg": "ブルガリア語", - "ca": "カタルーニャ語", - "cs": "チェコ語", - "da": "デンマーク語", - "de-at": "ドイツ語(オーストリア)", - "de-ch": "ドイツ語(スイス)", - "de": "ドイツ語", - "de-li": "ドイツ語(リヒテンシュタイン)", - "de-lu": "ドイツ語(ルクセンブルク)", - "el": "ギリシア語", - "en-au": "英語(オーストラリア)", - "en-bz": "英語(ベリーズ)", - "en-ca": "英語(カナダ)", - "en": "英語", - "en-gb": "英語(イギリス)", - "en-ie": "英語(アイルランド)", - "en-jm": "英語(ジャマイカ)", - "en-nz": "英語 (ニュージーランド)", - "en-tt": "英語 (トリニダード)", - "ar-ae": "アラビア語 (アラブ首長国連邦)", - "ar-bh": "アラビア語 (バーレーン)", - "ar-dz": "アラビア語 (アルジェリア)", - "ar-eg": "アラビア語 (エジプト)", - "ar-iq": "アラビア語 (イラク)", - "ar-jo": "アラビア語 (ヨルダン)", - "ar-kw": "アラビア語 (クウェート)", - "ar-lb": "アラビア語 (レバノン)", - "ar-ly": "アラビア語 (リビア)", - "ar-ma": "アラビア語 (モロッコ)", - "ar-om": "アラビア語 (オマーン)", - "ar-qa": "アラビア語 (カタール)", - "ar-sa": "アラビア語 (サウジアラビア)", - "ar-sy": "アラビア語 (シリア)", - "ar-tn": "アラビア語 (チュニジア)", - "ar-ye": "アラビア語 (イエメン)", - "en-us": "英語 (アメリカ合衆国)", - "en-za": "英語 (南アフリカ)", - "es-ar": "スペイン語 (アルゼンチン)", - "es-bo": "スペイン語 (ボリビア)", - "es-cl": "スペイン語 (チリ)", - "es-co": "スペイン語 (コロンビア)", - "es-cr": "スペイン語 (コスタリカ)", - "es-do": "スペイン語 (ドミニカ共和国)", - "es-ec": "スペイン語 (エクアドル)", - "es-gt": "スペイン語 (グアテマラ)", - "es-hn": "スペイン語 (ホンジュラス)", - "es-mx": "スペイン語 (メキシコ)", - "es-ni": "スペイン語 (ニカラグア)", - "es-pa": "スペイン語 (パナマ)", - "es-pe": "スペイン語 (ペルー)", - "es-pr": "スペイン語 (プエルトリコ)", - "es-py": "スペイン語 (パラグアイ)", - "es": "スペイン語 (スペイン)", - "es-sv": "スペイン語 (エルサルバドル)", - "es-uy": "スペイン語 (ウルグアイ)", - "es-ve": "スペイン語 (ベネズエラ)", - "et": "エストニア語", - "eu": "バスク語", - "fa": "ペルシャ語", - "fi": "フィンランド語", - "fo": "フェロー語", - "fr-be": "フランス語 (ベルギー)", - "fr-ca": "フランス語 (カナダ)", - "fr-ch": "フランス語 (スイス)", - "fr": "フランス語 (フランス)", - "fr-lu": "フランス語 (ルクセンブルグ)", - "ga": "アイルランド語", - "gd": "ゲール語 (スコットランド)", - "he": "ヘブライ語", - "hi": "ヒンズー語", - "hr": "クロアチア語", - "hu": "ハンガリー語", - "id": "インドネシア語", - "is": "アイスランド語", - "it-ch": "イタリア語 (スイス)", - "it": "イタリア語 (イタリア)", - "ji": "イディッシュ語", - "ko": "韓国語", - "lt": "リトアニア語", - "lv": "ラトビア語", - "mk": "マケドニア語 (FYROM)", - "ms": "マレー語", - "mt": "マルタ語", - "nl-be": "オランダ語 (ベルギー)", - "nl": "オランダ語", - "no": "ノルウェー語 (ブークモール)", - "pl": "ポーランド語", - "pt-br": "ポルトガル語 (ブラジル)", - "pt": "ポルトガル語 (ポルトガル)", - "rm": "レトロマン語", - "ro-mo": "ルーマニア語 (モルドバ)", - "ro": "ルーマニア語", - "ru-mo": "ロシア語 (モルドバ)", - "ru": "ロシア語", - "sb": "ソルビア語", - "sk": "スロバキア語", - "sl": "スロベニア語", - "sq": "アルバニア語", - "sr": "セルビア語", - "sv-fi": "スウェーデン語 (フィンランド)", - "sv": "スウェーデン語", - "sx": "ソト語", - "sz": "サーミ語 (ラップ語)", - "th": "タイ語", - "tn": "ツワナ語", - "tr": "トルコ語", - "ts": "ツォンガ語", - "uk": "ウクライナ語", - "ur": "ウルドゥー語", - "ve": "ヴェンダ語", - "vi": "ベトナム語", - "xh": "コーサ語", - "zh-cn": "中国語 (中華人民共和国)", - "zh-hk": "中国語 (香港)", - "zh-sg": "中国語 (シンガポール)", - "zh-tw": "中国語 (台湾)", - "zu": "ズールー語", "Add": "追加", "No Microphones detected": "マイクが見つかりません", "No Webcams detected": "カメラが見つかりません", diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index e5faf01da7..89de8eae1f 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -1,32 +1,4 @@ { - "af": "아프리칸스어", - "ar-ae": "아랍어 (아랍 에미리트 연방)", - "ar-bh": "아랍어 (바레인)", - "ar-dz": "아랍어 (알제리)", - "ar-eg": "아랍어 (이집트)", - "ar-iq": "아랍어 (이라크)", - "ar-jo": "아랍어 (요르단)", - "ar-kw": "아랍어 (쿠웨이트)", - "ar-lb": "아랍어 (레바논)", - "ar-ly": "아랍어 (리비아)", - "ar-ma": "아랍어 (모로코)", - "ar-om": "아랍어 (오만)", - "ar-qa": "아랍어 (카타르)", - "ar-sa": "아랍어 (사우디아라비아)", - "ar-sy": "아랍어 (시리아)", - "ar-tn": "아랍어 (튀니지)", - "ar-ye": "아랍어 (예멘)", - "be": "벨라루스어", - "bg": "불가리아어", - "ca": "카탈로니아어", - "cs": "체코어", - "da": "덴마크어", - "de-at": "독일어 (오스트리아)", - "de-ch": "독일어 (스위스)", - "de": "독일어", - "de-li": "독일어 (리히텐슈타인)", - "de-lu": "독일어 (룩셈부르크)", - "el": "그리스어", "Cancel": "취소", "Close": "닫기", "Create new room": "새 방 만들기", @@ -54,96 +26,6 @@ "OK": "알았어요", "Welcome page": "환영 화면", "Continue": "게속하기", - "en-au": "영어 (호주)", - "en-bz": "영어 (벨리즈)", - "en-ca": "영어 (캐나다)", - "en": "영어", - "en-gb": "영어 (영국)", - "en-ie": "영어 (아일랜드)", - "en-jm": "영어 (자메이카)", - "en-nz": "영어 (뉴질랜드)", - "en-tt": "영어 (트리니다드토바고)", - "en-us": "영어 (미국)", - "en-za": "영어 (남아프리카)", - "es-ar": "스페인어 (아르헨티나)", - "es-bo": "스페인어 (볼리비아)", - "es-cl": "스페인어 (칠레)", - "es-co": "스페인어 (콜롬비아)", - "es-cr": "스페인어 (코스타리카)", - "es-do": "스페인어 (도미니카 공화국)", - "es-ec": "스페인어 (에콰도르)", - "es-gt": "스페인어 (과테말라)", - "es-hn": "스페인어 (온두라스)", - "es-mx": "스페인어 (멕시코)", - "es-ni": "스페인어 (니카라과)", - "es-pa": "스페인어 (파나마)", - "es-pe": "스페인어 (페루)", - "es-pr": "스페인어 (푸에르토리코)", - "es-py": "스페인어 (파라과이)", - "es": "스페인어 (스페인)", - "es-sv": "스페인어 (엘살바도르)", - "es-uy": "스페인어 (우루과이)", - "es-ve": "스페인어 (베네수엘라)", - "et": "에스토니아어", - "eu": "바스크어 (바스크)", - "fa": "페르시아어", - "fi": "핀란드어", - "fo": "페로스어", - "fr-be": "프랑스어 (벨기에)", - "fr-ca": "프랑스어 (캐나다)", - "fr-ch": "프랑스어 (스위스)", - "fr": "프랑스어", - "fr-lu": "프랑스어 (룩셈부르크)", - "ga": "아일랜드어", - "gd": "게일어 (스코틀랜드)", - "he": "히브리어", - "hi": "힌디어", - "hr": "크로아티아어", - "hu": "헝가리어", - "id": "인도네시아어", - "is": "아이슬란드어", - "it-ch": "이탈리아어 (스위스)", - "it": "이탈리아어", - "ja": "일본어", - "ji": "이디시어", - "ko": "한국어", - "lt": "리투아니아어", - "lv": "라트비아어", - "mk": "마케도니아어 (마케도니아 공화국)", - "ms": "말레이시아어", - "mt": "몰타어", - "nl-be": "네덜란드어 (벨기에)", - "nl": "네덜란드어", - "no": "노르웨이어", - "pl": "폴란드어", - "pt-br": "브라질 포르투갈어", - "pt": "포르투갈어", - "rm": "레토로만어", - "ro-mo": "루마니아어 (몰도바 공화국)", - "ro": "루마니아어", - "ru-mo": "러시아어 (몰도바 공확국)", - "ru": "러시아어", - "sb": "소르비아어", - "sk": "슬로바키아어", - "sr": "세르비아어", - "sv-fi": "스웨덴어 (핀란드)", - "sv": "스웨덴어", - "sx": "수투어", - "sz": "라플란드어 (라플란드)", - "th": "태국", - "tn": "츠와나어", - "tr": "터키어", - "ts": "총가어", - "uk": "우크라이나어", - "ur": "우르두어", - "ve": "벤다어", - "vi": "베트남어", - "xh": "코사어", - "zh-cn": "중국어 (중국)", - "zh-hk": "중국어 (홍콩)", - "zh-sg": "중국어 (싱가포르)", - "zh-tw": "중국어 (대만)", - "zu": "줄루어", "a room": "방", "Accept": "수락", "Account": "계정", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 041403b32f..9599d2e2d1 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -1,124 +1,4 @@ { - "af": "Afrikandu", - "ar-ae": "Arābu (A.A.E.)", - "ar-bh": "Arābu (Bahraina)", - "ar-dz": "Arābu (Alžīrija)", - "ar-eg": "Arābu (Ēģipte)", - "ar-iq": "Arābu (Irāka)", - "ar-jo": "Arābu (Jordāna)", - "ar-kw": "Arābu (Kuveita)", - "ar-lb": "Arābu (Lebanēna)", - "ar-ly": "Arābu (Lībija)", - "ar-ma": "Arābu (Maroka)", - "ar-om": "Arābu (Omāna)", - "ar-qa": "Arābu (Kvatara)", - "ar-sa": "Arābu (Saūda Arābija)", - "ar-sy": "Arābu (Sīrija)", - "ar-tn": "Arābu (Tunisija)", - "ar-ye": "Arābu (Jemena)", - "be": "Baltkrievu", - "bg": "Bulgāru", - "ca": "Katalāņu", - "cs": "Čehu", - "da": "Dāņu", - "de-at": "Vācu (Austrija)", - "de-ch": "Vācu (Šveice)", - "de": "Vācu", - "de-li": "Vācu (Lihtenšteina)", - "de-lu": "Vācu (Luksemburga)", - "el": "Grieķu", - "en-au": "Angļu (Austrālija)", - "en-bz": "Angļu (Beliza)", - "en-ca": "Angļu (Kanāda)", - "en": "Angļu", - "en-gb": "Angļu (Apvienotā Karaliste)", - "en-ie": "Angļu (Īrija)", - "en-jm": "Angļu (Jamaika)", - "en-nz": "Angļu (Jaunzēlande)", - "en-tt": "Angļu (Trinidāda)", - "en-us": "Angļu (ASV)", - "en-za": "Angļu (Dienvidāfrika)", - "es-ar": "Spāņu (Argentīna)", - "es-bo": "Spāņu (Bolīvija)", - "es-cl": "Spāņu (Čīle)", - "es-co": "Spāņu (Kolumbija)", - "es-cr": "Spāņu (Kostarika)", - "es-do": "Spāņu (Dominikānas Republika)", - "es-ec": "Spāņu (Ekvadora)", - "es-gt": "Spāņu (Gvatemala)", - "es-hn": "Spāņu (Hondurasa)", - "es-mx": "Spāņu (Meksika)", - "es-ni": "Spāņu (Nikaragva)", - "es-pa": "Spāņu (Panama)", - "es-pe": "Spāņu (Peru)", - "es-pr": "Spāņu (Puertoriko)", - "es-py": "Spāņu (Paragvaja)", - "es": "Spāņu (Spānija)", - "es-sv": "Spāņu (Salvadora)", - "es-uy": "Spāņu (Urugvaja)", - "es-ve": "Spāņu (Venecuēla)", - "et": "Igauņu", - "eu": "Basku (Basku Zeme)", - "fa": "Farsi", - "fi": "Somu", - "fo": "Fēriešu", - "fr-be": "Franču (Beļģija)", - "fr-ca": "Franču (Kanāda)", - "fr-ch": "Franču (Šveice)", - "fr": "Franču", - "fr-lu": "Franču (Luksemburga)", - "ga": "Īru", - "gd": "Gallu (Skotija)", - "he": "Ebreju", - "hi": "Hindi", - "hr": "Kroātu", - "hu": "Ungāru", - "id": "Indonēziešu", - "is": "Islandiešu", - "it-ch": "Itāļu (Šveice)", - "it": "Itāļu", - "ja": "Japāņu", - "ji": "Jidišs", - "ko": "Korejiešu", - "lt": "Lietuviešu", - "lv": "Latviešu", - "mk": "Maķedoniešu (FYROM)", - "ms": "Malaiziešu", - "mt": "Maltiešu", - "nl-be": "Nīderlandiešu (Beļģija)", - "nl": "Nīderlandiešu", - "no": "Norvēģu", - "pl": "Poļu", - "pt-br": "Brazīlijas portugāļu", - "pt": "Portugāļu", - "rm": "Retoromāņu", - "ro-mo": "Rumāņu (Moldovas Republika)", - "ro": "Rumāņu", - "ru-mo": "Krievu (Moldovas Republika)", - "ru": "Krievu", - "sb": "Sorbu", - "sk": "Slovāku", - "sl": "Slovēņu", - "sq": "Albāniešu", - "sr": "Serbu", - "sv-fi": "Zviedru (Somija)", - "sv": "Zviedru", - "sx": "Sutu", - "sz": "Sāmu (Lapu)", - "th": "Taju", - "tn": "Cvanu", - "tr": "Turku", - "ts": "Congu", - "uk": "Ukraiņu", - "ur": "Urdu", - "ve": "Vendu", - "vi": "Vjetnamiešu", - "xh": "Khosu", - "zh-cn": "Ķīniešu (ĶTR)", - "zh-hk": "Ķīniešu (Honkongas SAR)", - "zh-sg": "Ķīniešu (Singapūra)", - "zh-tw": "Ķīniešu (Taivāna)", - "zu": "Zulu", "a room": "istaba", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Teksta ziņa tika nosūtīta +%(msisdn)s. Lūdzu ievadi tajā atrodamo verifikācijas kodu", "Accept": "Apstiprināt", diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json index 97c9edd749..9f10cd25b7 100644 --- a/src/i18n/strings/ml.json +++ b/src/i18n/strings/ml.json @@ -33,8 +33,5 @@ "Failed to change password. Is your password correct?": "രഹസ്യവാക്ക് മാറ്റാന്‍ സാധിച്ചില്ല. രഹസ്യവാക്ക് ശരിയാണോ ?", "Continue": "മുന്നോട്ട്", "Microphone": "മൈക്രോഫോൺ", - "Camera": "ക്യാമറ", - "af": "ആഫ്രിക്കാൻസ്", - "ar-ae": "അറബി (യു.എ.ഇ.)", - "ar-bh": "അറബി (ബഹറിൻ)" + "Camera": "ക്യാമറ" } diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index ebb1c42056..bc92d7bcad 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1,125 +1,4 @@ { - "af": "Afrikaans", - "ar-ae": "Arabisch (U.A.E.)", - "Direct Chat": "Privégesprek", - "ar-bh": "Arabisch (Bahrain)", - "ar-dz": "Arabisch (Algerije)", - "ar-eg": "Arabisch (Egypte)", - "ar-iq": "Arabisch (Irak)", - "ar-jo": "Arabisch (Jordanië)", - "ar-kw": "Arabisch (Koeweit)", - "ar-lb": "Arabisch (Libanon)", - "ar-ly": "Arabisch (Libië)", - "ar-ma": "Arabisch (Marokko)", - "ar-om": "Arabisch (Oman)", - "ar-qa": "Arabisch (Katar)", - "ar-sa": "Arabisch (Saoedi-Arabië)", - "ar-sy": "Arabisch (Syrië)", - "ar-tn": "Arabisch (Tunesië)", - "ar-ye": "Arabisch (Jemen)", - "be": "Wit-Russisch", - "bg": "Bulgaars", - "ca": "Catalaans", - "cs": "Tsjechisch", - "da": "Deens", - "de-at": "Duits (Oostenrijk)", - "de-ch": "Duits (Zwitserland)", - "de": "Duits", - "de-li": "Duits (Liechtenstein)", - "de-lu": "Duits (Luxemburg)", - "el": "Grieks", - "en-au": "Engels (Australië)", - "en-bz": "Engels (Belize)", - "en-ca": "Engels (Canada)", - "en": "Engels", - "en-gb": "Engels (Verenigd Koningkrijk)", - "en-ie": "Engels (Ierland)", - "en-jm": "Engels (Jamaica)", - "en-nz": "Engels (Nieuw Zeeland)", - "en-tt": "Engels (Trinidad)", - "en-us": "Engels (Verenigde Staten)", - "en-za": "Engels (Zuid-Afrika)", - "es-ar": "Spaans (Argentinië)", - "es-bo": "Spaans (Bolivië)", - "es-cl": "Spaans (Chili)", - "es-co": "Spaans (Colombia)", - "es-cr": "Spaans (Costa Rica)", - "es-do": "Spaans (Dominicaanse Republiek)", - "es-ec": "Spaans (Ecuador)", - "es-gt": "Spaans (Guatemala)", - "es-hn": "Spaans (Honduras)", - "es-mx": "Spaans (Mexico)", - "es-ni": "Spaans (Nicaragua)", - "es-pa": "Spaans (Panama)", - "es-pe": "Spaans (Peru)", - "es-pr": "Spaans (Puerto Rico)", - "es-py": "Spaans (Paraguay)", - "es": "Spaans (Spanje)", - "es-sv": "Spaans (El Salvador)", - "es-uy": "Spaans (Uruguay)", - "es-ve": "Spaans (Venezuela)", - "et": "Estlands", - "eu": "Baskisch (Bask)", - "fa": "Perzisch (Farsi)", - "fi": "Fins", - "fo": "Faeroesisch", - "fr-be": "Frans (België)", - "fr-ca": "Frans (Canada)", - "fr-ch": "Frans (Zwitserland)", - "fr": "Frans", - "fr-lu": "Frans (Luxemburg)", - "ga": "Iers", - "gd": "Keltisch (Schotland)", - "he": "Hebreeuws", - "hi": "Hindi", - "hr": "Kroatisch", - "hu": "Hongaars", - "id": "Indonesisch", - "is": "IJslands", - "it-ch": "Italiaans (Zwitserland)", - "it": "Italiaans", - "ja": "Japans", - "ji": "Jiddisch", - "ko": "Koreaans", - "lt": "Litouws", - "lv": "Lets", - "mk": "Macedonië (FYROM)", - "ms": "Maleisisch", - "mt": "Maltees", - "nl-be": "Nederlands (België)", - "nl": "Nederlands", - "no": "Noors", - "pl": "Pools", - "pt-br": "Braziliaans Portugees", - "pt": "Portugees", - "rm": "Rhetoromaans", - "ro-mo": "Roemeens (Moldavië)", - "ro": "Roemeens", - "ru-mo": "Russisch (Moldavië)", - "ru": "Russisch", - "sb": "Sorbisch", - "sk": "Slovaaks", - "sl": "Sloveens", - "sq": "Albanees", - "sr": "Servisch", - "sv-fi": "Zweeds (Finland)", - "sv": "Zweeds", - "sx": "Sutu", - "sz": "Sami (Lapland)", - "th": "Thais", - "tn": "Tswana", - "tr": "Turks", - "ts": "Tsonga", - "uk": "Oekraïens", - "ur": "Urdu", - "ve": "Venda", - "vi": "Vietnamees", - "xh": "Xhosa", - "zh-cn": "Chinees (PRC)", - "zh-hk": "Chinees (Hong Kong SAR)", - "zh-sg": "Chinees (Singapore)", - "zh-tw": "Chinees (Taiwan)", - "zu": "Zulu", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Voer alsjeblieft de verificatiecode in die is verstuurd naar +%(msisdn)s", "accept": "accepteer", "%(targetName)s accepted an invitation.": "%(targetName)s heeft een uitnodiging geaccepteerd.", diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 624302543d..724fa24564 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -72,21 +72,6 @@ "Usage": "Użycie", "Upload file": "Prześlij plik", "Unban": "Odbanuj", - "en": "Angielski", - "fi": "Fiński", - "fr": "Francuski", - "he": "Hebrajski", - "hu": "Węgierski", - "it": "Włoski", - "ja": "Japoński", - "no": "Norweski", - "pl": "Polski", - "ru": "Rosyjski", - "sq": "Albański", - "sr": "Serbski", - "th": "Tajski", - "uk": "Ukraiński", - "vi": "Wietnamski", "Accept": "Akceptuj", "Account": "Konto", "Add": "Dodaj", @@ -129,109 +114,7 @@ "Please Register": "Proszę się zarejestrować", "powered by Matrix": "napędzany przez Matrix", "Failed to change password. Is your password correct?": "Zmiana hasła nie powiodła się. Czy Twoje hasło jest poprawne?", - "be": "Białoruski", - "bg": "Bułgarski", - "cs": "Czeski", - "da": "Duński", - "de": "Niemiecki", - "el": "Grecki", - "et": "Estoński", - "ga": "Irlandzki", - "hr": "Chorwacki", - "is": "Islandzki", - "hi": "Hindi", - "lt": "Litewski", - "lv": "Łotewski", - "nl": "Holenderski", - "pt": "Portugalski", - "sl": "Słoweński", - "sk": "Słowacki", - "sv": "Szwedzki", - "tr": "Turecki", "Add a topic": "Dodaj temat", - "af": "Afrikaans", - "ar-ae": "Arabski (ZEA)", - "ar-bh": "Arabski (Bahrajn)", - "ar-dz": "Arabski (Algieria)", - "ar-eg": "Arabski (Egipt)", - "ar-iq": "Arabski (Irak)", - "ar-jo": "Arabski (Jordania)", - "ar-kw": "Arabski (Kuwejt)", - "ar-lb": "Arabski (Liban)", - "ar-ly": "Arabski (Libia)", - "ar-ma": "Arabski (Maroko)", - "ar-om": "Arabski (Oman)", - "ar-qa": "Arabski (Katar)", - "ar-sa": "Arabski (Arabia Saudyjska)", - "ar-sy": "Arabski (Syria)", - "ar-tn": "Arabski (Tunezja)", - "ar-ye": "Arabski (Jemen)", - "ca": "Kataloński", - "de-at": "Niemiecki (Austria)", - "de-ch": "Niemiecki (Szwajcaria)", - "de-li": "Niemiecki (Liechtenstein)", - "de-lu": "Niemiecki (Luksemburg)", - "en-au": "Angielski (Australia)", - "en-bz": "Angielski (Belize)", - "en-ca": "Angielski (Kanada)", - "en-gb": "Angielski (Wielka Brytania)", - "en-ie": "Angielski (Irlandia)", - "en-jm": "Angielski (Jamajka)", - "en-nz": "Angielski (Nowa Zelandia)", - "en-tt": "Angielski (Trynidad)", - "en-us": "Angielski (Stany Zjednoczone)", - "en-za": "Angielski (Afryka Południowa)", - "es-ar": "Hiszpański (Argentyna)", - "es-bo": "Hiszpański (Boliwia)", - "es-cl": "Hiszpański (Chile)", - "es-co": "Hiszpański (Kolumbia)", - "es-cr": "Hiszpański (Kostaryka)", - "es-do": "Hiszpański (Dominikana)", - "es-ec": "Hiszpański (Ekwador)", - "es-gt": "Hiszpański (Gwatemala)", - "es-hn": "Hiszpański (Honduras)", - "es-mx": "Hiszpański (Meksyk)", - "es-ni": "Hiszpański (Nikaragua)", - "es-pa": "Hiszpański (Panama)", - "es-pe": "Hiszpański (Peru)", - "es-pr": "Hiszpański (Portoryko)", - "es-py": "Hiszpański (Paragwaj)", - "es": "Hiszpański (Hiszpania)", - "es-sv": "Hiszpański (Salwador)", - "es-uy": "Hiszpański (Urugwaj)", - "es-ve": "Hiszpański (Wenezuela)", - "eu": "Baskijski", - "fa": "Perski", - "fr-be": "Francuski (Belgia)", - "fr-ca": "Francuski (Kanada)", - "fr-ch": "Francuski (Szwajcaria)", - "fr-lu": "Francuski (Luksemburg)", - "gd": "Gaelicki (Szkocja)", - "id": "Indonezyjski", - "it-ch": "Włoski (Szwajcaria)", - "ji": "Jidysz", - "ko": "Koreański", - "mk": "Macedoński (BJRM)", - "ms": "Malezyjski", - "mt": "Maltański", - "nl-be": "Holenderski (Belgia)", - "pt-br": "Portugalski (Brazylia)", - "ro-mo": "Rumuński (Republika Mołdawii)", - "ro": "Rumuński", - "ru-mo": "Rosyjski (Republika Mołdawii)", - "sb": "Łużycki", - "sv-fi": "Szwedzki (Finlandia)", - "sx": "Sutu", - "sz": "Sami (Lapoński)", - "ts": "Tsonga", - "ur": "Urdu", - "ve": "Venda", - "xh": "Xhosa", - "zh-cn": "Chiński (ChRL)", - "zh-hk": "Chiński (Hongkong)", - "zh-sg": "Chiński (Singapur)", - "zh-tw": "Chiński (Tajwan)", - "zu": "Zuluski", "a room": "pokój", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Wysłano wiadomość tekstową do +%(msisdn)s. Proszę wprowadzić kod w niej zawarty", "%(targetName)s accepted an invitation.": "%(targetName)s zaakceptował(a) zaproszenie.", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index cb4ba65ec4..6342ab8f59 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -303,11 +303,6 @@ "Dec": "Dez", "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s de %(monthName)s às %(time)s", "%(weekDayName)s %(time)s": "%(weekDayName)s às %(time)s", - "en": "Inglês", - "pt-br": "Português do Brasil", - "de": "Alemão", - "da": "Dinamarquês", - "ru": "Russo", "%(targetName)s accepted an invitation.": "%(targetName)s aceitou um convite.", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s aceitou o convite para %(displayName)s.", "all room members, from the point they are invited": "todas/os as/os integrantes da sala, a partir do momento em que foram convidadas/os", @@ -431,70 +426,10 @@ "cancel all": "cancelar todas", "now. You can also select individual messages to resend or cancel.": "agora. Você também pode escolher mensagens individuais e definir se vai reenviar ou cancelar o envio.", "Active call": "Chamada ativa", - "af": "Afrikaans", - "ar-ae": "Árabe (E.A.U.)", - "ar-bh": "Árabe (Bahrain)", - "ar-dz": "Árabe (Argélia)", "Sunday": "Domingo", "Monday": "Segunda-feira", "ar-eg": "Árabe (Egito)", "ar-tn": "Árabe (Tunísia)", - "be": "Bielorrusso", - "bg": "Búlgaro", - "ca": "Catalão", - "cs": "Checo", - "el": "Grego", - "en-au": "Inglês (Austrália)", - "en-ca": "Inglês (Canadá)", - "en-gb": "Inglês (Reino Unido)", - "en-ie": "Inglês (Irlanda)", - "en-nz": "Inglês (Nova Zelândia)", - "en-us": "Inglês (Estados Unidos)", - "es-ar": "Espanhol (Argentina)", - "es-py": "Espanhol (Paraguai)", - "es": "Espanhol (Espanha)", - "et": "Estônia", - "fa": "Farsi", - "fi": "Finlandês", - "fr-be": "Francês (Bélgica)", - "fr-ca": "Francês (Canadá)", - "fr-ch": "Francês (Suíça)", - "fr": "Francês", - "ga": "Irlandês", - "he": "Hebreu", - "hi": "Hindu", - "hr": "Croácia", - "hu": "Hungria", - "id": "Indonésio", - "is": "Islandês", - "it": "Italiano", - "ja": "Japonês", - "ji": "Ídiche", - "lt": "Lituânia", - "lv": "Letão", - "ms": "Malaio", - "mt": "Maltês", - "nl-be": "Holandês (Bélgica)", - "nl": "Holandês", - "no": "Norueguês", - "pl": "Polonês", - "pt": "Português (Portugal)", - "rm": "Romanche", - "ro": "Romeno", - "sk": "Eslovaco", - "sl": "Esloveno", - "sq": "Albanês", - "sr": "Sérvio", - "sv": "Suécia", - "th": "Tailandês", - "tn": "Tsuana", - "tr": "Turquia", - "ts": "Tsonga", - "uk": "Ucraniano", - "ur": "Urdu", - "vi": "Vietnamita", - "xh": "Xhosa", - "zu": "Zulu", "Failed to forget room %(errCode)s": "Falha ao esquecer a sala %(errCode)s", "Failed to join the room": "Falha ao entrar na sala", "Tuesday": "Terça-feira", @@ -502,56 +437,7 @@ "Thursday": "Quinta-feira", "Friday": "Sexta-feira", "Saturday": "Sábado", - "ar-iq": "Árabe (Iraque)", - "ar-jo": "Árabe (Jordânia)", - "ar-kw": "Árabe (Kuwait)", - "ar-lb": "Árabe (Líbano)", - "ar-ly": "Árabe (Líbia)", - "ar-ma": "Árabe (Marrocos)", - "ar-om": "Árabe (Omã)", - "ar-qa": "Árabe (Catar)", - "ar-sa": "Árabe (Arábia Saudita)", - "ar-sy": "Árabe (Síria)", - "ar-ye": "Árabe (Iémen)", - "de-at": "Alemão (Áustria)", - "de-ch": "Alemão (Suíça)", - "de-li": "Alemão (Liechtenstein)", - "de-lu": "Alemão (Luxemburgo)", - "en-bz": "Inglês (Belize)", - "en-jm": "Inglês (Jamaica)", - "en-tt": "Inglês (Trindade)", - "en-za": "English (África do Sul)", - "es-bo": "Espanhol (Bolívia)", - "es-cl": "Espanhol (Chile)", - "es-co": "Espanhol (Colômbia)", - "es-cr": "Espanhol (Costa Rica)", - "es-do": "Espanhol (República Dominicana)", - "es-ec": "Espanhol (Equador)", - "es-gt": "Espanhol (Guatemala)", - "es-hn": "Espanhol (Honduras)", - "es-mx": "Espanhol (México)", - "es-ni": "Espanhol (Nicarágua)", - "es-pa": "Espanhol (Panamá)", "%(oneUser)schanged their avatar": "%(oneUser)salterou sua imagem pública", - "es-pe": "Espanhol (Peru)", - "es-pr": "Espanhol (Porto Rico)", - "es-sv": "Espanhol (El Salvador)", - "es-uy": "Espanhol (Uruguai)", - "es-ve": "Espanhol (Venezuela)", - "eu": "Basco (Basco)", - "fr-lu": "Francês (Luxemburgo)", - "gd": "Galês (Escócia)", - "it-ch": "Italiano (Suíça)", - "ko": "Coreano", - "mk": "Macedônio (República da Macedônia)", - "ro-mo": "Romano (Moldávia)", - "ru-mo": "Russo (Moldávia)", - "sb": "Sorábio", - "sv-fi": "Sueco (Finlândia)", - "zh-cn": "Chinês (República Popular da China)", - "zh-hk": "Chinês (Hong Kong SAR)", - "zh-sg": "Chinês (Singapura)", - "zh-tw": "Chinês (Taiwan)", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Uma mensagem de texto foi enviada para +%(msisdn)s. Gentileza entrar com o código de verificação que contém", "%(items)s and %(remaining)s others": "%(items)s e %(remaining)s outros", "%(items)s and one other": "%(items)s e um outro", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index cd6230cd68..18294eae55 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -303,11 +303,6 @@ "Dec": "Dez", "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s de %(monthName)s às %(time)s", "%(weekDayName)s %(time)s": "%(weekDayName)s às %(time)s", - "en": "Inglês", - "pt-br": "Português do Brasil", - "de": "Alemão", - "da": "Dinamarquês", - "ru": "Russo", "%(targetName)s accepted an invitation.": "%(targetName)s aceitou um convite.", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s aceitou o convite para %(displayName)s.", "all room members, from the point they are invited": "todas/os as/os integrantes da sala, a partir do momento em que foram convidadas/os", @@ -432,70 +427,6 @@ "cancel all": "cancelar todas", "now. You can also select individual messages to resend or cancel.": "agora. Você também pode escolher mensagens individuais e definir se vai reenviar ou cancelar o envio.", "Active call": "Chamada ativa", - "af": "Afrikaans", - "ar-ae": "Árabe (U.A.E.)", - "ar-bh": "Árabe (Bahrain)", - "ar-dz": "Árabe (Algéria)", - "Sunday": "Domingo", - "Monday": "Segunda", - "ar-eg": "Árabe (Egito)", - "ar-tn": "Árabe (Tunisia)", - "be": "Bielorusso", - "bg": "Búlgaro", - "ca": "Catalão", - "cs": "Tcheco", - "el": "Grego", - "en-au": "Inglês (Austrália)", - "en-ca": "Inglês (Canadá)", - "en-gb": "Inglês (Reino Unido)", - "en-ie": "Inglês (Irlanda)", - "en-nz": "Inglês (Nova Zelândia)", - "en-us": "Inglês (Estados Unidos)", - "es-ar": "Espanhol (Argentina)", - "es-py": "Espanhol (Paraguai)", - "es": "Espanhol (Espanha)", - "et": "Estônia", - "fa": "Farsi", - "fi": "Finlandês", - "fr-be": "Francês (Bélgica)", - "fr-ca": "Francês (Canadá)", - "fr-ch": "Francês (Suíça)", - "fr": "Francês", - "ga": "Irlandês", - "he": "Hebreu", - "hi": "Hindu", - "hr": "Croácia", - "hu": "Hungria", - "id": "Indonésio", - "is": "Islandês", - "it": "Italiano", - "ja": "Japonês", - "ji": "Ídiche", - "lt": "Lituânia", - "lv": "Letão", - "ms": "Malaio", - "mt": "Maltês", - "nl-be": "Holandês (Bélgica)", - "nl": "Holandês", - "no": "Norueguês", - "pl": "Polonês", - "pt": "Português (Portugal)", - "rm": "Romanche", - "ro": "Romeno", - "sk": "Eslovaco", - "sl": "Esloveno", - "sq": "Albanês", - "sr": "Sérvio", - "sv": "Suécia", - "th": "Tailandês", - "tn": "Tsuana", - "tr": "Turquia", - "ts": "Tsonga", - "uk": "Ucraniano", - "ur": "Urdu", - "vi": "Vietnamita", - "xh": "Xhosa", - "zu": "Zulu", "Failed to forget room %(errCode)s": "Falhou ao esquecer a sala %(errCode)s", "Failed to join the room": "Falhou ao entrar na sala", "Tuesday": "Terça", @@ -503,56 +434,7 @@ "Thursday": "Quinta", "Friday": "Sexta", "Saturday": "Sábado", - "ar-iq": "Árabe (Iraque)", - "ar-jo": "Árabe (Jordânia)", - "ar-kw": "Árabe (Kuwait)", - "ar-lb": "Árabe (Líbano)", - "ar-ly": "Árabe (Líbia)", - "ar-ma": "Árabe (Marrocos)", - "ar-om": "Árabe (Omã)", - "ar-qa": "Árabe (Catar)", - "ar-sa": "Árabe (Arábia Saudita)", - "ar-sy": "Árabe (Síria)", - "ar-ye": "Árabe (Iémen)", - "de-at": "Alemão (Austria)", - "de-ch": "Alemão (Suíça)", - "de-li": "Alemão (Liechtenstein)", - "de-lu": "Alemão (Luxemburgo)", - "en-bz": "Inglês (Belize)", - "en-jm": "Inglês (Jamaica)", - "en-tt": "English (Trindade)", - "en-za": "English (África do Sul)", - "es-bo": "Espanhol (Bolívia)", - "es-cl": "Espanhol (Chile)", - "es-co": "Espanhol (Colômbia)", - "es-cr": "Espanhol (Costa Rica)", - "es-do": "Espanhol (República Dominicana)", - "es-ec": "Espanhol (Equador)", - "es-gt": "Espanhol (Guatemala)", - "es-hn": "Espanhol (Honduras)", - "es-mx": "Espanhol (México)", - "es-ni": "Espanhol (Nicarágua)", - "es-pa": "Espanhol (Panamá)", "%(oneUser)schanged their avatar": "%(oneUser)salterou sua imagem pública", - "es-pe": "Espanhol (Peru)", - "es-pr": "Espanhol (Porto Rico)", - "es-sv": "Espanhol (El Salvador)", - "es-uy": "Espanhol (Uruguai)", - "es-ve": "Espanhol (Venezuela)", - "eu": "Basco (Basco)", - "fr-lu": "Francês (Luxemburgo)", - "gd": "Galês (Escócia)", - "it-ch": "Italiano (Suíça)", - "ko": "Coreano", - "mk": "Macedônio (República da Macedônia)", - "ro-mo": "Romano (Moldávia)", - "ru-mo": "Russo (Moldávia)", - "sb": "Sorábio", - "sv-fi": "Sueco (Finlândia)", - "zh-cn": "Chinês (República Popular da China)", - "zh-hk": "Chinês (Hong Kong SAR)", - "zh-sg": "Chinês (Singapura)", - "zh-tw": "Chinês (Taiwan)", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Uma mensagem de texto foi enviada para +%(msisdn)s. Gentileza entrar com o código de verificação que contém", "%(items)s and %(remaining)s others": "%(items)s e %(remaining)s outros", "%(items)s and one other": "%(items)s e um outro", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 9a49fca9cb..3a1ca3f331 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -211,11 +211,6 @@ "Your password has been reset": "Ваш пароль был сброшен", "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Пароль успешно изменен. До повторной авторизации вы не будете получать push-уведомления на других устройствах", "You should not yet trust it to secure data": "На сегодняшний день не следует полностью полагаться на то, что ваши данные будут надежно зашифрованы", - "en": "Английский", - "pt-br": "Португальский (Бразилия)", - "de": "Немецкий", - "da": "Датский", - "ru": "Русский", "%(targetName)s accepted an invitation.": "%(targetName)s принял приглашение.", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s принял приглашение от %(displayName)s.", "Resend all": "Переслать снова всем", @@ -260,65 +255,6 @@ "Must be viewing a room": "Необходимо посмотреть комнату", "New Composer & Autocomplete": "Новый текстовый редактор и автозаполнение", "(not supported by this browser)": "(не поддерживается этим браузером)", - "af": "Африкаанс", - "ar-ae": "Арабский (ОАЭ)", - "ar-bh": "Арабский (Бахрейн)", - "ar-dz": "Арабский (Алжир)", - "ar-eg": "Арабский (Египет)", - "ar-iq": "Арабский (Ирак)", - "ar-jo": "Арабский (Иордания)", - "ar-kw": "Арабский (Кувейт)", - "ar-lb": "Арабский (Ливан)", - "ar-ly": "Арабский (Ливия)", - "ar-ma": "Арабский (Марокко)", - "ar-om": "Арабский (Оман)", - "ar-qa": "Арабский (Катар)", - "ar-sa": "Арабский (Саудовская Аравия)", - "ar-sy": "Арабский (Сирия)", - "ar-tn": "Арабский (Тунис)", - "ar-ye": "Арабский (Йемен)", - "be": "Беларуский", - "bg": "Болгарский", - "ca": "Каталанский", - "cs": "Чешский", - "de-at": "Немецкий (Австрия)", - "de-ch": "Немецкий (Швейцария)", - "de-li": "Немецкий (Лихтенштейн)", - "de-lu": "Немецкий (Люксембург)", - "el": "Греческий", - "en-au": "Английский (Австралия)", - "en-bz": "Английский (Белиз)", - "en-ca": "Английский (Канада)", - "en-gb": "Английский (Великобритания)", - "en-ie": "Английский (Ирландия)", - "en-jm": "Английский (Ямайка)", - "en-nz": "Английский (Новая Зеландия)", - "en-tt": "Английский (Тринидад)", - "en-us": "Английский (США)", - "en-za": "Английский (Южная Африка)", - "es-ar": "Испанский (Аргентина)", - "es-bo": "Испанский (Боливия)", - "es-cl": "Испанский (Чили)", - "es-co": "Испанский (Колумбия)", - "es-cr": "Испанский (Коста Рика)", - "es-do": "Испанский (Доминиканская Республика)", - "es-ec": "Испанский (Эквадор)", - "es-gt": "Испанский (Гватемала)", - "es-hn": "Испанский (Гондурас)", - "es-mx": "Испанский (Мексика)", - "es-ni": "Испанский (Никарагуа)", - "es-pa": "Испанский (Панама)", - "et": "Эстонский", - "fi": "Финский", - "fr": "Французский", - "hr": "Хорватский", - "it": "Итальянский", - "ja": "Японский", - "pl": "Польский", - "pt": "Португальский", - "ru-mo": "Русский (Республика Молдова)", - "ro": "Румынский", - "uk": "Украинский", "now. You can also select individual messages to resend or cancel.": "теперь. Вы можете также выбрать отдельные сообщения, чтобы снова послать или отменить.", "Auto-complete": "Автозаполнение", "Error changing language": "Ошибка изменения языка", @@ -341,13 +277,6 @@ "Make this room private": "Сделать эту комнату приватной", "Share message history with new users": "Разрешить доступ к истории сообщений новым пользователям", "Encrypt room": "Шифрование комнаты", - "es-pe": "Испанский (Перу)", - "hu": "Венгерский", - "nl": "Датский", - "no": "Норвежский", - "sv": "Шведский", - "th": "Тайский", - "vi": "Ветнамский", "Monday": "Понедельник", "Tuesday": "Вторник", "Wednesday": "Среда", @@ -398,55 +327,6 @@ "Usage": "Использование", "Use with caution": "Использовать с осторожностью", "VoIP is unsupported": "VoIP не поддерживается", - "es-pr": "Испанский (Пуэрто-Рико)", - "es-py": "Испанский язык (Парагвай)", - "es": "Испанский (Испания)", - "es-sv": "Испанский (Сальвадор)", - "es-uy": "Испанский (Уругвай)", - "es-ve": "Испанский (Венесуэла)", - "fa": "Фарси", - "fo": "Фарерский", - "fr-be": "Французский (Бельгия)", - "fr-ca": "Французский (Канада)", - "fr-ch": "Французский (Швейцария)", - "ga": "Ирландский", - "he": "Иврит", - "hi": "Хинди", - "id": "Индонезийский", - "is": "Исландский", - "ji": "Идиш", - "lt": "Литовский", - "lv": "Латвийский", - "ms": "Малазийский", - "mt": "Мальтийский", - "nl-be": "Голландский (Бельгия)", - "rm": "Ретороманский", - "sb": "Лужицкий", - "sk": "Словацкий", - "sl": "Словенский", - "sq": "Албанский", - "sr": "Сербский", - "sv-fi": "Шведский (Финляндия)", - "sz": "Сами (Саамы)", - "tn": "Тсвана", - "tr": "Турецкий", - "ts": "Тсонга", - "ur": "Урду", - "ve": "Венда", - "xh": "Кхоса", - "zh-cn": "Китайский (КНР)", - "zh-sg": "Китайский (Сингапур)", - "zh-tw": "Китайский (Тайвань)", - "zu": "Зулусский", - "eu": "Баскский", - "fr-lu": "Французский (Люксембург)", - "gd": "Гаэльский (Шотландия)", - "it-ch": "Итальянский (Швейцария)", - "ko": "Корейский", - "mk": "Македонский (БЮРМ)", - "ro-mo": "Румынский (Республика Молдова)", - "sx": "Суту", - "zh-hk": "Китайский (Гонконг)", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Текстовое сообщение было отправлено на +%(msisdn)s. Введите проверочный код, который оно содержит", "and %(count)s others...|other": "и %(count)s других...", "and %(count)s others...|one": "и ещё один...", diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index c38aeec36e..202098ab0f 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -1,124 +1,4 @@ { - "af": "Afrikaans", - "ar-ae": "Arabiska (U.A.E.)", - "ar-bh": "Arabiska (Bahrain)", - "ar-dz": "Arabiska (Algeriet)", - "ar-eg": "Arabiska (Egypten)", - "ar-iq": "Arabiska (Irak)", - "ar-jo": "Arabiska (Jordanien)", - "ar-kw": "Arabiska (Kuwait)", - "ar-lb": "Arabiska (Libanon)", - "ar-ly": "Arabiska (Libyen)", - "ar-ma": "Arabiska (Marocko)", - "ar-om": "Arabiska (Oman)", - "ar-qa": "Arabiska (Qatar)", - "ar-sa": "Arabiska (Saudiarabien)", - "ar-sy": "Arabiska (Syrien)", - "ar-tn": "Arabiska (Tunisien)", - "ar-ye": "Arabiska (Yemen)", - "be": "Vitryska", - "bg": "Bulgariska", - "ca": "Katalanska", - "cs": "Tjeckiska", - "da": "Danska", - "de-at": "Tyska (Österrike)", - "de-ch": "Tyska (Schweiz)", - "de": "Tyska", - "de-li": "Tyska (Liechtenstein)", - "de-lu": "Tyska (Luxembourg)", - "el": "Grekiska", - "en-au": "Engelska (Australien)", - "en-bz": "Engelska (Belize)", - "en-ca": "Engelska (Kanada)", - "en": "Engelska", - "en-gb": "Engelska (Förenta kungariket)", - "en-ie": "Engelska (Irland)", - "en-jm": "Engelska (Jamaica)", - "en-nz": "Engelska (Nya Zeeland)", - "en-tt": "Engelska (Trinidad)", - "en-us": "Engelska (Förenta staterna)", - "en-za": "Engelska (Sydafrika)", - "es-ar": "Spanska (Argentina)", - "es-bo": "Spanska (Bolivia)", - "es-cl": "Spanska (Chile)", - "es-co": "Spanska (Colombia)", - "es-cr": "Spanska (Costa Rica)", - "es-do": "Spanska (Dominikanska republiken)", - "es-ec": "Spanska (Ecuador)", - "es-gt": "Spanska (Guatemala)", - "es-hn": "Spanska (Honduras)", - "es-mx": "Spanska (Mexico)", - "es-ni": "Spanska (Nicaragua)", - "es-pa": "Spanska (Panama)", - "es-pe": "Spanska (Peru)", - "es-pr": "Spanska (Puerto Rico)", - "es-py": "Spanska (Paraguay)", - "es": "Spanska (Spanien)", - "es-sv": "Spanska (El Salvador)", - "es-uy": "Spanska (Uruguay)", - "es-ve": "Spanska (Venezuela)", - "et": "Estniska", - "eu": "Baskiska", - "fa": "Persiska", - "fi": "Finska", - "fo": "Färöiska", - "fr-be": "Franska (Belgien)", - "fr-ca": "Franska (Kanada)", - "fr-ch": "Franska (Schweiz)", - "fr": "Franska", - "fr-lu": "Franska (Luxembourg)", - "ga": "Irländska", - "gd": "Gaeliska (Skottland)", - "he": "Hebreiska", - "hi": "Hindi", - "hr": "Kroatiska", - "hu": "Ungerska", - "id": "Indonesiska", - "is": "Isländska", - "it-ch": "Italienska (Schweiz)", - "it": "Italienska", - "ja": "Japanska", - "ji": "Jiddisch", - "ko": "Koreanska", - "lt": "Litauiska", - "lv": "Lettiska", - "mk": "Makedonska (FYROM)", - "ms": "Malaysiska", - "mt": "Maltesiska", - "nl-be": "Nederländska (Belgien)", - "nl": "Nederländska", - "no": "Norska", - "pl": "Polska", - "pt-br": "Brasiliansk portugisiska", - "pt": "Portugisiska", - "rm": "Rätoromanska", - "ro-mo": "Rumänska (Republiken Moldavien)", - "ro": "Rumänska", - "ru-mo": "Ryska (Republiken Moldavien)", - "ru": "Ryska", - "sb": "Sorbiska", - "sk": "Slovakiska", - "sl": "Slovenska", - "sq": "Albanska", - "sr": "Serbiska", - "sv-fi": "Svenska (Finland)", - "sv": "Svenska", - "sx": "Sutu", - "sz": "Samiska", - "th": "Thailändska", - "tn": "Tswana", - "tr": "Turkiska", - "ts": "Tsonga", - "uk": "Ukrainska", - "ur": "Urdu", - "ve": "Venda", - "vi": "Vietnamesiska", - "xh": "Xhosa", - "zh-cn": "Kinesiska (Folkrepubliken Kina)", - "zh-hk": "Kinesiska (Hongkong SAR)", - "zh-sg": "Kinesiska (Singapore)", - "zh-tw": "Kinesiska (Taiwan)", - "zu": "Zulu", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Ett SMS har skickats till +%(msisdn)s. Vänligen ange verifieringskoden ur meddelandet", "accept": "acceptera", "%(targetName)s accepted an invitation.": "%(targetName)s accepterade en inbjudan.", diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index a1487a594e..b3773d4449 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -1,89 +1,5 @@ { "was invited": "తనని ఆహ్వానించారు", - "ar-iq": "అరబిక్ (ఇరాక్)", - "ar-jo": "అరబిక్ (జోర్డాన్)", - "ar-kw": "అరబిక్ (కువైట్)", - "ar-lb": "అరబిక్ (లెబనాన్)", - "ar-ly": "అరబిక్ (లిబియా)", - "ar-ma": "అరబిక్ (మొరాకో)", - "ar-om": "అరబిక్ (ఒమన్)", - "ar-qa": "అరబిక్ (కతర్)", - "ar-sa": "అరబిక్ (సౌదీ అరేబియా)", - "ar-sy": "అరబిక్ (సిరియా)", - "ar-tn": "అరబిక్ (ట్యునీషియా)", - "ar-ye": "అరబిక్ (యెమెన్)", - "bg": "బల్గేరియన్", - "da": "డానిష్", - "de-at": "జర్మన్ (ఆస్ట్రియా)", - "de-ch": "జర్మన్ (స్విట్జర్లాండ్)", - "de": "జర్మన్", - "de-li": "జర్మన్ (లిక్టెన్స్టీన్)", - "de-lu": "జర్మన్ (లక్సెంబర్గ్)", - "el": "గ్రీకు", - "en-au": "ఆంగ్లము (ఆస్ట్రేలియా)", - "en-bz": "ఇంగ్లీష్ (బెలిజ్)", - "en-ca": "ఇంగ్లీష్ (కెనడా)", - "en": "ఇంగ్లీష్", - "en-gb": "ఇంగ్లీష్ (యునైటెడ్ కింగ్డమ్)", - "en-ie": "ఇంగ్లీష్ (ఐర్లాండ్)", - "en-jm": "ఇంగ్లీష్ (జమైకా)", - "en-nz": "ఇంగ్లీష్ (న్యూజిలాండ్)", - "en-tt": "ఇంగ్లీష్ (ట్రినిడాడ్)", - "en-us": "ఇంగ్లీష్ (యునైటెడ్ స్టేట్స్)", - "en-za": "ఇంగ్లీష్ (దక్షిణ ఆఫ్రికా)", - "es-ar": "స్పానిష్ (అర్జెంటీనా)", - "es-bo": "స్పానిష్ (బొలీవియా)", - "es-cl": "స్పానిష్ (చిలీ)", - "es-co": "స్పానిష్ (కొలంబియా)", - "es-cr": "స్పానిష్ (కోస్టా రికా)", - "af": "ఆఫ్రికాన్స్", - "ar-ae": "అరబిక్ (యు.ఏ.ఈ.)", - "ar-bh": "అరబిక్ (బహ్రెయిన్)", - "ar-dz": "అరబిక్ (అల్జీరియా)", - "ar-eg": "అరబిక్ (ఈజిప్ట్)", - "be": "భెలరుసీన్", - "ca": "కతలన్", - "cs": "ఛ్జెచ్", - "es-do": "స్పానిష్ (డొమినికన్ రిపబ్లిక్)", - "lt": "లిథూనీన్", - "lv": "లత్వీన్", - "mk": "మాసిడోనియన్ (ఫ్య్ఋఓం)", - "ms": "మలేషియన్", - "mt": "మాల్టీస్", - "nl-be": "డచ్ (బెల్జియం)", - "nl": "డచ్", - "no": "నార్వేజియన్", - "pl": "పోలిష్", - "pt-br": "బ్రెజిలియన్ పోర్చుగీస్", - "pt": "పోర్చుగీస్", - "rm": "ర్హెతో-రొమనిచ్", - "ro-mo": "రోమేనియా (మోల్డోవా రిపబ్లిక్)", - "ro": "రొమనీన్", - "ru-mo": "రష్యన్ (మోల్డోవా రిపబ్లిక్)", - "ru": "రష్యన్", - "sb": "సోర్బియన్", - "sk": "శ్లొవక్", - "sl": "స్లోవేనియాన్", - "sq": "ఆల్బనీన్", - "sr": "సెర్బియన్", - "sv-fi": "స్వీడిష్ (ఫిన్లాండ్)", - "sv": "స్వీడిష్", - "sx": "శుతు", - "sz": "సామీ (లప్పీష్)", - "th": "థాయ్", - "tn": "సెటస్వానా", - "tr": "టుర్కిష్", - "ts": "సోంగా", - "uk": "ఉక్రేనియన్", - "ur": "ఉర్దూ", - "ve": "వెండా", - "vi": "వియత్నమెసె", - "xh": "షోసా", - "zh-cn": "చైనీస్ (ప్ ర్ సీ)", - "zh-hk": "చైనీస్ (హాంకాంగ్ స్ఎఅర్)", - "zh-sg": "చైనీస్ (సింగపూర్)", - "zh-tw": "చైనీస్ (తైవాన్)", - "zu": "జూలూ", "a room": "ఓ గది", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "ఒక టెక్స్ట్ సందేశం +%(msisdn)s కు పంపబడింది. దయచేసి దీనిలో ఉన్న ధృవీకరణ కోడ్ను నమోదు చేయండి", "Accept": "అంగీకరించు", @@ -114,39 +30,6 @@ "all room members": "అన్ని గదుల సభ్యులు", "You do not have permission to post to this room": "మీకు ఈ గదికి పోస్ట్ చేయడానికి అనుమతి లేదు", "You have been invited to join this room by %(inviterName)s": "%(inviterName)s ఈ గదిలో చేరడానికి మీరు ఆహ్వానించబడ్డారు", - "es-ec": "స్పానిష్ (ఈక్వెడార్)", - "es-gt": "స్పానిష్ (గ్వాటెమాల)", - "es-hn": "స్పానిష్ (హోండురాస్)", - "es-mx": "స్పానిష్ (మెక్సికో)", - "es-ni": "స్పానిష్ (నికరాగువా)", - "es-pa": "స్పానిష్ (పనామా)", - "es-pe": "స్పానిష్ (పెరు)", - "es-pr": "స్పానిష్ (ఫ్యూర్టో రికో)", - "es-py": "స్పానిష్ (పరాగ్వే)", - "es": "స్పానిష్ (స్పెయిన్)", - "es-sv": "స్పానిష్ (ఎల్ సాల్వడార్)", - "es-uy": "స్పానిష్ (ఉరుగ్వే)", - "es-ve": "స్పానిష్ (వెనిజులా)", - "eu": "బాస్క్ (బాస్క్)", - "fa": "ఫార్సి", - "fi": "ముగించు", - "fo": "ఫెరోయెస్", - "fr-be": "ఫ్రెంచ్ (బెల్జియం)", - "fr-ca": "ఫ్రెంచ్ (కెనడా)", - "fr-ch": "ఫ్రెంచ్ (స్విట్జర్లాండ్)", - "fr": "ఫ్రెంచ్", - "fr-lu": "ఫ్రెంచ్ (లక్సెంబర్గ్)", - "ga": "ఐరిష్", - "gd": "గేలిక్ (స్కాట్లాండ్)", - "he": "హిబ్రూ", - "hi": "హిందీ", - "hu": "హంగేరియన్", - "id": "ఇండోనేషియన్", - "is": "ఐస్లాండిక్", - "it-ch": "ఇటాలియన్ (స్విట్జర్లాండ్)", - "it": "ఇటాలియన్", - "ja": "జపనీస్", - "ko": "కొరియన్", "Active call (%(roomName)s)": "క్రియాశీల కాల్ల్ (%(roomName)s)", "And %(count)s more...": "మరియు %(count)s ఇంకా ...", "all room members, from the point they are invited": "అన్ని గది సభ్యులు, పాయింట్ నుండి వారు ఆహ్వానించబడ్డారు", diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index 3cf4355821..c27b6c0b7f 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -1,13 +1,4 @@ { - "de": "เยอร์มัน", - "en-us": "อังกฤษ (สหรัฐอเมริกา)", - "en": "อังกฤษ", - "en-ca": "อังกฤษ(แคนาดา)", - "ja": "ญี่ปุ่น", - "fr": "ฝรั่งเศส", - "ko": "เกาหลี", - "th": "ไทย", - "vi": "เวียดนาม", "accept": "ยอมรับ", "Account": "บัญชี", "Add phone number": "เพิ่มหมายเลขโทรศัพท์", @@ -474,115 +465,7 @@ "%(oneUser)sleft %(repeats)s times": "%(oneUser)sออกจากห้อง %(repeats)s ครั้ง", "%(severalUsers)sleft": "%(severalUsers)sออกจากห้องแล้ว", "%(oneUser)sleft": "%(oneUser)sออกจากห้องแล้ว", - "el": "กรีก", - "en-au": "อังกฤษ (ออสเตรเลีย)", - "en-bz": "อังกฤษ (เบลีซ)", - "en-gb": "อังกฤษ (สหราชอาณาจักร)", - "en-nz": "อังกฤษ (นิวซีแลนด์)", - "en-jm": "อังกฤษ (จาเมกา)", - "en-ie": "อังกฤษ (ไอร์แลนด์)", - "en-tt": "อังกฤษ (ตรินิแดด)", - "af": "แอฟริกาใต้", - "ar-ae": "อาหรับ (สหรัฐอาหรับเอมิเรตส์)", - "ar-bh": "อาหรับ (บาห์เรน)", - "ar-dz": "อาหรับ (แอลจีเรีย)", - "ar-eg": "อาหรับ (อียิปต์)", - "ar-iq": "อาหรับ (อิรัก)", - "ar-jo": "อาหรับ (จอร์แดน)", - "ar-kw": "อาหรับ (คูเวต)", - "ar-lb": "อาหรับ (เลบานอน)", - "ar-ly": "อาหรับ (ลิเบีย)", - "ar-ma": "อาหรับ (โมร็อกโก)", - "ar-om": "อาหรับ (โอมาน)", - "ar-qa": "อาหรับ (กาตาร์)", - "ar-sa": "อาหรับ (ซาอุดีอาระเบีย)", - "ar-sy": "อาหรับ (ซีเรีย)", - "ar-tn": "อาหรับ (ตูนิเซีย)", - "ar-ye": "อาหรับ (เยเมน)", - "be": "เบลารุส", - "bg": "บัลแกเรีย", - "ca": "คาตาลัน", - "cs": "สาธารณรัฐเช็ก", - "da": "เดนมาร์ก", - "de-at": "เยอรมัน (ออสเตรีย)", - "de-ch": "เยอรมัน (สวิสเซอร์แลนด์)", - "de-lu": "เยอรมัน (ลักเซมเบิร์ก)", - "en-za": "อังกฤษ (แอฟริกาใต้)", - "es-ar": "สเปน (อาร์เจนตินา)", - "es-bo": "สเปน (โบลิเวีย)", - "es-cl": "สเปน (ชิลี)", - "es-co": "สเปน (โคลัมเบีย)", - "es-cr": "สเปน (คอสตาริกา)", - "es-do": "สเปน (สาธารณรัฐโดมินิกัน)", - "zu": "สูลู", - "zh-tw": "จีน (ไต้หวัน)", - "zh-sg": "จีน (สิงคโปร์)", - "zh-hk": "จีน (ฮ่องกง)", - "xh": "โซซา", - "ve": "เวนดา", - "ur": "อูรดู", - "uk": "ยูเครน", - "ts": "ซองก้า", - "tr": "ตุรกี", - "tn": "ซวานา", - "sv": "สวีเดน", - "sv-fi": "สวีเดน (ฟินแลนด์)", - "sr": "เซอร์เบีย", - "sq": "แอลเบเนีย", - "sl": "สโลเวเนีย", - "sk": "สโลวาเกีย", - "sb": "ซอร์เบีย", - "ru": "รัสเซีย", - "ru-mo": "รัสเซีย (สาธารณรัฐมอลโดวา)", - "ro": "โรมาเนีย", - "ro-mo": "โรมาเนีย (สาธารณรัฐมอลโดวา)", - "pt": "โปรตุเกส", - "pt-br": "โปรตุเกส (บราซิล)", - "pl": "โปแลนด์", - "no": "นอร์เวย์", - "nl": "ดัตช์", - "nl-be": "ดัตช์ (เบลเยียม)", - "mt": "มอลตา", - "ms": "มาเลเซีย", - "lv": "ลัตเวีย", - "lt": "ลิธัวเนีย", - "ji": "ยิดดิช", - "it": "อิตาลี", - "it-ch": "อิตาลี (สวิสเซอร์แลนด์)", - "is": "ไอซ์แลนด์", - "id": "อินโดนีเซีย", - "hu": "ฮังการี", - "hr": "โครเอเชีย", - "hi": "ฮินดู", - "he": "อิสราเอล", - "gd": "เกลิค (สกอตแลนด์)", - "fr-lu": "ฝรั่งเศส (ลักเซมเบิร์ก)", - "fr-ca": "ฝรั่งเศส (แคนาดา)", - "fr-ch": "ฝรั่งเศส (สวิสเซอร์แลนด์)", - "fr-be": "ฝรั่งเศส (เบลเยี่ยม)", - "fo": "แฟโร", - "fi": "ฟินแลนด์", - "fa": "ฟาร์ซิ", - "et": "เอสโตเนีย", - "es-ve": "สเปน (เวเนซุเอลา)", - "es-uy": "สเปน (อุรุกวัย)", - "es-sv": "สเปน (เอลซัลวาดอร์)", - "es": "สเปน (สเปน)", - "es-py": "สเปน (ปารากวัย)", - "es-pr": "สเปน (เปอร์โตริโก)", - "es-pe": "สเปน (เปรู)", - "es-pa": "สเปน (ปานามา)", - "es-ni": "สเปน (นิการากัว)", - "es-mx": "สเปน (เม็กซิโก)", - "es-hn": "สเปน (ฮอนดูรัส)", - "es-gt": "สเปน (กัวเตมาลา)", - "es-ec": "สเปน (เอกวาดอร์)", "Add": "เพิ่ม", - "de-li": "เยอรมัน (ลิกเตนสไตน์)", - "eu": "บาสก์ (บาสก์)", - "ga": "ไอร์แลนด์", - "zh-cn": "จีน (สาธารณรัฐประชาชนจีน)", - "mk": "มาซิโดเนีย (อดีตสาธารณรัฐยูโกสลาฟมาซิโดเนีย)", "a room": "ห้อง", "Accept": "ยอมรับ", "VoIP": "VoIP", diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index fccef004dc..185dc788ec 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -1,124 +1,4 @@ { - "af": "Afrikanca (Taal)", - "ar-ae": "Arapça (B.A.E)", - "ar-bh": "Arapça (Bahreyn)", - "ar-dz": "Arapça (Cezayir)", - "ar-eg": "Arapça (Mısır)", - "ar-iq": "Arapça (Irak)", - "ar-jo": "Arapça (Ürdün)", - "ar-kw": "Arapça (Kuveyt)", - "ar-lb": "Arapça (Lübnan)", - "ar-ly": "Arapça (Libya)", - "ar-ma": "Arapça (Fas)", - "ar-om": "Arapça (Umman)", - "ar-qa": "Arapça (Katar)", - "ar-sa": "Arapça (Suudi Arabistan)", - "ar-sy": "Arapça (Suriye)", - "ar-tn": "Arapça (Tunus)", - "ar-ye": "Arapça (Yemen)", - "be": "Beyaz Rusça", - "bg": "Bulgarca", - "ca": "Katalanca", - "cs": "Çek Dili", - "da": "Danimarkaca", - "de-at": "Almanca (Avusturya)", - "de-ch": "Almanca (İsviçre)", - "de": "Almanca", - "de-li": "Almanca (Liechtenstein)", - "de-lu": "Almanca (Lüksemburg)", - "el": "Yunanca", - "en-au": "İngilizce (Avustralya)", - "en-bz": "İngilizce (Belize)", - "en-ca": "İngilizce (Kanada)", - "en": "İngilizce", - "en-gb": "İngilizce (İngiltere)", - "en-ie": "İngilizce (İrlanda)", - "en-jm": "İngilizce (Jamaika)", - "en-nz": "İngilizce (Yeni Zellanda)", - "en-tt": "İngilizce (Trinidad)", - "en-us": "İngilizce (Amerika)", - "en-za": "İngilizce (Güney Afrika)", - "es-ar": "İspanyolca (Arjantin)", - "es-bo": "İspanyolca (Bolivya)", - "es-cl": "İspanyolca (Şili)", - "es-co": "İspanyolca (Kolombiya)", - "es-cr": "İspanyolca (Kosta Rika)", - "es-do": "İspanyolca (Dominik Cumhuriyeti)", - "es-ec": "İspanyolca (Ekvador)", - "es-gt": "İspanyolca (Guatemala)", - "es-hn": "İspanyolca (Honduras)", - "es-mx": "İspanyolca (Meksika)", - "es-ni": "İspanyolca (Nikaragua)", - "es-pa": "İspanyolca (Panama)", - "es-pe": "İspanyolca (Peru)", - "es-pr": "İspanyolca (Porto Riko)", - "es-py": "İspanyolca (Paraguay)", - "es": "İspanyolca (İspanya)", - "es-sv": "İspanyolca (El Salvador)", - "es-uy": "İspanyolca (Uruguay)", - "es-ve": "İspanyolca (Venezuela)", - "et": "Estonya Dili", - "eu": "Baskça", - "fa": "Farsça", - "fi": "Fince", - "fo": "Faroe", - "fr-be": "Fransızca (Belçika)", - "fr-ca": "Fransızca (Kanada)", - "fr-ch": "Fransızca (İsviçre)", - "fr": "Fransızca", - "fr-lu": "Fransızca (Lüxemburg)", - "ga": "İrlandaca", - "gd": "Gaelik (İskoçya)", - "he": "İbranice", - "hi": "Hintçe", - "hr": "Hırvatça", - "hu": "Macarca", - "id": "Endonezya Dili", - "is": "İzlandaca", - "it-ch": "İtalyanca (İsviçre)", - "it": "İtalyanca", - "ja": "Japonca", - "ji": "Eskenazi Dili", - "ko": "Korece", - "lt": "Litvanya Dili", - "lv": "Letonya Dili", - "mk": "Makedonca (FYROM)", - "ms": "Malezyanca", - "mt": "Malta Dili", - "nl-be": "Hollandaca (Belçika)", - "nl": "Hollandaca", - "no": "Norveççe", - "pl": "Polonya Dili", - "pt-br": "Brezilya Portekizcesi", - "pt": "Portekizce", - "rm": "Reto-Latince", - "ro-mo": "Romence (Moldova Cumhuriyeti)", - "ro": "Romence", - "ru-mo": "Rusça (Moldova Cumhuriyeti)", - "ru": "Rusça", - "sb": "Sorbca", - "sk": "Slovakça", - "sl": "Slovence", - "sq": "Arnavutça", - "sr": "Sırpça", - "sv-fi": "İsveççe (Finlandiya)", - "sv": "İsveççe", - "sx": "Sutu Dili", - "sz": "Sami Dili", - "th": "Tayland Dili", - "tn": "Setsvana", - "tr": "Türkçe", - "ts": "Tsonga Dili", - "uk": "Ukraynaca", - "ur": "Urduca", - "ve": "Venda Dili", - "vi": "Vietnam Dili", - "xh": "Xhosa Dili", - "zh-cn": "Çince (PRC)", - "zh-hk": "Çince (Hong Kong)", - "zh-sg": "Çince (Singapur)", - "zh-tw": "Çince (Tayvan)", - "zu": "Zulu Dili", "a room": "bir oda", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "+%(msisdn)s 'ye bir kısa mesaj gönderildi . Lütfen içerdiği doğrulama kodunu girin", "Accept": "Kabul Et", diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index 15ddefc956..ed11668ddd 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -1,67 +1,4 @@ { - "af": "афрікаанс", - "ar-ae": "арабська (ОАЕ)", - "ar-bh": "арабська (Бахрейн)", - "ar-dz": "арабська (Алжир)", - "ar-eg": "арабська (Єгипет)", - "ar-iq": "арабська (Ірак)", - "ar-jo": "арабська (Йорданія)", - "ar-kw": "арабська (Кувейт)", - "ar-lb": "арабська (Ліван)", - "ar-ly": "арабська (Лівія)", - "ar-ma": "арабська (Марокко)", - "ar-om": "арабська (Оман)", - "ar-qa": "арабська (Катар)", - "ar-sa": "арабська (Саудівська Аравія)", - "ar-sy": "арабська (Сирія)", - "ar-tn": "арабська (Туніс)", - "ar-ye": "арабська (Йемен)", - "be": "білоруська", - "bg": "болгарська", - "ca": "каталонська", - "cs": "чеська", - "da": "данська", - "de-at": "німецька (Австрія)", - "de-ch": "німецька (Швейцарія)", - "de": "німецька", - "de-li": "німецька (Ліхтенштейн)", - "de-lu": "німецька (Люксембург)", - "el": "грецька", - "en-au": "англійська (Австралія)", - "en-bz": "англійська (Беліз)", - "en-ca": "англійська (Канада)", - "en": "англійська", - "en-gb": "англійська (Великобританія)", - "en-ie": "англійська (Ірландія)", - "en-jm": "англійська (Ямайка)", - "en-nz": "англійська (Нова Зеландія)", - "en-tt": "англійська (Тринідад)", - "en-us": "англійська (Сполучені Штати)", - "en-za": "англійська (ПАР)", - "es-ar": "іспанська (Аргентина)", - "es-bo": "іспанська (Болівія)", - "es-cl": "іспанська (Чилі)", - "es-co": "іспанська (Колумбія)", - "es-cr": "іспанська (Коста Ріка)", - "es-do": "іспанська (Домініканська Республіка)", - "es-ec": "іспанська (Еквадор)", - "es-gt": "іспанська (Гватемала)", - "es-hn": "іспанська (Гондурас)", - "es-mx": "іспанська (Мексика)", - "es-ni": "іспанська (Нікарагуа)", - "es-pa": "іспанська (Панама)", - "es-pe": "іспанська (Перу)", - "es-pr": "іспанська (Пуерто Ріко)", - "es-py": "іспанська (Парагвай)", - "es": "іспанська (Іспанія)", - "es-sv": "іспанська (Сальвадор)", - "es-uy": "іспанська (Уругвай)", - "es-ve": "іспанська (Венесуела)", - "et": "естонська", - "eu": "баскійська", - "fa": "перська", - "fi": "фінська", - "fo": "фарерська", "Cancel": "Скасувати", "Close": "Закрити", "Create new room": "Створити нову кімнату", @@ -95,63 +32,6 @@ "Welcome page": "Ласкаво просимо", "Failed to change password. Is your password correct?": "Не вдалось змінити пароль. Ви впевнені, що пароль введено правильно?", "Continue": "Продовжити", - "fr-be": "французька (Бельгія)", - "fr-ca": "французька (Канада)", - "fr-ch": "французька (Швейцарія)", - "fr": "французька", - "fr-lu": "французька (Люксембург)", - "ga": "ірландська", - "gd": "гельська (Шотландія)", - "he": "іврит", - "hi": "гінді", - "hr": "хорватська", - "hu": "угорська", - "id": "індонезійська", - "is": "ісландська", - "it-ch": "італійська (Швейцарія)", - "it": "італійська", - "ja": "японська", - "ji": "ідиш", - "ko": "корейська", - "lt": "литовська", - "lv": "латвійська", - "mk": "македонська (КЮРМ)", - "ms": "малайська", - "mt": "мальтійська", - "nl-be": "нідерландська (Бельгія)", - "nl": "нідерландська", - "no": "норвезька", - "pl": "польська", - "pt-br": "бразильська португальська", - "pt": "португальська", - "rm": "ретороманська", - "ro-mo": "румунська (Молдова)", - "ro": "румунська", - "ru-mo": "російська (Молдова)", - "ru": "російська", - "sb": "лужицька", - "sk": "словацька", - "sl": "словенська", - "sq": "албанська", - "sr": "сербська", - "sv-fi": "шведська (Фінляндія)", - "sv": "шведська", - "sx": "сесото", - "sz": "північносаамська", - "th": "тайська", - "tn": "свана", - "tr": "турецька", - "ts": "тсонга", - "uk": "українська", - "ur": "урду", - "ve": "венда", - "vi": "в’єтнамська", - "xh": "коса", - "zh-cn": "спрощена китайська (КНР)", - "zh-hk": "традиційна китайська (Гонконг)", - "zh-sg": "спрощена китайська (Сингапур)", - "zh-tw": "традиційна китайська (Тайвань)", - "zu": "зулу", "a room": "кімната", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Текстове повідомлення було надіслано +%(msisdn)s. Введіть, будь ласка, код підтвердження з цього повідомлення", "Accept": "Прийняти", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index f8ee16f67e..417a47a79e 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -155,21 +155,6 @@ "The file '%(fileName)s' exceeds this home server's size limit for uploads": "文件 '%(fileName)s' 超过了此主服务器的上传大小限制", "The file '%(fileName)s' failed to upload": "文件 '%(fileName)s' 上传失败", "Disable URL previews for this room (affects only you)": "在这个房间禁止URL预览(只影响你)", - "af": "南非荷兰语", - "ca": "加泰罗尼亚语", - "cs": "捷克语", - "da": "丹麦语", - "de-at": "德语(奥地利)", - "de-ch": "德语(瑞士)", - "de": "德语", - "de-lu": "德语 (卢森堡)", - "el": "希腊语", - "en-au": "英语 (澳大利亚)", - "en": "英语", - "zh-cn": "中文(中国)", - "zh-hk": "中文(香港)", - "zh-sg": "中文(新加坡)", - "zh-tw": "中国(台湾)", "Add email address": "添加邮件地址", "Add phone number": "添加电话号码", "Advanced": "高级", @@ -206,21 +191,6 @@ "Leave room": "离开聊天室", "Login as guest": "以游客的身份登录", "New password": "新密码", - "ar-ae": "阿拉伯语 (阿联酋)", - "ar-bh": "阿拉伯语 (巴林)", - "ar-dz": "阿拉伯语 (阿尔及利亚)", - "ar-eg": "阿拉伯语 (埃及)", - "ar-iq": "阿拉伯语 (伊拉克)", - "ar-jo": "阿拉伯语 (约旦)", - "ar-kw": "阿拉伯语 (科威特)", - "ar-lb": "阿拉伯语 (黎巴嫩)", - "ar-ly": "阿拉伯语 (利比亚)", - "ar-ma": "阿拉伯语 (摩洛哥)", - "ar-ye": "阿拉伯语 (也门)", - "en-ca": "英语 (加拿大)", - "en-gb": "英语 (英国)", - "en-ie": "英语 (爱尔兰)", - "en-nz": "英语 (新西兰)", "Add a topic": "添加一个主题", "Admin": "管理员", "Admin tools": "管理工具", @@ -371,15 +341,6 @@ "Friday": "星期五", "Saturday": "星期六", "Welcome page": "欢迎页面", - "ar-om": "阿拉伯语(阿曼)", - "ar-qa": "阿拉伯语(卡塔尔)", - "ar-sa": "阿拉伯语(沙特阿拉伯)", - "fi": "芬兰语", - "fr": "法语", - "he": "希伯来语", - "it": "意大利语", - "ja": "日语", - "ko": "韩语", "Account": "账户", "Add": "添加", "Allow": "允许", @@ -503,24 +464,6 @@ "Edit Group": "编辑群", "Failed to upload image": "上传图像失败", "Add a widget": "添加一个小部件", - "en-us": "英语(美国)", - "en-za": "英语(南非)", - "es-ar": "西班牙语(阿根廷)", - "es-cl": "西班牙语(智利)", - "es-co": "西班牙语(哥伦比亚)", - "es-cr": "西班牙语(哥斯达黎加)", - "es-mx": "西班牙语(墨西哥)", - "es": "西班牙语(西班牙)", - "fr-be": "法语(比利时)", - "fr-ca": "法语(加拿大)", - "fr-ch": "法语(瑞士)", - "hi": "印地语", - "hr": "克罗地亚语", - "hu": "匈牙利语", - "id": "印尼语", - "is": "冰岛语", - "it-ch": "意大利语(瑞士)", - "ji": "意第绪语", "a room": "一个聊天室", "Accept": "接受", "Access Token:": "访问令牌:", @@ -590,20 +533,6 @@ "I already have an account": "我已经有一个帐号", "Unblacklist": "移出黑名单", "Not a valid Riot keyfile": "不是一个合法的 Riot 密钥文件", - "en-jm": "英语(牙买加)", - "es-pe": "西班牙语(秘鲁)", - "lv": "拉脱维亚语", - "ms": "马来西亚语", - "pl": "波兰语", - "pt": "葡萄牙语", - "ro": "罗马尼亚语", - "ru": "俄语", - "sk": "斯洛伐克语", - "sl": "斯洛文尼亚语", - "sr": "塞尔维亚语", - "th": "泰语", - "tr": "土耳其语", - "vi": "越南语", "%(targetName)s accepted an invitation.": "%(targetName)s 接受了一个邀请。", "Do you want to load widget from URL:": "你想从此 URL 加载小组件吗:", "Hide join/leave messages (invites/kicks/bans unaffected)": "隐藏加入/离开消息(邀请/踢出/封禁不受影响)", @@ -620,55 +549,6 @@ "Seen by %(userName)s at %(dateTime)s": "在 %(dateTime)s 被 %(userName)s 看到", "Show Apps": "显示应用", "Tagged as: ": "标记为:", - "ar-sy": "阿拉伯语(Syria)", - "ar-tn": "阿拉伯语(Tunisia)", - "be": "白俄罗斯", - "bg": "保加利亚", - "de-li": "德语(列支敦士登)", - "en-bz": "英语(伯利兹)", - "en-tt": "英语(特立尼达)", - "es-bo": "西班牙语(玻利维亚)", - "es-do": "西班牙语(Dominican)", - "es-ec": "西班牙语(Ecuador)", - "es-gt": "西班牙语(Guatemala)", - "es-hn": "西班牙语(Honduras)", - "es-ni": "西班牙语(Nicaragua)", - "es-pa": "西班牙语(Panama)", - "es-pr": "西班牙语(Puerto Rico)", - "es-py": "西班牙语(Paraguay)", - "es-sv": "西班牙语(El Salvador)", - "es-uy": "西班牙语(Uruguay)", - "es-ve": "西班牙语(Venezuela)", - "et": "爱沙尼亚", - "eu": "巴斯克", - "fa": "波斯语", - "fo": "法罗群岛", - "fr-lu": "法语(Luxembourg)", - "ga": "爱尔兰", - "gd": "盖尔", - "lt": "立陶宛", - "mk": "马其顿", - "mt": "马耳他", - "nl-be": "荷兰语(Belgium)", - "nl": "荷兰语", - "no": "挪威", - "pt-br": "巴西葡萄牙语", - "rm": "瑞士南部", - "sb": "索布语", - "ru-mo": "俄语(Moldova)", - "ro-mo": "罗马尼亚(Moldova)", - "sq": "阿尔巴尼亚", - "sv-fi": "瑞典(Finland)", - "sv": "瑞典", - "sx": "苏图", - "sz": "萨米(Lappish)", - "tn": "茨瓦纳语", - "ts": "聪加", - "uk": "乌克兰", - "ur": "乌尔都语", - "ve": "文达", - "xh": "科萨", - "zu": "祖鲁语", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "验证码将发送到+%(msisdn),请输入接收到的验证码", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName) 接受了 %(displayName)的邀请。", "Active call (%(roomName)s)": "%(roomName)的呼叫", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 028336f3be..5027f2c28e 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -21,73 +21,6 @@ "Can't load user settings": "無法載入使用者設定", "Change Password": "變更密碼", "%(targetName)s left the room.": "%(targetName)s 離開了聊天室。.", - "af": "南非荷蘭語", - "ar-ae": "阿拉伯語 (U.A.E.)", - "ar-bh": "阿拉伯語 (巴林)", - "ar-dz": "阿拉伯語 (阿爾吉利亞)", - "ar-eg": "阿拉伯語 (埃及)", - "ar-iq": "阿拉伯語 (伊拉克)", - "ar-jo": "阿拉伯語 (約旦)", - "ar-kw": "阿拉伯語 (科威特)", - "ar-lb": "阿拉伯語 (黎巴嫩)", - "ar-ly": "阿拉伯語 (利比亞)", - "ar-ma": "阿拉伯語 (摩洛哥)", - "ar-om": "阿拉伯語 (阿曼)", - "ar-qa": "阿拉伯語 (卡達)", - "ar-sa": "阿拉伯語 (沙烏地阿拉伯)", - "ar-sy": "阿拉伯語 (敍利亞)", - "ar-tn": "阿拉伯語 (突尼斯)", - "ar-ye": "阿拉伯語 (葉門)", - "be": "白俄羅斯語", - "bg": "保加利亞", - "ca": "加泰羅尼亞語", - "cs": "捷克語", - "da": "丹麥語", - "de-at": "德語(奧地利)", - "de-ch": "德語(瑞士)", - "de": "德語", - "de-lu": "德語(盧森堡)", - "el": "希臘語", - "en-au": "英語(澳大利亞)", - "en-bz": "英語 (貝里茲)", - "en-ca": "英語 (加拿大)", - "en": "英語", - "en-gb": "英語 (英國)", - "en-ie": "英語 (愛爾蘭)", - "en-jm": "英語 (牙買加)", - "en-nz": "英語 (新西蘭)", - "en-tt": "英語 (千里達)", - "en-us": "英語 (美國)", - "en-za": "英語 (南非)", - "es-ar": "西班牙語 (阿根廷)", - "es-bo": "西班牙語 (波利維亞)", - "es-cl": "西班牙語 (智利)", - "es-co": "西班牙語 (哥倫比亞)", - "es-cr": "西班牙語 (哥斯大黎加)", - "es-do": "西班牙語 (多明尼加共和國)", - "es-ec": "西班牙語 (厄瓜多)", - "es-gt": "西班牙語 (瓜地馬拉)", - "es-hn": "西班牙語 (宏都拉斯)", - "es-mx": "西班牙語 (墨西哥)", - "es-ni": "西班牙語 (尼加拉瓜)", - "es-pa": "西班牙語 (巴拿馬)", - "es-pe": "西班牙語 (祕魯)", - "es-pr": "西班牙語 (波多黎各)", - "es-py": "西班牙語 (巴拉圭)", - "es": "西班牙語 (西班牙)", - "es-sv": "西班牙語 (薩爾瓦多)", - "es-uy": "西班牙語 (烏拉圭)", - "es-ve": "西班牙語 (委內瑞拉)", - "fr-be": "法語 (比利時)", - "fr-ca": "法語 (加拿大)", - "fr-ch": "法語 (瑞士)", - "fr": "法語 (法國)", - "fr-lu": "法語 (慮森堡)", - "zh-cn": "中文(中國)", - "zh-hk": "中文(香港)", - "zh-sg": "中文(新加坡)", - "zh-tw": "中文(台灣)", - "zu": "祖魯語", "accept": "接受", "Account": "帳號", "Access Token:": "取用令牌:", @@ -366,59 +299,6 @@ "Room directory": "聊天室目錄", "Start chat": "開始聊天", "Welcome page": "歡迎頁面", - "de-li": "德語(列支敦斯登)", - "et": "愛沙尼亞語", - "eu": "巴斯克語(巴斯克)", - "fa": "波斯語", - "fi": "芬蘭語", - "fo": "法羅語", - "ga": "愛爾蘭語", - "gd": "蓋爾語(蘇格蘭)", - "he": "希伯來語", - "hi": "印地語", - "hr": "克羅埃西亞語", - "hu": "匈牙利語", - "id": "印尼語", - "is": "冰島語", - "it-ch": "義大利語(瑞士)", - "it": "義大利語", - "ja": "日語", - "ji": "意第緒語", - "ko": "韓語", - "lt": "立陶宛語", - "lv": "拉脫維亞語", - "mk": "馬其頓語(前南斯拉夫馬其頓共和國)", - "ms": "馬來西亞語", - "mt": "馬爾他語", - "nl-be": "荷蘭語(比利時)", - "nl": "荷蘭語", - "no": "挪威語", - "pl": "波蘭語", - "pt-br": "巴西葡萄牙語", - "pt": "葡萄牙語", - "rm": "羅曼拉丁語", - "ro-mo": "羅馬尼亞語(摩爾多瓦共和國)", - "ro": "羅馬尼亞語", - "ru-mo": "俄語(摩爾多瓦共和國)", - "ru": "俄語", - "sb": "索布語", - "sk": "斯洛伐克語", - "sl": "斯洛維尼亞語", - "sq": "阿爾巴尼亞語", - "sr": "塞爾維亞語", - "sv-fi": "瑞典語(芬蘭)", - "sv": "瑞典語", - "sx": "蘇圖語", - "sz": "基爾丁-薩米語", - "th": "泰語", - "tn": "札那語", - "tr": "土耳其語", - "ts": "聰加語", - "uk": "烏克蘭語", - "ur": "烏爾都語", - "ve": "文達語", - "vi": "越南語", - "xh": "科薩語", "a room": "房間", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "文字訊息將會傳送到 +%(msisdn)s。請輸入其中包含的驗證碼", "Accept": "接受", From 7ba8aa95c5485468850f50f59075e1ac275dec17 Mon Sep 17 00:00:00 2001 From: MTRNord Date: Tue, 5 Sep 2017 18:00:57 +0200 Subject: [PATCH 57/86] readd translations that got removed by accident --- src/i18n/strings/pt_BR.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 18294eae55..6b06f39e7c 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -392,6 +392,8 @@ "Usage": "Uso", "Use with caution": "Use com cautela", "VoIP is unsupported": "Chamada de voz não permitida", + "Sunday": "Domingo", + "Monday": "Segunda", "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s desfez o convite a %(targetName)s.", "You are already in a call.": "Você já está em uma chamada.", "You're not in any rooms yet! Press to make a room or to browse the directory": "Você ainda não está em nenhuma sala! Clique em para criar uma sala ou em para navegar pela lista pública de salas", From 5449224dec750b98203db04a65636b31b4d6e4ea Mon Sep 17 00:00:00 2001 From: MTRNord Date: Tue, 5 Sep 2017 18:01:57 +0200 Subject: [PATCH 58/86] readd translations that got removed by accident 2 --- src/i18n/strings/nl.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index bc92d7bcad..ac2f3e0e58 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -1,4 +1,5 @@ { + "Direct Chat": "Privégesprek", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Voer alsjeblieft de verificatiecode in die is verstuurd naar +%(msisdn)s", "accept": "accepteer", "%(targetName)s accepted an invitation.": "%(targetName)s heeft een uitnodiging geaccepteerd.", From a573a396ad3ca2b90693b1c9db3020398ff19681 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 5 Sep 2017 18:07:22 +0200 Subject: [PATCH 59/86] Remove unused string "changing room on a RoomView is not supported" --- src/i18n/strings/en_EN.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index c1ba1d0c74..fec3e83616 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -201,7 +201,6 @@ "Changes to who can read history will only apply to future messages in this room": "Changes to who can read history will only apply to future messages in this room", "Changes your display nickname": "Changes your display nickname", "Changes colour scheme of current room": "Changes colour scheme of current room", - "changing room on a RoomView is not supported": "changing room on a RoomView is not supported", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.", "Claimed Ed25519 fingerprint key": "Claimed Ed25519 fingerprint key", "Clear Cache and Reload": "Clear Cache and Reload", From da3336172f0f088c48229d8116cb3ec575506b75 Mon Sep 17 00:00:00 2001 From: MTRNord Date: Tue, 5 Sep 2017 18:12:00 +0200 Subject: [PATCH 60/86] Remove more unused translation strings --- src/i18n/strings/de_DE.json | 1 - src/i18n/strings/el.json | 1 - src/i18n/strings/en_US.json | 1 - src/i18n/strings/es.json | 1 - src/i18n/strings/eu.json | 1 - src/i18n/strings/fr.json | 1 - src/i18n/strings/hu.json | 1 - src/i18n/strings/id.json | 1 - src/i18n/strings/ko.json | 1 - src/i18n/strings/lv.json | 1 - src/i18n/strings/nl.json | 1 - src/i18n/strings/pt.json | 1 - src/i18n/strings/pt_BR.json | 1 - src/i18n/strings/ru.json | 1 - src/i18n/strings/sv.json | 1 - src/i18n/strings/te.json | 1 - src/i18n/strings/th.json | 1 - src/i18n/strings/tr.json | 1 - src/i18n/strings/zh_Hant.json | 1 - 19 files changed, 19 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 2fbee2717d..020a13c98d 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -561,7 +561,6 @@ "Ban": "Dauerhaft aus dem Raum ausschließen", "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Verbindungsaufbau zum Heimserver nicht möglich - bitte Internetverbindung überprüfen und sicherstellen, ob das SSL-Zertifikat des Heimservers vertrauenswürdig ist.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Es kann keine Verbindung zum Heimserver via HTTP aufgebaut werden, wenn die Adresszeile des Browsers eine HTTPS-URL enthält. Entweder HTTPS verwenden oder alternativ unsichere Skripte erlauben.", - "changing room on a RoomView is not supported": "Das Ändern eines Raumes in einer RaumAnsicht wird nicht unterstützt", "Click to mute audio": "Klicke um den Ton stumm zu stellen", "Click to mute video": "Klicken, um das Video stummzuschalten", "Command error": "Befehlsfehler", diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index 3ea83a322c..974ca37c5b 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -849,7 +849,6 @@ "You must join the room to see its files": "Πρέπει να συνδεθείτε στο δωμάτιο για να δείτε τα αρχεία του", "Reject all %(invitedRooms)s invites": "Απόρριψη όλων των προσκλήσεων %(invitedRooms)s", "Failed to invite the following users to the %(roomName)s room:": "Δεν ήταν δυνατή η πρόσκληση των χρηστών στο δωμάτιο %(roomName)s:", - "changing room on a RoomView is not supported": "Δεν υποστηρίζεται η αλλαγή δωματίου σε RoomView", "demote": "υποβίβαση", "Deops user with given id": "Deop χρήστη με το συγκεκριμένο αναγνωριστικό", "Disable inline URL previews by default": "Απενεργοποίηση προεπισκόπησης συνδέσμων από προεπιλογή", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index a68ce5d982..cb528e1e22 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -195,7 +195,6 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s changed the topic to \"%(topic)s\".", "Changes to who can read history will only apply to future messages in this room": "Changes to who can read history will only apply to future messages in this room", "Changes your display nickname": "Changes your display nickname", - "changing room on a RoomView is not supported": "changing room on a RoomView is not supported", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.", "Claimed Ed25519 fingerprint key": "Claimed Ed25519 fingerprint key", "Clear Cache and Reload": "Clear Cache and Reload", diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 96a986decc..b90a58a245 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -178,7 +178,6 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s ha cambiado el tema de la sala a \"%(topic)s\".", "Changes to who can read history will only apply to future messages in this room": "Cambios para quien pueda leer el historial solo serán aplicados a futuros mensajes en la sala", "Changes your display nickname": "Cambia la visualización de tu apodo", - "changing room on a RoomView is not supported": "cambiando la sala en un RoomView no esta soportado", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "El cambio de contraseña restablecerá actualmente todas las claves de cifrado de extremo a extremo de todos los dispositivos, haciendo que el historial de chat cifrado sea ilegible, a menos que primero exporte las claves de la habitación y vuelva a importarlas después. En el futuro esto será mejorado.", "Claimed Ed25519 fingerprint key": "Clave Ed25519 es necesaria", "Clear Cache and Reload": "Borrar caché y recargar", diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 308fa36900..09d10368ff 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -436,7 +436,6 @@ "%(senderName)s changed their profile picture.": "%(senderName)s erabiltzaileak bere profileko argazkia aldatu du.", "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s erabiltzaileak %(powerLevelDiffText)s erabiltzailearen botere maila aldatu du.", "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s erabiltzaileak gelaren izena aldatu du, orain %(roomName)s da.", - "changing room on a RoomView is not supported": "ez da onartzen gela ikuspegi batean gelaz aldatzea", "Drop here to tag %(section)s": "Jaregin hona %(section)s atalari etiketa jartzeko", "Incoming voice call from %(name)s": "%(name)s erabiltzailearen deia jasotzen", "Incorrect username and/or password.": "Erabiltzaile-izen edo pasahitz okerra.", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 50d9113245..99df78ac34 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -574,7 +574,6 @@ "You seem to be in a call, are you sure you want to quit?": "Vous semblez avoir un appel en cours, êtes-vous sûr(e) de vouloir quitter ?", "You seem to be uploading files, are you sure you want to quit?": "Vous semblez être en train de télécharger des fichiers, êtes-vous sûr(e) de vouloir quitter ?", "You should not yet trust it to secure data": "Vous ne pouvez pas encore lui faire confiance pour sécuriser vos données", - "changing room on a RoomView is not supported": "changer de salon sur un RoomView n'est pas supporté", "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Vous ne pourrez pas annuler ce changement car vous promouvez l’utilisateur au même niveau d'autorité que le vôtre.", "Sun": "Dim", "Mon": "Lun", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 7c38e41c9b..d6eab3fa87 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -229,7 +229,6 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s megváltoztatta a témát erre \"%(topic)s\".", "Changes to who can read history will only apply to future messages in this room": "Változtatások a napló olvasási jogosultságon csak a szoba új üzeneteire fog vonatkozni", "Changes your display nickname": "Becenév megváltoztatása", - "changing room on a RoomView is not supported": "Szoba nézetben nem lehet szobát váltani", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Jelszó megváltoztatása jelenleg alaphelyzetbe állítja a titkosításnál használt kulcsokat minden készüléken, ezzel a régi titkosított üzenetek olvashatatlanok lesznek hacsak először nem mented ki a kulcsokat és újra betöltöd. A jövőben ezen javítunk.", "Claimed Ed25519 fingerprint key": "Igényelt Ed25519 ujjlenyomat kulcs", "Clear Cache and Reload": "Gyorsítótár törlése és újratöltés", diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index a4edd6892d..2e08aedf4a 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -214,7 +214,6 @@ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s telah mengubah nama ruang menjadi %(roomName)s.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s telah mengubah topik menjadi \"%(topic)s\".", "Changes to who can read history will only apply to future messages in this room": "Pengubahan siapa yang dapat membaca sejarah akan berlaku untuk pesan selanjutnya di ruang ini", - "changing room on a RoomView is not supported": "tidak dapat mengubah ruang di RoomView", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Mengubah password saat ini akan mengatur ulang semua kunci enkripsi end-to-end di semua perangkat, menyebabkan sejarah obrolan yang terenkripsi menjadi tidak dapat dibaca, kecuali sebelumnya Anda ekspor dahulu kunci ruang lalu kemudian impor ulang setelahnya. Ke depan hal ini akan diperbaiki.", "Click here to join the discussion!": "Klik di sini untuk gabung diskusi!", "click to reveal": "Klik untuk menampilkan", diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index 411d1ccfe1..547bc7ff48 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -250,7 +250,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s님이 방 이름을 지우셨어요.", "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s님이 주제를 \"%(topic)s\"로 바꾸셨어요.", "Changes to who can read history will only apply to future messages in this room": "방의 이후 메시지부터 기록을 읽을 수 있는 조건의 변화가 적용되어요", - "changing room on a RoomView is not supported": "룸뷰에서 방을 바꾸는 건 지원하지 않아요", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "비밀번호를 바꾸면 현재 모든 장치의 종단간 암호화 키가 다시 설정되고, 먼저 방의 키를 내보내고 나중에 다시 불러오지 않는 한, 암호화한 이야기 기록을 읽을 수 없게 되어요. 앞으로는 이 기능을 더 좋게 만들 거에요.", "Claimed Ed25519 fingerprint key": "Ed25519 지문 키가 필요", "Click here to join the discussion!": "여기를 눌러서 같이 논의해요!", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index c2a55b3fc2..3c7c4ea733 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -195,7 +195,6 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s nomainīja tēmas nosaukumu uz \"%(topic)s\".", "Changes to who can read history will only apply to future messages in this room": "Izmaiņas attiecībā uz to, kurš varēs lasīt vēstures ziņas, stāsies spēkā tikai uz ziņām,kuras vēl tiks pievienotas šajā istabā", "Changes your display nickname": "Nomaina tavu publisko segvārdu (niku)", - "changing room on a RoomView is not supported": "istabas maiņa nav iespējama, atrodoties istabu skata lapā", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Paroles maiņa dzēsīs pašreizējās šifrēšanas atslēgas visās savstarpēji saistītajās ierīcēs, padarot čata vēsturi neizlasāmu, ja vien vien istabas atslēgas nav tikušas iepriekš eksportētas un no jauna importētas atpakaļ. Nākotnē to plānojam uzlabot.", "Claimed Ed25519 fingerprint key": "Norādīta Ed25519 identificējošās zīmju virknes atslēga", "Clear Cache and Reload": "Iztīri kešatmiņu un pārlādē", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 234fc8c03a..6c72f4ee14 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -179,7 +179,6 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s heeft het onderwerp gewijzigd naar \"%(topic)s\".", "Changes to who can read history will only apply to future messages in this room": "Veranderingen aan wie de historie kan lezen worden alleen maar toegepast op toekomstige berichten in deze kamer", "Changes your display nickname": "Verandert jouw weergavenaam", - "changing room on a RoomView is not supported": "veranderen van een kamer in een RoomView wordt niet ondersteund", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Het veranderen van het wachtwoord zal op het moment alle eind-tot-eind encryptie sleutels resetten, wat alle versleutelde chat geschiedenis onleesbaar zou maken, behalve als je eerst je kamer sleutels exporteert en achteraf opnieuw importeert. Dit zal worden verbeterd in de toekomst.", "Clear Cache and Reload": "Legen cache en herlaad", "Clear Cache": "Legen cache", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 827efeb16a..fdbf9ebfd9 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -571,7 +571,6 @@ "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Não consigo conectar ao servidor padrão - favor checar sua conexão à internet e verificar se o certificado SSL do seu servidor padrão é confiável.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Não consigo conectar ao servidor padrão através de HTTP quando uma URL HTTPS está na barra de endereços do seu navegador. Use HTTPS ou então habilite scripts não seguros no seu navegador.", "Change Password": "Alterar senha", - "changing room on a RoomView is not supported": "mudar a sala em uma 'RoomView' não é permitido", "Click to mute audio": "Clique para colocar o áudio no mudo", "Click to mute video": "Clique para desabilitar imagens de vídeo", "Click to unmute video": "Clique para voltar a mostrar imagens de vídeo", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 7e7ca123b9..4779aada14 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -572,7 +572,6 @@ "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Não consigo conectar ao servidor padrão - favor checar sua conexão à internet e verificar se o certificado SSL do seu servidor padrão é confiável.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Não consigo conectar ao servidor padrão através de HTTP quando uma URL HTTPS está na barra de endereços do seu navegador. Use HTTPS ou então habilite scripts não seguros no seu navegador.", "Change Password": "Alterar senha", - "changing room on a RoomView is not supported": "mudar a sala em uma 'RoomView' não é permitido", "Click to mute audio": "Clique para colocar o áudio no mudo", "Click to mute video": "Clique para desabilitar imagens de vídeo", "Click to unmute video": "Clique para voltar a mostrar imagens de vídeo", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 3f3403d716..aee4ec9b30 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -455,7 +455,6 @@ "Are you sure?": "Вы уверены?", "Autoplay GIFs and videos": "Автовоспроизведение GIF и видео", "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Невозможно соединиться с домашним сервером - проверьте своё соединение и убедитесь, что SSL-сертификат вашего домашнего сервера включён в доверяемые.", - "changing room on a RoomView is not supported": "изменение комнаты в RoomView не поддерживается", "Click to mute audio": "Щелкните, чтобы выключить звук", "Click to mute video": "Щелкните, чтобы выключить видео", "Click to unmute video": "Щелкните, чтобы включить видео", diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index d3b512900c..e28ab4ebbc 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -302,7 +302,6 @@ "Alias (optional)": "Alias (valfri)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Det gick inte att ansluta till servern - kontrollera anslutningen, försäkra att din hemservers TLS-certifikat är betrott, och att inget webbläsartillägg blockerar förfrågningar.", "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s ändrade maktnivån av %(powerLevelDiffText)s.", - "changing room on a RoomView is not supported": "det går inte att byta rum i en RoomView", "Click here to join the discussion!": "Klicka här för att gå med i diskussionen!", "Close": "Stäng", "%(count)s new messages.one": "%(count)s nytt meddelande", diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index 0f1d5b9a6d..3dcb6d5a1f 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -183,7 +183,6 @@ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s గది పేరు తొలగించబడింది.", "Changes to who can read history will only apply to future messages in this room": "చరిత్ర చదివేవారికి మార్పులు ఈ గదిలో భవిష్య సందేశాలకు మాత్రమే వర్తిస్తాయి", "Changes your display nickname": "మీ ప్రదర్శన మారుపేరుని మారుస్తుంది", - "changing room on a RoomView is not supported": "ఒక రూమ్వ్యూలో గది మార్చుకునేకి మద్దతు లేదు", "You cannot place a call with yourself.": "మీరు మీతో కాల్ చేయలేరు.", "You are already in a call.": "మీరు ఇప్పటికే కాల్లో ఉన్నారు.", "You are trying to access %(roomName)s.": "మీరు %(roomName)s లను యాక్సెస్ చేయడానికి ప్రయత్నిస్తున్నారు.", diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index 01ffa729d7..cbb0bd9f49 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -126,7 +126,6 @@ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s เปลี่ยนชื่อห้องไปเป็น %(roomName)s", "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s ลบชื่อห้อง", "Changes your display nickname": "เปลี่ยนชื่อเล่นที่แสดงของคุณ", - "changing room on a RoomView is not supported": "ไม่รองรับการเปลี่ยนห้องใน RoomView", "Clear Cache and Reload": "ล้างแคชแล้วโหลดใหม่", "Clear Cache": "ล้างแคช", "Click here": "คลิกที่นี่", diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 2933e2433b..8d6d607b0d 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -197,7 +197,6 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s konuyu \"%(topic)s\" olarak değiştirdi.", "Changes to who can read history will only apply to future messages in this room": "Geçmişi kimlerin okuyabileceğine ait değişiklikler yalnızca bu odada gelecekteki iletiler için geçerli olur", "Changes your display nickname": "Görünen takma adınızı değiştirir", - "changing room on a RoomView is not supported": "Oda Ekranında oda değiştirme desteklenmiyor", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Şifre değiştirme eğer oda anahtarlarınızı dışa aktarmaz ve daha sonra tekrar içe aktarmazsanız , şu anda tüm cihazlarda uçtan uca şifreleme anahtarlarını sıfırlayacak ve geçmişi okunamaz hale getirecek . Gelecekte bu geliştirilecek.", "Claimed Ed25519 fingerprint key": "Ed25519 parmak izi anahtarı istendi", "Clear Cache and Reload": "Önbelleği Temizle ve Yeniden Yükle", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 93ac57330a..5e8f8ddc99 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -448,7 +448,6 @@ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s 已經變更主題為「%(topic)s」。", "Changes to who can read history will only apply to future messages in this room": "變更誰可以讀取歷史紀錄的設定僅套用於此房間未來的訊息", "Changes your display nickname": "變更您的顯示暱稱", - "changing room on a RoomView is not supported": "不支援在房間檢視時變更房間", "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "目前變更密碼將會重設在所有裝置上的端對端加密金鑰,讓加密的聊天歷史無法讀取,除非您先匯出您的房間金鑰,並在稍後重新匯入它們。這會在未來改進。", "Claimed Ed25519 fingerprint key": "已索取 Ed25519 指紋金鑰", "Clear Cache and Reload": "清除快取並重新載入", From 738c81b5062f162d709a5308b9d689e1f2230d9b Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 5 Sep 2017 17:36:41 +0100 Subject: [PATCH 61/86] Add missing translations --- src/i18n/strings/en_EN.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index d260548e45..8c0f3c8db7 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -597,6 +597,8 @@ "Dec": "Dec", "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(time)s", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s", + "%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(monthName)s %(day)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", "Set a display name:": "Set a display name:", "Set a Display Name": "Set a Display Name", From 9dd98d1085dbd807742613934e4d722890884d63 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 6 Sep 2017 13:25:57 +0100 Subject: [PATCH 62/86] Prepare changelog for v0.10.3 --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index af82ef2e1f..090f5a49da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +Changes in [0.10.3](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.3) (2017-09-06) +===================================================================================================== +[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.3-rc.2...v0.10.3) + + * No changes + Changes in [0.10.3-rc.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.3-rc.2) (2017-09-05) =============================================================================================================== [Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.3-rc.1...v0.10.3-rc.2) From f5cf2aece2ac39a172b2b08adc6b66c006c4790c Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 6 Sep 2017 13:25:58 +0100 Subject: [PATCH 63/86] v0.10.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e1fbfb58d7..38a647ff67 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "0.10.3-rc.2", + "version": "0.10.3", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { From 609d61d53c55eae0660fb01724bb51518ec5f46c Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 6 Sep 2017 17:40:58 +0100 Subject: [PATCH 64/86] Revert "Implement sticky date separators" --- package.json | 1 - src/DateUtils.js | 44 --- src/components/structures/MessagePanel.js | 9 +- src/components/structures/ScrollPanel.js | 278 +++++++++--------- src/components/structures/TimelinePanel.js | 1 + .../structures/TimelinePanel-test.js | 3 + 6 files changed, 143 insertions(+), 193 deletions(-) diff --git a/package.json b/package.json index bb7f33492d..38a647ff67 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,6 @@ "react-addons-css-transition-group": "15.3.2", "react-dom": "^15.4.0", "react-gemini-scrollbar": "matrix-org/react-gemini-scrollbar#5e97aef", - "react-sticky": "^6.0.1", "sanitize-html": "^1.14.1", "text-encoding-utf-8": "^1.0.1", "url": "^0.11.0", diff --git a/src/DateUtils.js b/src/DateUtils.js index e7be394c17..78eef57eae 100644 --- a/src/DateUtils.js +++ b/src/DateUtils.js @@ -30,18 +30,6 @@ function getDaysArray() { ]; } -function getLongDaysArray() { - return [ - _t('Sunday'), - _t('Monday'), - _t('Tuesday'), - _t('Wednesday'), - _t('Thursday'), - _t('Friday'), - _t('Saturday'), - ]; -} - function getMonthsArray() { return [ _t('Jan'), @@ -108,38 +96,6 @@ module.exports = { }); }, - formatDateSeparator: function(date) { - const days = getDaysArray(); - const longDays = getLongDaysArray(); - const months = getMonthsArray(); - - const today = new Date(); - const yesterday = new Date(); - yesterday.setDate(today.getDate() - 1); - - if (date.toDateString() === today.toDateString()) { - return _t('Today'); - } else if (date.toDateString() === yesterday.toDateString()) { - return _t('Yesterday'); - } else if (today.getTime() - date.getTime() < 6 * 24 * 60 * 60 * 1000) { - return longDays[date.getDay()]; - } else if (today.getTime() - date.getTime() < 365 * 24 * 60 * 60 * 1000) { - return _t('%(weekDayName)s, %(monthName)s %(day)s', { - weekDayName: days[date.getDay()], - monthName: months[date.getMonth()], - day: date.getDate(), - fullYear: date.getFullYear(), - }); - } else { - return _t('%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s', { - weekDayName: days[date.getDay()], - monthName: months[date.getMonth()], - day: date.getDate(), - fullYear: date.getFullYear(), - }); - } - }, - formatTime: function(date, showTwelveHour=false) { if (showTwelveHour) { return twelveHourTime(date); diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index aad4e1957a..e5884973c6 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -61,6 +61,9 @@ module.exports = React.createClass({ // for pending messages. ourUserId: React.PropTypes.string, + // true to suppress the date at the start of the timeline + suppressFirstDateSeparator: React.PropTypes.bool, + // whether to show read receipts showReadReceipts: React.PropTypes.bool, @@ -514,10 +517,10 @@ module.exports = React.createClass({ _wantsDateSeparator: function(prevEvent, nextEventDate) { if (prevEvent == null) { - // First event in the panel always wants a DateSeparator - return true; + // first event in the panel: depends if we could back-paginate from + // here. + return !this.props.suppressFirstDateSeparator; } - const prevEventDate = prevEvent.getDate(); if (!nextEventDate || !prevEventDate) { return false; diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 3ea699798e..a8a2ec181b 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -17,7 +17,6 @@ limitations under the License. var React = require("react"); var ReactDOM = require("react-dom"); var GeminiScrollbar = require('react-gemini-scrollbar'); -import { StickyContainer } from 'react-sticky'; import Promise from 'bluebird'; var KeyCode = require('../../KeyCode'); @@ -78,52 +77,111 @@ if (DEBUG_SCROLL) { * scroll down further. If stickyBottom is disabled, we just save the scroll * offset as normal. */ -export default class ScrollPanel extends StickyContainer { +module.exports = React.createClass({ + displayName: 'ScrollPanel', - constructor() { - super(); - this.onResize = this.onResize.bind(this); - this.onScroll = this.onScroll.bind(this); - } + propTypes: { + /* stickyBottom: if set to true, then once the user hits the bottom of + * the list, any new children added to the list will cause the list to + * scroll down to show the new element, rather than preserving the + * existing view. + */ + stickyBottom: React.PropTypes.bool, - componentWillMount() { + /* startAtBottom: if set to true, the view is assumed to start + * scrolled to the bottom. + * XXX: It's likley this is unecessary and can be derived from + * stickyBottom, but I'm adding an extra parameter to ensure + * behaviour stays the same for other uses of ScrollPanel. + * If so, let's remove this parameter down the line. + */ + startAtBottom: React.PropTypes.bool, + + /* onFillRequest(backwards): a callback which is called on scroll when + * the user nears the start (backwards = true) or end (backwards = + * false) of the list. + * + * This should return a promise; no more calls will be made until the + * promise completes. + * + * The promise should resolve to true if there is more data to be + * retrieved in this direction (in which case onFillRequest may be + * called again immediately), or false if there is no more data in this + * directon (at this time) - which will stop the pagination cycle until + * the user scrolls again. + */ + onFillRequest: React.PropTypes.func, + + /* onUnfillRequest(backwards): a callback which is called on scroll when + * there are children elements that are far out of view and could be removed + * without causing pagination to occur. + * + * This function should accept a boolean, which is true to indicate the back/top + * of the panel and false otherwise, and a scroll token, which refers to the + * first element to remove if removing from the front/bottom, and last element + * to remove if removing from the back/top. + */ + onUnfillRequest: React.PropTypes.func, + + /* onScroll: a callback which is called whenever any scroll happens. + */ + onScroll: React.PropTypes.func, + + /* onResize: a callback which is called whenever the Gemini scroll + * panel is resized + */ + onResize: React.PropTypes.func, + + /* className: classnames to add to the top-level div + */ + className: React.PropTypes.string, + + /* style: styles to add to the top-level div + */ + style: React.PropTypes.object, + }, + + getDefaultProps: function() { + return { + stickyBottom: true, + startAtBottom: true, + onFillRequest: function(backwards) { return Promise.resolve(false); }, + onUnfillRequest: function(backwards, scrollToken) {}, + onScroll: function() {}, + }; + }, + + componentWillMount: function() { this._pendingFillRequests = {b: null, f: null}; this.resetScrollState(); - } + }, - componentDidMount() { + componentDidMount: function() { this.checkFillState(); - } + }, - componentDidUpdate() { + componentDidUpdate: function() { // after adding event tiles, we may need to tweak the scroll (either to // keep at the bottom of the timeline, or to maintain the view after // adding events to the top). // // This will also re-check the fill state, in case the paginate was inadequate this.checkScroll(); - } + }, - componentWillUnmount() { + componentWillUnmount: function() { // set a boolean to say we've been unmounted, which any pending // promises can use to throw away their results. // // (We could use isMounted(), but facebook have deprecated that.) this.unmounted = true; - } + }, - onScroll(ev) { + onScroll: function(ev) { var sn = this._getScrollNode(); debuglog("Scroll event: offset now:", sn.scrollTop, "_lastSetScroll:", this._lastSetScroll); - // Set the node and notify subscribers of the StickyContainer - // By extending StickyContainer, we can set the scroll node to be that of the - // ScrolPanel to allow any `` children to be sticky, namely DateSeparators. - this.node = sn; - // Update subscribers - arbitrarily nested `` children - this.notifySubscribers(ev); - // Sometimes we see attempts to write to scrollTop essentially being // ignored. (Or rather, it is successfully written, but on the next // scroll event, it's been reset again). @@ -159,27 +217,27 @@ export default class ScrollPanel extends StickyContainer { this.props.onScroll(ev); this.checkFillState(); - } + }, - onResize() { + onResize: function() { this.props.onResize(); this.checkScroll(); this.refs.geminiPanel.forceUpdate(); - } + }, // after an update to the contents of the panel, check that the scroll is // where it ought to be, and set off pagination requests if necessary. - checkScroll() { + checkScroll: function() { this._restoreSavedScrollState(); this.checkFillState(); - } + }, // return true if the content is fully scrolled down right now; else false. // // note that this is independent of the 'stuckAtBottom' state - it is simply // about whether the the content is scrolled down right now, irrespective of // whether it will stay that way when the children update. - isAtBottom() { + isAtBottom: function() { var sn = this._getScrollNode(); // there seems to be some bug with flexbox/gemini/chrome/richvdh's @@ -189,7 +247,7 @@ export default class ScrollPanel extends StickyContainer { // that we're at the bottom when we're still a few pixels off. return sn.scrollHeight - Math.ceil(sn.scrollTop) <= sn.clientHeight + 3; - } + }, // returns the vertical height in the given direction that can be removed from // the content box (which has a height of scrollHeight, see checkFillState) without @@ -222,17 +280,17 @@ export default class ScrollPanel extends StickyContainer { // |#########| - | // |#########| | // `---------' - - _getExcessHeight(backwards) { + _getExcessHeight: function(backwards) { var sn = this._getScrollNode(); if (backwards) { return sn.scrollTop - sn.clientHeight - UNPAGINATION_PADDING; } else { return sn.scrollHeight - (sn.scrollTop + 2*sn.clientHeight) - UNPAGINATION_PADDING; } - } + }, // check the scroll state and send out backfill requests if necessary. - checkFillState() { + checkFillState: function() { if (this.unmounted) { return; } @@ -271,10 +329,10 @@ export default class ScrollPanel extends StickyContainer { // need to forward-fill this._maybeFill(false); } - } + }, // check if unfilling is possible and send an unfill request if necessary - _checkUnfillState(backwards) { + _checkUnfillState: function(backwards) { let excessHeight = this._getExcessHeight(backwards); if (excessHeight <= 0) { return; @@ -315,10 +373,10 @@ export default class ScrollPanel extends StickyContainer { this.props.onUnfillRequest(backwards, markerScrollToken); }, UNFILL_REQUEST_DEBOUNCE_MS); } - } + }, // check if there is already a pending fill request. If not, set one off. - _maybeFill(backwards) { + _maybeFill: function(backwards) { var dir = backwards ? 'b' : 'f'; if (this._pendingFillRequests[dir]) { debuglog("ScrollPanel: Already a "+dir+" fill in progress - not starting another"); @@ -350,7 +408,7 @@ export default class ScrollPanel extends StickyContainer { this.checkFillState(); } }).done(); - } + }, /* get the current scroll state. This returns an object with the following * properties: @@ -366,9 +424,9 @@ export default class ScrollPanel extends StickyContainer { * the number of pixels the bottom of the tracked child is above the * bottom of the scroll panel. */ - getScrollState() { + getScrollState: function() { return this.scrollState; - } + }, /* reset the saved scroll state. * @@ -382,46 +440,46 @@ export default class ScrollPanel extends StickyContainer { * no use if no children exist yet, or if you are about to replace the * child list.) */ - resetScrollState() { + resetScrollState: function() { this.scrollState = {stuckAtBottom: this.props.startAtBottom}; - } + }, /** * jump to the top of the content. */ - scrollToTop() { + scrollToTop: function() { this._setScrollTop(0); this._saveScrollState(); - } + }, /** * jump to the bottom of the content. */ - scrollToBottom() { + scrollToBottom: function() { // the easiest way to make sure that the scroll state is correctly // saved is to do the scroll, then save the updated state. (Calculating // it ourselves is hard, and we can't rely on an onScroll callback // happening, since there may be no user-visible change here). this._setScrollTop(Number.MAX_VALUE); this._saveScrollState(); - } + }, /** * Page up/down. * * mult: -1 to page up, +1 to page down */ - scrollRelative(mult) { + scrollRelative: function(mult) { var scrollNode = this._getScrollNode(); var delta = mult * scrollNode.clientHeight * 0.5; this._setScrollTop(scrollNode.scrollTop + delta); this._saveScrollState(); - } + }, /** * Scroll up/down in response to a scroll key */ - handleScrollKey(ev) { + handleScrollKey: function(ev) { switch (ev.keyCode) { case KeyCode.PAGE_UP: if (!ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { @@ -447,7 +505,7 @@ export default class ScrollPanel extends StickyContainer { } break; } - } + }, /* Scroll the panel to bring the DOM node with the scroll token * `scrollToken` into view. @@ -460,7 +518,7 @@ export default class ScrollPanel extends StickyContainer { * node (specifically, the bottom of it) will be positioned. If omitted, it * defaults to 0. */ - scrollToToken(scrollToken, pixelOffset, offsetBase) { + scrollToToken: function(scrollToken, pixelOffset, offsetBase) { pixelOffset = pixelOffset || 0; offsetBase = offsetBase || 0; @@ -482,11 +540,11 @@ export default class ScrollPanel extends StickyContainer { // ... then make it so. this._restoreSavedScrollState(); - } + }, // set the scrollTop attribute appropriately to position the given child at the // given offset in the window. A helper for _restoreSavedScrollState. - _scrollToToken(scrollToken, pixelOffset) { + _scrollToToken: function(scrollToken, pixelOffset) { /* find the dom node with the right scrolltoken */ var node; var messages = this.refs.itemlist.children; @@ -518,9 +576,9 @@ export default class ScrollPanel extends StickyContainer { this._setScrollTop(scrollNode.scrollTop + scrollDelta); } - } + }, - _saveScrollState() { + _saveScrollState: function() { if (this.props.stickyBottom && this.isAtBottom()) { this.scrollState = { stuckAtBottom: true }; debuglog("ScrollPanel: Saved scroll state", this.scrollState); @@ -558,9 +616,9 @@ export default class ScrollPanel extends StickyContainer { } else { debuglog("ScrollPanel: unable to save scroll state: found no children in the viewport"); } - } + }, - _restoreSavedScrollState() { + _restoreSavedScrollState: function() { var scrollState = this.scrollState; var scrollNode = this._getScrollNode(); @@ -570,9 +628,9 @@ export default class ScrollPanel extends StickyContainer { this._scrollToToken(scrollState.trackedScrollToken, scrollState.pixelOffset); } - } + }, - _setScrollTop(scrollTop) { + _setScrollTop: function(scrollTop) { var scrollNode = this._getScrollNode(); var prevScroll = scrollNode.scrollTop; @@ -594,12 +652,12 @@ export default class ScrollPanel extends StickyContainer { debuglog("ScrollPanel: set scrollTop:", scrollNode.scrollTop, "requested:", scrollTop, "_lastSetScroll:", this._lastSetScroll); - } + }, /* get the DOM node which has the scrollTop property we care about for our * message panel. */ - _getScrollNode() { + _getScrollNode: function() { if (this.unmounted) { // this shouldn't happen, but when it does, turn the NPE into // something more meaningful. @@ -607,91 +665,21 @@ export default class ScrollPanel extends StickyContainer { } return this.refs.geminiPanel.scrollbar.getViewElement(); - } + }, - render() { + render: function() { // TODO: the classnames on the div and ol could do with being updated to // reflect the fact that we don't necessarily contain a list of messages. // it's not obvious why we have a separate div and ol anyway. - return ( - -
-
    - {this.props.children} -
-
-
- ); - } -} - -ScrollPanel.propTypes = { - /* stickyBottom: if set to true, then once the user hits the bottom of - * the list, any new children added to the list will cause the list to - * scroll down to show the new element, rather than preserving the - * existing view. - */ - stickyBottom: React.PropTypes.bool, - - /* startAtBottom: if set to true, the view is assumed to start - * scrolled to the bottom. - * XXX: It's likley this is unecessary and can be derived from - * stickyBottom, but I'm adding an extra parameter to ensure - * behaviour stays the same for other uses of ScrollPanel. - * If so, let's remove this parameter down the line. - */ - startAtBottom: React.PropTypes.bool, - - /* onFillRequest(backwards): a callback which is called on scroll when - * the user nears the start (backwards = true) or end (backwards = - * false) of the list. - * - * This should return a promise; no more calls will be made until the - * promise completes. - * - * The promise should resolve to true if there is more data to be - * retrieved in this direction (in which case onFillRequest may be - * called again immediately), or false if there is no more data in this - * directon (at this time) - which will stop the pagination cycle until - * the user scrolls again. - */ - onFillRequest: React.PropTypes.func, - - /* onUnfillRequest(backwards): a callback which is called on scroll when - * there are children elements that are far out of view and could be removed - * without causing pagination to occur. - * - * This function should accept a boolean, which is true to indicate the back/top - * of the panel and false otherwise, and a scroll token, which refers to the - * first element to remove if removing from the front/bottom, and last element - * to remove if removing from the back/top. - */ - onUnfillRequest: React.PropTypes.func, - - /* onScroll: a callback which is called whenever any scroll happens. - */ - onScroll: React.PropTypes.func, - - /* onResize: a callback which is called whenever the Gemini scroll - * panel is resized - */ - onResize: React.PropTypes.func, - - /* className: classnames to add to the top-level div - */ - className: React.PropTypes.string, - - /* style: styles to add to the top-level div - */ - style: React.PropTypes.object, -}; - -ScrollPanel.defaultProps = { - stickyBottom: true, - startAtBottom: true, - onFillRequest: function(backwards) { return Promise.resolve(false); }, - onUnfillRequest: function(backwards, scrollToken) {}, - onScroll: function() {}, -}; + return ( +
+
    + {this.props.children} +
+
+
+ ); + }, +}); diff --git a/src/components/structures/TimelinePanel.js b/src/components/structures/TimelinePanel.js index ebd9784b6f..862c3f46d0 100644 --- a/src/components/structures/TimelinePanel.js +++ b/src/components/structures/TimelinePanel.js @@ -1147,6 +1147,7 @@ var TimelinePanel = React.createClass({ highlightedEventId={ this.props.highlightedEventId } readMarkerEventId={ this.state.readMarkerEventId } readMarkerVisible={ this.state.readMarkerVisible } + suppressFirstDateSeparator={ this.state.canBackPaginate } showUrlPreview={ this.props.showUrlPreview } showReadReceipts={ this.props.showReadReceipts } ourUserId={ MatrixClientPeg.get().credentials.userId } diff --git a/test/components/structures/TimelinePanel-test.js b/test/components/structures/TimelinePanel-test.js index c13d149ed0..98ec65b8e8 100644 --- a/test/components/structures/TimelinePanel-test.js +++ b/test/components/structures/TimelinePanel-test.js @@ -234,6 +234,7 @@ describe('TimelinePanel', function() { // 5 times, and we should have given up paginating expect(client.paginateEventTimeline.callCount).toEqual(5); expect(messagePanel.props.backPaginating).toBe(false); + expect(messagePanel.props.suppressFirstDateSeparator).toBe(false); // now, if we update the events, there shouldn't be any // more requests. @@ -338,6 +339,7 @@ describe('TimelinePanel', function() { awaitScroll().then(() => { // we should now have loaded the first few events expect(messagePanel.props.backPaginating).toBe(false); + expect(messagePanel.props.suppressFirstDateSeparator).toBe(true); // back-paginate until we hit the start return backPaginate(); @@ -345,6 +347,7 @@ describe('TimelinePanel', function() { // hopefully, we got to the start of the timeline expect(messagePanel.props.backPaginating).toBe(false); + expect(messagePanel.props.suppressFirstDateSeparator).toBe(false); var events = scryEventTiles(panel); expect(events[0].props.mxEvent).toBe(timeline.getEvents()[0]); From d71f15adf4d65faf0ba06b9ec72cccdde2ed785c Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 6 Sep 2017 22:51:10 +0100 Subject: [PATCH 65/86] Remove unused scrollStateMap from LoggedinView --- src/components/structures/LoggedInView.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js index 0790a5766e..147707b6fc 100644 --- a/src/components/structures/LoggedInView.js +++ b/src/components/structures/LoggedInView.js @@ -81,10 +81,6 @@ export default React.createClass({ // stash the MatrixClient in case we log out before we are unmounted this._matrixClient = this.props.matrixClient; - // _scrollStateMap is a map from room id to the scroll state returned by - // RoomView.getScrollState() - this._scrollStateMap = {}; - CallMediaHandler.loadDevices(); document.addEventListener('keydown', this._onKeyDown); @@ -116,10 +112,6 @@ export default React.createClass({ return Boolean(MatrixClientPeg.get()); }, - getScrollStateForRoom: function(roomId) { - return this._scrollStateMap[roomId]; - }, - canResetTimelineInRoom: function(roomId) { if (!this.refs.roomView) { return true; @@ -248,7 +240,6 @@ export default React.createClass({ opacity={this.props.middleOpacity} collapsedRhs={this.props.collapse_rhs} ConferenceHandler={this.props.ConferenceHandler} - scrollStateMap={this._scrollStateMap} />; if (!this.props.collapse_rhs) right_panel = ; break; From 408b8c18ea89d0c2fa714f4e34ec82e455273d42 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 7 Sep 2017 17:08:36 +0100 Subject: [PATCH 66/86] Introduce a RoomScrollStateStore to keep the place we're scrolled to in rooms. This mainly eleimates the extra, superfluous onRoomViewStoreUpdate callback that happened when the previous room saved back its scroll state. Moving the scroll state to a separate store means we can have this not emit events because nothing needs to know when the scroll state changes. --- src/components/structures/RoomView.js | 42 ++++++++++++++------------- src/stores/RoomScrollStateStore.js | 37 +++++++++++++++++++++++ src/stores/RoomViewStore.js | 30 ------------------- 3 files changed, 59 insertions(+), 50 deletions(-) create mode 100644 src/stores/RoomScrollStateStore.js diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 87bed1ed08..02a333ee82 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -47,6 +47,7 @@ import KeyCode from '../../KeyCode'; import UserProvider from '../../autocomplete/UserProvider'; import RoomViewStore from '../../stores/RoomViewStore'; +import RoomScrollStateStore from '../../stores/RoomScrollStateStore'; let DEBUG = false; let debuglog = function() {}; @@ -163,7 +164,6 @@ module.exports = React.createClass({ roomLoadError: RoomViewStore.getRoomLoadError(), joining: RoomViewStore.isJoining(), initialEventId: RoomViewStore.getInitialEventId(), - initialEventPixelOffset: RoomViewStore.getInitialEventPixelOffset(), isInitialEventHighlighted: RoomViewStore.isInitialEventHighlighted(), forwardingEvent: RoomViewStore.getForwardingEvent(), shouldPeek: RoomViewStore.shouldPeek(), @@ -191,18 +191,32 @@ module.exports = React.createClass({ newState.room = MatrixClientPeg.get().getRoom(newState.roomId); } + if (this.state.roomId !== newState.roomId) { + // Store the scroll state for the previous room so that we can return to this + // position when viewing this room in future. + if (this.state.roomId) { + RoomScrollStateStore.setScrollState(this.state.roomId, this._getScrollState()); + } + + // ...and get the scroll state for the new room + + // If an event ID wasn't specified, default to the one saved for this room + // via update_scroll_state. Assume initialEventPixelOffset should be set. + if (!newState.initialEventId) { + const roomScrollState = RoomScrollStateStore.getScrollState(newState.roomId); + if (roomScrollState) { + newState.initialEventId = roomScrollState.focussedEvent; + newState.initialEventPixelOffset = roomScrollState.pixelOffset; + } + } + } + // Clear the search results when clicking a search result (which changes the // currently scrolled to event, this.state.initialEventId). if (this.state.initialEventId !== newState.initialEventId) { newState.searchResults = null; } - // Store the scroll state for the previous room so that we can return to this - // position when viewing this room in future. - if (this.state.roomId !== newState.roomId) { - this._updateScrollMap(this.state.roomId); - } - this.setState(newState, () => { // At this point, this.state.roomId could be null (e.g. the alias might not // have been resolved yet) so anything called here must handle this case. @@ -340,7 +354,7 @@ module.exports = React.createClass({ this.unmounted = true; // update the scroll map before we get unmounted - this._updateScrollMap(this.state.roomId); + RoomScrollStateStore.setScrollState(this.state.roomId, this._getScrollState()); if (this.refs.roomView) { // disconnect the D&D event listeners from the room view. This @@ -617,18 +631,6 @@ module.exports = React.createClass({ }); }, - _updateScrollMap(roomId) { - // No point updating scroll state if the room ID hasn't been resolved yet - if (!roomId) { - return; - } - dis.dispatch({ - action: 'update_scroll_state', - room_id: roomId, - scroll_state: this._getScrollState(), - }); - }, - onRoom: function(room) { if (!room || room.roomId !== this.state.roomId) { return; diff --git a/src/stores/RoomScrollStateStore.js b/src/stores/RoomScrollStateStore.js new file mode 100644 index 0000000000..a1d46a29b8 --- /dev/null +++ b/src/stores/RoomScrollStateStore.js @@ -0,0 +1,37 @@ +/* +Copyright 2017 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/** + * Stores where the user has scrolled to in each room + */ +class RoomScrollStateStore { + constructor() { + this._scrollStateMap = {}; + } + + getScrollState(roomId) { + return this._scrollStateMap[roomId]; + } + + setScrollState(roomId, scrollState) { + this._scrollStateMap[roomId] = scrollState; + } +} + +if (global.mx_RoomScrollStateStore === undefined) { + global.mx_RoomScrollStateStore = new RoomScrollStateStore(); +} +export default global.mx_RoomScrollStateStore; diff --git a/src/stores/RoomViewStore.js b/src/stores/RoomViewStore.js index bd9d3ea0fa..bd1fff600d 100644 --- a/src/stores/RoomViewStore.js +++ b/src/stores/RoomViewStore.js @@ -30,8 +30,6 @@ const INITIAL_STATE = { // The event to scroll to when the room is first viewed initialEventId: null, - // The offset to display the initial event at (see scrollStateMap) - initialEventPixelOffset: null, // Whether to highlight the initial event isInitialEventHighlighted: false, @@ -41,20 +39,6 @@ const INITIAL_STATE = { roomLoading: false, // Any error that has occurred during loading roomLoadError: null, - // A map from room id to scroll state. - // - // If there is no special scroll state (ie, we are following the live - // timeline), the scroll state is null. Otherwise, it is an object with - // the following properties: - // - // focussedEvent: the ID of the 'focussed' event. Typically this is - // the last event fully visible in the viewport, though if we - // have done an explicit scroll to an explicit event, it will be - // that event. - // - // pixelOffset: the number of pixels the window is scrolled down - // from the focussedEvent. - scrollStateMap: {}, forwardingEvent: null, }; @@ -115,9 +99,6 @@ class RoomViewStore extends Store { case 'on_logged_out': this.reset(); break; - case 'update_scroll_state': - this._updateScrollState(payload); - break; case 'forward_event': this._setState({ forwardingEvent: payload.event, @@ -132,7 +113,6 @@ class RoomViewStore extends Store { roomId: payload.room_id, roomAlias: payload.room_alias, initialEventId: payload.event_id, - initialEventPixelOffset: undefined, isInitialEventHighlighted: payload.highlighted, forwardingEvent: null, roomLoading: false, @@ -145,16 +125,6 @@ class RoomViewStore extends Store { newState.joining = false; } - // If an event ID wasn't specified, default to the one saved for this room - // via update_scroll_state. Assume initialEventPixelOffset should be set. - if (!newState.initialEventId) { - const roomScrollState = this._state.scrollStateMap[payload.room_id]; - if (roomScrollState) { - newState.initialEventId = roomScrollState.focussedEvent; - newState.initialEventPixelOffset = roomScrollState.pixelOffset; - } - } - if (this._state.forwardingEvent) { dis.dispatch({ action: 'send_event', From 7f44ac740346b06934850834214e6506b4a4e62a Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 7 Sep 2017 17:15:19 +0100 Subject: [PATCH 67/86] Remove now unused stuff from RoomViewStore --- src/stores/RoomViewStore.js | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/stores/RoomViewStore.js b/src/stores/RoomViewStore.js index bd1fff600d..17fcc97160 100644 --- a/src/stores/RoomViewStore.js +++ b/src/stores/RoomViewStore.js @@ -211,15 +211,6 @@ class RoomViewStore extends Store { }); } - _updateScrollState(payload) { - // Clobber existing scroll state for the given room ID - const newScrollStateMap = this._state.scrollStateMap; - newScrollStateMap[payload.room_id] = payload.scroll_state; - this._setState({ - scrollStateMap: newScrollStateMap, - }); - } - reset() { this._state = Object.assign({}, INITIAL_STATE); } @@ -234,11 +225,6 @@ class RoomViewStore extends Store { return this._state.initialEventId; } - // The offset to display the initial event at (see scrollStateMap) - getInitialEventPixelOffset() { - return this._state.initialEventPixelOffset; - } - // Whether to highlight the initial event isInitialEventHighlighted() { return this._state.isInitialEventHighlighted; From 82d1afcc47e7515ba093c5be56ef68f357411540 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 7 Sep 2017 17:16:32 +0100 Subject: [PATCH 68/86] Correct comment --- src/components/structures/RoomView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 02a333ee82..69760499a1 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -201,7 +201,7 @@ module.exports = React.createClass({ // ...and get the scroll state for the new room // If an event ID wasn't specified, default to the one saved for this room - // via update_scroll_state. Assume initialEventPixelOffset should be set. + // in the scroll state store. Assume initialEventPixelOffset should be set. if (!newState.initialEventId) { const roomScrollState = RoomScrollStateStore.getScrollState(newState.roomId); if (roomScrollState) { From d714291aa139b5a7b65edd3d1615f19a8027ac0f Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 13:27:14 +0100 Subject: [PATCH 69/86] Re-add doc on scroll state map structure --- src/stores/RoomScrollStateStore.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/stores/RoomScrollStateStore.js b/src/stores/RoomScrollStateStore.js index a1d46a29b8..07848283d1 100644 --- a/src/stores/RoomScrollStateStore.js +++ b/src/stores/RoomScrollStateStore.js @@ -19,6 +19,19 @@ limitations under the License. */ class RoomScrollStateStore { constructor() { + // A map from room id to scroll state. + // + // If there is no special scroll state (ie, we are following the live + // timeline), the scroll state is null. Otherwise, it is an object with + // the following properties: + // + // focussedEvent: the ID of the 'focussed' event. Typically this is + // the last event fully visible in the viewport, though if we + // have done an explicit scroll to an explicit event, it will be + // that event. + // + // pixelOffset: the number of pixels the window is scrolled down + // from the focussedEvent. this._scrollStateMap = {}; } From 59c54d3756153e3378ba2198115e946eee599159 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 13:39:22 +0100 Subject: [PATCH 70/86] Remove redundant code --- src/components/structures/RoomView.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 69760499a1..2de8496b50 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -191,14 +191,8 @@ module.exports = React.createClass({ newState.room = MatrixClientPeg.get().getRoom(newState.roomId); } - if (this.state.roomId !== newState.roomId) { - // Store the scroll state for the previous room so that we can return to this - // position when viewing this room in future. - if (this.state.roomId) { - RoomScrollStateStore.setScrollState(this.state.roomId, this._getScrollState()); - } - - // ...and get the scroll state for the new room + if (this.state.roomId === null && newState.roomId !== null) { + // Get the scroll state for the new room // If an event ID wasn't specified, default to the one saved for this room // in the scroll state store. Assume initialEventPixelOffset should be set. @@ -354,7 +348,9 @@ module.exports = React.createClass({ this.unmounted = true; // update the scroll map before we get unmounted - RoomScrollStateStore.setScrollState(this.state.roomId, this._getScrollState()); + if (this.state.roomId) { + RoomScrollStateStore.setScrollState(this.state.roomId, this._getScrollState()); + } if (this.refs.roomView) { // disconnect the D&D event listeners from the room view. This From 78a2e497053df599240fcadb7922f92df3498639 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 15:41:19 +0100 Subject: [PATCH 71/86] Don't always paginate when mounting a ScrollPanel Calling just checkFill on DidMount did not initially set the scrollTop which meant that one back pagination request is always performed regardless. This meant we would end up rending the first batch of events, then paginating and re-rendering again after the pagination got another batch, causing unnecessary render churn. --- src/components/structures/ScrollPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index a8a2ec181b..ae3ffe66e3 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -157,7 +157,7 @@ module.exports = React.createClass({ }, componentDidMount: function() { - this.checkFillState(); + this.checkScroll(); }, componentDidUpdate: function() { From 1be35a77ec996a3409e544d3e7a11ecde6652137 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 17:06:46 +0100 Subject: [PATCH 72/86] Don't wait for setState to run onHaveRoom onHaveRoom sets some more state (among other things) so putting it in the setState callback so it could observe the new state caused us to have to re-render again unnecessarily. Just give it the new state as a parameter. --- src/components/structures/RoomView.js | 29 +++++++++++++++------------ 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 2de8496b50..037cb736cd 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -211,16 +211,19 @@ module.exports = React.createClass({ newState.searchResults = null; } - this.setState(newState, () => { - // At this point, this.state.roomId could be null (e.g. the alias might not - // have been resolved yet) so anything called here must handle this case. - if (initial) { - this._onHaveRoom(); - } - }); + this.setState(newState); + // At this point, newState.roomId could be null (e.g. the alias might not + // have been resolved yet) so anything called here must handle this case. + // We pass the new state into this function for it to read: it needs to + // observe the new state but we don't want to put it in the setState + // callback because this would prevent the setStates from being batched, + // ie. cause it to render RoomView twice rather than the once that is necessary. + if (initial) { + this._onHaveRoom(newState); + } }, - _onHaveRoom: function() { + _onHaveRoom: function(state) { // if this is an unknown room then we're in one of three states: // - This is a room we can peek into (search engine) (we can /peek) // - This is a room we can publicly join or were invited to. (we can /join) @@ -236,7 +239,7 @@ module.exports = React.createClass({ // about it). We don't peek in the historical case where we were joined but are // now not joined because the js-sdk peeking API will clobber our historical room, // making it impossible to indicate a newly joined room. - const room = this.state.room; + const room = state.room; if (room) { this.setState({ unsentMessageError: this._getUnsentMessageError(room), @@ -244,15 +247,15 @@ module.exports = React.createClass({ }); this._onRoomLoaded(room); } - if (!this.state.joining && this.state.roomId) { + if (!state.joining && state.roomId) { if (this.props.autoJoin) { this.onJoinButtonClicked(); - } else if (!room && this.state.shouldPeek) { - console.log("Attempting to peek into room %s", this.state.roomId); + } else if (!room && state.shouldPeek) { + console.log("Attempting to peek into room %s", state.roomId); this.setState({ peekLoading: true, }); - MatrixClientPeg.get().peekInRoom(this.state.roomId).then((room) => { + MatrixClientPeg.get().peekInRoom(state.roomId).then((room) => { this.setState({ room: room, peekLoading: false, From 03dcded72f98108a9f59fe8bb5e01b42299112b4 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 17:39:10 +0100 Subject: [PATCH 73/86] Blank line to make comment clearer --- src/components/structures/RoomView.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 037cb736cd..6b76ad4ae1 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -214,6 +214,7 @@ module.exports = React.createClass({ this.setState(newState); // At this point, newState.roomId could be null (e.g. the alias might not // have been resolved yet) so anything called here must handle this case. + // We pass the new state into this function for it to read: it needs to // observe the new state but we don't want to put it in the setState // callback because this would prevent the setStates from being batched, From 81871c50bed120eb94d217e485473f428b055052 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 17:43:41 +0100 Subject: [PATCH 74/86] Add more doc on why module level variables do not work as singletons --- src/Skinner.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Skinner.js b/src/Skinner.js index f47572ba01..1fe12f85ab 100644 --- a/src/Skinner.js +++ b/src/Skinner.js @@ -84,6 +84,9 @@ class Skinner { // behaviour with multiple copies of files etc. is erratic at best. // XXX: We can still end up with the same file twice in the resulting // JS bundle which is nonideal. +// See https://derickbailey.com/2016/03/09/creating-a-true-singleton-in-node-js-with-es6-symbols/ +// or https://nodejs.org/api/modules.html#modules_module_caching_caveats +// ("Modules are cached based on their resolved filename") if (global.mxSkinner === undefined) { global.mxSkinner = new Skinner(); } From bf982004f6e06934df18ddc0fdcd51dbd863e7c2 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 17:56:53 +0100 Subject: [PATCH 75/86] Give onHaveRoom the info it needs explicitly Rather than giving it a state object which is not actually the whole state but happens to be everything it actually wants (currently) --- src/components/structures/RoomView.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 6b76ad4ae1..56c0d1d281 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -220,11 +220,11 @@ module.exports = React.createClass({ // callback because this would prevent the setStates from being batched, // ie. cause it to render RoomView twice rather than the once that is necessary. if (initial) { - this._onHaveRoom(newState); + this._onHaveRoom(newState.room, newState.roomId, newState.joining, newState.shouldPeek); } }, - _onHaveRoom: function(state) { + _onHaveRoom: function(room, roomId, joining, shouldPeek) { // if this is an unknown room then we're in one of three states: // - This is a room we can peek into (search engine) (we can /peek) // - This is a room we can publicly join or were invited to. (we can /join) @@ -240,7 +240,6 @@ module.exports = React.createClass({ // about it). We don't peek in the historical case where we were joined but are // now not joined because the js-sdk peeking API will clobber our historical room, // making it impossible to indicate a newly joined room. - const room = state.room; if (room) { this.setState({ unsentMessageError: this._getUnsentMessageError(room), @@ -248,15 +247,15 @@ module.exports = React.createClass({ }); this._onRoomLoaded(room); } - if (!state.joining && state.roomId) { + if (!joining && roomId) { if (this.props.autoJoin) { this.onJoinButtonClicked(); - } else if (!room && state.shouldPeek) { - console.log("Attempting to peek into room %s", state.roomId); + } else if (!room && shouldPeek) { + console.log("Attempting to peek into room %s", roomId); this.setState({ peekLoading: true, }); - MatrixClientPeg.get().peekInRoom(state.roomId).then((room) => { + MatrixClientPeg.get().peekInRoom(roomId).then((room) => { this.setState({ room: room, peekLoading: false, From aee2f3cdefaf4a787f7bbdfedf226f3927a10301 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 18:11:13 +0100 Subject: [PATCH 76/86] Rename onHaveRoom And move some code out of it which didn't really have any reason to be hanging out there rather than just be where we set the room a few lines above. --- src/components/structures/RoomView.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 56c0d1d281..8a0eeb50b9 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -189,6 +189,11 @@ module.exports = React.createClass({ // the RoomView instance if (initial) { newState.room = MatrixClientPeg.get().getRoom(newState.roomId); + if (newState.room) { + newState.unsentMessageError = this._getUnsentMessageError(newState.room); + newState.showApps = this._shouldShowApps(newState.room); + this._onRoomLoaded(newState.room); + } } if (this.state.roomId === null && newState.roomId !== null) { @@ -220,11 +225,11 @@ module.exports = React.createClass({ // callback because this would prevent the setStates from being batched, // ie. cause it to render RoomView twice rather than the once that is necessary. if (initial) { - this._onHaveRoom(newState.room, newState.roomId, newState.joining, newState.shouldPeek); + this._setupRoom(newState.room, newState.roomId, newState.joining, newState.shouldPeek); } }, - _onHaveRoom: function(room, roomId, joining, shouldPeek) { + _setupRoom: function(room, roomId, joining, shouldPeek) { // if this is an unknown room then we're in one of three states: // - This is a room we can peek into (search engine) (we can /peek) // - This is a room we can publicly join or were invited to. (we can /join) @@ -240,13 +245,6 @@ module.exports = React.createClass({ // about it). We don't peek in the historical case where we were joined but are // now not joined because the js-sdk peeking API will clobber our historical room, // making it impossible to indicate a newly joined room. - if (room) { - this.setState({ - unsentMessageError: this._getUnsentMessageError(room), - showApps: this._shouldShowApps(room), - }); - this._onRoomLoaded(room); - } if (!joining && roomId) { if (this.props.autoJoin) { this.onJoinButtonClicked(); From 663dc3e5131bb2e38df2ba8eba8fefb6909f87f5 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 18:56:57 +0100 Subject: [PATCH 77/86] Don't re-render matrixchat unnecessarily ...on room switch. We were setting most of the state in viewRoom, but getting the current room ID from the RoomViewStore, but this meant we did one setState from the RoomViewStore updating, re-rendered and then setState again in viewRoom causing another render. This just sets the room ID in viewRoom. --- src/components/structures/MatrixChat.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index bbe345933e..c3fae0f1b3 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -38,7 +38,6 @@ import linkifyMatrix from "../../linkify-matrix"; import * as Lifecycle from '../../Lifecycle'; // LifecycleStore is not used but does listen to and dispatch actions require('../../stores/LifecycleStore'); -import RoomViewStore from '../../stores/RoomViewStore'; import PageTypes from '../../PageTypes'; import createRoom from "../../createRoom"; @@ -214,9 +213,6 @@ module.exports = React.createClass({ componentWillMount: function() { SdkConfig.put(this.props.config); - this._roomViewStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdated); - this._onRoomViewStoreUpdated(); - if (!UserSettingsStore.getLocalSetting('analyticsOptOut', false)) Analytics.enable(); // Used by _viewRoom before getting state from sync @@ -587,10 +583,6 @@ module.exports = React.createClass({ } }, - _onRoomViewStoreUpdated: function() { - this.setState({ currentRoomId: RoomViewStore.getRoomId() }); - }, - _setPage: function(pageType) { this.setState({ page_type: pageType, @@ -677,6 +669,7 @@ module.exports = React.createClass({ this.focusComposer = true; const newState = { + currentRoomId: roomInfo.room_id || null, page_type: PageTypes.RoomView, thirdPartyInvite: roomInfo.third_party_invite, roomOobData: roomInfo.oob_data, From 0e8bd856bc3527b46397b2173004f5cd0f9c24a6 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Fri, 8 Sep 2017 20:14:27 +0200 Subject: [PATCH 78/86] remove obsolete this._roomViewStoreToken.remove(); --- src/components/structures/MatrixChat.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index c3fae0f1b3..c142d6958c 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -349,7 +349,6 @@ module.exports = React.createClass({ UDEHandler.stopListening(); window.removeEventListener("focus", this.onFocus); window.removeEventListener('resize', this.handleResize); - this._roomViewStoreToken.remove(); }, componentDidUpdate: function() { From ec3ff529e7ce4985f1b553c48d7175c7d1097b5a Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 23:05:27 +0100 Subject: [PATCH 79/86] Fast path for emojifying strings Emojione's regex for detecting emoji is *enourmous* and we were running it on every display name, room name, message etc every time those components mounted. Add a much simpler regex to rule out the majority of strings that contain no emoji and fast-path them. Makes room switching about 10% faster (in my tests with all the profiling turned on). --- src/HtmlUtils.js | 15 +++++++++++++++ src/components/views/elements/EmojiText.js | 13 ++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js index 87e714083b..a046a94363 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.js @@ -31,13 +31,28 @@ emojione.imagePathPNG = 'emojione/png/'; // Use SVGs for emojis emojione.imageType = 'svg'; +const SIMPLE_EMOJI_PATTERN = /([\ud800-\udbff])([\udc00-\udfff])/; const EMOJI_REGEX = new RegExp(emojione.unicodeRegexp+"+", "gi"); const COLOR_REGEX = /^#[0-9a-fA-F]{6}$/; +/* + * Return true if the given string contains emoji + * Uses a much, much simpler regex than emojione's so will give false + * positives, but useful for fast-path testing strings to see if they + * need emojification. + * unicodeToImage uses this function. + */ +export function containsEmoji(str) { + return SIMPLE_EMOJI_PATTERN.test(str); +} + /* modified from https://github.com/Ranks/emojione/blob/master/lib/js/emojione.js * because we want to include emoji shortnames in title text */ export function unicodeToImage(str) { + // fast path + if (!containsEmoji(str)) return str; + let replaceWith, unicode, alt, short, fname; const mappedUnicode = emojione.mapUnicodeToShort(); diff --git a/src/components/views/elements/EmojiText.js b/src/components/views/elements/EmojiText.js index cb6cd2ef5e..a48e51f44f 100644 --- a/src/components/views/elements/EmojiText.js +++ b/src/components/views/elements/EmojiText.js @@ -15,12 +15,19 @@ */ import React from 'react'; -import {emojifyText} from '../../../HtmlUtils'; +import {emojifyText, containsEmoji} from '../../../HtmlUtils'; export default function EmojiText(props) { const {element, children, ...restProps} = props; - restProps.dangerouslySetInnerHTML = emojifyText(children); - return React.createElement(element, restProps); + + // fast path: simple regex to detect strings that don't contain + // emoji and just return them + if (containsEmoji(children)) { + restProps.dangerouslySetInnerHTML = emojifyText(children); + return React.createElement(element, restProps); + } else { + return React.createElement(element, restProps, children); + } } EmojiText.propTypes = { From ea5726aa4e101afa65d2e8a87813d1ef80fd418d Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 23:14:06 +0100 Subject: [PATCH 80/86] Copyright --- src/HtmlUtils.js | 1 + src/components/views/elements/EmojiText.js | 1 + 2 files changed, 2 insertions(+) diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js index a046a94363..05be98f5fd 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.js @@ -1,5 +1,6 @@ /* Copyright 2015, 2016 OpenMarket Ltd +Copyright 2017 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/components/views/elements/EmojiText.js b/src/components/views/elements/EmojiText.js index a48e51f44f..faab0241ae 100644 --- a/src/components/views/elements/EmojiText.js +++ b/src/components/views/elements/EmojiText.js @@ -1,5 +1,6 @@ /* Copyright 2016 Aviral Dasgupta + Copyright 2017 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From fe79010e4e32604ff3685fa6f42289d0c83abd03 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 8 Sep 2017 23:36:22 +0100 Subject: [PATCH 81/86] Only add the code copy button for HTML messages Trivial fast-path optimisation: plain text messages cannot possibly contain pre blocks so there's no point in trying to parse them in order to add code copy buttons. --- src/HtmlUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js index 87e714083b..ccc7c1a630 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.js @@ -393,7 +393,7 @@ export function bodyToHtml(content, highlights, opts) { } safeBody = sanitizeHtml(body, sanitizeHtmlParams); safeBody = unicodeToImage(safeBody); - safeBody = addCodeCopyButton(safeBody); + if (isHtml) safeBody = addCodeCopyButton(safeBody); } finally { delete sanitizeHtmlParams.textFilter; From 876257f4e219acc06bd5097dd4bd71eb5403ebd2 Mon Sep 17 00:00:00 2001 From: David Baker Date: Sun, 10 Sep 2017 14:23:33 +0100 Subject: [PATCH 82/86] Consolidate the code copy button Adding the code code button was done by manipulating the HTML of the event body to add a span tag, then adding the onclick handler after the thing was mounted. Apart from splitting the code between two places, adding the span tag was, according to Chrome's profiler, taking up quite a lot of CPU cycles (apparently as soon as you set the innerHTML on a div). Instead, just build the whole lot together after the component mounts. --- src/HtmlUtils.js | 18 ------------------ src/components/views/messages/TextualBody.js | 15 +++++++++------ 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js index ccc7c1a630..2b0fd686c0 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.js @@ -393,7 +393,6 @@ export function bodyToHtml(content, highlights, opts) { } safeBody = sanitizeHtml(body, sanitizeHtmlParams); safeBody = unicodeToImage(safeBody); - if (isHtml) safeBody = addCodeCopyButton(safeBody); } finally { delete sanitizeHtmlParams.textFilter; @@ -412,23 +411,6 @@ export function bodyToHtml(content, highlights, opts) { return ; } -function addCodeCopyButton(safeBody) { - // Adds 'copy' buttons to pre blocks - // Note that this only manipulates the markup to add the buttons: - // we need to add the event handlers once the nodes are in the DOM - // since we can't save functions in the markup. - // This is done in TextualBody - const el = document.createElement("div"); - el.innerHTML = safeBody; - const codeBlocks = Array.from(el.getElementsByTagName("pre")); - codeBlocks.forEach(p => { - const button = document.createElement("span"); - button.className = "mx_EventTile_copyButton"; - p.appendChild(button); - }); - return el.innerHTML; -} - export function emojifyText(text) { return { __html: unicodeToImage(escape(text)), diff --git a/src/components/views/messages/TextualBody.js b/src/components/views/messages/TextualBody.js index 58273bee67..3937780c2a 100644 --- a/src/components/views/messages/TextualBody.js +++ b/src/components/views/messages/TextualBody.js @@ -113,14 +113,17 @@ module.exports = React.createClass({ } }, 10); } - // add event handlers to the 'copy code' buttons - const buttons = ReactDOM.findDOMNode(this).getElementsByClassName("mx_EventTile_copyButton"); - for (let i = 0; i < buttons.length; i++) { - buttons[i].onclick = (e) => { - const copyCode = buttons[i].parentNode.getElementsByTagName("code")[0]; + + // Add 'copy' buttons to pre blocks + ReactDOM.findDOMNode(this).querySelectorAll('.mx_EventTile_body pre').forEach((p) => { + const button = document.createElement("span"); + button.className = "mx_EventTile_copyButton"; + button.onclick = (e) => { + const copyCode = button.parentNode.getElementsByTagName("code")[0]; this.copyToClipboard(copyCode.textContent); }; - } + p.appendChild(button); + }); } }, From 05a986334d482ecd37af40c4769700fe54fdcb46 Mon Sep 17 00:00:00 2001 From: David Baker Date: Sun, 10 Sep 2017 15:58:17 +0100 Subject: [PATCH 83/86] Separate function to add code copy button For neatness and also so it can show up separately in the profiler. --- src/components/views/messages/TextualBody.js | 24 ++++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/components/views/messages/TextualBody.js b/src/components/views/messages/TextualBody.js index 3937780c2a..a58422e840 100644 --- a/src/components/views/messages/TextualBody.js +++ b/src/components/views/messages/TextualBody.js @@ -114,16 +114,7 @@ module.exports = React.createClass({ }, 10); } - // Add 'copy' buttons to pre blocks - ReactDOM.findDOMNode(this).querySelectorAll('.mx_EventTile_body pre').forEach((p) => { - const button = document.createElement("span"); - button.className = "mx_EventTile_copyButton"; - button.onclick = (e) => { - const copyCode = button.parentNode.getElementsByTagName("code")[0]; - this.copyToClipboard(copyCode.textContent); - }; - p.appendChild(button); - }); + this._addCodeCopyButton(); } }, @@ -260,6 +251,19 @@ module.exports = React.createClass({ } }, + _addCodeCopyButton() { + // Add 'copy' buttons to pre blocks + ReactDOM.findDOMNode(this).querySelectorAll('.mx_EventTile_body pre').forEach((p) => { + const button = document.createElement("span"); + button.className = "mx_EventTile_copyButton"; + button.onclick = (e) => { + const copyCode = button.parentNode.getElementsByTagName("code")[0]; + this.copyToClipboard(copyCode.textContent); + }; + p.appendChild(button); + }); + }, + onCancelClick: function(event) { this.setState({ widgetHidden: true }); // FIXME: persist this somewhere smarter than local storage From be8f0991a69dabfe156e1c03ce31a79c5fca5427 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 11 Sep 2017 16:59:09 +0100 Subject: [PATCH 84/86] Avoid re-rendering RoomList on room switch Introduce a class that consumes updates from the RoomViewStore and announces to listeners if the active room ID is now or is no longer the room ID they specified. Naming suggestions welcome: it's currently called ActiveRoomObserver. Avoids passing the selectedRoomId down from MatrixChat all the way through the LeftPanel / RoomList / RoomSubList to the RoomTiles. Also introduce a CallPreview class that listens directly for RoomViewStore changes as the call preview in the left panel needs to know when the room changes, so this allows this component to update without having to update the entire left panel. --- src/ActiveRoomObserver.js | 77 +++++++++++++++++++ src/components/views/rooms/RoomList.js | 1 - src/components/views/rooms/RoomTile.js | 17 ++++- src/components/views/voip/CallPreview.js | 97 ++++++++++++++++++++++++ 4 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 src/ActiveRoomObserver.js create mode 100644 src/components/views/voip/CallPreview.js diff --git a/src/ActiveRoomObserver.js b/src/ActiveRoomObserver.js new file mode 100644 index 0000000000..d6fbb460b5 --- /dev/null +++ b/src/ActiveRoomObserver.js @@ -0,0 +1,77 @@ +/* +Copyright 2017 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import RoomViewStore from './stores/RoomViewStore'; + +/** + * Consumes changes from the RoomViewStore and notifies specific things + * about when the active room changes. Unlike listening for RoomViewStore + * changes, you can subscribe to only changes relevant to a particular + * room. + * + * TODO: If we introduce an observer for something else, factor out + * the adding / removing of listeners & emitting into a common class. + */ +class ActiveRoomObserver { + constructor() { + this._listeners = {}; + + this._activeRoomId = RoomViewStore.getRoomId(); + // TODO: We could self-destruct when the last listener goes away, or at least + // stop listening. + this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate.bind(this)); + } + + addListener(roomId, listener) { + if (!this._listeners[roomId]) this._listeners[roomId] = []; + this._listeners[roomId].push(listener); + } + + removeListener(roomId, listener) { + if (this._listeners[roomId]) { + const i = this._listeners[roomId].indexOf(listener); + if (i > -1) { + this._listeners[roomId].splice(i, 1); + } + } else { + console.warn("Unregistering unrecognised listener (roomId=" + roomId + ")"); + } + } + + _emit(roomId) { + if (!this._listeners[roomId]) return; + + for (const l of this._listeners[roomId]) { + l.call(); + } + } + + _onRoomViewStoreUpdate() { + // emit for the old room ID + if (this._activeRoomId) this._emit(this._activeRoomId); + + // update our cache + this._activeRoomId = RoomViewStore.getRoomId(); + + // and emit for the new one + if (this._activeRoomId) this._emit(this._activeRoomId); + } +} + +if (global.mx_ActiveRoomObserver === undefined) { + global.mx_ActiveRoomObserver = new ActiveRoomObserver(); +} +export default global.mx_ActiveRoomObserver; diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js index 27001ac954..b7b2e5ecea 100644 --- a/src/components/views/rooms/RoomList.js +++ b/src/components/views/rooms/RoomList.js @@ -63,7 +63,6 @@ module.exports = React.createClass({ propTypes: { ConferenceHandler: React.PropTypes.any, collapsed: React.PropTypes.bool.isRequired, - currentRoom: React.PropTypes.string, searchFilter: React.PropTypes.string, }, diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js index 97568a52a1..a6065d8e92 100644 --- a/src/components/views/rooms/RoomTile.js +++ b/src/components/views/rooms/RoomTile.js @@ -1,5 +1,6 @@ /* Copyright 2015, 2016 OpenMarket Ltd +Copyright 2017 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,6 +28,8 @@ var RoomNotifs = require('../../../RoomNotifs'); var FormattingUtils = require('../../../utils/FormattingUtils'); import AccessibleButton from '../elements/AccessibleButton'; var UserSettingsStore = require('../../../UserSettingsStore'); +import ActiveRoomObserver from '../../../ActiveRoomObserver'; +import RoomViewStore from '../../../stores/RoomViewStore'; module.exports = React.createClass({ displayName: 'RoomTile', @@ -39,7 +42,6 @@ module.exports = React.createClass({ room: React.PropTypes.object.isRequired, collapsed: React.PropTypes.bool.isRequired, - selected: React.PropTypes.bool.isRequired, unread: React.PropTypes.bool.isRequired, highlight: React.PropTypes.bool.isRequired, isInvite: React.PropTypes.bool.isRequired, @@ -58,6 +60,7 @@ module.exports = React.createClass({ badgeHover : false, menuDisplayed: false, notifState: RoomNotifs.getRoomNotifsState(this.props.room.roomId), + selected: this.props.room.roomId === RoomViewStore.getRoomId(), }); }, @@ -87,8 +90,15 @@ module.exports = React.createClass({ } }, + _onActiveRoomChange: function() { + this.setState({ + selected: this.props.room.roomId === RoomViewStore.getRoomId(), + }); + }, + componentWillMount: function() { MatrixClientPeg.get().on("accountData", this.onAccountData); + ActiveRoomObserver.addListener(this.props.room.roomId, this._onActiveRoomChange); }, componentWillUnmount: function() { @@ -96,6 +106,7 @@ module.exports = React.createClass({ if (cli) { MatrixClientPeg.get().removeListener("accountData", this.onAccountData); } + ActiveRoomObserver.removeListener(this.props.room.roomId, this._onActiveRoomChange); }, onClick: function(ev) { @@ -174,7 +185,7 @@ module.exports = React.createClass({ var classes = classNames({ 'mx_RoomTile': true, - 'mx_RoomTile_selected': this.props.selected, + 'mx_RoomTile_selected': this.state.selected, 'mx_RoomTile_unread': this.props.unread, 'mx_RoomTile_unreadNotify': notifBadges, 'mx_RoomTile_highlight': mentionBadges, @@ -221,7 +232,7 @@ module.exports = React.createClass({ 'mx_RoomTile_badgeShown': badges || this.state.badgeHover || this.state.menuDisplayed, }); - if (this.props.selected) { + if (this.state.selected) { let nameSelected = {name}; label =
{ nameSelected }
; diff --git a/src/components/views/voip/CallPreview.js b/src/components/views/voip/CallPreview.js new file mode 100644 index 0000000000..132e29bd34 --- /dev/null +++ b/src/components/views/voip/CallPreview.js @@ -0,0 +1,97 @@ +/* +Copyright 2017 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from 'react'; +import RoomViewStore from '../../../stores/RoomViewStore'; +import CallHandler from '../../../CallHandler'; +import dis from '../../../dispatcher'; +import sdk from '../../../index'; + +module.exports = React.createClass({ + displayName: 'CallPreview', + + propTypes: { + // A Conference Handler implementation + // Must have a function signature: + // getConferenceCallForRoom(roomId: string): MatrixCall + ConferenceHandler: React.PropTypes.object, + }, + + getInitialState: function() { + return { + roomId: RoomViewStore.getRoomId(), + activeCall: CallHandler.getAnyActiveCall(), + }; + }, + + componentWillMount: function() { + this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate); + this.dispatcherRef = dis.register(this._onAction); + }, + + componentWillUnmount: function() { + if (this._roomStoreToken) { + this._roomStoreToken.remove(); + } + dis.unregister(this.dispatcherRef); + }, + + _onRoomViewStoreUpdate: function(payload) { + if (RoomViewStore.getRoomId() === this.state.roomId) return; + this.setState({ + roomId: RoomViewStore.getRoomId(), + }); + }, + + _onAction: function(payload) { + switch (payload.action) { + // listen for call state changes to prod the render method, which + // may hide the global CallView if the call it is tracking is dead + case 'call_state': + this.setState({ + activeCall: CallHandler.getAnyActiveCall(), + }); + break; + } + }, + + _onCallViewClick: function() { + const call = CallHandler.getAnyActiveCall(); + if (call) { + dis.dispatch({ + action: 'view_room', + room_id: call.groupRoomId || call.roomId, + }); + } + }, + + render: function() { + const callForRoom = CallHandler.getCallForRoom(this.state.roomId); + const showCall = (this.state.activeCall && this.state.activeCall.call_state === 'connected' && !callForRoom); + + if (showCall) { + const CallView = sdk.getComponent('voip.CallView'); + return ( + + ); + } + return null; + }, +}); + From 531fc3ac54363c5a1efebc5d850613f8639f277b Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 11 Sep 2017 17:57:52 +0100 Subject: [PATCH 85/86] Fix 'Failed to load timeline position' regression Ignore the update that comes in from the RoomViewStore when the current room changes or we save our scoll state against the new room rather than the old one. Fixes https://github.com/vector-im/riot-web/issues/5010 --- src/components/structures/RoomView.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 8a0eeb50b9..6cb8dc3e7b 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -157,6 +157,19 @@ module.exports = React.createClass({ if (this.unmounted) { return; } + + if (!initial && this.state.roomId !== RoomViewStore.getRoomId()) { + // RoomView explicitly does not support changing what room + // is being viewed: instead it should just be re-mounted when + // switching rooms. Therefore, if the room ID changes, we + // ignore this. We either need to do this or add code to handle + // saving the scroll position (otherwise we end up saving the + // scroll position against the wrong room). Given that doing the + // setState here would cause a bunch of unnecessary work, we + // just ignore the change. + return; + } + const newState = { roomId: RoomViewStore.getRoomId(), roomAlias: RoomViewStore.getRoomAlias(), From 6cb98d719631fd18ef571895008f2771895dc7fb Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 11 Sep 2017 18:39:30 +0100 Subject: [PATCH 86/86] Hopefully make comment clearer --- src/components/structures/RoomView.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 6cb8dc3e7b..2a6cf0aee4 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -164,9 +164,12 @@ module.exports = React.createClass({ // switching rooms. Therefore, if the room ID changes, we // ignore this. We either need to do this or add code to handle // saving the scroll position (otherwise we end up saving the - // scroll position against the wrong room). Given that doing the - // setState here would cause a bunch of unnecessary work, we - // just ignore the change. + // scroll position against the wrong room). + + // Given that doing the setState here would cause a bunch of + // unnecessary work, we just ignore the change since we know + // that if the current room ID has changed from what we thought + // it was, it means we're about to be unmounted. return; }