Compare commits

..

90 Commits

Author SHA1 Message Date
l10n daemon script
bc0d1aff35 GIT_SILENT Sync po/docbooks with svn 2026-01-31 03:19:28 +00:00
l10n daemon script
bc594ec8a2 GIT_SILENT Sync po/docbooks with svn 2026-01-30 03:48:53 +00:00
l10n daemon script
2a7f0b406c GIT_SILENT Sync po/docbooks with svn 2026-01-29 03:51:50 +00:00
l10n daemon script
c9f685a733 GIT_SILENT Sync po/docbooks with svn 2026-01-28 03:25:54 +00:00
Joshua Goins
5be43575fc Remove single tap to maximize code component
This is just more ergonomic (in my opinion) as you usually want to
select some text from a code block, instead of maximizing it. There's
already an easy-to-access button for maximizing if you want to.

BUG: 499048
FIXED-IN: 25.12.2
(cherry picked from commit 332a822996)
2026-01-27 18:08:09 +01:00
Joshua Goins
558519f355 Fix transparency blur not applying to the timeline anymore
We still had the default opaque background for RoomPage. I added a
comment too so it isn't removed accidentally in the future.

BUG: 513363
FIXED-IN: 25.12.2
(cherry picked from commit f145bbe8db)
2026-01-27 18:08:09 +01:00
l10n daemon script
f83e2e2677 GIT_SILENT Sync po/docbooks with svn 2026-01-27 03:20:43 +00:00
Albert Astals Cid
4c4f406c41 GIT_SILENT Update Appstream for new release 2026-01-27 02:13:34 +01:00
Albert Astals Cid
2f8a873202 GIT_SILENT Upgrade release service version to 25.12.2. 2026-01-27 01:14:18 +01:00
l10n daemon script
78b3cfe916 GIT_SILENT made messages (after extraction) 2026-01-25 02:36:47 +00:00
l10n daemon script
0bc529da2d GIT_SILENT Sync po/docbooks with svn 2026-01-24 03:21:02 +00:00
l10n daemon script
6ad6121dfa GIT_SILENT Sync po/docbooks with svn 2026-01-23 03:24:22 +00:00
l10n daemon script
7b5b7a67ae GIT_SILENT Sync po/docbooks with svn 2026-01-20 03:47:09 +00:00
l10n daemon script
59c8b82bc2 GIT_SILENT Sync po/docbooks with svn 2026-01-19 03:23:08 +00:00
l10n daemon script
c6aec89b61 GIT_SILENT Sync po/docbooks with svn 2026-01-18 03:41:28 +00:00
Joshua Goins
2ef3fd9d6c Add hack to fix crash when sending long text reactions
This is some bug in Flow (that is really hard to debug, I can't get it
to exit at all) but we can work around it for a minor visual impact. It
seems to me allow the reaction list to become slightly larger, but
that's about it.

BUG: 504344
FIXED-IN: 25.12.2
(cherry picked from commit 93e932c09c)
2026-01-17 15:08:11 -05:00
Joshua Goins
e64b6033f3 Cleanup few remaining atYEnd usages in TimelineView
These were either mistakes or rebase errors, but we should be using
closeToYEnd here.

(cherry picked from commit 3b8930c2bc)
2026-01-17 15:08:11 -05:00
Joshua Goins
82989e7ef2 Add hack to fix room sidebar not sticking to the top
This is similar to the TimelineView hacks, but this time its the header
item that's changing height as our room topics and such wrap.

(cherry picked from commit 6eb2b2e739)
2026-01-17 15:08:11 -05:00
Joshua Goins
ddf272ab2b Fix left padding for "Rooms" label in the room list
This now emulates the default Kirigami heading behavior now, with the
correct amount of padding.

(cherry picked from commit be89362fdd)
2026-01-17 15:08:11 -05:00
Joshua Goins
4d4b44e011 Fix Quick Switcher not being activatable by Enter/Return key
(cherry picked from commit e53c84d30c)
2026-01-17 15:08:11 -05:00
Joshua Goins
a17d7e18fd Don't show the Share action for non-file messages
This only shares files, if you try it on anything else it crashes
NeoChat.

(cherry picked from commit a90c26f566)
2026-01-17 15:08:10 -05:00
Joshua Goins
1e78f119f1 Add hack around the timeline never settling just right
This is due to some kind of bug in ListView that never resettles
properly for bottom-to-top views. This can arise when the pinned message
is loaded (because that squishes the view) or the window is resized
(because that also resizes the view.)

We can work around it by assuming the following:
1. The RoomPage knows the window is resizing because it gets its height
changed before TimelineView.
2. The first height change can be a marker to position the view at the
beginning.

This fixes the issue for me, I did the following in order to test this:
* Switch between many rooms, especially ones with a pinned message. Now
all of them start at the bottom as they should.
* Resize the window, ensure that if you scrolled it stays around that
position - otherwise it sticks at the bottom.

(cherry picked from commit 39de4d10e4)
2026-01-17 10:22:10 -05:00
Joshua Goins
b6a4b67c22 Improve reliability of restoring the last space and room (again)
I found that 50% of the time, NeoChat won't restore the last space but
instead get stuck at Home. Even worse, it will overwrite Home's last
opened room with the one from the space - resulting in really buggy
behavior.

The reason why this happens is partly due to the space hierarchy cache
(I think) but that's not the real problem in my opinion. During
setCurrentSpace, we needlessly update the last space & room config
despite us being the ones already reading it.

In addition to that I also refactored this code a bit to be more
consolidated and readable.

(cherry picked from commit 4c37dcf518)
2026-01-17 10:22:10 -05:00
Joshua Goins
e965e1680f Add hack around atYEnd
This fixes the annoying "I just scrolled down to the bottom, how come
NeoChat doesn't think I did?"

From what I can tell this is also ListView bug (or something caused by
our style/Kirigami) that creates cases like contentY being -643.2 (for a
ListView of height 643) thus that's not "at Y's end". For our case
though, we don't care and can safely round it.

(cherry picked from commit 3c77711417)
2026-01-17 10:22:10 -05:00
Nate Graham
7d4cc7a5cf Tell room page header message to fill the width
Otherwise it scrunches up as small as possible and breaks the layout.

(cherry picked from commit c50380b448)
2026-01-17 10:21:47 -05:00
l10n daemon script
112b4b54e5 GIT_SILENT Sync po/docbooks with svn 2026-01-17 03:20:03 +00:00
l10n daemon script
782f096f21 GIT_SILENT Sync po/docbooks with svn 2026-01-16 03:46:52 +00:00
l10n daemon script
57e0f04086 GIT_SILENT Sync po/docbooks with svn 2026-01-15 03:45:05 +00:00
l10n daemon script
a639011db6 GIT_SILENT Sync po/docbooks with svn 2026-01-14 03:19:41 +00:00
Joshua Goins
26e7f3780c Small notification improvements
Changed a check to use isDirectChat (which is a clearer indication of
what we want.) I also made sure not to show the account name if you only
have one, since that's just useless noise.

(cherry picked from commit fc6f345036)
2026-01-13 17:55:41 -05:00
Lorenz Wildberg
8c96d05799 fix bug: room settings don't open
(cherry picked from commit 2ec1fa92fa)
2026-01-13 17:55:04 -05:00
Veres Károly
bc6e22bc6d Null check decoded messages in loadPinnedMessage
`decryptMessage` returns null if it fails to decode the passed message. This value
then got fed into `EventHandler::richBody` which logged a warning and cleared `m_pinnedMessage`.
If we instead retain the value as an `EncryptedEvent`, the UI will pin the encrypted event
placeholder instead of hiding the existence of pins.

(cherry picked from commit 71c84be4b4)
2026-01-13 17:55:04 -05:00
Veres Károly
4371c3f7e5 Null check pinned messages after decryption when filling PinnedMessageModel.
`room()->decryptMessage()` returns null if the message fails to decode. Since elements of `m_pinnedEvents`
get directly dereferenced in getEventForIndex, storing null values leads to a segfault.
In this case we should retain the EncryptedEvent to let the UI report the error.

(cherry picked from commit b684fb451d)
2026-01-13 17:55:04 -05:00
Kai Uwe Broulik
b88ee65a4c RoomPage: Fix selected text and hovered link in context menu
They were not forwarded to the menu.
Also, "isThread" argument is no longer there in the signal.

(cherry picked from commit 7a2211f8e0)
2026-01-13 17:54:55 -05:00
Azhar Momin
033e865a27 Fix some runtime qml warnings
(cherry picked from commit 4155e9116a)
2026-01-13 17:54:33 -05:00
Azhar Momin
75ba46e292 Fix pushDialogLayer failing in DelegateContextMenu
(cherry picked from commit a989ef42b2)
2026-01-13 17:54:33 -05:00
Joshua Goins
d492ed038a Decrypt when downloading single events from the server
This fixes issues like not being able to view pinned messages in
encrypted rooms.

(cherry picked from commit 89e42dbc53)
2026-01-13 17:54:33 -05:00
Joshua Goins
b29108a2f7 Fix reply colors being broken if you're faster than the server
This is that bug that causes reply colors to be white, and this error to
print in the log:

qrc:/qt/qml/org/kde/neochat/messagecontent/ReplyComponent.qml:41: TypeError: Cannot read property 'color' of null

The reason why this happens is inside of EventMessageContentModel, it
needs to be able to find the relevant event in the room to fetch the
room member (and then their color.) Dependent on many variables to
align, this can happen easily if you are faster than your server giving
you said events.

But this is an easy fix, we obviously get the event afterwards and just
need to re-evaluate the the author property. I also made sure it falls
back to some color instead of white, which will also quiet the error.

(cherry picked from commit b45967508c)
2026-01-13 17:54:33 -05:00
Joshua Goins
2790d430ae Make clicking room list section headers more reliable
ListSectionHeader itself is an ItemDelegate, which eats up input events.
We can work around this by also listening to onClicked there too.

(cherry picked from commit 3a416990ca)
2026-01-13 17:54:33 -05:00
l10n daemon script
23f61fff36 GIT_SILENT Sync po/docbooks with svn 2026-01-13 11:40:36 +00:00
l10n daemon script
254d105e35 GIT_SILENT Sync po/docbooks with svn 2026-01-12 03:47:38 +00:00
l10n daemon script
6dde57a786 GIT_SILENT Sync po/docbooks with svn 2026-01-10 03:43:02 +00:00
l10n daemon script
d803fcb874 GIT_SILENT Sync po/docbooks with svn 2026-01-09 03:19:23 +00:00
l10n daemon script
90e70a9295 GIT_SILENT Sync po/docbooks with svn 2026-01-08 03:21:39 +00:00
l10n daemon script
2090e4dc0e GIT_SILENT Sync po/docbooks with svn 2026-01-06 03:41:42 +00:00
l10n daemon script
5ced491d54 GIT_SILENT Sync po/docbooks with svn 2026-01-05 03:42:28 +00:00
Azhar Momin
e156d4da90 Fix notification count refresh for low-priority and mentions-only rooms
(cherry picked from commit 5f7967363f)
2026-01-04 17:13:27 -05:00
Joshua Goins
b3aa2abd89 Fix icons on Windows
KirigamiApp currently calls KIconTheme::initTheme too late for Windows,
as a workaround we can go back to calling it ourselves.

(cherry picked from commit a02a04d966)
2026-01-04 17:13:27 -05:00
Veres Károly
7627d6d0e2 Extract the space selection logic from setCurrentRoom and use it for setting lastRoomConfig too.
If a setCurrentRoom call changed the active space at the end of its execution, the new room's ID ended up still being written to the old space's lastRoomConfig.

By extracting this space selection logic into a helper function, we can now calculate this value earlier and use it as the space id when writing lastRoomConfig.

(cherry picked from commit 68b00b9fc5)
2026-01-04 17:13:27 -05:00
Nate Graham
77da7e6c7d Improve hamburger menu button
- Open the menu right beneath the button
- Use pressed state for the button while the menu is open
- Close the menu when clicking the button again
- Hide the tooltip while the menu is open

(cherry picked from commit bd0588ca99)
2026-01-04 17:13:27 -05:00
l10n daemon script
1e3ce9d6cd GIT_SILENT Sync po/docbooks with svn 2026-01-04 03:38:17 +00:00
Heiko Becker
321561fd89 GIT_SILENT Update Appstream for new release 2026-01-03 12:14:39 +01:00
Heiko Becker
856bc7b713 GIT_SILENT Upgrade release service version to 25.12.1. 2026-01-03 11:15:22 +01:00
l10n daemon script
10e9b8d8f8 GIT_SILENT Sync po/docbooks with svn 2026-01-02 03:39:44 +00:00
l10n daemon script
9f1803c551 GIT_SILENT Sync po/docbooks with svn 2025-12-31 03:38:13 +00:00
l10n daemon script
9260c92026 GIT_SILENT Sync po/docbooks with svn 2025-12-30 03:42:39 +00:00
l10n daemon script
9c7030a5db GIT_SILENT Sync po/docbooks with svn 2025-12-29 03:13:12 +00:00
l10n daemon script
909e20889e GIT_SILENT Sync po/docbooks with svn 2025-12-27 03:11:47 +00:00
l10n daemon script
74f4c291a0 GIT_SILENT Sync po/docbooks with svn 2025-12-24 03:36:13 +00:00
Carl Schwan
242a248bf3 Send beautiful red ❤️'s when quick reacting
I wondered for a while (and could tell) when people were using NeoChat
because they would react with cold, monochrome hearts. Let's add more
color to our world!


(cherry picked from commit 531df7a3b2)

Co-authored-by: Joshua Goins <josh@redstrate.com>
2025-12-21 19:59:56 +01:00
Carl Schwan
dfb0bb75f4 Fix missing escape sequence in /shrug command
Before the fix, the upper arm _ characters in the command's output would be parsed as Markdown italic formatting around the (ツ).


(cherry picked from commit 706f1f7836)

Co-authored-by: Veres Károly <mail+kde@karcsesz.hu>
2025-12-21 18:07:46 +01:00
l10n daemon script
3cefd4b1ef GIT_SILENT Sync po/docbooks with svn 2025-12-14 03:13:17 +00:00
l10n daemon script
3f3ce6b421 GIT_SILENT Sync po/docbooks with svn 2025-12-13 03:17:45 +00:00
l10n daemon script
73d910421a GIT_SILENT Sync po/docbooks with svn 2025-12-10 03:32:09 +00:00
l10n daemon script
1da44f3ae3 GIT_SILENT Sync po/docbooks with svn 2025-12-09 03:15:27 +00:00
l10n daemon script
08836010c6 GIT_SILENT Sync po/docbooks with svn 2025-12-07 03:22:57 +00:00
l10n daemon script
13042d9ba6 GIT_SILENT Sync po/docbooks with svn 2025-12-04 03:20:39 +00:00
Heiko Becker
0e4b52ee62 GIT_SILENT Update Appstream for new release 2025-12-04 00:19:55 +01:00
Heiko Becker
4c32280343 GIT_SILENT Upgrade release service version to 25.12.0. 2025-12-03 23:04:35 +01:00
l10n daemon script
a2e540d6ef GIT_SILENT Sync po/docbooks with svn 2025-12-03 03:26:04 +00:00
Carl Schwan
573c8925d2 Fix krunner integration with Flatpak
(cherry picked from commit 1da24191f0)

Co-authored-by: renner 03 <renner0@posteo.de>
2025-12-02 23:00:25 +01:00
l10n daemon script
6c0bd850b0 GIT_SILENT Sync po/docbooks with svn 2025-12-01 03:28:35 +00:00
l10n daemon script
1da9719314 GIT_SILENT Sync po/docbooks with svn 2025-11-25 03:15:21 +00:00
Heiko Becker
3cd5f3a1c6 Drop unused dependencies
Both KF6Crash and KF6IconThemes aren't used anymore after porting to
KirigamiApp in eab45e761a.

(cherry picked from commit 0cb3fd32f4)
2025-11-24 21:56:55 +01:00
Albert Astals Cid
b4108f2eef GIT_SILENT Upgrade release service version to 25.11.90. 2025-11-24 00:57:39 +01:00
l10n daemon script
bb7de18341 GIT_SILENT Sync po/docbooks with svn 2025-11-23 03:19:33 +00:00
l10n daemon script
7b8328fce6 GIT_SILENT Sync po/docbooks with svn 2025-11-21 03:20:12 +00:00
l10n daemon script
aeee6570c0 GIT_SILENT Sync po/docbooks with svn 2025-11-20 03:14:24 +00:00
l10n daemon script
780b9a6f9b GIT_SILENT Sync po/docbooks with svn 2025-11-17 15:49:57 +00:00
l10n daemon script
0ba06882d1 GIT_SILENT Sync po/docbooks with svn 2025-11-17 03:16:16 +00:00
l10n daemon script
ce131a53e5 GIT_SILENT Sync po/docbooks with svn 2025-11-16 03:16:40 +00:00
l10n daemon script
e9421e28dd SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2025-11-16 03:13:00 +00:00
l10n daemon script
1c64a6b5f0 GIT_SILENT Sync po/docbooks with svn 2025-11-15 03:19:51 +00:00
l10n daemon script
9b5200c344 GIT_SILENT Sync po/docbooks with svn 2025-11-14 03:21:54 +00:00
l10n daemon script
5baf4ab823 GIT_SILENT Sync po/docbooks with svn 2025-11-13 03:20:11 +00:00
l10n daemon script
58a72a08f2 GIT_SILENT Sync po/docbooks with svn 2025-11-11 03:37:16 +00:00
l10n daemon script
c9b97d4d0d GIT_SILENT Sync po/docbooks with svn 2025-11-10 03:26:49 +00:00
Carl Schwan
2a7d61c73b Improve invited room counting
I didn't realize when redoing the tooltip for DMs that directChatInvites
was a boolean, not an integer type. Now it's changed to an integer type,
which fixes the DM invite count.

NeoChat apparently didn't count normal room invites until now either, so
now Home is highlighted in that case. Now it should be harder to miss
these kinds of invites.


(cherry picked from commit 887865c0aa)

Co-authored-by: Joshua Goins <josh@redstrate.com>
2025-11-09 22:23:09 +01:00
l10n daemon script
f55bd28e10 GIT_SILENT Sync po/docbooks with svn 2025-11-09 03:45:49 +00:00
Albert Astals Cid
2a67861099 GIT_SILENT Upgrade release service version to 25.11.80. 2025-11-06 17:40:37 +01:00
111 changed files with 16264 additions and 13263 deletions

View File

@@ -2,7 +2,7 @@
"id": "org.kde.neochat", "id": "org.kde.neochat",
"branch": "master", "branch": "master",
"runtime": "org.kde.Platform", "runtime": "org.kde.Platform",
"runtime-version": "6.10", "runtime-version": "6.9",
"sdk": "org.kde.Sdk", "sdk": "org.kde.Sdk",
"command": "neochat", "command": "neochat",
"tags": [ "tags": [
@@ -31,6 +31,19 @@
"/share/ndk-modules" "/share/ndk-modules"
], ],
"modules": [ "modules": [
{
"name": "kirigamiaddons",
"config-opts": [
"-DBUILD_TESTING=OFF"
],
"buildsystem": "cmake-ninja",
"sources": [
{
"type": "git",
"url": "https://invent.kde.org/libraries/kirigami-addons.git"
}
]
},
{ {
"name": "opencv", "name": "opencv",
"config-opts": [ "config-opts": [
@@ -65,7 +78,6 @@
"name": "olm", "name": "olm",
"buildsystem": "cmake-ninja", "buildsystem": "cmake-ninja",
"config-opts": [ "config-opts": [
"-DCMAKE_POLICY_VERSION_MINIMUM=3.5",
"-DOLM_TESTS=OFF" "-DOLM_TESTS=OFF"
], ],
"sources": [ "sources": [
@@ -172,8 +184,8 @@
"sources": [ "sources": [
{ {
"type": "archive", "type": "archive",
"url": "https://download.kde.org/stable/release-service/25.08.3/src/kunifiedpush-25.08.3.tar.xz", "url": "https://download.kde.org/stable/release-service/25.08.0/src/kunifiedpush-25.08.0.tar.xz",
"sha256": "e8c924438d5359f0fa0930ab35111012076e3a0ff4e959d6929595571383320a", "sha256": "846db6ffc7d93f6afea7ce0d5a9f10b52792157ceb593856542279f4197f3518",
"x-checker-data": { "x-checker-data": {
"type": "anitya", "type": "anitya",
"project-id": 8763, "project-id": 8763,

View File

@@ -10,6 +10,7 @@ Dependencies:
'frameworks/ki18n': '@latest-kf6' 'frameworks/ki18n': '@latest-kf6'
'frameworks/kconfig': '@latest-kf6' 'frameworks/kconfig': '@latest-kf6'
'frameworks/syntax-highlighting': '@latest-kf6' 'frameworks/syntax-highlighting': '@latest-kf6'
'frameworks/kiconthemes': '@latest-kf6'
'frameworks/kitemmodels': '@latest-kf6' 'frameworks/kitemmodels': '@latest-kf6'
'frameworks/kquickcharts': '@latest-kf6' 'frameworks/kquickcharts': '@latest-kf6'
'frameworks/knotifications': '@latest-kf6' 'frameworks/knotifications': '@latest-kf6'

View File

@@ -7,9 +7,9 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
# KDE Applications version, managed by release script. # KDE Applications version, managed by release script.
set(RELEASE_SERVICE_VERSION_MAJOR "26") set(RELEASE_SERVICE_VERSION_MAJOR "25")
set(RELEASE_SERVICE_VERSION_MINOR "03") set(RELEASE_SERVICE_VERSION_MINOR "12")
set(RELEASE_SERVICE_VERSION_MICRO "70") set(RELEASE_SERVICE_VERSION_MICRO "2")
set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(NeoChat VERSION ${RELEASE_SERVICE_VERSION}) project(NeoChat VERSION ${RELEASE_SERVICE_VERSION})
@@ -46,6 +46,10 @@ if (NOT ANDROID)
include(KDEClangFormat) include(KDEClangFormat)
endif() endif()
if(NEOCHAT_FLATPAK)
include(cmake/Flatpak.cmake)
endif()
set(QUOTIENT_FORCE_NAMESPACED_INCLUDES TRUE) set(QUOTIENT_FORCE_NAMESPACED_INCLUDES TRUE)
ecm_set_disabled_deprecation_versions(Qt 6.9.0 KF 6.17.0) ecm_set_disabled_deprecation_versions(Qt 6.9.0 KF 6.17.0)
@@ -55,7 +59,7 @@ ecm_setup_version(${PROJECT_VERSION}
VERSION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/neochat-version.h VERSION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/neochat-version.h
) )
find_package(Qt6 ${QT_MIN_VERSION} NO_MODULE COMPONENTS Core Quick Gui QuickControls2 Multimedia Svg TextToSpeech WebView QuickTest) find_package(Qt6 ${QT_MIN_VERSION} NO_MODULE COMPONENTS Core Quick Gui QuickControls2 Multimedia Svg TextToSpeech WebView)
set_package_properties(Qt6 PROPERTIES set_package_properties(Qt6 PROPERTIES
TYPE REQUIRED TYPE REQUIRED
PURPOSE "Basic application components" PURPOSE "Basic application components"
@@ -65,7 +69,7 @@ if (QT_KNOWN_POLICY_QTP0004)
qt_policy(SET QTP0004 NEW) qt_policy(SET QTP0004 NEW)
endif () endif ()
find_package(KF6 ${KF_MIN_VERSION} COMPONENTS Kirigami I18n Notifications Config CoreAddons Sonnet ItemModels ColorScheme) find_package(KF6 ${KF_MIN_VERSION} COMPONENTS Kirigami I18n Notifications Config CoreAddons Sonnet ItemModels ColorScheme IconThemes)
set_package_properties(KF6 PROPERTIES set_package_properties(KF6 PROPERTIES
TYPE REQUIRED TYPE REQUIRED
PURPOSE "Basic application components" PURPOSE "Basic application components"

View File

@@ -9,21 +9,6 @@ target_link_libraries(neochat_server PUBLIC Qt::HttpServer QuotientQt6)
add_definitions(-DDATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data" ) add_definitions(-DDATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data" )
macro(add_qml_tests)
if (WIN32)
set(_extra_args -platform offscreen)
endif()
foreach(test ${ARGV})
add_test(NAME ${test}
COMMAND qmltest
${_extra_args}
-input ${test}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endforeach()
endmacro()
ecm_add_test( ecm_add_test(
neochatroomtest.cpp neochatroomtest.cpp
LINK_LIBRARIES neochat Qt::Test LINK_LIBRARIES neochat Qt::Test
@@ -119,14 +104,3 @@ ecm_add_test(
LINK_LIBRARIES neochat Qt::Test neochat_server LINK_LIBRARIES neochat Qt::Test neochat_server
TEST_NAME roommanagertest TEST_NAME roommanagertest
) )
add_executable(qmltest qmltest.cpp)
target_link_libraries(qmltest
PRIVATE
Qt6::Qml
Qt6::QuickTest
neochat_server
neochat
neochatplugin)
add_qml_tests(tst_media.qml)

View File

@@ -63,7 +63,7 @@ void ActionsTest::testActions_data()
QTest::addColumn<std::optional<QString>>("resultText"); QTest::addColumn<std::optional<QString>>("resultText");
QTest::addColumn<std::optional<Quotient::RoomMessageEvent::MsgType>>("type"); QTest::addColumn<std::optional<Quotient::RoomMessageEvent::MsgType>>("type");
QTest::newRow("shrug") << u"/shrug Hello"_s << std::make_optional(u"¯\\\\_(ツ)_/¯ Hello"_s) QTest::newRow("shrug") << u"/shrug Hello"_s << std::make_optional(u"¯\\\\\\_(ツ)\\_/¯ Hello"_s)
<< std::make_optional(Quotient::RoomMessageEvent::MsgType::Text); << std::make_optional(Quotient::RoomMessageEvent::MsgType::Text);
QTest::newRow("lenny") << u"/lenny Hello"_s << std::make_optional(u"( ͡° ͜ʖ ͡°) Hello"_s) << std::make_optional(Quotient::RoomMessageEvent::MsgType::Text); QTest::newRow("lenny") << u"/lenny Hello"_s << std::make_optional(u"( ͡° ͜ʖ ͡°) Hello"_s) << std::make_optional(Quotient::RoomMessageEvent::MsgType::Text);
QTest::newRow("tableflip") << u"/tableflip Hello"_s << std::make_optional(u"(╯°□°)╯︵ ┻━┻ Hello"_s) QTest::newRow("tableflip") << u"/tableflip Hello"_s << std::make_optional(u"(╯°□°)╯︵ ┻━┻ Hello"_s)

View File

@@ -1,61 +0,0 @@
/*
* SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include <KLocalizedContext>
#include <KLocalizedString>
#include <QNetworkDiskCache>
#include <QQmlContext>
#include <QQmlEngine>
#include <QQmlNetworkAccessManagerFactory>
#include <QStandardPaths>
#include <Quotient/networkaccessmanager.h>
#include <quicktest.h>
#include "accountmanager.h"
#include "server.h"
using namespace Quotient;
using namespace Qt::StringLiterals;
class NetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory
{
QNetworkAccessManager *create(QObject *) override
{
auto nam = NetworkAccessManager::instance();
QObject::connect(nam, &QNetworkAccessManager::sslErrors, nam, [](auto reply, auto errors) {
reply->ignoreSslErrors(errors);
});
nam->setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
return nam;
}
};
class Setup : public QObject
{
Q_OBJECT
public:
Setup() = default;
Server server;
public Q_SLOTS:
void qmlEngineAvailable(QQmlEngine *engine)
{
KLocalizedString::setApplicationDomain(QByteArrayLiteral("neochat"));
engine->setNetworkAccessManagerFactory(new NetworkAccessManagerFactory());
engine->rootContext()->setContextObject(new KLocalizedContext(engine));
server.start();
Q_UNUSED(new AccountManager(true));
}
};
QUICK_TEST_MAIN_WITH_SETUP(NeoChat, Setup)
#include "qmltest.moc"

View File

@@ -12,8 +12,6 @@
#include <QSslKey> #include <QSslKey>
#include <QUuid> #include <QUuid>
#include <QBuffer>
#include <QImage>
#include <Quotient/networkaccessmanager.h> #include <Quotient/networkaccessmanager.h>
using namespace Qt::Literals::StringLiterals; using namespace Qt::Literals::StringLiterals;
@@ -118,20 +116,6 @@ void Server::start()
}); });
m_server.route(u"/_matrix/client/r0/sync"_s, QHttpServerRequest::Method::Get, this, &Server::sync); m_server.route(u"/_matrix/client/r0/sync"_s, QHttpServerRequest::Method::Get, this, &Server::sync);
m_server.route(u"/_matrix/client/v1/media/download/<arg>/<arg>"_s,
QHttpServerRequest::Method::Get,
[](const QString &serverName, const QString &mediaId, QHttpServerResponder &responder) {
qInfo() << serverName << mediaId;
QImage image(128, 128, QImage::Format::Format_RGB32);
image.fill(Qt::white);
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG");
responder.write(&buffer, "image/png", QHttpServerResponder::StatusCode::Ok);
});
QSslConfiguration config; QSslConfiguration config;
QFile key(QStringLiteral(DATA_DIR) + u"/localhost.key"_s); QFile key(QStringLiteral(DATA_DIR) + u"/localhost.key"_s);

View File

@@ -1,73 +0,0 @@
/*
* SPDX-FileCopyrightText: 2025 Joshua Goins <josh@redstrate.com>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
import QtQuick
import QtQuick.Controls as QQC2
import QtTest
import org.kde.kirigami as Kirigami
import org.kde.neochat.messagecontent
TestCase {
id: root
name: "ImageComponentTest"
width: 300
height: 300
// Base component to not re-initialize the same variables over and over
component BaseImageComponent: ImageComponent {
eventId: "dummyevent"
display: "dummytext"
fileTransferInfo: null
}
Component {
id: invalidMxcUrlComponent
BaseImageComponent {
componentAttributes: QtObject {
property bool isSticker: false
property bool animated: false
// Missing user_id, which is required in libQuotient
property string source: "mxc://localhost:1234/AAAAAAAAAAAAAAAAAAAAAAAA?room_id=!AjYwbldYDmSVfGrVHV:localhost&event_id=$vJfWLoXK02im0M3rlFWLosiHojrwWSknLb0JXveEE1o"
}
}
}
Component {
id: validMxcUrlComponent
BaseImageComponent {
componentAttributes: QtObject {
property bool isSticker: false
property bool animated: false
property string source: "mxc://localhost:1234/AAAAAAAAAAAAAAAAAAAAAAAA?user_id=@user:localhost:1234&room_id=!AjYwbldYDmSVfGrVHV:localhost&event_id=$vJfWLoXK02im0M3rlFWLosiHojrwWSknLb0JXveEE1o"
}
}
}
function test_invalid() {
wait(1000); // Wait for Quotient to grab the right capability
ignoreWarning("No connection specified, cannot convert mxc request");
const item = createTemporaryObject(invalidMxcUrlComponent, this);
verify(item);
compare(item._private.imageItem.status, Image.Loading);
// It should fail if we didn't specify the connection
tryCompare(item._private.imageItem, "status", Image.Error);
}
function test_basic() {
wait(1000); // Wait for Quotient to grab the right capability
const item = createTemporaryObject(validMxcUrlComponent, this);
verify(item);
compare(item._private.imageItem.status, Image.Loading); // initial load
tryCompare(item._private.imageItem, "status", Image.Error);
}
}

14
cmake/Flatpak.cmake Normal file
View File

@@ -0,0 +1,14 @@
# SPDX-FileCopyrightText: 2020 Carl Schwan <carl@carlschwan.eu>
# SPDX-License-Identifier: BSD-2-Clause
include(GNUInstallDirs)
# Include FontConfig config which uses the Emoji One font from the
# KDE Flatpak SDK.
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Flatpak/99-noto-mono-color-emoji.conf
DESTINATION
${CMAKE_INSTALL_SYSCONFDIR}/fonts/local.conf
)

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Color Emoji</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Noto Color Emoji</family>
</prefer>
</alias>
</fontconfig>

View File

@@ -193,6 +193,7 @@
<li xml:lang="ar">التصويت - MSC3381</li> <li xml:lang="ar">التصويت - MSC3381</li>
<li xml:lang="ca">Votacions - MSC3381</li> <li xml:lang="ca">Votacions - MSC3381</li>
<li xml:lang="ca-valencia">Votacions - MSC3381</li> <li xml:lang="ca-valencia">Votacions - MSC3381</li>
<li xml:lang="de">Umfragen MSC3381</li>
<li xml:lang="el">Δημοσκοπήσεις - MSC3381</li> <li xml:lang="el">Δημοσκοπήσεις - MSC3381</li>
<li xml:lang="en-GB">Polls - MSC3381</li> <li xml:lang="en-GB">Polls - MSC3381</li>
<li xml:lang="eo">Enketoj - MSC3381</li> <li xml:lang="eo">Enketoj - MSC3381</li>
@@ -227,6 +228,7 @@
<li xml:lang="ar">حزم الملصقات - MSC2545</li> <li xml:lang="ar">حزم الملصقات - MSC2545</li>
<li xml:lang="ca">Paquets d'adhesius - MSC2545</li> <li xml:lang="ca">Paquets d'adhesius - MSC2545</li>
<li xml:lang="ca-valencia">Paquets d'adhesius - MSC2545</li> <li xml:lang="ca-valencia">Paquets d'adhesius - MSC2545</li>
<li xml:lang="de">Sticker-Pakete MSC2545</li>
<li xml:lang="el">Πακέτα αυτοκόλλητων - MSC2545</li> <li xml:lang="el">Πακέτα αυτοκόλλητων - MSC2545</li>
<li xml:lang="en-GB">Sticker Packs - MSC2545</li> <li xml:lang="en-GB">Sticker Packs - MSC2545</li>
<li xml:lang="eo">Glumark-Pakoj - MSC2545</li> <li xml:lang="eo">Glumark-Pakoj - MSC2545</li>
@@ -320,6 +322,7 @@
<value key="KDE::windows_store::StoreLogoSquare">https://invent.kde.org/network/neochat/-/raw/master/icons/windows/storelogo-1080x1080.png</value> <value key="KDE::windows_store::StoreLogoSquare">https://invent.kde.org/network/neochat/-/raw/master/icons/windows/storelogo-1080x1080.png</value>
<value key="KDE::windows_store::Icon">https://invent.kde.org/network/neochat/-/raw/master/icons/300-apps-neochat.png</value> <value key="KDE::windows_store::Icon">https://invent.kde.org/network/neochat/-/raw/master/icons/300-apps-neochat.png</value>
<value key="KDE::windows_store::PromotionalArt16x9">https://invent.kde.org/network/neochat/-/raw/master/icons/windows/promoimage-1920x1080.png</value> <value key="KDE::windows_store::PromotionalArt16x9">https://invent.kde.org/network/neochat/-/raw/master/icons/windows/promoimage-1920x1080.png</value>
<value key="KDE::supporters">Anonymous donor, Akseli</value>
</custom> </custom>
<launchable type="desktop-id">org.kde.neochat.desktop</launchable> <launchable type="desktop-id">org.kde.neochat.desktop</launchable>
<screenshots> <screenshots>
@@ -487,6 +490,8 @@
<content_attribute id="social-chat">intense</content_attribute> <content_attribute id="social-chat">intense</content_attribute>
</content_rating> </content_rating>
<releases> <releases>
<release version="25.12.2" date="2026-02-05"/>
<release version="25.12.1" date="2026-01-08"/>
<release version="25.12.0" date="2025-12-11"/> <release version="25.12.0" date="2025-12-11"/>
<release version="25.08.3" date="2025-11-06"/> <release version="25.08.3" date="2025-11-06"/>
<release version="25.08.2" date="2025-10-09"/> <release version="25.08.2" date="2025-10-09"/>

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: neochat\n" "Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-12-18 00:43+0000\n" "POT-Creation-Date: 2026-01-28 02:42+0000\n"
"PO-Revision-Date: 2023-12-12 01:02+0100\n" "PO-Revision-Date: 2023-12-12 01:02+0100\n"
"Last-Translator: Enol P. <enolp@softastur.org>\n" "Last-Translator: Enol P. <enolp@softastur.org>\n"
"Language-Team: Asturian <alministradores@softastur.org>\n" "Language-Team: Asturian <alministradores@softastur.org>\n"
@@ -25,127 +25,127 @@ msgctxt ""
msgid "Receiving notifications for new messages" msgid "Receiving notifications for new messages"
msgstr "" msgstr ""
#: src/app/controller.cpp:319 #: src/app/controller.cpp:316
#, kde-format #, kde-format
msgid "Receiving push notifications" msgid "Receiving push notifications"
msgstr "" msgstr ""
#: src/app/main.cpp:131 src/login/WelcomePage.qml:77 #: src/app/main.cpp:136 src/login/WelcomePage.qml:77
#, kde-format #, kde-format
msgid "NeoChat" msgid "NeoChat"
msgstr "" msgstr ""
#: src/app/main.cpp:133 #: src/app/main.cpp:138
#, kde-format #, kde-format
msgid "Chat on Matrix" msgid "Chat on Matrix"
msgstr "" msgstr ""
#: src/app/main.cpp:135 #: src/app/main.cpp:140
#, kde-format #, kde-format
msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community" msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community"
msgstr "" msgstr ""
#: src/app/main.cpp:136 #: src/app/main.cpp:141
#, kde-format #, kde-format
msgid "Carl Schwan" msgid "Carl Schwan"
msgstr "" msgstr ""
#: src/app/main.cpp:136 src/app/main.cpp:137 src/app/main.cpp:138 #: src/app/main.cpp:141 src/app/main.cpp:142 src/app/main.cpp:143
#: src/app/main.cpp:140 #: src/app/main.cpp:145
#, kde-format #, kde-format
msgid "Maintainer" msgid "Maintainer"
msgstr "" msgstr ""
#: src/app/main.cpp:137 #: src/app/main.cpp:142
#, kde-format #, kde-format
msgid "Tobias Fella" msgid "Tobias Fella"
msgstr "" msgstr ""
#: src/app/main.cpp:138 #: src/app/main.cpp:143
#, kde-format #, kde-format
msgid "James Graham" msgid "James Graham"
msgstr "" msgstr ""
#: src/app/main.cpp:139 #: src/app/main.cpp:144
#, kde-format #, kde-format
msgid "Joshua Goins" msgid "Joshua Goins"
msgstr "" msgstr ""
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Black Hat" msgid "Black Hat"
msgstr "" msgstr ""
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Original author of Spectral" msgid "Original author of Spectral"
msgstr "" msgstr ""
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Alexey Rusakov" msgid "Alexey Rusakov"
msgstr "" msgstr ""
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Maintainer of libQuotient" msgid "Maintainer of libQuotient"
msgstr "" msgstr ""
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
msgid "Your names" msgid "Your names"
msgstr "" msgstr ""
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "EMAIL OF TRANSLATORS" msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "" msgstr ""
#: src/app/main.cpp:150 #: src/app/main.cpp:155
#, kde-format #, kde-format
msgid "A Qt library to write cross-platform clients for Matrix" msgid "A Qt library to write cross-platform clients for Matrix"
msgstr "" msgstr ""
#: src/app/main.cpp:152 #: src/app/main.cpp:157
#, kde-format #, kde-format
msgctxt "<version number> (built against <possibly different version number>)" msgctxt "<version number> (built against <possibly different version number>)"
msgid "%1 (built against %2)" msgid "%1 (built against %2)"
msgstr "" msgstr ""
#: src/app/main.cpp:167 #: src/app/main.cpp:178
#, kde-format #, kde-format
msgid "Client for the matrix communication protocol" msgid "Client for the matrix communication protocol"
msgstr "" msgstr ""
#: src/app/main.cpp:168 #: src/app/main.cpp:179
#, kde-format #, kde-format
msgid "Supports matrix: url scheme" msgid "Supports matrix: url scheme"
msgstr "" msgstr ""
#: src/app/main.cpp:169 #: src/app/main.cpp:180
#, kde-format #, kde-format
msgid "Ignore all SSL Errors, e.g., unsigned certificates." msgid "Ignore all SSL Errors, e.g., unsigned certificates."
msgstr "" msgstr ""
#: src/app/main.cpp:171 #: src/app/main.cpp:182
#, kde-format #, kde-format
msgctxt "command line description" msgctxt "command line description"
msgid "Replace an existing instance" msgid "Replace an existing instance"
msgstr "" msgstr ""
#: src/app/main.cpp:174 #: src/app/main.cpp:185
#, kde-format #, kde-format
msgid "Only used for autotests" msgid "Only used for autotests"
msgstr "" msgstr ""
#: src/app/main.cpp:184 #: src/app/main.cpp:195
#, kde-format #, kde-format
msgid "Share a URL to Matrix" msgid "Share a URL to Matrix"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:386 #: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:390
#, kde-format #, kde-format
msgid "Encrypted Message" msgid "Encrypted Message"
msgstr "" msgstr ""
@@ -170,40 +170,40 @@ msgstr ""
msgid "Reply…" msgid "Reply…"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:304 #: src/app/notificationsmanager.cpp:306
#, kde-format #, kde-format
msgid "%1 invited you to a room" msgid "%1 invited you to a room"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:307 #: src/app/notificationsmanager.cpp:309
#, kde-format #, kde-format
msgid "Open this invitation in NeoChat" msgid "Open this invitation in NeoChat"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:317 #: src/app/notificationsmanager.cpp:319
#, kde-format #, kde-format
msgctxt "@action:button The thing being accepted is an invitation to chat" msgctxt "@action:button The thing being accepted is an invitation to chat"
msgid "Accept" msgid "Accept"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:318 #: src/app/notificationsmanager.cpp:320
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject" msgid "Reject"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:320 #: src/app/notificationsmanager.cpp:322
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject and Ignore User" msgid "Reject and Ignore User"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:379 #: src/app/notificationsmanager.cpp:383
#, kde-format #, kde-format
msgid "%1 (%2)" msgid "%1 (%2)"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:390 #: src/app/notificationsmanager.cpp:394
#, kde-format #, kde-format
msgid "Open NeoChat" msgid "Open NeoChat"
msgstr "" msgstr ""
@@ -244,7 +244,7 @@ msgctxt "@action:inmenu"
msgid "Open Developer Tools" msgid "Open Developer Tools"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:182 #: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:200
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Developer Tools" msgid "Developer Tools"
@@ -256,31 +256,31 @@ msgctxt "@action:inmenu"
msgid "Open Secret Backup" msgid "Open Secret Backup"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:83 #: src/app/qml/AccountMenu.qml:84
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Open Key Backup" msgid "Open Key Backup"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:88 #: src/app/qml/AccountMenu.qml:89
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Verify This Device" msgid "Verify This Device"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:94 src/settings/DevicesPage.qml:46 #: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:46
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Verification Request Sent" msgid "Verification Request Sent"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:47 #: src/app/qml/AccountMenu.qml:96 src/settings/DevicesPage.qml:47
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "To proceed, accept the verification request on another device." msgid "To proceed, accept the verification request on another device."
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:106 #: src/app/qml/AccountMenu.qml:107
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Logout…" msgid "Logout…"
@@ -595,31 +595,31 @@ msgctxt "@info:label 'Username' has invited you to this room at 'timestamp'."
msgid "%1 has invited you to this room at %2." msgid "%1 has invited you to this room at %2."
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:98 #: src/app/qml/InvitationView.qml:97
#, kde-format #, kde-format
msgctxt "@info:label This user invited you to chat at 'timestamp'" msgctxt "@info:label This user invited you to chat at 'timestamp'"
msgid "This user invited you to chat at %1." msgid "This user invited you to chat at %1."
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:113 #: src/app/qml/InvitationView.qml:112
#, kde-format #, kde-format
msgctxt "@action:button Accept this invite" msgctxt "@action:button Accept this invite"
msgid "Accept Invite" msgid "Accept Invite"
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:128 #: src/app/qml/InvitationView.qml:127
#, kde-format #, kde-format
msgctxt "@action:button Reject this invite" msgctxt "@action:button Reject this invite"
msgid "Reject Invite" msgid "Reject Invite"
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:142 #: src/app/qml/InvitationView.qml:141
#, kde-format #, kde-format
msgctxt "@action:button Block the user" msgctxt "@action:button Block the user"
msgid "Block %1" msgid "Block %1"
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:181 #: src/app/qml/InvitationView.qml:180
#, kde-kuit-format #, kde-kuit-format
msgctxt "" msgctxt ""
"@info:label Ensure you are referring to the same translation used for that " "@info:label Ensure you are referring to the same translation used for that "
@@ -937,7 +937,7 @@ msgctxt "@title:dialog"
msgid "Select a File" msgid "Select a File"
msgstr "" msgstr ""
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:109 #: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:125
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Scan a QR Code" msgid "Scan a QR Code"
@@ -1027,63 +1027,63 @@ msgctxt "@action:button"
msgid "Ignore" msgid "Ignore"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:87 #: src/app/qml/RoomPage.qml:95
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Join Jitsi meeting…" msgid "Join Jitsi meeting…"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Start Jitsi meeting…" msgid "Start Jitsi meeting…"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "You do not have permissions to start Jitsi meetings" msgid "You do not have permissions to start Jitsi meetings"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:129 src/app/qml/UserDetailDialog.qml:285 #: src/app/qml/RoomPage.qml:137 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:91 #: src/roominfo/RoomInformation.qml:109
#, kde-format #, kde-format
msgctxt "@action:title" msgctxt "@action:title"
msgid "Search" msgid "Search"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:142 #: src/app/qml/RoomPage.qml:150
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "This room contains official messages from your homeserver." msgid "This room contains official messages from your homeserver."
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:153 #: src/app/qml/RoomPage.qml:161
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "NeoChat is offline. Please check your network connection." msgid "NeoChat is offline. Please check your network connection."
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:213 src/roominfo/RoomInformation.qml:164 #: src/app/qml/RoomPage.qml:221 src/roominfo/RoomInformation.qml:182
#: src/roominfo/RoomPinnedMessagesPage.qml:22 #: src/roominfo/RoomPinnedMessagesPage.qml:22
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:285 #: src/app/qml/RoomPage.qml:294
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Welcome to NeoChat" msgid "Welcome to NeoChat"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:286 #: src/app/qml/RoomPage.qml:295
#, kde-format #, kde-format
msgctxt "@info:usagetip" msgctxt "@info:usagetip"
msgid "Select or join a room to get started" msgid "Select or join a room to get started"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:347 #: src/app/qml/RoomPage.qml:356
#, kde-format #, kde-format
msgctxt "@title:dialog" msgctxt "@title:dialog"
msgid "Message Source" msgid "Message Source"
@@ -1167,19 +1167,13 @@ msgctxt "@info"
msgid "Shared url for image is <a href='%1'>%1</a>" msgid "Shared url for image is <a href='%1'>%1</a>"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:16 #: src/app/qml/UnlockSSSSDialog.qml:14
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Load your encrypted messages" msgid "Load your encrypted messages"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:35 #: src/app/qml/UnlockSSSSDialog.qml:36
#, kde-format
msgctxt "@info:status"
msgid "The security key or backup passphrase was not correct."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:41
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "Encryption keys restored." msgid "Encryption keys restored."
@@ -1187,43 +1181,67 @@ msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:48 #: src/app/qml/UnlockSSSSDialog.qml:48
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@info:status"
msgid "Unlock using Security Key or Backup Passphrase" msgid "The security phrase was not correct."
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:52 #: src/app/qml/UnlockSSSSDialog.qml:54
#, kde-format
msgctxt "@title"
msgid "Unlock using Passphrase"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:58
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid "If you have a backup passphrase for this account, enter it below."
"If you have a security key or backup passphrase for this account, enter it "
"below or upload it as a file."
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:56 #: src/app/qml/UnlockSSSSDialog.qml:62
#, kde-format #, kde-format
msgctxt "@label:textbox" msgctxt "@label:textbox"
msgid "Security Key or Backup Passphrase:" msgid "Backup Password:"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:61 #: src/app/qml/UnlockSSSSDialog.qml:67 src/app/qml/UnlockSSSSDialog.qml:102
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:71
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Unlock" msgid "Unlock"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:82 #: src/app/qml/UnlockSSSSDialog.qml:79
#, kde-format
msgctxt "@title"
msgid "Unlock using Security Key"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:83
#, kde-format
msgctxt "@info"
msgid ""
"If you have a security key for this account, enter it below or upload it as "
"a file."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:87
#, kde-format
msgctxt "@label:textbox"
msgid "Security Key:"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:92
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:113
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Unlock from Cross-Signing" msgid "Unlock from Cross-Signing"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:86 #: src/app/qml/UnlockSSSSDialog.qml:117
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid ""
@@ -1231,7 +1249,7 @@ msgid ""
"key from other devices by clicking the button below." "key from other devices by clicking the button below."
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:91 #: src/app/qml/UnlockSSSSDialog.qml:122
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Request from other Devices" msgid "Request from other Devices"
@@ -1379,38 +1397,6 @@ msgstr ""
msgid "Copy link" msgid "Copy link"
msgstr "" msgstr ""
#: src/app/qml/UserDetailDialog.qml:298
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report…"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:303
#, kde-format
msgctxt "@title:dialog"
msgid "Report User"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:304
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this user"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:306
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:308
#, kde-format
msgctxt "@title"
msgid "Report User"
msgstr ""
#: src/app/qml/UserMenu.qml:62 #: src/app/qml/UserMenu.qml:62
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -1613,22 +1599,22 @@ msgctxt "@action:button Done, we are finished with verification"
msgid "Done" msgid "Done"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:213 #: src/app/roommanager.cpp:235
#, kde-format #, kde-format
msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier" msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:430 #: src/app/roommanager.cpp:439
#, kde-format #, kde-format
msgid "Failed to join %1:<br />%2" msgid "Failed to join %1:<br />%2"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:454 #: src/app/roommanager.cpp:463
#, kde-format #, kde-format
msgid "You requested to join '%1'" msgid "You requested to join '%1'"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:458 #: src/app/roommanager.cpp:467
#, kde-format #, kde-format
msgid "Failed to request joining room<br />%1" msgid "Failed to request joining room<br />%1"
msgstr "" msgstr ""
@@ -1709,7 +1695,7 @@ msgctxt "@placeholder"
msgid "Send a message…" msgid "Send a message…"
msgstr "" msgstr ""
#: src/chatbar/ChatBar.qml:432 src/messagecontent/ChatBarComponent.qml:234 #: src/chatbar/ChatBar.qml:430 src/messagecontent/ChatBarComponent.qml:234
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Cancel reply" msgid "Cancel reply"
@@ -1911,13 +1897,19 @@ msgstr ""
#: src/devtools/FeatureFlagPage.qml:25 #: src/devtools/FeatureFlagPage.qml:25
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix 'secret backup' feature"
msgid "Secret Backup"
msgstr ""
#: src/devtools/FeatureFlagPage.qml:31
#, kde-format
msgctxt "" msgctxt ""
"@option:check Enable the matrix feature to add a phone number as a third " "@option:check Enable the matrix feature to add a phone number as a third "
"party ID" "party ID"
msgid "Add phone numbers as 3PIDs" msgid "Add phone numbers as 3PIDs"
msgstr "" msgstr ""
#: src/devtools/FeatureFlagPage.qml:34 #: src/devtools/FeatureFlagPage.qml:40
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix feature for audio and video calling" msgctxt "@option:check Enable the matrix feature for audio and video calling"
msgid "Calls" msgid "Calls"
@@ -2291,12 +2283,12 @@ msgstr ""
#: src/libneochat/eventhandler.cpp:392 #: src/libneochat/eventhandler.cpp:392
#, kde-format #, kde-format
msgid "has removed %1 from the room: %2" msgid "has put %1 out of the room: %2"
msgstr "" msgstr ""
#: src/libneochat/eventhandler.cpp:394 #: src/libneochat/eventhandler.cpp:394
#, kde-format #, kde-format
msgid "has removed %1 from the room" msgid "has put %1 out of the room"
msgstr "" msgstr ""
#: src/libneochat/eventhandler.cpp:398 #: src/libneochat/eventhandler.cpp:398
@@ -3136,7 +3128,7 @@ msgctxt "@info the person that created this room"
msgid "Creator" msgid "Creator"
msgstr "" msgstr ""
#: src/libneochat/neochatconnection.cpp:73 #: src/libneochat/neochatconnection.cpp:71
#, kde-format #, kde-format
msgid "" msgid ""
"File too large to download.<br />Contact your matrix server administrator " "File too large to download.<br />Contact your matrix server administrator "
@@ -3159,12 +3151,12 @@ msgstr ""
msgid "Space creation failed: %1" msgid "Space creation failed: %1"
msgstr "" msgstr ""
#: src/libneochat/neochatroom.cpp:1254 #: src/libneochat/neochatroom.cpp:1253
#, kde-format #, kde-format
msgid "Report sent successfully." msgid "Report sent successfully."
msgstr "" msgstr ""
#: src/libneochat/neochatroom.cpp:1619 src/libneochat/neochatroom.cpp:1627 #: src/libneochat/neochatroom.cpp:1618 src/libneochat/neochatroom.cpp:1626
#, kde-format #, kde-format
msgctxt "'Lat' and 'Lon' as in Latitude and Longitude" msgctxt "'Lat' and 'Lon' as in Latitude and Longitude"
msgid "Lat: %1, Lon: %2" msgid "Lat: %1, Lon: %2"
@@ -3637,12 +3629,12 @@ msgctxt "@action:button"
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: src/messagecontent/CodeComponent.qml:161 #: src/messagecontent/CodeComponent.qml:154
#, kde-format #, kde-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: src/messagecontent/CodeComponent.qml:173 #: src/messagecontent/CodeComponent.qml:166
#: src/messagecontent/VideoComponent.qml:374 #: src/messagecontent/VideoComponent.qml:374
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -3849,13 +3841,13 @@ msgctxt "as in 'this vote has ended'"
msgid "(Ended)" msgid "(Ended)"
msgstr "" msgstr ""
#: src/messagecontent/pollhandler.cpp:308 #: src/messagecontent/pollhandler.cpp:306
#, kde-format #, kde-format
msgctxt "%1 is the poll answer that had the most votes" msgctxt "%1 is the poll answer that had the most votes"
msgid "The poll has ended. Top answer: %1" msgid "The poll has ended. Top answer: %1"
msgstr "" msgstr ""
#: src/messagecontent/ReactionComponent.qml:90 #: src/messagecontent/ReactionComponent.qml:88
#, kde-format #, kde-format
msgctxt "@button" msgctxt "@button"
msgid "React" msgid "React"
@@ -3890,7 +3882,7 @@ msgctxt "@action:button"
msgid "Volume" msgid "Volume"
msgstr "" msgstr ""
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:145 #: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:163
#, kde-format #, kde-format
msgctxt "Locations on a map" msgctxt "Locations on a map"
msgid "Locations" msgid "Locations"
@@ -3901,18 +3893,18 @@ msgstr ""
msgid "There are no locations shared in this room." msgid "There are no locations shared in this room."
msgstr "" msgstr ""
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:49 #: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:50
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Room settings" msgid "Room settings"
msgstr "" msgstr ""
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:91 #: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:92
#, kde-format #, kde-format
msgid "Information" msgid "Information"
msgstr "" msgstr ""
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:96 #: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:97
#, kde-format #, kde-format
msgid "Media" msgid "Media"
msgstr "" msgstr ""
@@ -3929,95 +3921,95 @@ msgctxt "@action:title"
msgid "Room Information" msgid "Room Information"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:72 #: src/roominfo/RoomInformation.qml:90
#, kde-format #, kde-format
msgctxt "Room actions" msgctxt "Room actions"
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:82 #: src/roominfo/RoomInformation.qml:100
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Search Messages" msgid "Search Messages"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:99 #: src/roominfo/RoomInformation.qml:117
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Verify user" msgid "Verify user"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:123 #: src/roominfo/RoomInformation.qml:141
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Extensions" msgid "Extensions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:129 #: src/roominfo/RoomInformation.qml:147
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Extensions" msgid "Extensions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:139 #: src/roominfo/RoomInformation.qml:157
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Shared Locations" msgid "Shared Locations"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:155 #: src/roominfo/RoomInformation.qml:173
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:170 #: src/roominfo/RoomInformation.qml:188
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Inspect Room Data" msgid "Inspect Room Data"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Space…" msgid "Leave Space…"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:204 #: src/roominfo/RoomInformation.qml:222
#, kde-format #, kde-format
msgid "Members" msgid "Members"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:219 src/spaces/SpaceHomePage.qml:85 #: src/roominfo/RoomInformation.qml:237 src/spaces/SpaceHomePage.qml:85
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Invite a User" msgid "Invite a User"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:223 #: src/roominfo/RoomInformation.qml:241
#, kde-format #, kde-format
msgid "Invite user to room" msgid "Invite user to room"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "%1 member" msgid "%1 member"
@@ -4025,7 +4017,7 @@ msgid_plural "%1 members"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgid "No member count" msgid "No member count"
msgstr "" msgstr ""
@@ -4081,42 +4073,42 @@ msgctxt "@action:button"
msgid "Remove widget" msgid "Remove widget"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:36 #: src/rooms/ExploreComponent.qml:38
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Rooms" msgid "Rooms"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:48 #: src/rooms/ExploreComponent.qml:50
#, kde-format #, kde-format
msgctxt "@action" msgctxt "@action"
msgid "Search Rooms" msgid "Search Rooms"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:61 #: src/rooms/ExploreComponent.qml:75
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Show Menu" msgid "Show Menu"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:78 src/rooms/ExploreComponentMobile.qml:65 #: src/rooms/ExploreComponent.qml:94 src/rooms/ExploreComponentMobile.qml:65
#, kde-format #, kde-format
msgid "Find your friends" msgid "Find your friends"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:83 src/rooms/ExploreComponentMobile.qml:72 #: src/rooms/ExploreComponent.qml:99 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246 #: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Find your friends" msgid "Find your friends"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:88 #: src/rooms/ExploreComponent.qml:104
#, kde-format #, kde-format
msgid "Create a Room" msgid "Create a Room"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:103 #: src/rooms/ExploreComponent.qml:119
#, kde-format #, kde-format
msgid "Scan a QR Code" msgid "Scan a QR Code"
msgstr "" msgstr ""
@@ -4148,13 +4140,13 @@ msgctxt "@action:button"
msgid "Create a Space" msgid "Create a Space"
msgstr "" msgstr ""
#: src/rooms/models/roomtreemodel.cpp:364 #: src/rooms/models/roomtreemodel.cpp:366
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "Invited you to chat" msgid "Invited you to chat"
msgstr "" msgstr ""
#: src/rooms/models/roomtreemodel.cpp:366 #: src/rooms/models/roomtreemodel.cpp:368
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "%1 invited you" msgid "%1 invited you"
@@ -4236,38 +4228,6 @@ msgstr ""
#: src/rooms/RoomContextMenu.qml:154 #: src/rooms/RoomContextMenu.qml:154
#, kde-format #, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report…"
msgstr ""
#: src/rooms/RoomContextMenu.qml:159
#, kde-format
msgctxt "@title:dialog"
msgid "Report Room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:160
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:162
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report"
msgstr ""
#: src/rooms/RoomContextMenu.qml:164
#, kde-format
msgctxt "@title"
msgid "Report Room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:174
#, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "" msgstr ""
@@ -4331,13 +4291,13 @@ msgctxt "@action:button"
msgid "Search in friend directory" msgid "Search in friend directory"
msgstr "" msgstr ""
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Collapse <section name>" msgctxt "Collapse <section name>"
msgid "Collapse %1" msgid "Collapse %1"
msgstr "" msgstr ""
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Expand <section name" msgctxt "Expand <section name"
msgid "Expand %1" msgid "Expand %1"
@@ -6928,19 +6888,19 @@ msgctxt "@info text-to-speech %1 is author %2 is message text"
msgid "%1 said %2" msgid "%1 said %2"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Unpin' as in 'Unpin this message'" msgctxt "@action:button 'Unpin' as in 'Unpin this message'"
msgid "Unpin" msgid "Unpin"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Pin' as in 'Pin the message in the room'" msgctxt "@action:button 'Pin' as in 'Pin the message in the room'"
msgid "Pin" msgid "Pin"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:415 #: src/timeline/DelegateContextMenu.qml:416
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "View Source" msgid "View Source"
@@ -7008,31 +6968,31 @@ msgid ""
"this point." "this point."
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to first unread message" msgid "Jump to first unread message"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to oldest loaded message" msgid "Jump to oldest loaded message"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:245 #: src/timeline/TimelineView.qml:272
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to latest message" msgid "Jump to latest message"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:279 #: src/timeline/TimelineView.qml:307
#, kde-format #, kde-format
msgctxt "@info:placeholder" msgctxt "@info:placeholder"
msgid "Drag items here to share them" msgid "Drag items here to share them"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:304 #: src/timeline/TimelineView.qml:332
#, kde-format #, kde-format
msgctxt "Message displayed when some users are typing" msgctxt "Message displayed when some users are typing"
msgid "%2 is typing" msgid "%2 is typing"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -9,8 +9,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: neochat\n" "Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-12-18 00:43+0000\n" "POT-Creation-Date: 2026-01-28 02:42+0000\n"
"PO-Revision-Date: 2025-12-01 11:35+0100\n" "PO-Revision-Date: 2025-11-10 11:43+0100\n"
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n" "Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n" "Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca@valencia\n" "Language: ca@valencia\n"
@@ -28,127 +28,127 @@ msgctxt ""
msgid "Receiving notifications for new messages" msgid "Receiving notifications for new messages"
msgstr "Rebre les notificacions dels missatges nous" msgstr "Rebre les notificacions dels missatges nous"
#: src/app/controller.cpp:319 #: src/app/controller.cpp:316
#, kde-format #, kde-format
msgid "Receiving push notifications" msgid "Receiving push notifications"
msgstr "Rebre les notificacions automàtiques" msgstr "Rebre les notificacions automàtiques"
#: src/app/main.cpp:131 src/login/WelcomePage.qml:77 #: src/app/main.cpp:136 src/login/WelcomePage.qml:77
#, kde-format #, kde-format
msgid "NeoChat" msgid "NeoChat"
msgstr "NeoChat" msgstr "NeoChat"
#: src/app/main.cpp:133 #: src/app/main.cpp:138
#, kde-format #, kde-format
msgid "Chat on Matrix" msgid "Chat on Matrix"
msgstr "Xat a Matrix" msgstr "Xat a Matrix"
#: src/app/main.cpp:135 #: src/app/main.cpp:140
#, kde-format #, kde-format
msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community" msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community"
msgstr "© 2018-2020 Black Hat, 2020-2025 la comunitat KDE" msgstr "© 2018-2020 Black Hat, 2020-2025 la comunitat KDE"
#: src/app/main.cpp:136 #: src/app/main.cpp:141
#, kde-format #, kde-format
msgid "Carl Schwan" msgid "Carl Schwan"
msgstr "Carl Schwan" msgstr "Carl Schwan"
#: src/app/main.cpp:136 src/app/main.cpp:137 src/app/main.cpp:138 #: src/app/main.cpp:141 src/app/main.cpp:142 src/app/main.cpp:143
#: src/app/main.cpp:140 #: src/app/main.cpp:145
#, kde-format #, kde-format
msgid "Maintainer" msgid "Maintainer"
msgstr "Mantenidor" msgstr "Mantenidor"
#: src/app/main.cpp:137 #: src/app/main.cpp:142
#, kde-format #, kde-format
msgid "Tobias Fella" msgid "Tobias Fella"
msgstr "Tobias Fella" msgstr "Tobias Fella"
#: src/app/main.cpp:138 #: src/app/main.cpp:143
#, kde-format #, kde-format
msgid "James Graham" msgid "James Graham"
msgstr "Nate Graham" msgstr "Nate Graham"
#: src/app/main.cpp:139 #: src/app/main.cpp:144
#, kde-format #, kde-format
msgid "Joshua Goins" msgid "Joshua Goins"
msgstr "Joshua Goins" msgstr "Joshua Goins"
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Black Hat" msgid "Black Hat"
msgstr "Black Hat" msgstr "Black Hat"
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Original author of Spectral" msgid "Original author of Spectral"
msgstr "Autor original de Spectral" msgstr "Autor original de Spectral"
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Alexey Rusakov" msgid "Alexey Rusakov"
msgstr "Alexey Rusakov" msgstr "Alexey Rusakov"
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Maintainer of libQuotient" msgid "Maintainer of libQuotient"
msgstr "Mantenidor de la libQuotient" msgstr "Mantenidor de la libQuotient"
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
msgid "Your names" msgid "Your names"
msgstr "Josep M. Ferrer" msgstr "Josep M. Ferrer"
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "EMAIL OF TRANSLATORS" msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "txemaq@gmail.com" msgstr "txemaq@gmail.com"
#: src/app/main.cpp:150 #: src/app/main.cpp:155
#, kde-format #, kde-format
msgid "A Qt library to write cross-platform clients for Matrix" msgid "A Qt library to write cross-platform clients for Matrix"
msgstr "Una biblioteca Qt per a escriure clients multiplataforma per a Matrix" msgstr "Una biblioteca Qt per a escriure clients multiplataforma per a Matrix"
#: src/app/main.cpp:152 #: src/app/main.cpp:157
#, kde-format #, kde-format
msgctxt "<version number> (built against <possibly different version number>)" msgctxt "<version number> (built against <possibly different version number>)"
msgid "%1 (built against %2)" msgid "%1 (built against %2)"
msgstr "%1 (construïda amb %2)" msgstr "%1 (construïda amb %2)"
#: src/app/main.cpp:167 #: src/app/main.cpp:178
#, kde-format #, kde-format
msgid "Client for the matrix communication protocol" msgid "Client for the matrix communication protocol"
msgstr "Client per al protocol de comunicacions Matrix" msgstr "Client per al protocol de comunicacions Matrix"
#: src/app/main.cpp:168 #: src/app/main.cpp:179
#, kde-format #, kde-format
msgid "Supports matrix: url scheme" msgid "Supports matrix: url scheme"
msgstr "Implementa l'esquema d'URL «matrix:»" msgstr "Implementa l'esquema d'URL «matrix:»"
#: src/app/main.cpp:169 #: src/app/main.cpp:180
#, kde-format #, kde-format
msgid "Ignore all SSL Errors, e.g., unsigned certificates." msgid "Ignore all SSL Errors, e.g., unsigned certificates."
msgstr "Ignora tots els errors d'SSL, p. ex., certificats sense signar." msgstr "Ignora tots els errors d'SSL, p. ex., certificats sense signar."
#: src/app/main.cpp:171 #: src/app/main.cpp:182
#, kde-format #, kde-format
msgctxt "command line description" msgctxt "command line description"
msgid "Replace an existing instance" msgid "Replace an existing instance"
msgstr "Substituïx una instància existent" msgstr "Substituïx una instància existent"
#: src/app/main.cpp:174 #: src/app/main.cpp:185
#, kde-format #, kde-format
msgid "Only used for autotests" msgid "Only used for autotests"
msgstr "Només s'utilitza en les proves automàtiques" msgstr "Només s'utilitza en les proves automàtiques"
#: src/app/main.cpp:184 #: src/app/main.cpp:195
#, kde-format #, kde-format
msgid "Share a URL to Matrix" msgid "Share a URL to Matrix"
msgstr "Compartix un URL a Matrix" msgstr "Compartix un URL a Matrix"
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:386 #: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:390
#, kde-format #, kde-format
msgid "Encrypted Message" msgid "Encrypted Message"
msgstr "Missatge encriptat" msgstr "Missatge encriptat"
@@ -173,40 +173,40 @@ msgstr "Respon"
msgid "Reply…" msgid "Reply…"
msgstr "Respon…" msgstr "Respon…"
#: src/app/notificationsmanager.cpp:304 #: src/app/notificationsmanager.cpp:306
#, kde-format #, kde-format
msgid "%1 invited you to a room" msgid "%1 invited you to a room"
msgstr "%1 vos ha convidat a la sala" msgstr "%1 vos ha convidat a la sala"
#: src/app/notificationsmanager.cpp:307 #: src/app/notificationsmanager.cpp:309
#, kde-format #, kde-format
msgid "Open this invitation in NeoChat" msgid "Open this invitation in NeoChat"
msgstr "Obri esta invitació en NeoChat" msgstr "Obri esta invitació en NeoChat"
#: src/app/notificationsmanager.cpp:317 #: src/app/notificationsmanager.cpp:319
#, kde-format #, kde-format
msgctxt "@action:button The thing being accepted is an invitation to chat" msgctxt "@action:button The thing being accepted is an invitation to chat"
msgid "Accept" msgid "Accept"
msgstr "Accepta" msgstr "Accepta"
#: src/app/notificationsmanager.cpp:318 #: src/app/notificationsmanager.cpp:320
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject" msgid "Reject"
msgstr "Rebutja" msgstr "Rebutja"
#: src/app/notificationsmanager.cpp:320 #: src/app/notificationsmanager.cpp:322
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject and Ignore User" msgid "Reject and Ignore User"
msgstr "Rebutja i ignora l'usuari" msgstr "Rebutja i ignora l'usuari"
#: src/app/notificationsmanager.cpp:379 #: src/app/notificationsmanager.cpp:383
#, kde-format #, kde-format
msgid "%1 (%2)" msgid "%1 (%2)"
msgstr "%1 (%2)" msgstr "%1 (%2)"
#: src/app/notificationsmanager.cpp:390 #: src/app/notificationsmanager.cpp:394
#, kde-format #, kde-format
msgid "Open NeoChat" msgid "Open NeoChat"
msgstr "Obri NeoChat" msgstr "Obri NeoChat"
@@ -247,7 +247,7 @@ msgctxt "@action:inmenu"
msgid "Open Developer Tools" msgid "Open Developer Tools"
msgstr "Obri les eines de desenvolupament" msgstr "Obri les eines de desenvolupament"
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:182 #: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:200
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Developer Tools" msgid "Developer Tools"
@@ -259,25 +259,25 @@ msgctxt "@action:inmenu"
msgid "Open Secret Backup" msgid "Open Secret Backup"
msgstr "Obri una còpia de seguretat del secret" msgstr "Obri una còpia de seguretat del secret"
#: src/app/qml/AccountMenu.qml:83 #: src/app/qml/AccountMenu.qml:84
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Open Key Backup" msgid "Open Key Backup"
msgstr "Obri una còpia de seguretat de la clau" msgstr "Obri una còpia de seguretat de la clau"
#: src/app/qml/AccountMenu.qml:88 #: src/app/qml/AccountMenu.qml:89
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Verify This Device" msgid "Verify This Device"
msgstr "Verifica este dispositiu" msgstr "Verifica este dispositiu"
#: src/app/qml/AccountMenu.qml:94 src/settings/DevicesPage.qml:46 #: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:46
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Verification Request Sent" msgid "Verification Request Sent"
msgstr "Enviament de sol·licitud de verificació" msgstr "Enviament de sol·licitud de verificació"
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:47 #: src/app/qml/AccountMenu.qml:96 src/settings/DevicesPage.qml:47
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "To proceed, accept the verification request on another device." msgid "To proceed, accept the verification request on another device."
@@ -285,7 +285,7 @@ msgstr ""
"Per a continuar, accepteu la sol·licitud de verificació en un altre " "Per a continuar, accepteu la sol·licitud de verificació en un altre "
"dispositiu." "dispositiu."
#: src/app/qml/AccountMenu.qml:106 #: src/app/qml/AccountMenu.qml:107
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Logout…" msgid "Logout…"
@@ -605,31 +605,31 @@ msgctxt "@info:label 'Username' has invited you to this room at 'timestamp'."
msgid "%1 has invited you to this room at %2." msgid "%1 has invited you to this room at %2."
msgstr "%1 vos ha convidat en esta sala %2." msgstr "%1 vos ha convidat en esta sala %2."
#: src/app/qml/InvitationView.qml:98 #: src/app/qml/InvitationView.qml:97
#, kde-format #, kde-format
msgctxt "@info:label This user invited you to chat at 'timestamp'" msgctxt "@info:label This user invited you to chat at 'timestamp'"
msgid "This user invited you to chat at %1." msgid "This user invited you to chat at %1."
msgstr "Este usuari vos ha convidat al xat %1." msgstr "Este usuari vos ha convidat al xat %1."
#: src/app/qml/InvitationView.qml:113 #: src/app/qml/InvitationView.qml:112
#, kde-format #, kde-format
msgctxt "@action:button Accept this invite" msgctxt "@action:button Accept this invite"
msgid "Accept Invite" msgid "Accept Invite"
msgstr "Accepta la invitació" msgstr "Accepta la invitació"
#: src/app/qml/InvitationView.qml:128 #: src/app/qml/InvitationView.qml:127
#, kde-format #, kde-format
msgctxt "@action:button Reject this invite" msgctxt "@action:button Reject this invite"
msgid "Reject Invite" msgid "Reject Invite"
msgstr "Rebutja la invitació" msgstr "Rebutja la invitació"
#: src/app/qml/InvitationView.qml:142 #: src/app/qml/InvitationView.qml:141
#, kde-format #, kde-format
msgctxt "@action:button Block the user" msgctxt "@action:button Block the user"
msgid "Block %1" msgid "Block %1"
msgstr "Bloqueja %1" msgstr "Bloqueja %1"
#: src/app/qml/InvitationView.qml:181 #: src/app/qml/InvitationView.qml:180
#, kde-kuit-format #, kde-kuit-format
msgctxt "" msgctxt ""
"@info:label Ensure you are referring to the same translation used for that " "@info:label Ensure you are referring to the same translation used for that "
@@ -950,7 +950,7 @@ msgctxt "@title:dialog"
msgid "Select a File" msgid "Select a File"
msgstr "Trieu un fitxer" msgstr "Trieu un fitxer"
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:109 #: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:125
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Scan a QR Code" msgid "Scan a QR Code"
@@ -1040,38 +1040,38 @@ msgctxt "@action:button"
msgid "Ignore" msgid "Ignore"
msgstr "Ignora" msgstr "Ignora"
#: src/app/qml/RoomPage.qml:87 #: src/app/qml/RoomPage.qml:95
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Join Jitsi meeting…" msgid "Join Jitsi meeting…"
msgstr "Unix-te a una reunió de Jitsi…" msgstr "Unix-te a una reunió de Jitsi…"
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Start Jitsi meeting…" msgid "Start Jitsi meeting…"
msgstr "Inicia una reunió de Jitsi…" msgstr "Inicia una reunió de Jitsi…"
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "You do not have permissions to start Jitsi meetings" msgid "You do not have permissions to start Jitsi meetings"
msgstr "No teniu permís per a iniciar reunions de Jitsi" msgstr "No teniu permís per a iniciar reunions de Jitsi"
#: src/app/qml/RoomPage.qml:129 src/app/qml/UserDetailDialog.qml:285 #: src/app/qml/RoomPage.qml:137 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:91 #: src/roominfo/RoomInformation.qml:109
#, kde-format #, kde-format
msgctxt "@action:title" msgctxt "@action:title"
msgid "Search" msgid "Search"
msgstr "Busca" msgstr "Busca"
#: src/app/qml/RoomPage.qml:142 #: src/app/qml/RoomPage.qml:150
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "This room contains official messages from your homeserver." msgid "This room contains official messages from your homeserver."
msgstr "La sala conté missatges oficials del vostre servidor domèstic." msgstr "La sala conté missatges oficials del vostre servidor domèstic."
#: src/app/qml/RoomPage.qml:153 #: src/app/qml/RoomPage.qml:161
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "NeoChat is offline. Please check your network connection." msgid "NeoChat is offline. Please check your network connection."
@@ -1079,26 +1079,26 @@ msgstr ""
"NeoChat està en fora de línia. Comproveu l'estat de la vostra connexió de " "NeoChat està en fora de línia. Comproveu l'estat de la vostra connexió de "
"xarxa." "xarxa."
#: src/app/qml/RoomPage.qml:213 src/roominfo/RoomInformation.qml:164 #: src/app/qml/RoomPage.qml:221 src/roominfo/RoomInformation.qml:182
#: src/roominfo/RoomPinnedMessagesPage.qml:22 #: src/roominfo/RoomPinnedMessagesPage.qml:22
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "Missatges fixats" msgstr "Missatges fixats"
#: src/app/qml/RoomPage.qml:285 #: src/app/qml/RoomPage.qml:294
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Welcome to NeoChat" msgid "Welcome to NeoChat"
msgstr "Us donem la benvinguda a NeoChat" msgstr "Us donem la benvinguda a NeoChat"
#: src/app/qml/RoomPage.qml:286 #: src/app/qml/RoomPage.qml:295
#, kde-format #, kde-format
msgctxt "@info:usagetip" msgctxt "@info:usagetip"
msgid "Select or join a room to get started" msgid "Select or join a room to get started"
msgstr "Trieu o uniu-vos a una per a començar" msgstr "Trieu o uniu-vos a una per a començar"
#: src/app/qml/RoomPage.qml:347 #: src/app/qml/RoomPage.qml:356
#, kde-format #, kde-format
msgctxt "@title:dialog" msgctxt "@title:dialog"
msgid "Message Source" msgid "Message Source"
@@ -1182,21 +1182,13 @@ msgctxt "@info"
msgid "Shared url for image is <a href='%1'>%1</a>" msgid "Shared url for image is <a href='%1'>%1</a>"
msgstr "L'URL compartit per a la imatge és <a href='%1'>%1</a>" msgstr "L'URL compartit per a la imatge és <a href='%1'>%1</a>"
#: src/app/qml/UnlockSSSSDialog.qml:16 #: src/app/qml/UnlockSSSSDialog.qml:14
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Load your encrypted messages" msgid "Load your encrypted messages"
msgstr "Càrrega dels missatges encriptats" msgstr "Càrrega dels missatges encriptats"
#: src/app/qml/UnlockSSSSDialog.qml:35 #: src/app/qml/UnlockSSSSDialog.qml:36
#, kde-format
msgctxt "@info:status"
msgid "The security key or backup passphrase was not correct."
msgstr ""
"La clau de seguretat o la frase de pas de còpia de seguretat no són "
"correctes."
#: src/app/qml/UnlockSSSSDialog.qml:41
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "Encryption keys restored." msgid "Encryption keys restored."
@@ -1204,47 +1196,71 @@ msgstr "S'han restaurat les claus d'encriptació."
#: src/app/qml/UnlockSSSSDialog.qml:48 #: src/app/qml/UnlockSSSSDialog.qml:48
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@info:status"
msgid "Unlock using Security Key or Backup Passphrase" msgid "The security phrase was not correct."
msgstr "" msgstr "La frase de seguretat no és correcta."
"Desbloqueja utilitzant la clau de seguretat o la frase de pas de còpia de "
"seguretat"
#: src/app/qml/UnlockSSSSDialog.qml:52 #: src/app/qml/UnlockSSSSDialog.qml:54
#, kde-format
msgctxt "@title"
msgid "Unlock using Passphrase"
msgstr "Desbloqueja utilitzant la frase de pas"
#: src/app/qml/UnlockSSSSDialog.qml:58
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid "If you have a backup passphrase for this account, enter it below."
"If you have a security key or backup passphrase for this account, enter it "
"below or upload it as a file."
msgstr "" msgstr ""
"Si teniu una clau de seguretat o una frase de pas de còpia de seguretat per " "Si teniu una còpia de seguretat de la frase de pas per a este compte, "
"a este compte, introduïu-la a continuació o carregueu-la com a fitxer." "introduïu-la a continuació."
#: src/app/qml/UnlockSSSSDialog.qml:56 #: src/app/qml/UnlockSSSSDialog.qml:62
#, kde-format #, kde-format
msgctxt "@label:textbox" msgctxt "@label:textbox"
msgid "Security Key or Backup Passphrase:" msgid "Backup Password:"
msgstr "Clau de seguretat o frase de pas de còpia de seguretat:" msgstr "Còpia de seguretat de la contrasenya:"
#: src/app/qml/UnlockSSSSDialog.qml:61 #: src/app/qml/UnlockSSSSDialog.qml:67 src/app/qml/UnlockSSSSDialog.qml:102
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr "Carrega des del fitxer"
#: src/app/qml/UnlockSSSSDialog.qml:71
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Unlock" msgid "Unlock"
msgstr "Desbloqueja" msgstr "Desbloqueja"
#: src/app/qml/UnlockSSSSDialog.qml:82 #: src/app/qml/UnlockSSSSDialog.qml:79
#, kde-format
msgctxt "@title"
msgid "Unlock using Security Key"
msgstr "Desbloqueja utilitzant la clau de seguretat"
#: src/app/qml/UnlockSSSSDialog.qml:83
#, kde-format
msgctxt "@info"
msgid ""
"If you have a security key for this account, enter it below or upload it as "
"a file."
msgstr ""
"Si teniu una clau de seguretat per a este compte, introduïu-la a continuació "
"o carregueu-la com a fitxer."
#: src/app/qml/UnlockSSSSDialog.qml:87
#, kde-format
msgctxt "@label:textbox"
msgid "Security Key:"
msgstr "Clau de seguretat:"
#: src/app/qml/UnlockSSSSDialog.qml:92
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr "Carrega des del fitxer"
#: src/app/qml/UnlockSSSSDialog.qml:113
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Unlock from Cross-Signing" msgid "Unlock from Cross-Signing"
msgstr "Desbloqueja a partir d'una signatura creuada" msgstr "Desbloqueja a partir d'una signatura creuada"
#: src/app/qml/UnlockSSSSDialog.qml:86 #: src/app/qml/UnlockSSSSDialog.qml:117
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid ""
@@ -1255,7 +1271,7 @@ msgstr ""
"clau de còpia de seguretat des d'altres dispositius clicant damunt del botó " "clau de còpia de seguretat des d'altres dispositius clicant damunt del botó "
"de davall." "de davall."
#: src/app/qml/UnlockSSSSDialog.qml:91 #: src/app/qml/UnlockSSSSDialog.qml:122
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Request from other Devices" msgid "Request from other Devices"
@@ -1403,38 +1419,6 @@ msgstr "Busca missatges de %1 a la sala"
msgid "Copy link" msgid "Copy link"
msgstr "Copia l'enllaç" msgstr "Copia l'enllaç"
#: src/app/qml/UserDetailDialog.qml:298
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report…"
msgstr "Informa…"
#: src/app/qml/UserDetailDialog.qml:303
#, kde-format
msgctxt "@title:dialog"
msgid "Report User"
msgstr "Informa d'un usuari"
#: src/app/qml/UserDetailDialog.qml:304
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this user"
msgstr "Motiu per a informar d'este usuari"
#: src/app/qml/UserDetailDialog.qml:306
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report"
msgstr "Informa"
#: src/app/qml/UserDetailDialog.qml:308
#, kde-format
msgctxt "@title"
msgid "Report User"
msgstr "Informa d'un usuari"
#: src/app/qml/UserMenu.qml:62 #: src/app/qml/UserMenu.qml:62
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -1670,24 +1654,24 @@ msgctxt "@action:button Done, we are finished with verification"
msgid "Done" msgid "Done"
msgstr "Fet" msgstr "Fet"
#: src/app/roommanager.cpp:213 #: src/app/roommanager.cpp:235
#, kde-format #, kde-format
msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier" msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier"
msgstr "" msgstr ""
"ID de Matrix amb forma incorrecte o buit<br />%1 no és cap identificador " "ID de Matrix amb forma incorrecte o buit<br />%1 no és cap identificador "
"correcte de Matrix" "correcte de Matrix"
#: src/app/roommanager.cpp:430 #: src/app/roommanager.cpp:439
#, kde-format #, kde-format
msgid "Failed to join %1:<br />%2" msgid "Failed to join %1:<br />%2"
msgstr "No s'ha pogut unir-se a %1:<br />%2" msgstr "No s'ha pogut unir-se a %1:<br />%2"
#: src/app/roommanager.cpp:454 #: src/app/roommanager.cpp:463
#, kde-format #, kde-format
msgid "You requested to join '%1'" msgid "You requested to join '%1'"
msgstr "Heu sol·licitat unir-vos a «%1»" msgstr "Heu sol·licitat unir-vos a «%1»"
#: src/app/roommanager.cpp:458 #: src/app/roommanager.cpp:467
#, kde-format #, kde-format
msgid "Failed to request joining room<br />%1" msgid "Failed to request joining room<br />%1"
msgstr "Ha fallat mentre se sol·licitava unir-vos a la sala<br />%1" msgstr "Ha fallat mentre se sol·licitava unir-vos a la sala<br />%1"
@@ -1769,7 +1753,7 @@ msgctxt "@placeholder"
msgid "Send a message…" msgid "Send a message…"
msgstr "Envia un missatge…" msgstr "Envia un missatge…"
#: src/chatbar/ChatBar.qml:432 src/messagecontent/ChatBarComponent.qml:234 #: src/chatbar/ChatBar.qml:430 src/messagecontent/ChatBarComponent.qml:234
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Cancel reply" msgid "Cancel reply"
@@ -1977,13 +1961,19 @@ msgstr "Fils"
#: src/devtools/FeatureFlagPage.qml:25 #: src/devtools/FeatureFlagPage.qml:25
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix 'secret backup' feature"
msgid "Secret Backup"
msgstr "Còpia de seguretat del secret"
#: src/devtools/FeatureFlagPage.qml:31
#, kde-format
msgctxt "" msgctxt ""
"@option:check Enable the matrix feature to add a phone number as a third " "@option:check Enable the matrix feature to add a phone number as a third "
"party ID" "party ID"
msgid "Add phone numbers as 3PIDs" msgid "Add phone numbers as 3PIDs"
msgstr "Afig els números de telèfon com a 3PID" msgstr "Afig els números de telèfon com a 3PID"
#: src/devtools/FeatureFlagPage.qml:34 #: src/devtools/FeatureFlagPage.qml:40
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix feature for audio and video calling" msgctxt "@option:check Enable the matrix feature for audio and video calling"
msgid "Calls" msgid "Calls"
@@ -2361,13 +2351,13 @@ msgstr "ha/n deixat la sala"
#: src/libneochat/eventhandler.cpp:392 #: src/libneochat/eventhandler.cpp:392
#, kde-format #, kde-format
msgid "has removed %1 from the room: %2" msgid "has put %1 out of the room: %2"
msgstr "s'ha eliminat %1 de la sala: %2" msgstr "ha posat %1 fora de la sala: %2"
#: src/libneochat/eventhandler.cpp:394 #: src/libneochat/eventhandler.cpp:394
#, kde-format #, kde-format
msgid "has removed %1 from the room" msgid "has put %1 out of the room"
msgstr "s'ha eliminat %1 de la sala" msgstr "ha posat %1 fora de la sala"
#: src/libneochat/eventhandler.cpp:398 #: src/libneochat/eventhandler.cpp:398
#, kde-format #, kde-format
@@ -3211,7 +3201,7 @@ msgctxt "@info the person that created this room"
msgid "Creator" msgid "Creator"
msgstr "Creador" msgstr "Creador"
#: src/libneochat/neochatconnection.cpp:73 #: src/libneochat/neochatconnection.cpp:71
#, kde-format #, kde-format
msgid "" msgid ""
"File too large to download.<br />Contact your matrix server administrator " "File too large to download.<br />Contact your matrix server administrator "
@@ -3236,12 +3226,12 @@ msgstr "No s'ha pogut crear la sala: %1"
msgid "Space creation failed: %1" msgid "Space creation failed: %1"
msgstr "No s'ha pogut crear l'espai: %1" msgstr "No s'ha pogut crear l'espai: %1"
#: src/libneochat/neochatroom.cpp:1254 #: src/libneochat/neochatroom.cpp:1253
#, kde-format #, kde-format
msgid "Report sent successfully." msgid "Report sent successfully."
msgstr "L'informe s'ha enviat correctament." msgstr "L'informe s'ha enviat correctament."
#: src/libneochat/neochatroom.cpp:1619 src/libneochat/neochatroom.cpp:1627 #: src/libneochat/neochatroom.cpp:1618 src/libneochat/neochatroom.cpp:1626
#, kde-format #, kde-format
msgctxt "'Lat' and 'Lon' as in Latitude and Longitude" msgctxt "'Lat' and 'Lon' as in Latitude and Longitude"
msgid "Lat: %1, Lon: %2" msgid "Lat: %1, Lon: %2"
@@ -3720,12 +3710,12 @@ msgctxt "@action:button"
msgid "Cancel" msgid "Cancel"
msgstr "Cancel·la" msgstr "Cancel·la"
#: src/messagecontent/CodeComponent.qml:161 #: src/messagecontent/CodeComponent.qml:154
#, kde-format #, kde-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copia a dins del porta-retalls" msgstr "Copia a dins del porta-retalls"
#: src/messagecontent/CodeComponent.qml:173 #: src/messagecontent/CodeComponent.qml:166
#: src/messagecontent/VideoComponent.qml:374 #: src/messagecontent/VideoComponent.qml:374
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -3936,13 +3926,13 @@ msgctxt "as in 'this vote has ended'"
msgid "(Ended)" msgid "(Ended)"
msgstr "(Finalitzat)" msgstr "(Finalitzat)"
#: src/messagecontent/pollhandler.cpp:308 #: src/messagecontent/pollhandler.cpp:306
#, kde-format #, kde-format
msgctxt "%1 is the poll answer that had the most votes" msgctxt "%1 is the poll answer that had the most votes"
msgid "The poll has ended. Top answer: %1" msgid "The poll has ended. Top answer: %1"
msgstr "La votació ha finalitzat. Resposta guanyadora: %1" msgstr "La votació ha finalitzat. Resposta guanyadora: %1"
#: src/messagecontent/ReactionComponent.qml:90 #: src/messagecontent/ReactionComponent.qml:88
#, kde-format #, kde-format
msgctxt "@button" msgctxt "@button"
msgid "React" msgid "React"
@@ -3978,7 +3968,7 @@ msgctxt "@action:button"
msgid "Volume" msgid "Volume"
msgstr "Volum" msgstr "Volum"
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:145 #: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:163
#, kde-format #, kde-format
msgctxt "Locations on a map" msgctxt "Locations on a map"
msgid "Locations" msgid "Locations"
@@ -3989,18 +3979,18 @@ msgstr "Ubicacions"
msgid "There are no locations shared in this room." msgid "There are no locations shared in this room."
msgstr "No hi ha ubicacions compartides en esta sala." msgstr "No hi ha ubicacions compartides en esta sala."
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:49 #: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:50
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Room settings" msgid "Room settings"
msgstr "Configureu la sala" msgstr "Configureu la sala"
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:91 #: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:92
#, kde-format #, kde-format
msgid "Information" msgid "Information"
msgstr "Informació" msgstr "Informació"
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:96 #: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:97
#, kde-format #, kde-format
msgid "Media" msgid "Media"
msgstr "Multimèdia" msgstr "Multimèdia"
@@ -4017,95 +4007,95 @@ msgctxt "@action:title"
msgid "Room Information" msgid "Room Information"
msgstr "Informació de la sala" msgstr "Informació de la sala"
#: src/roominfo/RoomInformation.qml:72 #: src/roominfo/RoomInformation.qml:90
#, kde-format #, kde-format
msgctxt "Room actions" msgctxt "Room actions"
msgid "Actions" msgid "Actions"
msgstr "Accions" msgstr "Accions"
#: src/roominfo/RoomInformation.qml:82 #: src/roominfo/RoomInformation.qml:100
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Search Messages" msgid "Search Messages"
msgstr "Busca missatges" msgstr "Busca missatges"
#: src/roominfo/RoomInformation.qml:99 #: src/roominfo/RoomInformation.qml:117
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Verify user" msgid "Verify user"
msgstr "Verifica l'usuari" msgstr "Verifica l'usuari"
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Elimina de les preferides" msgstr "Elimina de les preferides"
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Afig a les preferides" msgstr "Afig a les preferides"
#: src/roominfo/RoomInformation.qml:123 #: src/roominfo/RoomInformation.qml:141
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Extensions" msgid "Extensions"
msgstr "Extensions" msgstr "Extensions"
#: src/roominfo/RoomInformation.qml:129 #: src/roominfo/RoomInformation.qml:147
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Extensions" msgid "Extensions"
msgstr "Extensions" msgstr "Extensions"
#: src/roominfo/RoomInformation.qml:139 #: src/roominfo/RoomInformation.qml:157
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Shared Locations" msgid "Shared Locations"
msgstr "Ubicacions compartides" msgstr "Ubicacions compartides"
#: src/roominfo/RoomInformation.qml:155 #: src/roominfo/RoomInformation.qml:173
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "Missatges fixats" msgstr "Missatges fixats"
#: src/roominfo/RoomInformation.qml:170 #: src/roominfo/RoomInformation.qml:188
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Inspect Room Data" msgid "Inspect Room Data"
msgstr "Inspecciona les dades de la sala" msgstr "Inspecciona les dades de la sala"
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Space…" msgid "Leave Space…"
msgstr "Ix de l'espai…" msgstr "Ix de l'espai…"
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "Ix de la sala…" msgstr "Ix de la sala…"
#: src/roominfo/RoomInformation.qml:204 #: src/roominfo/RoomInformation.qml:222
#, kde-format #, kde-format
msgid "Members" msgid "Members"
msgstr "Membres" msgstr "Membres"
#: src/roominfo/RoomInformation.qml:219 src/spaces/SpaceHomePage.qml:85 #: src/roominfo/RoomInformation.qml:237 src/spaces/SpaceHomePage.qml:85
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Invite a User" msgid "Invite a User"
msgstr "Convida un usuari" msgstr "Convida un usuari"
#: src/roominfo/RoomInformation.qml:223 #: src/roominfo/RoomInformation.qml:241
#, kde-format #, kde-format
msgid "Invite user to room" msgid "Invite user to room"
msgstr "Convida un usuari a la sala" msgstr "Convida un usuari a la sala"
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "%1 member" msgid "%1 member"
@@ -4113,7 +4103,7 @@ msgid_plural "%1 members"
msgstr[0] "%1 membre" msgstr[0] "%1 membre"
msgstr[1] "%1 membres" msgstr[1] "%1 membres"
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgid "No member count" msgid "No member count"
msgstr "No hi ha comptador de membres" msgstr "No hi ha comptador de membres"
@@ -4169,42 +4159,42 @@ msgctxt "@action:button"
msgid "Remove widget" msgid "Remove widget"
msgstr "Elimina el giny" msgstr "Elimina el giny"
#: src/rooms/ExploreComponent.qml:36 #: src/rooms/ExploreComponent.qml:38
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Rooms" msgid "Rooms"
msgstr "Sales" msgstr "Sales"
#: src/rooms/ExploreComponent.qml:48 #: src/rooms/ExploreComponent.qml:50
#, kde-format #, kde-format
msgctxt "@action" msgctxt "@action"
msgid "Search Rooms" msgid "Search Rooms"
msgstr "Busca sales" msgstr "Busca sales"
#: src/rooms/ExploreComponent.qml:61 #: src/rooms/ExploreComponent.qml:75
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Show Menu" msgid "Show Menu"
msgstr "Mostra el menú" msgstr "Mostra el menú"
#: src/rooms/ExploreComponent.qml:78 src/rooms/ExploreComponentMobile.qml:65 #: src/rooms/ExploreComponent.qml:94 src/rooms/ExploreComponentMobile.qml:65
#, kde-format #, kde-format
msgid "Find your friends" msgid "Find your friends"
msgstr "Busqueu els vostres amics" msgstr "Busqueu els vostres amics"
#: src/rooms/ExploreComponent.qml:83 src/rooms/ExploreComponentMobile.qml:72 #: src/rooms/ExploreComponent.qml:99 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246 #: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Find your friends" msgid "Find your friends"
msgstr "Busca d'amics" msgstr "Busca d'amics"
#: src/rooms/ExploreComponent.qml:88 #: src/rooms/ExploreComponent.qml:104
#, kde-format #, kde-format
msgid "Create a Room" msgid "Create a Room"
msgstr "Crea una sala" msgstr "Crea una sala"
#: src/rooms/ExploreComponent.qml:103 #: src/rooms/ExploreComponent.qml:119
#, kde-format #, kde-format
msgid "Scan a QR Code" msgid "Scan a QR Code"
msgstr "Escaneja un codi QR" msgstr "Escaneja un codi QR"
@@ -4236,13 +4226,13 @@ msgctxt "@action:button"
msgid "Create a Space" msgid "Create a Space"
msgstr "Crea un espai" msgstr "Crea un espai"
#: src/rooms/models/roomtreemodel.cpp:364 #: src/rooms/models/roomtreemodel.cpp:366
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "Invited you to chat" msgid "Invited you to chat"
msgstr "Vos ha convidat al xat" msgstr "Vos ha convidat al xat"
#: src/rooms/models/roomtreemodel.cpp:366 #: src/rooms/models/roomtreemodel.cpp:368
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "%1 invited you" msgid "%1 invited you"
@@ -4324,38 +4314,6 @@ msgstr "Configureu la sala"
#: src/rooms/RoomContextMenu.qml:154 #: src/rooms/RoomContextMenu.qml:154
#, kde-format #, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report…"
msgstr "Informa…"
#: src/rooms/RoomContextMenu.qml:159
#, kde-format
msgctxt "@title:dialog"
msgid "Report Room"
msgstr "Informa d'una sala"
#: src/rooms/RoomContextMenu.qml:160
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this room"
msgstr "Motiu per a informar d'esta sala"
#: src/rooms/RoomContextMenu.qml:162
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report"
msgstr "Informa"
#: src/rooms/RoomContextMenu.qml:164
#, kde-format
msgctxt "@title"
msgid "Report Room"
msgstr "Informa d'una sala"
#: src/rooms/RoomContextMenu.qml:174
#, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "Ix de la sala…" msgstr "Ix de la sala…"
@@ -4421,13 +4379,13 @@ msgctxt "@action:button"
msgid "Search in friend directory" msgid "Search in friend directory"
msgstr "Busca en el directori d'amics" msgstr "Busca en el directori d'amics"
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Collapse <section name>" msgctxt "Collapse <section name>"
msgid "Collapse %1" msgid "Collapse %1"
msgstr "Reduïx %1" msgstr "Reduïx %1"
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Expand <section name" msgctxt "Expand <section name"
msgid "Expand %1" msgid "Expand %1"
@@ -5946,7 +5904,7 @@ msgstr "Configureu el servidor intermediari"
#: src/settings/NetworkProxyPage.qml:78 #: src/settings/NetworkProxyPage.qml:78
#, kde-format #, kde-format
msgid "Host" msgid "Host"
msgstr "Màquina" msgstr "Amfitrió"
#: src/settings/NetworkProxyPage.qml:91 #: src/settings/NetworkProxyPage.qml:91
#, kde-format #, kde-format
@@ -7083,19 +7041,19 @@ msgctxt "@info text-to-speech %1 is author %2 is message text"
msgid "%1 said %2" msgid "%1 said %2"
msgstr "%1 ha dit %2" msgstr "%1 ha dit %2"
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Unpin' as in 'Unpin this message'" msgctxt "@action:button 'Unpin' as in 'Unpin this message'"
msgid "Unpin" msgid "Unpin"
msgstr "Deixa de fixar" msgstr "Deixa de fixar"
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Pin' as in 'Pin the message in the room'" msgctxt "@action:button 'Pin' as in 'Pin the message in the room'"
msgid "Pin" msgid "Pin"
msgstr "Fixa" msgstr "Fixa"
#: src/timeline/DelegateContextMenu.qml:415 #: src/timeline/DelegateContextMenu.qml:416
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "View Source" msgid "View Source"
@@ -7165,31 +7123,31 @@ msgstr ""
"Este és el començament del xat. No hi ha missatges històrics més enllà " "Este és el començament del xat. No hi ha missatges històrics més enllà "
"d'este punt." "d'este punt."
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to first unread message" msgid "Jump to first unread message"
msgstr "Ves fins al primer missatge sense llegir" msgstr "Ves fins al primer missatge sense llegir"
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to oldest loaded message" msgid "Jump to oldest loaded message"
msgstr "Ves fins al missatge carregat més antic" msgstr "Ves fins al missatge carregat més antic"
#: src/timeline/TimelineView.qml:245 #: src/timeline/TimelineView.qml:272
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to latest message" msgid "Jump to latest message"
msgstr "Ves fins a l'últim missatge" msgstr "Ves fins a l'últim missatge"
#: src/timeline/TimelineView.qml:279 #: src/timeline/TimelineView.qml:307
#, kde-format #, kde-format
msgctxt "@info:placeholder" msgctxt "@info:placeholder"
msgid "Drag items here to share them" msgid "Drag items here to share them"
msgstr "Arrossegueu ací els elements per a compartir" msgstr "Arrossegueu ací els elements per a compartir"
#: src/timeline/TimelineView.qml:304 #: src/timeline/TimelineView.qml:332
#, kde-format #, kde-format
msgctxt "Message displayed when some users are typing" msgctxt "Message displayed when some users are typing"
msgid "%2 is typing" msgid "%2 is typing"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: neochat\n" "Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-12-18 00:43+0000\n" "POT-Creation-Date: 2026-01-28 02:42+0000\n"
"PO-Revision-Date: 2025-12-02 01:39+0100\n" "PO-Revision-Date: 2025-11-11 01:01+0100\n"
"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n" "Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
"Language-Team: Spanish <kde-l10n-es@kde.org>\n" "Language-Team: Spanish <kde-l10n-es@kde.org>\n"
"Language: es\n" "Language: es\n"
@@ -27,129 +27,129 @@ msgctxt ""
msgid "Receiving notifications for new messages" msgid "Receiving notifications for new messages"
msgstr "Recibir notificaciones de nuevos mensajes" msgstr "Recibir notificaciones de nuevos mensajes"
#: src/app/controller.cpp:319 #: src/app/controller.cpp:316
#, kde-format #, kde-format
msgid "Receiving push notifications" msgid "Receiving push notifications"
msgstr "Recepción de notificaciones push" msgstr "Recepción de notificaciones push"
#: src/app/main.cpp:131 src/login/WelcomePage.qml:77 #: src/app/main.cpp:136 src/login/WelcomePage.qml:77
#, kde-format #, kde-format
msgid "NeoChat" msgid "NeoChat"
msgstr "NeoChat" msgstr "NeoChat"
#: src/app/main.cpp:133 #: src/app/main.cpp:138
#, kde-format #, kde-format
msgid "Chat on Matrix" msgid "Chat on Matrix"
msgstr "Chat en Matrix" msgstr "Chat en Matrix"
#: src/app/main.cpp:135 #: src/app/main.cpp:140
#, kde-format #, kde-format
msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community" msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community"
msgstr "© 2018-2020 Black Hat, 2020-2025 La Comunidad KDE" msgstr "© 2018-2020 Black Hat, 2020-2025 La Comunidad KDE"
#: src/app/main.cpp:136 #: src/app/main.cpp:141
#, kde-format #, kde-format
msgid "Carl Schwan" msgid "Carl Schwan"
msgstr "Carl Schwan" msgstr "Carl Schwan"
#: src/app/main.cpp:136 src/app/main.cpp:137 src/app/main.cpp:138 #: src/app/main.cpp:141 src/app/main.cpp:142 src/app/main.cpp:143
#: src/app/main.cpp:140 #: src/app/main.cpp:145
#, kde-format #, kde-format
msgid "Maintainer" msgid "Maintainer"
msgstr "Responsable" msgstr "Responsable"
#: src/app/main.cpp:137 #: src/app/main.cpp:142
#, kde-format #, kde-format
msgid "Tobias Fella" msgid "Tobias Fella"
msgstr "Tobias Fella" msgstr "Tobias Fella"
#: src/app/main.cpp:138 #: src/app/main.cpp:143
#, kde-format #, kde-format
msgid "James Graham" msgid "James Graham"
msgstr "James Graham" msgstr "James Graham"
#: src/app/main.cpp:139 #: src/app/main.cpp:144
#, kde-format #, kde-format
msgid "Joshua Goins" msgid "Joshua Goins"
msgstr "Joshua Goins" msgstr "Joshua Goins"
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Black Hat" msgid "Black Hat"
msgstr "Black Hat" msgstr "Black Hat"
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Original author of Spectral" msgid "Original author of Spectral"
msgstr "Autor original de Spectral" msgstr "Autor original de Spectral"
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Alexey Rusakov" msgid "Alexey Rusakov"
msgstr "Alexey Rusakov" msgstr "Alexey Rusakov"
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Maintainer of libQuotient" msgid "Maintainer of libQuotient"
msgstr "Responsable de libQuotient" msgstr "Responsable de libQuotient"
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
msgid "Your names" msgid "Your names"
msgstr "Eloy Cuadra" msgstr "Eloy Cuadra"
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "EMAIL OF TRANSLATORS" msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "ecuadra@eloihr.net" msgstr "ecuadra@eloihr.net"
#: src/app/main.cpp:150 #: src/app/main.cpp:155
#, kde-format #, kde-format
msgid "A Qt library to write cross-platform clients for Matrix" msgid "A Qt library to write cross-platform clients for Matrix"
msgstr "" msgstr ""
"Biblioteca Qt para la escritura de clientes multiplataforma para Matrix" "Biblioteca Qt para la escritura de clientes multiplataforma para Matrix"
#: src/app/main.cpp:152 #: src/app/main.cpp:157
#, kde-format #, kde-format
msgctxt "<version number> (built against <possibly different version number>)" msgctxt "<version number> (built against <possibly different version number>)"
msgid "%1 (built against %2)" msgid "%1 (built against %2)"
msgstr "%1 (compilado con %2)" msgstr "%1 (compilado con %2)"
#: src/app/main.cpp:167 #: src/app/main.cpp:178
#, kde-format #, kde-format
msgid "Client for the matrix communication protocol" msgid "Client for the matrix communication protocol"
msgstr "Cliente para el protocolo de comunicaciones Matrix" msgstr "Cliente para el protocolo de comunicaciones Matrix"
#: src/app/main.cpp:168 #: src/app/main.cpp:179
#, kde-format #, kde-format
msgid "Supports matrix: url scheme" msgid "Supports matrix: url scheme"
msgstr "Permite el esquema de URL «matrix:»" msgstr "Permite el esquema de URL «matrix:»"
#: src/app/main.cpp:169 #: src/app/main.cpp:180
#, kde-format #, kde-format
msgid "Ignore all SSL Errors, e.g., unsigned certificates." msgid "Ignore all SSL Errors, e.g., unsigned certificates."
msgstr "" msgstr ""
"Ignorar todos los errores de SSL (por ejemplo, certificados sin firmar)." "Ignorar todos los errores de SSL (por ejemplo, certificados sin firmar)."
#: src/app/main.cpp:171 #: src/app/main.cpp:182
#, kde-format #, kde-format
msgctxt "command line description" msgctxt "command line description"
msgid "Replace an existing instance" msgid "Replace an existing instance"
msgstr "Sustituir una instancia existente" msgstr "Sustituir una instancia existente"
#: src/app/main.cpp:174 #: src/app/main.cpp:185
#, kde-format #, kde-format
msgid "Only used for autotests" msgid "Only used for autotests"
msgstr "Se usa solo para pruebas automáticas" msgstr "Se usa solo para pruebas automáticas"
#: src/app/main.cpp:184 #: src/app/main.cpp:195
#, kde-format #, kde-format
msgid "Share a URL to Matrix" msgid "Share a URL to Matrix"
msgstr "Compartir una URL con Matrix" msgstr "Compartir una URL con Matrix"
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:386 #: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:390
#, kde-format #, kde-format
msgid "Encrypted Message" msgid "Encrypted Message"
msgstr "Mensaje cifrado" msgstr "Mensaje cifrado"
@@ -174,40 +174,40 @@ msgstr "Responder"
msgid "Reply…" msgid "Reply…"
msgstr "Responder…" msgstr "Responder…"
#: src/app/notificationsmanager.cpp:304 #: src/app/notificationsmanager.cpp:306
#, kde-format #, kde-format
msgid "%1 invited you to a room" msgid "%1 invited you to a room"
msgstr "%1 le ha invitado a una sala" msgstr "%1 le ha invitado a una sala"
#: src/app/notificationsmanager.cpp:307 #: src/app/notificationsmanager.cpp:309
#, kde-format #, kde-format
msgid "Open this invitation in NeoChat" msgid "Open this invitation in NeoChat"
msgstr "Abrir esta invitación en NeoChat" msgstr "Abrir esta invitación en NeoChat"
#: src/app/notificationsmanager.cpp:317 #: src/app/notificationsmanager.cpp:319
#, kde-format #, kde-format
msgctxt "@action:button The thing being accepted is an invitation to chat" msgctxt "@action:button The thing being accepted is an invitation to chat"
msgid "Accept" msgid "Accept"
msgstr "Aceptar" msgstr "Aceptar"
#: src/app/notificationsmanager.cpp:318 #: src/app/notificationsmanager.cpp:320
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject" msgid "Reject"
msgstr "Rechazar" msgstr "Rechazar"
#: src/app/notificationsmanager.cpp:320 #: src/app/notificationsmanager.cpp:322
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject and Ignore User" msgid "Reject and Ignore User"
msgstr "Rechazar e ignorar usuario" msgstr "Rechazar e ignorar usuario"
#: src/app/notificationsmanager.cpp:379 #: src/app/notificationsmanager.cpp:383
#, kde-format #, kde-format
msgid "%1 (%2)" msgid "%1 (%2)"
msgstr "%1 (%2)" msgstr "%1 (%2)"
#: src/app/notificationsmanager.cpp:390 #: src/app/notificationsmanager.cpp:394
#, kde-format #, kde-format
msgid "Open NeoChat" msgid "Open NeoChat"
msgstr "Abrir NeoChat" msgstr "Abrir NeoChat"
@@ -248,7 +248,7 @@ msgctxt "@action:inmenu"
msgid "Open Developer Tools" msgid "Open Developer Tools"
msgstr "Abrir las herramientas del desarrollador" msgstr "Abrir las herramientas del desarrollador"
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:182 #: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:200
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Developer Tools" msgid "Developer Tools"
@@ -260,32 +260,32 @@ msgctxt "@action:inmenu"
msgid "Open Secret Backup" msgid "Open Secret Backup"
msgstr "Abrir copia de seguridad secreta" msgstr "Abrir copia de seguridad secreta"
#: src/app/qml/AccountMenu.qml:83 #: src/app/qml/AccountMenu.qml:84
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Open Key Backup" msgid "Open Key Backup"
msgstr "Abrir copia de seguridad de la clave" msgstr "Abrir copia de seguridad de la clave"
#: src/app/qml/AccountMenu.qml:88 #: src/app/qml/AccountMenu.qml:89
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Verify This Device" msgid "Verify This Device"
msgstr "Verificar este dispositivo" msgstr "Verificar este dispositivo"
#: src/app/qml/AccountMenu.qml:94 src/settings/DevicesPage.qml:46 #: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:46
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Verification Request Sent" msgid "Verification Request Sent"
msgstr "Solicitud de verificación enviada" msgstr "Solicitud de verificación enviada"
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:47 #: src/app/qml/AccountMenu.qml:96 src/settings/DevicesPage.qml:47
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "To proceed, accept the verification request on another device." msgid "To proceed, accept the verification request on another device."
msgstr "" msgstr ""
"Para continuar, acepte la solicitud de verificación en otro dispositivo." "Para continuar, acepte la solicitud de verificación en otro dispositivo."
#: src/app/qml/AccountMenu.qml:106 #: src/app/qml/AccountMenu.qml:107
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Logout…" msgid "Logout…"
@@ -604,31 +604,31 @@ msgctxt "@info:label 'Username' has invited you to this room at 'timestamp'."
msgid "%1 has invited you to this room at %2." msgid "%1 has invited you to this room at %2."
msgstr "%1 le ha invitado a esta sala el %2." msgstr "%1 le ha invitado a esta sala el %2."
#: src/app/qml/InvitationView.qml:98 #: src/app/qml/InvitationView.qml:97
#, kde-format #, kde-format
msgctxt "@info:label This user invited you to chat at 'timestamp'" msgctxt "@info:label This user invited you to chat at 'timestamp'"
msgid "This user invited you to chat at %1." msgid "This user invited you to chat at %1."
msgstr "Este usuario le ha invitado a chatear el %1." msgstr "Este usuario le ha invitado a chatear el %1."
#: src/app/qml/InvitationView.qml:113 #: src/app/qml/InvitationView.qml:112
#, kde-format #, kde-format
msgctxt "@action:button Accept this invite" msgctxt "@action:button Accept this invite"
msgid "Accept Invite" msgid "Accept Invite"
msgstr "Aceptar invitación" msgstr "Aceptar invitación"
#: src/app/qml/InvitationView.qml:128 #: src/app/qml/InvitationView.qml:127
#, kde-format #, kde-format
msgctxt "@action:button Reject this invite" msgctxt "@action:button Reject this invite"
msgid "Reject Invite" msgid "Reject Invite"
msgstr "Rechazar invitación" msgstr "Rechazar invitación"
#: src/app/qml/InvitationView.qml:142 #: src/app/qml/InvitationView.qml:141
#, kde-format #, kde-format
msgctxt "@action:button Block the user" msgctxt "@action:button Block the user"
msgid "Block %1" msgid "Block %1"
msgstr "Bloquear a %1" msgstr "Bloquear a %1"
#: src/app/qml/InvitationView.qml:181 #: src/app/qml/InvitationView.qml:180
#, kde-kuit-format #, kde-kuit-format
msgctxt "" msgctxt ""
"@info:label Ensure you are referring to the same translation used for that " "@info:label Ensure you are referring to the same translation used for that "
@@ -949,7 +949,7 @@ msgctxt "@title:dialog"
msgid "Select a File" msgid "Select a File"
msgstr "Seleccione un archivo" msgstr "Seleccione un archivo"
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:109 #: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:125
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Scan a QR Code" msgid "Scan a QR Code"
@@ -1039,63 +1039,63 @@ msgctxt "@action:button"
msgid "Ignore" msgid "Ignore"
msgstr "Ignorar" msgstr "Ignorar"
#: src/app/qml/RoomPage.qml:87 #: src/app/qml/RoomPage.qml:95
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Join Jitsi meeting…" msgid "Join Jitsi meeting…"
msgstr "Unirme a una reunión de Jitsi…" msgstr "Unirme a una reunión de Jitsi…"
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Start Jitsi meeting…" msgid "Start Jitsi meeting…"
msgstr "Iniciar reunión de Jitsi…" msgstr "Iniciar reunión de Jitsi…"
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "You do not have permissions to start Jitsi meetings" msgid "You do not have permissions to start Jitsi meetings"
msgstr "No tiene permisos para iniciar reuniones de Jitsi" msgstr "No tiene permisos para iniciar reuniones de Jitsi"
#: src/app/qml/RoomPage.qml:129 src/app/qml/UserDetailDialog.qml:285 #: src/app/qml/RoomPage.qml:137 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:91 #: src/roominfo/RoomInformation.qml:109
#, kde-format #, kde-format
msgctxt "@action:title" msgctxt "@action:title"
msgid "Search" msgid "Search"
msgstr "Buscar" msgstr "Buscar"
#: src/app/qml/RoomPage.qml:142 #: src/app/qml/RoomPage.qml:150
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "This room contains official messages from your homeserver." msgid "This room contains official messages from your homeserver."
msgstr "Esta sala contiene mensajes oficiales de su servidor doméstico." msgstr "Esta sala contiene mensajes oficiales de su servidor doméstico."
#: src/app/qml/RoomPage.qml:153 #: src/app/qml/RoomPage.qml:161
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "NeoChat is offline. Please check your network connection." msgid "NeoChat is offline. Please check your network connection."
msgstr "NeoChat no está conectado. Compruebe su conexión de red." msgstr "NeoChat no está conectado. Compruebe su conexión de red."
#: src/app/qml/RoomPage.qml:213 src/roominfo/RoomInformation.qml:164 #: src/app/qml/RoomPage.qml:221 src/roominfo/RoomInformation.qml:182
#: src/roominfo/RoomPinnedMessagesPage.qml:22 #: src/roominfo/RoomPinnedMessagesPage.qml:22
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "Mensajes fijados" msgstr "Mensajes fijados"
#: src/app/qml/RoomPage.qml:285 #: src/app/qml/RoomPage.qml:294
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Welcome to NeoChat" msgid "Welcome to NeoChat"
msgstr "Bienvenido a NeoChat" msgstr "Bienvenido a NeoChat"
#: src/app/qml/RoomPage.qml:286 #: src/app/qml/RoomPage.qml:295
#, kde-format #, kde-format
msgctxt "@info:usagetip" msgctxt "@info:usagetip"
msgid "Select or join a room to get started" msgid "Select or join a room to get started"
msgstr "Seleccione o únase a una sala para empezar" msgstr "Seleccione o únase a una sala para empezar"
#: src/app/qml/RoomPage.qml:347 #: src/app/qml/RoomPage.qml:356
#, kde-format #, kde-format
msgctxt "@title:dialog" msgctxt "@title:dialog"
msgid "Message Source" msgid "Message Source"
@@ -1179,19 +1179,13 @@ msgctxt "@info"
msgid "Shared url for image is <a href='%1'>%1</a>" msgid "Shared url for image is <a href='%1'>%1</a>"
msgstr "El URL compartido para la imagen es <a href='%1'>%1</a>" msgstr "El URL compartido para la imagen es <a href='%1'>%1</a>"
#: src/app/qml/UnlockSSSSDialog.qml:16 #: src/app/qml/UnlockSSSSDialog.qml:14
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Load your encrypted messages" msgid "Load your encrypted messages"
msgstr "Cargar mensajes cifrados…" msgstr "Cargar mensajes cifrados…"
#: src/app/qml/UnlockSSSSDialog.qml:35 #: src/app/qml/UnlockSSSSDialog.qml:36
#, kde-format
msgctxt "@info:status"
msgid "The security key or backup passphrase was not correct."
msgstr "La clave de seguridad o la contraseña de respaldo no eran correctas."
#: src/app/qml/UnlockSSSSDialog.qml:41
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "Encryption keys restored." msgid "Encryption keys restored."
@@ -1199,45 +1193,71 @@ msgstr "Claves de cifrado restauradas."
#: src/app/qml/UnlockSSSSDialog.qml:48 #: src/app/qml/UnlockSSSSDialog.qml:48
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@info:status"
msgid "Unlock using Security Key or Backup Passphrase" msgid "The security phrase was not correct."
msgstr "Desbloquear mediante clave de seguridad o contraseña de respaldo" msgstr "La frase de seguridad no es correcta."
#: src/app/qml/UnlockSSSSDialog.qml:52 #: src/app/qml/UnlockSSSSDialog.qml:54
#, kde-format
msgctxt "@title"
msgid "Unlock using Passphrase"
msgstr "Desbloquear usando contraseña larga"
#: src/app/qml/UnlockSSSSDialog.qml:58
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid "If you have a backup passphrase for this account, enter it below."
"If you have a security key or backup passphrase for this account, enter it "
"below or upload it as a file."
msgstr "" msgstr ""
"Si dispone de una clave de seguridad o de una contraseña de respaldo para " "Si dispone de una contraseña de respaldo para esta cuenta, introdúzcala a "
"esta cuenta, introdúzcala a continuación o envíela como archivo." "continuación."
#: src/app/qml/UnlockSSSSDialog.qml:56 #: src/app/qml/UnlockSSSSDialog.qml:62
#, kde-format #, kde-format
msgctxt "@label:textbox" msgctxt "@label:textbox"
msgid "Security Key or Backup Passphrase:" msgid "Backup Password:"
msgstr "Clave de seguridad o contraseña de respaldo:" msgstr "Contraseña de respaldo:"
#: src/app/qml/UnlockSSSSDialog.qml:61 #: src/app/qml/UnlockSSSSDialog.qml:67 src/app/qml/UnlockSSSSDialog.qml:102
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr "Enviar un archivo"
#: src/app/qml/UnlockSSSSDialog.qml:71
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Unlock" msgid "Unlock"
msgstr "Desbloquear" msgstr "Desbloquear"
#: src/app/qml/UnlockSSSSDialog.qml:82 #: src/app/qml/UnlockSSSSDialog.qml:79
#, kde-format
msgctxt "@title"
msgid "Unlock using Security Key"
msgstr "Desbloquear usando clave de seguridad"
#: src/app/qml/UnlockSSSSDialog.qml:83
#, kde-format
msgctxt "@info"
msgid ""
"If you have a security key for this account, enter it below or upload it as "
"a file."
msgstr ""
"Si dispone de una clave de seguridad para esta cuenta, introdúzcala a "
"continuación o envíela como archivo."
#: src/app/qml/UnlockSSSSDialog.qml:87
#, kde-format
msgctxt "@label:textbox"
msgid "Security Key:"
msgstr "Clave de seguridad:"
#: src/app/qml/UnlockSSSSDialog.qml:92
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr "Enviar un archivo"
#: src/app/qml/UnlockSSSSDialog.qml:113
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Unlock from Cross-Signing" msgid "Unlock from Cross-Signing"
msgstr "Desbloquear con firmado cruzado" msgstr "Desbloquear con firmado cruzado"
#: src/app/qml/UnlockSSSSDialog.qml:86 #: src/app/qml/UnlockSSSSDialog.qml:117
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid ""
@@ -1247,7 +1267,7 @@ msgstr ""
"Si ya había verificado este dispositivo anteriormente, puede probar a cargar " "Si ya había verificado este dispositivo anteriormente, puede probar a cargar "
"la clave de respaldo desde otros dispositivos pulsando el botón inferior." "la clave de respaldo desde otros dispositivos pulsando el botón inferior."
#: src/app/qml/UnlockSSSSDialog.qml:91 #: src/app/qml/UnlockSSSSDialog.qml:122
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Request from other Devices" msgid "Request from other Devices"
@@ -1395,38 +1415,6 @@ msgstr "Buscar mensajes de %1 en la sala"
msgid "Copy link" msgid "Copy link"
msgstr "Copiar enlace" msgstr "Copiar enlace"
#: src/app/qml/UserDetailDialog.qml:298
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report…"
msgstr "Denunciar…"
#: src/app/qml/UserDetailDialog.qml:303
#, kde-format
msgctxt "@title:dialog"
msgid "Report User"
msgstr "Denunciar usuario"
#: src/app/qml/UserDetailDialog.qml:304
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this user"
msgstr "Motivo para denunciar este usuario"
#: src/app/qml/UserDetailDialog.qml:306
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report"
msgstr "Denunciar"
#: src/app/qml/UserDetailDialog.qml:308
#, kde-format
msgctxt "@title"
msgid "Report User"
msgstr "Denunciar usuario"
#: src/app/qml/UserMenu.qml:62 #: src/app/qml/UserMenu.qml:62
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -1664,24 +1652,24 @@ msgctxt "@action:button Done, we are finished with verification"
msgid "Done" msgid "Done"
msgstr "Terminado" msgstr "Terminado"
#: src/app/roommanager.cpp:213 #: src/app/roommanager.cpp:235
#, kde-format #, kde-format
msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier" msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier"
msgstr "" msgstr ""
"Id de Matrix mal formada o vacía<br />%1 no es un identificador de Matrix " "Id de Matrix mal formada o vacía<br />%1 no es un identificador de Matrix "
"correcto" "correcto"
#: src/app/roommanager.cpp:430 #: src/app/roommanager.cpp:439
#, kde-format #, kde-format
msgid "Failed to join %1:<br />%2" msgid "Failed to join %1:<br />%2"
msgstr "No se ha podido unir a %1:<br />%2" msgstr "No se ha podido unir a %1:<br />%2"
#: src/app/roommanager.cpp:454 #: src/app/roommanager.cpp:463
#, kde-format #, kde-format
msgid "You requested to join '%1'" msgid "You requested to join '%1'"
msgstr "Ha solicitado unirse a «%1»" msgstr "Ha solicitado unirse a «%1»"
#: src/app/roommanager.cpp:458 #: src/app/roommanager.cpp:467
#, kde-format #, kde-format
msgid "Failed to request joining room<br />%1" msgid "Failed to request joining room<br />%1"
msgstr "No se ha podido solicitar unirse a la sala<br />%1" msgstr "No se ha podido solicitar unirse a la sala<br />%1"
@@ -1764,7 +1752,7 @@ msgctxt "@placeholder"
msgid "Send a message…" msgid "Send a message…"
msgstr "Enviar un mensaje…" msgstr "Enviar un mensaje…"
#: src/chatbar/ChatBar.qml:432 src/messagecontent/ChatBarComponent.qml:234 #: src/chatbar/ChatBar.qml:430 src/messagecontent/ChatBarComponent.qml:234
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Cancel reply" msgid "Cancel reply"
@@ -1972,13 +1960,19 @@ msgstr "Hilos"
#: src/devtools/FeatureFlagPage.qml:25 #: src/devtools/FeatureFlagPage.qml:25
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix 'secret backup' feature"
msgid "Secret Backup"
msgstr "Copia de seguridad secreta"
#: src/devtools/FeatureFlagPage.qml:31
#, kde-format
msgctxt "" msgctxt ""
"@option:check Enable the matrix feature to add a phone number as a third " "@option:check Enable the matrix feature to add a phone number as a third "
"party ID" "party ID"
msgid "Add phone numbers as 3PIDs" msgid "Add phone numbers as 3PIDs"
msgstr "Añadir números de teléfono como 3PID" msgstr "Añadir números de teléfono como 3PID"
#: src/devtools/FeatureFlagPage.qml:34 #: src/devtools/FeatureFlagPage.qml:40
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix feature for audio and video calling" msgctxt "@option:check Enable the matrix feature for audio and video calling"
msgid "Calls" msgid "Calls"
@@ -2358,12 +2352,12 @@ msgstr "ha salido de la sala"
#: src/libneochat/eventhandler.cpp:392 #: src/libneochat/eventhandler.cpp:392
#, kde-format #, kde-format
msgid "has removed %1 from the room: %2" msgid "has put %1 out of the room: %2"
msgstr "ha echado a %1 de la sala: %2" msgstr "ha echado a %1 de la sala: %2"
#: src/libneochat/eventhandler.cpp:394 #: src/libneochat/eventhandler.cpp:394
#, kde-format #, kde-format
msgid "has removed %1 from the room" msgid "has put %1 out of the room"
msgstr "ha echado a %1 de la sala" msgstr "ha echado a %1 de la sala"
#: src/libneochat/eventhandler.cpp:398 #: src/libneochat/eventhandler.cpp:398
@@ -3204,7 +3198,7 @@ msgctxt "@info the person that created this room"
msgid "Creator" msgid "Creator"
msgstr "Creador" msgstr "Creador"
#: src/libneochat/neochatconnection.cpp:73 #: src/libneochat/neochatconnection.cpp:71
#, kde-format #, kde-format
msgid "" msgid ""
"File too large to download.<br />Contact your matrix server administrator " "File too large to download.<br />Contact your matrix server administrator "
@@ -3229,12 +3223,12 @@ msgstr "La creación de la sala ha fallado: %1"
msgid "Space creation failed: %1" msgid "Space creation failed: %1"
msgstr "La creación del espacio ha fallado: %1" msgstr "La creación del espacio ha fallado: %1"
#: src/libneochat/neochatroom.cpp:1254 #: src/libneochat/neochatroom.cpp:1253
#, kde-format #, kde-format
msgid "Report sent successfully." msgid "Report sent successfully."
msgstr "La denuncia se ha enviado correctamente." msgstr "La denuncia se ha enviado correctamente."
#: src/libneochat/neochatroom.cpp:1619 src/libneochat/neochatroom.cpp:1627 #: src/libneochat/neochatroom.cpp:1618 src/libneochat/neochatroom.cpp:1626
#, kde-format #, kde-format
msgctxt "'Lat' and 'Lon' as in Latitude and Longitude" msgctxt "'Lat' and 'Lon' as in Latitude and Longitude"
msgid "Lat: %1, Lon: %2" msgid "Lat: %1, Lon: %2"
@@ -3712,12 +3706,12 @@ msgctxt "@action:button"
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: src/messagecontent/CodeComponent.qml:161 #: src/messagecontent/CodeComponent.qml:154
#, kde-format #, kde-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copiar en el portapapeles" msgstr "Copiar en el portapapeles"
#: src/messagecontent/CodeComponent.qml:173 #: src/messagecontent/CodeComponent.qml:166
#: src/messagecontent/VideoComponent.qml:374 #: src/messagecontent/VideoComponent.qml:374
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -3928,13 +3922,13 @@ msgctxt "as in 'this vote has ended'"
msgid "(Ended)" msgid "(Ended)"
msgstr "(Finalizada)" msgstr "(Finalizada)"
#: src/messagecontent/pollhandler.cpp:308 #: src/messagecontent/pollhandler.cpp:306
#, kde-format #, kde-format
msgctxt "%1 is the poll answer that had the most votes" msgctxt "%1 is the poll answer that had the most votes"
msgid "The poll has ended. Top answer: %1" msgid "The poll has ended. Top answer: %1"
msgstr "La encuesta ha finalizado: Respuesta más elegida: %1" msgstr "La encuesta ha finalizado: Respuesta más elegida: %1"
#: src/messagecontent/ReactionComponent.qml:90 #: src/messagecontent/ReactionComponent.qml:88
#, kde-format #, kde-format
msgctxt "@button" msgctxt "@button"
msgid "React" msgid "React"
@@ -3969,7 +3963,7 @@ msgctxt "@action:button"
msgid "Volume" msgid "Volume"
msgstr "Volumen" msgstr "Volumen"
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:145 #: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:163
#, kde-format #, kde-format
msgctxt "Locations on a map" msgctxt "Locations on a map"
msgid "Locations" msgid "Locations"
@@ -3980,18 +3974,18 @@ msgstr "Ubicaciones"
msgid "There are no locations shared in this room." msgid "There are no locations shared in this room."
msgstr "No hay ubicaciones compartidas en esta sala." msgstr "No hay ubicaciones compartidas en esta sala."
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:49 #: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:50
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Room settings" msgid "Room settings"
msgstr "Preferencias de la sala" msgstr "Preferencias de la sala"
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:91 #: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:92
#, kde-format #, kde-format
msgid "Information" msgid "Information"
msgstr "Información" msgstr "Información"
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:96 #: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:97
#, kde-format #, kde-format
msgid "Media" msgid "Media"
msgstr "Multimedia" msgstr "Multimedia"
@@ -4008,95 +4002,95 @@ msgctxt "@action:title"
msgid "Room Information" msgid "Room Information"
msgstr "Información de la sala" msgstr "Información de la sala"
#: src/roominfo/RoomInformation.qml:72 #: src/roominfo/RoomInformation.qml:90
#, kde-format #, kde-format
msgctxt "Room actions" msgctxt "Room actions"
msgid "Actions" msgid "Actions"
msgstr "Acciones" msgstr "Acciones"
#: src/roominfo/RoomInformation.qml:82 #: src/roominfo/RoomInformation.qml:100
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Search Messages" msgid "Search Messages"
msgstr "Buscar mensajes" msgstr "Buscar mensajes"
#: src/roominfo/RoomInformation.qml:99 #: src/roominfo/RoomInformation.qml:117
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Verify user" msgid "Verify user"
msgstr "Verificar usuario" msgstr "Verificar usuario"
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Eliminar de favoritas" msgstr "Eliminar de favoritas"
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Añadir a favoritas" msgstr "Añadir a favoritas"
#: src/roominfo/RoomInformation.qml:123 #: src/roominfo/RoomInformation.qml:141
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Extensions" msgid "Extensions"
msgstr "Extensiones" msgstr "Extensiones"
#: src/roominfo/RoomInformation.qml:129 #: src/roominfo/RoomInformation.qml:147
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Extensions" msgid "Extensions"
msgstr "Extensiones" msgstr "Extensiones"
#: src/roominfo/RoomInformation.qml:139 #: src/roominfo/RoomInformation.qml:157
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Shared Locations" msgid "Shared Locations"
msgstr "Ubicaciones compartidas" msgstr "Ubicaciones compartidas"
#: src/roominfo/RoomInformation.qml:155 #: src/roominfo/RoomInformation.qml:173
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "Mensajes fijados" msgstr "Mensajes fijados"
#: src/roominfo/RoomInformation.qml:170 #: src/roominfo/RoomInformation.qml:188
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Inspect Room Data" msgid "Inspect Room Data"
msgstr "Inspeccionar datos de la sala" msgstr "Inspeccionar datos de la sala"
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Space…" msgid "Leave Space…"
msgstr "Salir del espacio…" msgstr "Salir del espacio…"
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "Salir de la sala…" msgstr "Salir de la sala…"
#: src/roominfo/RoomInformation.qml:204 #: src/roominfo/RoomInformation.qml:222
#, kde-format #, kde-format
msgid "Members" msgid "Members"
msgstr "Miembros" msgstr "Miembros"
#: src/roominfo/RoomInformation.qml:219 src/spaces/SpaceHomePage.qml:85 #: src/roominfo/RoomInformation.qml:237 src/spaces/SpaceHomePage.qml:85
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Invite a User" msgid "Invite a User"
msgstr "Invitar a un usuario" msgstr "Invitar a un usuario"
#: src/roominfo/RoomInformation.qml:223 #: src/roominfo/RoomInformation.qml:241
#, kde-format #, kde-format
msgid "Invite user to room" msgid "Invite user to room"
msgstr "Invitar usuario a la sala" msgstr "Invitar usuario a la sala"
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "%1 member" msgid "%1 member"
@@ -4104,7 +4098,7 @@ msgid_plural "%1 members"
msgstr[0] "%1 miembro" msgstr[0] "%1 miembro"
msgstr[1] "%1 miembros" msgstr[1] "%1 miembros"
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgid "No member count" msgid "No member count"
msgstr "Sin contador de miembros" msgstr "Sin contador de miembros"
@@ -4160,42 +4154,42 @@ msgctxt "@action:button"
msgid "Remove widget" msgid "Remove widget"
msgstr "Eliminar widget" msgstr "Eliminar widget"
#: src/rooms/ExploreComponent.qml:36 #: src/rooms/ExploreComponent.qml:38
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Rooms" msgid "Rooms"
msgstr "Salas" msgstr "Salas"
#: src/rooms/ExploreComponent.qml:48 #: src/rooms/ExploreComponent.qml:50
#, kde-format #, kde-format
msgctxt "@action" msgctxt "@action"
msgid "Search Rooms" msgid "Search Rooms"
msgstr "Buscar salas" msgstr "Buscar salas"
#: src/rooms/ExploreComponent.qml:61 #: src/rooms/ExploreComponent.qml:75
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Show Menu" msgid "Show Menu"
msgstr "Mostrar el menú" msgstr "Mostrar el menú"
#: src/rooms/ExploreComponent.qml:78 src/rooms/ExploreComponentMobile.qml:65 #: src/rooms/ExploreComponent.qml:94 src/rooms/ExploreComponentMobile.qml:65
#, kde-format #, kde-format
msgid "Find your friends" msgid "Find your friends"
msgstr "Encontrar amigos" msgstr "Encontrar amigos"
#: src/rooms/ExploreComponent.qml:83 src/rooms/ExploreComponentMobile.qml:72 #: src/rooms/ExploreComponent.qml:99 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246 #: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Find your friends" msgid "Find your friends"
msgstr "Encontrar amigos" msgstr "Encontrar amigos"
#: src/rooms/ExploreComponent.qml:88 #: src/rooms/ExploreComponent.qml:104
#, kde-format #, kde-format
msgid "Create a Room" msgid "Create a Room"
msgstr "Crear una sala" msgstr "Crear una sala"
#: src/rooms/ExploreComponent.qml:103 #: src/rooms/ExploreComponent.qml:119
#, kde-format #, kde-format
msgid "Scan a QR Code" msgid "Scan a QR Code"
msgstr "Escanear un código QR" msgstr "Escanear un código QR"
@@ -4227,13 +4221,13 @@ msgctxt "@action:button"
msgid "Create a Space" msgid "Create a Space"
msgstr "Crear un espacio" msgstr "Crear un espacio"
#: src/rooms/models/roomtreemodel.cpp:364 #: src/rooms/models/roomtreemodel.cpp:366
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "Invited you to chat" msgid "Invited you to chat"
msgstr "Le ha invitado a chatear" msgstr "Le ha invitado a chatear"
#: src/rooms/models/roomtreemodel.cpp:366 #: src/rooms/models/roomtreemodel.cpp:368
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "%1 invited you" msgid "%1 invited you"
@@ -4315,38 +4309,6 @@ msgstr "Preferencias de la sala"
#: src/rooms/RoomContextMenu.qml:154 #: src/rooms/RoomContextMenu.qml:154
#, kde-format #, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report…"
msgstr "Denunciar…"
#: src/rooms/RoomContextMenu.qml:159
#, kde-format
msgctxt "@title:dialog"
msgid "Report Room"
msgstr "Denunciar sala"
#: src/rooms/RoomContextMenu.qml:160
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this room"
msgstr "Motivo para denunciar esta sala"
#: src/rooms/RoomContextMenu.qml:162
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report"
msgstr "Denunciar"
#: src/rooms/RoomContextMenu.qml:164
#, kde-format
msgctxt "@title"
msgid "Report Room"
msgstr "Denunciar sala"
#: src/rooms/RoomContextMenu.qml:174
#, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "Salir de la sala…" msgstr "Salir de la sala…"
@@ -4410,13 +4372,13 @@ msgctxt "@action:button"
msgid "Search in friend directory" msgid "Search in friend directory"
msgstr "Buscar en el directorio de amigos" msgstr "Buscar en el directorio de amigos"
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Collapse <section name>" msgctxt "Collapse <section name>"
msgid "Collapse %1" msgid "Collapse %1"
msgstr "Contraer %1" msgstr "Contraer %1"
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Expand <section name" msgctxt "Expand <section name"
msgid "Expand %1" msgid "Expand %1"
@@ -7071,19 +7033,19 @@ msgctxt "@info text-to-speech %1 is author %2 is message text"
msgid "%1 said %2" msgid "%1 said %2"
msgstr "%1 dijo %2" msgstr "%1 dijo %2"
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Unpin' as in 'Unpin this message'" msgctxt "@action:button 'Unpin' as in 'Unpin this message'"
msgid "Unpin" msgid "Unpin"
msgstr "No fijar" msgstr "No fijar"
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Pin' as in 'Pin the message in the room'" msgctxt "@action:button 'Pin' as in 'Pin the message in the room'"
msgid "Pin" msgid "Pin"
msgstr "Fijar" msgstr "Fijar"
#: src/timeline/DelegateContextMenu.qml:415 #: src/timeline/DelegateContextMenu.qml:416
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "View Source" msgid "View Source"
@@ -7153,31 +7115,31 @@ msgstr ""
"Este es el inicio del chat. No hay mensajes en el historial antes de este " "Este es el inicio del chat. No hay mensajes en el historial antes de este "
"punto." "punto."
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to first unread message" msgid "Jump to first unread message"
msgstr "Saltar al primer mensaje sin leer" msgstr "Saltar al primer mensaje sin leer"
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to oldest loaded message" msgid "Jump to oldest loaded message"
msgstr "Saltar al mensaje cargado más antiguo" msgstr "Saltar al mensaje cargado más antiguo"
#: src/timeline/TimelineView.qml:245 #: src/timeline/TimelineView.qml:272
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to latest message" msgid "Jump to latest message"
msgstr "Saltar al último mensaje" msgstr "Saltar al último mensaje"
#: src/timeline/TimelineView.qml:279 #: src/timeline/TimelineView.qml:307
#, kde-format #, kde-format
msgctxt "@info:placeholder" msgctxt "@info:placeholder"
msgid "Drag items here to share them" msgid "Drag items here to share them"
msgstr "Arrastre elementos aquí para compartirlos" msgstr "Arrastre elementos aquí para compartirlos"
#: src/timeline/TimelineView.qml:304 #: src/timeline/TimelineView.qml:332
#, kde-format #, kde-format
msgctxt "Message displayed when some users are typing" msgctxt "Message displayed when some users are typing"
msgid "%2 is typing" msgid "%2 is typing"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

7002
po/ga/neochat.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: neochat\n" "Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-12-18 00:43+0000\n" "POT-Creation-Date: 2026-01-28 02:42+0000\n"
"PO-Revision-Date: 2020-11-05 23:50-0800\n" "PO-Revision-Date: 2020-11-05 23:50-0800\n"
"Last-Translator: Japanese KDE translation team <kde-jp@kde.org>\n" "Last-Translator: Japanese KDE translation team <kde-jp@kde.org>\n"
"Language-Team: Japanese <kde-jp@kde.org>\n" "Language-Team: Japanese <kde-jp@kde.org>\n"
@@ -22,127 +22,127 @@ msgctxt ""
msgid "Receiving notifications for new messages" msgid "Receiving notifications for new messages"
msgstr "" msgstr ""
#: src/app/controller.cpp:319 #: src/app/controller.cpp:316
#, kde-format #, kde-format
msgid "Receiving push notifications" msgid "Receiving push notifications"
msgstr "" msgstr ""
#: src/app/main.cpp:131 src/login/WelcomePage.qml:77 #: src/app/main.cpp:136 src/login/WelcomePage.qml:77
#, kde-format #, kde-format
msgid "NeoChat" msgid "NeoChat"
msgstr "" msgstr ""
#: src/app/main.cpp:133 #: src/app/main.cpp:138
#, kde-format #, kde-format
msgid "Chat on Matrix" msgid "Chat on Matrix"
msgstr "" msgstr ""
#: src/app/main.cpp:135 #: src/app/main.cpp:140
#, kde-format #, kde-format
msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community" msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community"
msgstr "" msgstr ""
#: src/app/main.cpp:136 #: src/app/main.cpp:141
#, kde-format #, kde-format
msgid "Carl Schwan" msgid "Carl Schwan"
msgstr "" msgstr ""
#: src/app/main.cpp:136 src/app/main.cpp:137 src/app/main.cpp:138 #: src/app/main.cpp:141 src/app/main.cpp:142 src/app/main.cpp:143
#: src/app/main.cpp:140 #: src/app/main.cpp:145
#, kde-format #, kde-format
msgid "Maintainer" msgid "Maintainer"
msgstr "" msgstr ""
#: src/app/main.cpp:137 #: src/app/main.cpp:142
#, kde-format #, kde-format
msgid "Tobias Fella" msgid "Tobias Fella"
msgstr "" msgstr ""
#: src/app/main.cpp:138 #: src/app/main.cpp:143
#, kde-format #, kde-format
msgid "James Graham" msgid "James Graham"
msgstr "" msgstr ""
#: src/app/main.cpp:139 #: src/app/main.cpp:144
#, kde-format #, kde-format
msgid "Joshua Goins" msgid "Joshua Goins"
msgstr "" msgstr ""
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Black Hat" msgid "Black Hat"
msgstr "" msgstr ""
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Original author of Spectral" msgid "Original author of Spectral"
msgstr "" msgstr ""
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Alexey Rusakov" msgid "Alexey Rusakov"
msgstr "" msgstr ""
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Maintainer of libQuotient" msgid "Maintainer of libQuotient"
msgstr "" msgstr ""
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
msgid "Your names" msgid "Your names"
msgstr "" msgstr ""
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "EMAIL OF TRANSLATORS" msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "" msgstr ""
#: src/app/main.cpp:150 #: src/app/main.cpp:155
#, kde-format #, kde-format
msgid "A Qt library to write cross-platform clients for Matrix" msgid "A Qt library to write cross-platform clients for Matrix"
msgstr "" msgstr ""
#: src/app/main.cpp:152 #: src/app/main.cpp:157
#, kde-format #, kde-format
msgctxt "<version number> (built against <possibly different version number>)" msgctxt "<version number> (built against <possibly different version number>)"
msgid "%1 (built against %2)" msgid "%1 (built against %2)"
msgstr "" msgstr ""
#: src/app/main.cpp:167 #: src/app/main.cpp:178
#, kde-format #, kde-format
msgid "Client for the matrix communication protocol" msgid "Client for the matrix communication protocol"
msgstr "" msgstr ""
#: src/app/main.cpp:168 #: src/app/main.cpp:179
#, kde-format #, kde-format
msgid "Supports matrix: url scheme" msgid "Supports matrix: url scheme"
msgstr "" msgstr ""
#: src/app/main.cpp:169 #: src/app/main.cpp:180
#, kde-format #, kde-format
msgid "Ignore all SSL Errors, e.g., unsigned certificates." msgid "Ignore all SSL Errors, e.g., unsigned certificates."
msgstr "" msgstr ""
#: src/app/main.cpp:171 #: src/app/main.cpp:182
#, kde-format #, kde-format
msgctxt "command line description" msgctxt "command line description"
msgid "Replace an existing instance" msgid "Replace an existing instance"
msgstr "" msgstr ""
#: src/app/main.cpp:174 #: src/app/main.cpp:185
#, kde-format #, kde-format
msgid "Only used for autotests" msgid "Only used for autotests"
msgstr "" msgstr ""
#: src/app/main.cpp:184 #: src/app/main.cpp:195
#, kde-format #, kde-format
msgid "Share a URL to Matrix" msgid "Share a URL to Matrix"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:386 #: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:390
#, kde-format #, kde-format
msgid "Encrypted Message" msgid "Encrypted Message"
msgstr "" msgstr ""
@@ -167,40 +167,40 @@ msgstr ""
msgid "Reply…" msgid "Reply…"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:304 #: src/app/notificationsmanager.cpp:306
#, kde-format #, kde-format
msgid "%1 invited you to a room" msgid "%1 invited you to a room"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:307 #: src/app/notificationsmanager.cpp:309
#, kde-format #, kde-format
msgid "Open this invitation in NeoChat" msgid "Open this invitation in NeoChat"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:317 #: src/app/notificationsmanager.cpp:319
#, kde-format #, kde-format
msgctxt "@action:button The thing being accepted is an invitation to chat" msgctxt "@action:button The thing being accepted is an invitation to chat"
msgid "Accept" msgid "Accept"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:318 #: src/app/notificationsmanager.cpp:320
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject" msgid "Reject"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:320 #: src/app/notificationsmanager.cpp:322
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject and Ignore User" msgid "Reject and Ignore User"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:379 #: src/app/notificationsmanager.cpp:383
#, kde-format #, kde-format
msgid "%1 (%2)" msgid "%1 (%2)"
msgstr "" msgstr ""
#: src/app/notificationsmanager.cpp:390 #: src/app/notificationsmanager.cpp:394
#, kde-format #, kde-format
msgid "Open NeoChat" msgid "Open NeoChat"
msgstr "" msgstr ""
@@ -241,7 +241,7 @@ msgctxt "@action:inmenu"
msgid "Open Developer Tools" msgid "Open Developer Tools"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:182 #: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:200
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Developer Tools" msgid "Developer Tools"
@@ -253,31 +253,31 @@ msgctxt "@action:inmenu"
msgid "Open Secret Backup" msgid "Open Secret Backup"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:83 #: src/app/qml/AccountMenu.qml:84
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Open Key Backup" msgid "Open Key Backup"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:88 #: src/app/qml/AccountMenu.qml:89
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Verify This Device" msgid "Verify This Device"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:94 src/settings/DevicesPage.qml:46 #: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:46
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Verification Request Sent" msgid "Verification Request Sent"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:47 #: src/app/qml/AccountMenu.qml:96 src/settings/DevicesPage.qml:47
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "To proceed, accept the verification request on another device." msgid "To proceed, accept the verification request on another device."
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:106 #: src/app/qml/AccountMenu.qml:107
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Logout…" msgid "Logout…"
@@ -592,31 +592,31 @@ msgctxt "@info:label 'Username' has invited you to this room at 'timestamp'."
msgid "%1 has invited you to this room at %2." msgid "%1 has invited you to this room at %2."
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:98 #: src/app/qml/InvitationView.qml:97
#, kde-format #, kde-format
msgctxt "@info:label This user invited you to chat at 'timestamp'" msgctxt "@info:label This user invited you to chat at 'timestamp'"
msgid "This user invited you to chat at %1." msgid "This user invited you to chat at %1."
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:113 #: src/app/qml/InvitationView.qml:112
#, kde-format #, kde-format
msgctxt "@action:button Accept this invite" msgctxt "@action:button Accept this invite"
msgid "Accept Invite" msgid "Accept Invite"
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:128 #: src/app/qml/InvitationView.qml:127
#, kde-format #, kde-format
msgctxt "@action:button Reject this invite" msgctxt "@action:button Reject this invite"
msgid "Reject Invite" msgid "Reject Invite"
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:142 #: src/app/qml/InvitationView.qml:141
#, kde-format #, kde-format
msgctxt "@action:button Block the user" msgctxt "@action:button Block the user"
msgid "Block %1" msgid "Block %1"
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:181 #: src/app/qml/InvitationView.qml:180
#, kde-kuit-format #, kde-kuit-format
msgctxt "" msgctxt ""
"@info:label Ensure you are referring to the same translation used for that " "@info:label Ensure you are referring to the same translation used for that "
@@ -934,7 +934,7 @@ msgctxt "@title:dialog"
msgid "Select a File" msgid "Select a File"
msgstr "" msgstr ""
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:109 #: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:125
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Scan a QR Code" msgid "Scan a QR Code"
@@ -1024,63 +1024,63 @@ msgctxt "@action:button"
msgid "Ignore" msgid "Ignore"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:87 #: src/app/qml/RoomPage.qml:95
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Join Jitsi meeting…" msgid "Join Jitsi meeting…"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Start Jitsi meeting…" msgid "Start Jitsi meeting…"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "You do not have permissions to start Jitsi meetings" msgid "You do not have permissions to start Jitsi meetings"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:129 src/app/qml/UserDetailDialog.qml:285 #: src/app/qml/RoomPage.qml:137 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:91 #: src/roominfo/RoomInformation.qml:109
#, kde-format #, kde-format
msgctxt "@action:title" msgctxt "@action:title"
msgid "Search" msgid "Search"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:142 #: src/app/qml/RoomPage.qml:150
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "This room contains official messages from your homeserver." msgid "This room contains official messages from your homeserver."
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:153 #: src/app/qml/RoomPage.qml:161
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "NeoChat is offline. Please check your network connection." msgid "NeoChat is offline. Please check your network connection."
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:213 src/roominfo/RoomInformation.qml:164 #: src/app/qml/RoomPage.qml:221 src/roominfo/RoomInformation.qml:182
#: src/roominfo/RoomPinnedMessagesPage.qml:22 #: src/roominfo/RoomPinnedMessagesPage.qml:22
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:285 #: src/app/qml/RoomPage.qml:294
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Welcome to NeoChat" msgid "Welcome to NeoChat"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:286 #: src/app/qml/RoomPage.qml:295
#, kde-format #, kde-format
msgctxt "@info:usagetip" msgctxt "@info:usagetip"
msgid "Select or join a room to get started" msgid "Select or join a room to get started"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:347 #: src/app/qml/RoomPage.qml:356
#, kde-format #, kde-format
msgctxt "@title:dialog" msgctxt "@title:dialog"
msgid "Message Source" msgid "Message Source"
@@ -1164,19 +1164,13 @@ msgctxt "@info"
msgid "Shared url for image is <a href='%1'>%1</a>" msgid "Shared url for image is <a href='%1'>%1</a>"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:16 #: src/app/qml/UnlockSSSSDialog.qml:14
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Load your encrypted messages" msgid "Load your encrypted messages"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:35 #: src/app/qml/UnlockSSSSDialog.qml:36
#, kde-format
msgctxt "@info:status"
msgid "The security key or backup passphrase was not correct."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:41
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "Encryption keys restored." msgid "Encryption keys restored."
@@ -1184,43 +1178,67 @@ msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:48 #: src/app/qml/UnlockSSSSDialog.qml:48
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@info:status"
msgid "Unlock using Security Key or Backup Passphrase" msgid "The security phrase was not correct."
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:52 #: src/app/qml/UnlockSSSSDialog.qml:54
#, kde-format
msgctxt "@title"
msgid "Unlock using Passphrase"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:58
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid "If you have a backup passphrase for this account, enter it below."
"If you have a security key or backup passphrase for this account, enter it "
"below or upload it as a file."
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:56 #: src/app/qml/UnlockSSSSDialog.qml:62
#, kde-format #, kde-format
msgctxt "@label:textbox" msgctxt "@label:textbox"
msgid "Security Key or Backup Passphrase:" msgid "Backup Password:"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:61 #: src/app/qml/UnlockSSSSDialog.qml:67 src/app/qml/UnlockSSSSDialog.qml:102
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:71
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Unlock" msgid "Unlock"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:82 #: src/app/qml/UnlockSSSSDialog.qml:79
#, kde-format
msgctxt "@title"
msgid "Unlock using Security Key"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:83
#, kde-format
msgctxt "@info"
msgid ""
"If you have a security key for this account, enter it below or upload it as "
"a file."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:87
#, kde-format
msgctxt "@label:textbox"
msgid "Security Key:"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:92
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:113
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Unlock from Cross-Signing" msgid "Unlock from Cross-Signing"
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:86 #: src/app/qml/UnlockSSSSDialog.qml:117
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid ""
@@ -1228,7 +1246,7 @@ msgid ""
"key from other devices by clicking the button below." "key from other devices by clicking the button below."
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:91 #: src/app/qml/UnlockSSSSDialog.qml:122
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Request from other Devices" msgid "Request from other Devices"
@@ -1375,38 +1393,6 @@ msgstr ""
msgid "Copy link" msgid "Copy link"
msgstr "" msgstr ""
#: src/app/qml/UserDetailDialog.qml:298
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report…"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:303
#, kde-format
msgctxt "@title:dialog"
msgid "Report User"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:304
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this user"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:306
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:308
#, kde-format
msgctxt "@title"
msgid "Report User"
msgstr ""
#: src/app/qml/UserMenu.qml:62 #: src/app/qml/UserMenu.qml:62
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -1609,22 +1595,22 @@ msgctxt "@action:button Done, we are finished with verification"
msgid "Done" msgid "Done"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:213 #: src/app/roommanager.cpp:235
#, kde-format #, kde-format
msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier" msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:430 #: src/app/roommanager.cpp:439
#, kde-format #, kde-format
msgid "Failed to join %1:<br />%2" msgid "Failed to join %1:<br />%2"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:454 #: src/app/roommanager.cpp:463
#, kde-format #, kde-format
msgid "You requested to join '%1'" msgid "You requested to join '%1'"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:458 #: src/app/roommanager.cpp:467
#, kde-format #, kde-format
msgid "Failed to request joining room<br />%1" msgid "Failed to request joining room<br />%1"
msgstr "" msgstr ""
@@ -1705,7 +1691,7 @@ msgctxt "@placeholder"
msgid "Send a message…" msgid "Send a message…"
msgstr "" msgstr ""
#: src/chatbar/ChatBar.qml:432 src/messagecontent/ChatBarComponent.qml:234 #: src/chatbar/ChatBar.qml:430 src/messagecontent/ChatBarComponent.qml:234
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Cancel reply" msgid "Cancel reply"
@@ -1907,13 +1893,19 @@ msgstr ""
#: src/devtools/FeatureFlagPage.qml:25 #: src/devtools/FeatureFlagPage.qml:25
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix 'secret backup' feature"
msgid "Secret Backup"
msgstr ""
#: src/devtools/FeatureFlagPage.qml:31
#, kde-format
msgctxt "" msgctxt ""
"@option:check Enable the matrix feature to add a phone number as a third " "@option:check Enable the matrix feature to add a phone number as a third "
"party ID" "party ID"
msgid "Add phone numbers as 3PIDs" msgid "Add phone numbers as 3PIDs"
msgstr "" msgstr ""
#: src/devtools/FeatureFlagPage.qml:34 #: src/devtools/FeatureFlagPage.qml:40
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix feature for audio and video calling" msgctxt "@option:check Enable the matrix feature for audio and video calling"
msgid "Calls" msgid "Calls"
@@ -2286,12 +2278,12 @@ msgstr ""
#: src/libneochat/eventhandler.cpp:392 #: src/libneochat/eventhandler.cpp:392
#, kde-format #, kde-format
msgid "has removed %1 from the room: %2" msgid "has put %1 out of the room: %2"
msgstr "" msgstr ""
#: src/libneochat/eventhandler.cpp:394 #: src/libneochat/eventhandler.cpp:394
#, kde-format #, kde-format
msgid "has removed %1 from the room" msgid "has put %1 out of the room"
msgstr "" msgstr ""
#: src/libneochat/eventhandler.cpp:398 #: src/libneochat/eventhandler.cpp:398
@@ -3131,7 +3123,7 @@ msgctxt "@info the person that created this room"
msgid "Creator" msgid "Creator"
msgstr "" msgstr ""
#: src/libneochat/neochatconnection.cpp:73 #: src/libneochat/neochatconnection.cpp:71
#, kde-format #, kde-format
msgid "" msgid ""
"File too large to download.<br />Contact your matrix server administrator " "File too large to download.<br />Contact your matrix server administrator "
@@ -3154,12 +3146,12 @@ msgstr ""
msgid "Space creation failed: %1" msgid "Space creation failed: %1"
msgstr "" msgstr ""
#: src/libneochat/neochatroom.cpp:1254 #: src/libneochat/neochatroom.cpp:1253
#, kde-format #, kde-format
msgid "Report sent successfully." msgid "Report sent successfully."
msgstr "" msgstr ""
#: src/libneochat/neochatroom.cpp:1619 src/libneochat/neochatroom.cpp:1627 #: src/libneochat/neochatroom.cpp:1618 src/libneochat/neochatroom.cpp:1626
#, kde-format #, kde-format
msgctxt "'Lat' and 'Lon' as in Latitude and Longitude" msgctxt "'Lat' and 'Lon' as in Latitude and Longitude"
msgid "Lat: %1, Lon: %2" msgid "Lat: %1, Lon: %2"
@@ -3632,12 +3624,12 @@ msgctxt "@action:button"
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: src/messagecontent/CodeComponent.qml:161 #: src/messagecontent/CodeComponent.qml:154
#, kde-format #, kde-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: src/messagecontent/CodeComponent.qml:173 #: src/messagecontent/CodeComponent.qml:166
#: src/messagecontent/VideoComponent.qml:374 #: src/messagecontent/VideoComponent.qml:374
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -3840,13 +3832,13 @@ msgctxt "as in 'this vote has ended'"
msgid "(Ended)" msgid "(Ended)"
msgstr "" msgstr ""
#: src/messagecontent/pollhandler.cpp:308 #: src/messagecontent/pollhandler.cpp:306
#, kde-format #, kde-format
msgctxt "%1 is the poll answer that had the most votes" msgctxt "%1 is the poll answer that had the most votes"
msgid "The poll has ended. Top answer: %1" msgid "The poll has ended. Top answer: %1"
msgstr "" msgstr ""
#: src/messagecontent/ReactionComponent.qml:90 #: src/messagecontent/ReactionComponent.qml:88
#, kde-format #, kde-format
msgctxt "@button" msgctxt "@button"
msgid "React" msgid "React"
@@ -3881,7 +3873,7 @@ msgctxt "@action:button"
msgid "Volume" msgid "Volume"
msgstr "" msgstr ""
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:145 #: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:163
#, kde-format #, kde-format
msgctxt "Locations on a map" msgctxt "Locations on a map"
msgid "Locations" msgid "Locations"
@@ -3892,18 +3884,18 @@ msgstr ""
msgid "There are no locations shared in this room." msgid "There are no locations shared in this room."
msgstr "" msgstr ""
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:49 #: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:50
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Room settings" msgid "Room settings"
msgstr "" msgstr ""
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:91 #: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:92
#, kde-format #, kde-format
msgid "Information" msgid "Information"
msgstr "" msgstr ""
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:96 #: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:97
#, kde-format #, kde-format
msgid "Media" msgid "Media"
msgstr "" msgstr ""
@@ -3920,102 +3912,102 @@ msgctxt "@action:title"
msgid "Room Information" msgid "Room Information"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:72 #: src/roominfo/RoomInformation.qml:90
#, kde-format #, kde-format
msgctxt "Room actions" msgctxt "Room actions"
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:82 #: src/roominfo/RoomInformation.qml:100
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Search Messages" msgid "Search Messages"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:99 #: src/roominfo/RoomInformation.qml:117
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Verify user" msgid "Verify user"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:123 #: src/roominfo/RoomInformation.qml:141
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Extensions" msgid "Extensions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:129 #: src/roominfo/RoomInformation.qml:147
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Extensions" msgid "Extensions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:139 #: src/roominfo/RoomInformation.qml:157
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Shared Locations" msgid "Shared Locations"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:155 #: src/roominfo/RoomInformation.qml:173
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:170 #: src/roominfo/RoomInformation.qml:188
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Inspect Room Data" msgid "Inspect Room Data"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Space…" msgid "Leave Space…"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:204 #: src/roominfo/RoomInformation.qml:222
#, kde-format #, kde-format
msgid "Members" msgid "Members"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:219 src/spaces/SpaceHomePage.qml:85 #: src/roominfo/RoomInformation.qml:237 src/spaces/SpaceHomePage.qml:85
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Invite a User" msgid "Invite a User"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:223 #: src/roominfo/RoomInformation.qml:241
#, kde-format #, kde-format
msgid "Invite user to room" msgid "Invite user to room"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "%1 member" msgid "%1 member"
msgid_plural "%1 members" msgid_plural "%1 members"
msgstr[0] "" msgstr[0] ""
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgid "No member count" msgid "No member count"
msgstr "" msgstr ""
@@ -4071,42 +4063,42 @@ msgctxt "@action:button"
msgid "Remove widget" msgid "Remove widget"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:36 #: src/rooms/ExploreComponent.qml:38
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Rooms" msgid "Rooms"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:48 #: src/rooms/ExploreComponent.qml:50
#, kde-format #, kde-format
msgctxt "@action" msgctxt "@action"
msgid "Search Rooms" msgid "Search Rooms"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:61 #: src/rooms/ExploreComponent.qml:75
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Show Menu" msgid "Show Menu"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:78 src/rooms/ExploreComponentMobile.qml:65 #: src/rooms/ExploreComponent.qml:94 src/rooms/ExploreComponentMobile.qml:65
#, kde-format #, kde-format
msgid "Find your friends" msgid "Find your friends"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:83 src/rooms/ExploreComponentMobile.qml:72 #: src/rooms/ExploreComponent.qml:99 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246 #: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Find your friends" msgid "Find your friends"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:88 #: src/rooms/ExploreComponent.qml:104
#, kde-format #, kde-format
msgid "Create a Room" msgid "Create a Room"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:103 #: src/rooms/ExploreComponent.qml:119
#, kde-format #, kde-format
msgid "Scan a QR Code" msgid "Scan a QR Code"
msgstr "" msgstr ""
@@ -4138,13 +4130,13 @@ msgctxt "@action:button"
msgid "Create a Space" msgid "Create a Space"
msgstr "" msgstr ""
#: src/rooms/models/roomtreemodel.cpp:364 #: src/rooms/models/roomtreemodel.cpp:366
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "Invited you to chat" msgid "Invited you to chat"
msgstr "" msgstr ""
#: src/rooms/models/roomtreemodel.cpp:366 #: src/rooms/models/roomtreemodel.cpp:368
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "%1 invited you" msgid "%1 invited you"
@@ -4226,38 +4218,6 @@ msgstr ""
#: src/rooms/RoomContextMenu.qml:154 #: src/rooms/RoomContextMenu.qml:154
#, kde-format #, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report…"
msgstr ""
#: src/rooms/RoomContextMenu.qml:159
#, kde-format
msgctxt "@title:dialog"
msgid "Report Room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:160
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:162
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report"
msgstr ""
#: src/rooms/RoomContextMenu.qml:164
#, kde-format
msgctxt "@title"
msgid "Report Room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:174
#, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "" msgstr ""
@@ -4321,13 +4281,13 @@ msgctxt "@action:button"
msgid "Search in friend directory" msgid "Search in friend directory"
msgstr "" msgstr ""
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Collapse <section name>" msgctxt "Collapse <section name>"
msgid "Collapse %1" msgid "Collapse %1"
msgstr "" msgstr ""
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Expand <section name" msgctxt "Expand <section name"
msgid "Expand %1" msgid "Expand %1"
@@ -6914,19 +6874,19 @@ msgctxt "@info text-to-speech %1 is author %2 is message text"
msgid "%1 said %2" msgid "%1 said %2"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Unpin' as in 'Unpin this message'" msgctxt "@action:button 'Unpin' as in 'Unpin this message'"
msgid "Unpin" msgid "Unpin"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Pin' as in 'Pin the message in the room'" msgctxt "@action:button 'Pin' as in 'Pin the message in the room'"
msgid "Pin" msgid "Pin"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:415 #: src/timeline/DelegateContextMenu.qml:416
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "View Source" msgid "View Source"
@@ -6993,31 +6953,31 @@ msgid ""
"this point." "this point."
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to first unread message" msgid "Jump to first unread message"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to oldest loaded message" msgid "Jump to oldest loaded message"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:245 #: src/timeline/TimelineView.qml:272
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to latest message" msgid "Jump to latest message"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:279 #: src/timeline/TimelineView.qml:307
#, kde-format #, kde-format
msgctxt "@info:placeholder" msgctxt "@info:placeholder"
msgid "Drag items here to share them" msgid "Drag items here to share them"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:304 #: src/timeline/TimelineView.qml:332
#, kde-format #, kde-format
msgctxt "Message displayed when some users are typing" msgctxt "Message displayed when some users are typing"
msgid "%2 is typing" msgid "%2 is typing"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: kdeorg\n" "Project-Id-Version: kdeorg\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2025-12-18 00:43+0000\n" "POT-Creation-Date: 2026-01-28 02:42+0000\n"
"PO-Revision-Date: 2024-04-23 19:24\n" "PO-Revision-Date: 2024-04-23 19:24\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Chinese Simplified\n" "Language-Team: Chinese Simplified\n"
@@ -14,8 +14,8 @@ msgstr ""
"X-Crowdin-Project: kdeorg\n" "X-Crowdin-Project: kdeorg\n"
"X-Crowdin-Project-ID: 269464\n" "X-Crowdin-Project-ID: 269464\n"
"X-Crowdin-Language: zh-CN\n" "X-Crowdin-Language: zh-CN\n"
"X-Crowdin-File: /kf6-trunk/messages/neochat/neochat.pot\n" "X-Crowdin-File: /kf6-stable/messages/neochat/neochat.pot\n"
"X-Crowdin-File-ID: 44721\n" "X-Crowdin-File-ID: 49732\n"
#: src/app/controller.cpp:172 #: src/app/controller.cpp:172
#, kde-format #, kde-format
@@ -25,73 +25,73 @@ msgctxt ""
msgid "Receiving notifications for new messages" msgid "Receiving notifications for new messages"
msgstr "接收新消息通知" msgstr "接收新消息通知"
#: src/app/controller.cpp:319 #: src/app/controller.cpp:316
#, kde-format #, kde-format
msgid "Receiving push notifications" msgid "Receiving push notifications"
msgstr "正在接收推送通知" msgstr "正在接收推送通知"
#: src/app/main.cpp:131 src/login/WelcomePage.qml:77 #: src/app/main.cpp:136 src/login/WelcomePage.qml:77
#, kde-format #, kde-format
msgid "NeoChat" msgid "NeoChat"
msgstr "NeoChat" msgstr "NeoChat"
#: src/app/main.cpp:133 #: src/app/main.cpp:138
#, kde-format #, kde-format
msgid "Chat on Matrix" msgid "Chat on Matrix"
msgstr "在 Matrix 上聊天" msgstr "在 Matrix 上聊天"
#: src/app/main.cpp:135 #: src/app/main.cpp:140
#, kde-format #, kde-format
msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community" msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community"
msgstr "" msgstr ""
#: src/app/main.cpp:136 #: src/app/main.cpp:141
#, kde-format #, kde-format
msgid "Carl Schwan" msgid "Carl Schwan"
msgstr "Carl Schwan" msgstr "Carl Schwan"
#: src/app/main.cpp:136 src/app/main.cpp:137 src/app/main.cpp:138 #: src/app/main.cpp:141 src/app/main.cpp:142 src/app/main.cpp:143
#: src/app/main.cpp:140 #: src/app/main.cpp:145
#, kde-format #, kde-format
msgid "Maintainer" msgid "Maintainer"
msgstr "维护人员" msgstr "维护人员"
#: src/app/main.cpp:137 #: src/app/main.cpp:142
#, kde-format #, kde-format
msgid "Tobias Fella" msgid "Tobias Fella"
msgstr "Tobias Fella" msgstr "Tobias Fella"
#: src/app/main.cpp:138 #: src/app/main.cpp:143
#, kde-format #, kde-format
msgid "James Graham" msgid "James Graham"
msgstr "James Graham" msgstr "James Graham"
#: src/app/main.cpp:139 #: src/app/main.cpp:144
#, kde-format #, kde-format
msgid "Joshua Goins" msgid "Joshua Goins"
msgstr "Joshua Goins" msgstr "Joshua Goins"
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Black Hat" msgid "Black Hat"
msgstr "Black Hat" msgstr "Black Hat"
#: src/app/main.cpp:144 #: src/app/main.cpp:149
#, kde-format #, kde-format
msgid "Original author of Spectral" msgid "Original author of Spectral"
msgstr "Spectral 的原作者" msgstr "Spectral 的原作者"
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Alexey Rusakov" msgid "Alexey Rusakov"
msgstr "Alexey Rusakov" msgstr "Alexey Rusakov"
#: src/app/main.cpp:145 #: src/app/main.cpp:150
#, kde-format #, kde-format
msgid "Maintainer of libQuotient" msgid "Maintainer of libQuotient"
msgstr "libQuotient 的维护者" msgstr "libQuotient 的维护者"
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
msgid "Your names" msgid "Your names"
@@ -99,7 +99,7 @@ msgstr ""
"KDE China (中国), Guo Yunhe (郭云鹤), Yang Boyuan (杨博远), Coelacanthus, " "KDE China (中国), Guo Yunhe (郭云鹤), Yang Boyuan (杨博远), Coelacanthus, "
"Tyson Tan (钛山), Gary Wang, Zhangzhi Hu" "Tyson Tan (钛山), Gary Wang, Zhangzhi Hu"
#: src/app/main.cpp:146 #: src/app/main.cpp:151
#, kde-format #, kde-format
msgctxt "EMAIL OF TRANSLATORS" msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
@@ -107,49 +107,49 @@ msgstr ""
"kde-china@kde.org, i@guoyunhe.me, 073plan@gmail.com, coelacanthus@kde.org, " "kde-china@kde.org, i@guoyunhe.me, 073plan@gmail.com, coelacanthus@kde.org, "
"tds00@qq.com, git@blumia.net, integral@member.fsf.org" "tds00@qq.com, git@blumia.net, integral@member.fsf.org"
#: src/app/main.cpp:150 #: src/app/main.cpp:155
#, kde-format #, kde-format
msgid "A Qt library to write cross-platform clients for Matrix" msgid "A Qt library to write cross-platform clients for Matrix"
msgstr "一个用于编写跨平台 Matrix 客户端的 Qt 库" msgstr "一个用于编写跨平台 Matrix 客户端的 Qt 库"
#: src/app/main.cpp:152 #: src/app/main.cpp:157
#, kde-format #, kde-format
msgctxt "<version number> (built against <possibly different version number>)" msgctxt "<version number> (built against <possibly different version number>)"
msgid "%1 (built against %2)" msgid "%1 (built against %2)"
msgstr "%1 (使用 %2 构建)" msgstr "%1 (使用 %2 构建)"
#: src/app/main.cpp:167 #: src/app/main.cpp:178
#, kde-format #, kde-format
msgid "Client for the matrix communication protocol" msgid "Client for the matrix communication protocol"
msgstr "Matrix 通信协议客户端" msgstr "Matrix 通信协议客户端"
#: src/app/main.cpp:168 #: src/app/main.cpp:179
#, kde-format #, kde-format
msgid "Supports matrix: url scheme" msgid "Supports matrix: url scheme"
msgstr "支持 matrixURL 协议" msgstr "支持 matrixURL 协议"
#: src/app/main.cpp:169 #: src/app/main.cpp:180
#, kde-format #, kde-format
msgid "Ignore all SSL Errors, e.g., unsigned certificates." msgid "Ignore all SSL Errors, e.g., unsigned certificates."
msgstr "忽略所有 SSL 错误,例如未签名证书。" msgstr "忽略所有 SSL 错误,例如未签名证书。"
#: src/app/main.cpp:171 #: src/app/main.cpp:182
#, kde-format #, kde-format
msgctxt "command line description" msgctxt "command line description"
msgid "Replace an existing instance" msgid "Replace an existing instance"
msgstr "" msgstr ""
#: src/app/main.cpp:174 #: src/app/main.cpp:185
#, kde-format #, kde-format
msgid "Only used for autotests" msgid "Only used for autotests"
msgstr "仅用于自动测试" msgstr "仅用于自动测试"
#: src/app/main.cpp:184 #: src/app/main.cpp:195
#, kde-format #, kde-format
msgid "Share a URL to Matrix" msgid "Share a URL to Matrix"
msgstr "分享 URL 到 Matrix" msgstr "分享 URL 到 Matrix"
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:386 #: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:390
#, kde-format #, kde-format
msgid "Encrypted Message" msgid "Encrypted Message"
msgstr "加密的消息" msgstr "加密的消息"
@@ -174,40 +174,40 @@ msgstr "回复"
msgid "Reply…" msgid "Reply…"
msgstr "回复…" msgstr "回复…"
#: src/app/notificationsmanager.cpp:304 #: src/app/notificationsmanager.cpp:306
#, kde-format #, kde-format
msgid "%1 invited you to a room" msgid "%1 invited you to a room"
msgstr "%1 邀请您加入聊天室" msgstr "%1 邀请您加入聊天室"
#: src/app/notificationsmanager.cpp:307 #: src/app/notificationsmanager.cpp:309
#, kde-format #, kde-format
msgid "Open this invitation in NeoChat" msgid "Open this invitation in NeoChat"
msgstr "在 NeoChat 中打开此邀请" msgstr "在 NeoChat 中打开此邀请"
#: src/app/notificationsmanager.cpp:317 #: src/app/notificationsmanager.cpp:319
#, kde-format #, kde-format
msgctxt "@action:button The thing being accepted is an invitation to chat" msgctxt "@action:button The thing being accepted is an invitation to chat"
msgid "Accept" msgid "Accept"
msgstr "接受" msgstr "接受"
#: src/app/notificationsmanager.cpp:318 #: src/app/notificationsmanager.cpp:320
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject" msgid "Reject"
msgstr "拒绝" msgstr "拒绝"
#: src/app/notificationsmanager.cpp:320 #: src/app/notificationsmanager.cpp:322
#, kde-format #, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat" msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject and Ignore User" msgid "Reject and Ignore User"
msgstr "拒绝并忽略用户" msgstr "拒绝并忽略用户"
#: src/app/notificationsmanager.cpp:379 #: src/app/notificationsmanager.cpp:383
#, kde-format #, kde-format
msgid "%1 (%2)" msgid "%1 (%2)"
msgstr "%1 (%2)" msgstr "%1 (%2)"
#: src/app/notificationsmanager.cpp:390 #: src/app/notificationsmanager.cpp:394
#, kde-format #, kde-format
msgid "Open NeoChat" msgid "Open NeoChat"
msgstr "打开 NeoChat" msgstr "打开 NeoChat"
@@ -248,7 +248,7 @@ msgctxt "@action:inmenu"
msgid "Open Developer Tools" msgid "Open Developer Tools"
msgstr "显示开发者工具" msgstr "显示开发者工具"
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:182 #: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:200
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Developer Tools" msgid "Developer Tools"
@@ -260,35 +260,35 @@ msgctxt "@action:inmenu"
msgid "Open Secret Backup" msgid "Open Secret Backup"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:83 #: src/app/qml/AccountMenu.qml:84
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Open Key Backup" msgid "Open Key Backup"
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:88 #: src/app/qml/AccountMenu.qml:89
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Verify This Device" msgid "Verify This Device"
msgstr "验证此设备" msgstr "验证此设备"
#: src/app/qml/AccountMenu.qml:94 src/settings/DevicesPage.qml:46 #: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:46
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Verification Request Sent" msgid "Verification Request Sent"
msgstr "验证请求已发送" msgstr "验证请求已发送"
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:47 #: src/app/qml/AccountMenu.qml:96 src/settings/DevicesPage.qml:47
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "To proceed, accept the verification request on another device." msgid "To proceed, accept the verification request on another device."
msgstr "" msgstr ""
#: src/app/qml/AccountMenu.qml:106 #: src/app/qml/AccountMenu.qml:107
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Logout…" msgid "Logout…"
msgstr "注销…" msgstr ""
#: src/app/qml/AccountSwitchDialog.qml:30 #: src/app/qml/AccountSwitchDialog.qml:30
#, kde-format #, kde-format
@@ -599,31 +599,31 @@ msgctxt "@info:label 'Username' has invited you to this room at 'timestamp'."
msgid "%1 has invited you to this room at %2." msgid "%1 has invited you to this room at %2."
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:98 #: src/app/qml/InvitationView.qml:97
#, kde-format #, kde-format
msgctxt "@info:label This user invited you to chat at 'timestamp'" msgctxt "@info:label This user invited you to chat at 'timestamp'"
msgid "This user invited you to chat at %1." msgid "This user invited you to chat at %1."
msgstr "" msgstr ""
#: src/app/qml/InvitationView.qml:113 #: src/app/qml/InvitationView.qml:112
#, kde-format #, kde-format
msgctxt "@action:button Accept this invite" msgctxt "@action:button Accept this invite"
msgid "Accept Invite" msgid "Accept Invite"
msgstr "接受邀请" msgstr "接受邀请"
#: src/app/qml/InvitationView.qml:128 #: src/app/qml/InvitationView.qml:127
#, kde-format #, kde-format
msgctxt "@action:button Reject this invite" msgctxt "@action:button Reject this invite"
msgid "Reject Invite" msgid "Reject Invite"
msgstr "拒绝邀请" msgstr "拒绝邀请"
#: src/app/qml/InvitationView.qml:142 #: src/app/qml/InvitationView.qml:141
#, kde-format #, kde-format
msgctxt "@action:button Block the user" msgctxt "@action:button Block the user"
msgid "Block %1" msgid "Block %1"
msgstr "屏蔽 %1" msgstr "屏蔽 %1"
#: src/app/qml/InvitationView.qml:181 #: src/app/qml/InvitationView.qml:180
#, kde-kuit-format #, kde-kuit-format
msgctxt "" msgctxt ""
"@info:label Ensure you are referring to the same translation used for that " "@info:label Ensure you are referring to the same translation used for that "
@@ -941,7 +941,7 @@ msgctxt "@title:dialog"
msgid "Select a File" msgid "Select a File"
msgstr "选择文件" msgstr "选择文件"
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:109 #: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:125
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Scan a QR Code" msgid "Scan a QR Code"
@@ -1031,63 +1031,63 @@ msgctxt "@action:button"
msgid "Ignore" msgid "Ignore"
msgstr "忽略" msgstr "忽略"
#: src/app/qml/RoomPage.qml:87 #: src/app/qml/RoomPage.qml:95
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Join Jitsi meeting…" msgid "Join Jitsi meeting…"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Start Jitsi meeting…" msgid "Start Jitsi meeting…"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:90 #: src/app/qml/RoomPage.qml:98
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "You do not have permissions to start Jitsi meetings" msgid "You do not have permissions to start Jitsi meetings"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:129 src/app/qml/UserDetailDialog.qml:285 #: src/app/qml/RoomPage.qml:137 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:91 #: src/roominfo/RoomInformation.qml:109
#, kde-format #, kde-format
msgctxt "@action:title" msgctxt "@action:title"
msgid "Search" msgid "Search"
msgstr "搜索" msgstr "搜索"
#: src/app/qml/RoomPage.qml:142 #: src/app/qml/RoomPage.qml:150
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "This room contains official messages from your homeserver." msgid "This room contains official messages from your homeserver."
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:153 #: src/app/qml/RoomPage.qml:161
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "NeoChat is offline. Please check your network connection." msgid "NeoChat is offline. Please check your network connection."
msgstr "NeoChat 处于离线状态。请检查您的网络连接。" msgstr "NeoChat 处于离线状态。请检查您的网络连接。"
#: src/app/qml/RoomPage.qml:213 src/roominfo/RoomInformation.qml:164 #: src/app/qml/RoomPage.qml:221 src/roominfo/RoomInformation.qml:182
#: src/roominfo/RoomPinnedMessagesPage.qml:22 #: src/roominfo/RoomPinnedMessagesPage.qml:22
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:285 #: src/app/qml/RoomPage.qml:294
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Welcome to NeoChat" msgid "Welcome to NeoChat"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:286 #: src/app/qml/RoomPage.qml:295
#, kde-format #, kde-format
msgctxt "@info:usagetip" msgctxt "@info:usagetip"
msgid "Select or join a room to get started" msgid "Select or join a room to get started"
msgstr "" msgstr ""
#: src/app/qml/RoomPage.qml:347 #: src/app/qml/RoomPage.qml:356
#, kde-format #, kde-format
msgctxt "@title:dialog" msgctxt "@title:dialog"
msgid "Message Source" msgid "Message Source"
@@ -1171,19 +1171,13 @@ msgctxt "@info"
msgid "Shared url for image is <a href='%1'>%1</a>" msgid "Shared url for image is <a href='%1'>%1</a>"
msgstr "此图像的分享 URL 为 <a href='%1'>%1</a>" msgstr "此图像的分享 URL 为 <a href='%1'>%1</a>"
#: src/app/qml/UnlockSSSSDialog.qml:16 #: src/app/qml/UnlockSSSSDialog.qml:14
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Load your encrypted messages" msgid "Load your encrypted messages"
msgstr "加载您的加密消息" msgstr "加载您的加密消息"
#: src/app/qml/UnlockSSSSDialog.qml:35 #: src/app/qml/UnlockSSSSDialog.qml:36
#, kde-format
msgctxt "@info:status"
msgid "The security key or backup passphrase was not correct."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:41
#, kde-format #, kde-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "Encryption keys restored." msgid "Encryption keys restored."
@@ -1191,43 +1185,67 @@ msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:48 #: src/app/qml/UnlockSSSSDialog.qml:48
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@info:status"
msgid "Unlock using Security Key or Backup Passphrase" msgid "The security phrase was not correct."
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:52 #: src/app/qml/UnlockSSSSDialog.qml:54
#, kde-format
msgctxt "@title"
msgid "Unlock using Passphrase"
msgstr "使用密码解锁"
#: src/app/qml/UnlockSSSSDialog.qml:58
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid "If you have a backup passphrase for this account, enter it below."
"If you have a security key or backup passphrase for this account, enter it "
"below or upload it as a file."
msgstr "" msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:56 #: src/app/qml/UnlockSSSSDialog.qml:62
#, kde-format #, kde-format
msgctxt "@label:textbox" msgctxt "@label:textbox"
msgid "Security Key or Backup Passphrase:" msgid "Backup Password:"
msgstr "" msgstr "备份密码:"
#: src/app/qml/UnlockSSSSDialog.qml:61 #: src/app/qml/UnlockSSSSDialog.qml:67 src/app/qml/UnlockSSSSDialog.qml:102
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr "从文件上传"
#: src/app/qml/UnlockSSSSDialog.qml:71
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Unlock" msgid "Unlock"
msgstr "解锁" msgstr "解锁"
#: src/app/qml/UnlockSSSSDialog.qml:82 #: src/app/qml/UnlockSSSSDialog.qml:79
#, kde-format
msgctxt "@title"
msgid "Unlock using Security Key"
msgstr "使用安全密钥解锁"
#: src/app/qml/UnlockSSSSDialog.qml:83
#, kde-format
msgctxt "@info"
msgid ""
"If you have a security key for this account, enter it below or upload it as "
"a file."
msgstr "如果您拥有此账户的安全密钥,请在下方输入或作为文件上传。"
#: src/app/qml/UnlockSSSSDialog.qml:87
#, kde-format
msgctxt "@label:textbox"
msgid "Security Key:"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:92
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr "从文件上传"
#: src/app/qml/UnlockSSSSDialog.qml:113
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Unlock from Cross-Signing" msgid "Unlock from Cross-Signing"
msgstr "使用交叉签名解锁" msgstr "使用交叉签名解锁"
#: src/app/qml/UnlockSSSSDialog.qml:86 #: src/app/qml/UnlockSSSSDialog.qml:117
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "" msgid ""
@@ -1237,7 +1255,7 @@ msgstr ""
"如果您以前曾验证过此设备,您可以通过点击下面的按钮来尝试从其他设备加载备份密" "如果您以前曾验证过此设备,您可以通过点击下面的按钮来尝试从其他设备加载备份密"
"钥。" "钥。"
#: src/app/qml/UnlockSSSSDialog.qml:91 #: src/app/qml/UnlockSSSSDialog.qml:122
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Request from other Devices" msgid "Request from other Devices"
@@ -1384,38 +1402,6 @@ msgstr ""
msgid "Copy link" msgid "Copy link"
msgstr "复制链接" msgstr "复制链接"
#: src/app/qml/UserDetailDialog.qml:298
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report…"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:303
#, kde-format
msgctxt "@title:dialog"
msgid "Report User"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:304
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this user"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:306
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this user to the administrators'"
msgid "Report"
msgstr ""
#: src/app/qml/UserDetailDialog.qml:308
#, kde-format
msgctxt "@title"
msgid "Report User"
msgstr ""
#: src/app/qml/UserMenu.qml:62 #: src/app/qml/UserMenu.qml:62
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -1621,22 +1607,22 @@ msgctxt "@action:button Done, we are finished with verification"
msgid "Done" msgid "Done"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:213 #: src/app/roommanager.cpp:235
#, kde-format #, kde-format
msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier" msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:430 #: src/app/roommanager.cpp:439
#, kde-format #, kde-format
msgid "Failed to join %1:<br />%2" msgid "Failed to join %1:<br />%2"
msgstr "" msgstr ""
#: src/app/roommanager.cpp:454 #: src/app/roommanager.cpp:463
#, kde-format #, kde-format
msgid "You requested to join '%1'" msgid "You requested to join '%1'"
msgstr "您请求加入 '%1'" msgstr "您请求加入 '%1'"
#: src/app/roommanager.cpp:458 #: src/app/roommanager.cpp:467
#, kde-format #, kde-format
msgid "Failed to request joining room<br />%1" msgid "Failed to request joining room<br />%1"
msgstr "加入聊天室 %1 失败" msgstr "加入聊天室 %1 失败"
@@ -1717,7 +1703,7 @@ msgctxt "@placeholder"
msgid "Send a message…" msgid "Send a message…"
msgstr "发送一条消息..." msgstr "发送一条消息..."
#: src/chatbar/ChatBar.qml:432 src/messagecontent/ChatBarComponent.qml:234 #: src/chatbar/ChatBar.qml:430 src/messagecontent/ChatBarComponent.qml:234
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Cancel reply" msgid "Cancel reply"
@@ -1920,13 +1906,19 @@ msgstr ""
#: src/devtools/FeatureFlagPage.qml:25 #: src/devtools/FeatureFlagPage.qml:25
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix 'secret backup' feature"
msgid "Secret Backup"
msgstr ""
#: src/devtools/FeatureFlagPage.qml:31
#, kde-format
msgctxt "" msgctxt ""
"@option:check Enable the matrix feature to add a phone number as a third " "@option:check Enable the matrix feature to add a phone number as a third "
"party ID" "party ID"
msgid "Add phone numbers as 3PIDs" msgid "Add phone numbers as 3PIDs"
msgstr "" msgstr ""
#: src/devtools/FeatureFlagPage.qml:34 #: src/devtools/FeatureFlagPage.qml:40
#, kde-format #, kde-format
msgctxt "@option:check Enable the matrix feature for audio and video calling" msgctxt "@option:check Enable the matrix feature for audio and video calling"
msgid "Calls" msgid "Calls"
@@ -2299,12 +2291,12 @@ msgstr "离开聊天室"
#: src/libneochat/eventhandler.cpp:392 #: src/libneochat/eventhandler.cpp:392
#, kde-format #, kde-format
msgid "has removed %1 from the room: %2" msgid "has put %1 out of the room: %2"
msgstr "" msgstr "将 %1 移出了聊天室:%2"
#: src/libneochat/eventhandler.cpp:394 #: src/libneochat/eventhandler.cpp:394
#, kde-format #, kde-format
msgid "has removed %1 from the room" msgid "has put %1 out of the room"
msgstr "" msgstr ""
#: src/libneochat/eventhandler.cpp:398 #: src/libneochat/eventhandler.cpp:398
@@ -3144,7 +3136,7 @@ msgctxt "@info the person that created this room"
msgid "Creator" msgid "Creator"
msgstr "" msgstr ""
#: src/libneochat/neochatconnection.cpp:73 #: src/libneochat/neochatconnection.cpp:71
#, kde-format #, kde-format
msgid "" msgid ""
"File too large to download.<br />Contact your matrix server administrator " "File too large to download.<br />Contact your matrix server administrator "
@@ -3167,12 +3159,12 @@ msgstr "聊天室创建失败:%1"
msgid "Space creation failed: %1" msgid "Space creation failed: %1"
msgstr "空间创建失败:%1" msgstr "空间创建失败:%1"
#: src/libneochat/neochatroom.cpp:1254 #: src/libneochat/neochatroom.cpp:1253
#, kde-format #, kde-format
msgid "Report sent successfully." msgid "Report sent successfully."
msgstr "举报成功。" msgstr "举报成功。"
#: src/libneochat/neochatroom.cpp:1619 src/libneochat/neochatroom.cpp:1627 #: src/libneochat/neochatroom.cpp:1618 src/libneochat/neochatroom.cpp:1626
#, kde-format #, kde-format
msgctxt "'Lat' and 'Lon' as in Latitude and Longitude" msgctxt "'Lat' and 'Lon' as in Latitude and Longitude"
msgid "Lat: %1, Lon: %2" msgid "Lat: %1, Lon: %2"
@@ -3646,12 +3638,12 @@ msgctxt "@action:button"
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
#: src/messagecontent/CodeComponent.qml:161 #: src/messagecontent/CodeComponent.qml:154
#, kde-format #, kde-format
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "复制到剪贴板" msgstr "复制到剪贴板"
#: src/messagecontent/CodeComponent.qml:173 #: src/messagecontent/CodeComponent.qml:166
#: src/messagecontent/VideoComponent.qml:374 #: src/messagecontent/VideoComponent.qml:374
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
@@ -3854,13 +3846,13 @@ msgctxt "as in 'this vote has ended'"
msgid "(Ended)" msgid "(Ended)"
msgstr "(已结束)" msgstr "(已结束)"
#: src/messagecontent/pollhandler.cpp:308 #: src/messagecontent/pollhandler.cpp:306
#, kde-format #, kde-format
msgctxt "%1 is the poll answer that had the most votes" msgctxt "%1 is the poll answer that had the most votes"
msgid "The poll has ended. Top answer: %1" msgid "The poll has ended. Top answer: %1"
msgstr "" msgstr ""
#: src/messagecontent/ReactionComponent.qml:90 #: src/messagecontent/ReactionComponent.qml:88
#, kde-format #, kde-format
msgctxt "@button" msgctxt "@button"
msgid "React" msgid "React"
@@ -3895,7 +3887,7 @@ msgctxt "@action:button"
msgid "Volume" msgid "Volume"
msgstr "音量" msgstr "音量"
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:145 #: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:163
#, kde-format #, kde-format
msgctxt "Locations on a map" msgctxt "Locations on a map"
msgid "Locations" msgid "Locations"
@@ -3906,18 +3898,18 @@ msgstr "位置"
msgid "There are no locations shared in this room." msgid "There are no locations shared in this room."
msgstr "此聊天室中没有共享位置。" msgstr "此聊天室中没有共享位置。"
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:49 #: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:50
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Room settings" msgid "Room settings"
msgstr "聊天室设置" msgstr "聊天室设置"
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:91 #: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:92
#, kde-format #, kde-format
msgid "Information" msgid "Information"
msgstr "信息" msgstr "信息"
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:96 #: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:97
#, kde-format #, kde-format
msgid "Media" msgid "Media"
msgstr "媒体" msgstr "媒体"
@@ -3934,102 +3926,102 @@ msgctxt "@action:title"
msgid "Room Information" msgid "Room Information"
msgstr "聊天室信息" msgstr "聊天室信息"
#: src/roominfo/RoomInformation.qml:72 #: src/roominfo/RoomInformation.qml:90
#, kde-format #, kde-format
msgctxt "Room actions" msgctxt "Room actions"
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:82 #: src/roominfo/RoomInformation.qml:100
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Search Messages" msgid "Search Messages"
msgstr "搜索消息" msgstr "搜索消息"
#: src/roominfo/RoomInformation.qml:99 #: src/roominfo/RoomInformation.qml:117
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Verify user" msgid "Verify user"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:110 #: src/roominfo/RoomInformation.qml:128
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:123 #: src/roominfo/RoomInformation.qml:141
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Extensions" msgid "Extensions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:129 #: src/roominfo/RoomInformation.qml:147
#, kde-format #, kde-format
msgctxt "@title:window" msgctxt "@title:window"
msgid "Extensions" msgid "Extensions"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:139 #: src/roominfo/RoomInformation.qml:157
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Shared Locations" msgid "Shared Locations"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:155 #: src/roominfo/RoomInformation.qml:173
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Pinned Messages" msgid "Pinned Messages"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:170 #: src/roominfo/RoomInformation.qml:188
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Inspect Room Data" msgid "Inspect Room Data"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Space…" msgid "Leave Space…"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:191 #: src/roominfo/RoomInformation.qml:209
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "" msgstr ""
#: src/roominfo/RoomInformation.qml:204 #: src/roominfo/RoomInformation.qml:222
#, kde-format #, kde-format
msgid "Members" msgid "Members"
msgstr "成员" msgstr "成员"
#: src/roominfo/RoomInformation.qml:219 src/spaces/SpaceHomePage.qml:85 #: src/roominfo/RoomInformation.qml:237 src/spaces/SpaceHomePage.qml:85
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Invite a User" msgid "Invite a User"
msgstr "邀请用户" msgstr "邀请用户"
#: src/roominfo/RoomInformation.qml:223 #: src/roominfo/RoomInformation.qml:241
#, kde-format #, kde-format
msgid "Invite user to room" msgid "Invite user to room"
msgstr "邀请用户到聊天室" msgstr "邀请用户到聊天室"
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgctxt "@info" msgctxt "@info"
msgid "%1 member" msgid "%1 member"
msgid_plural "%1 members" msgid_plural "%1 members"
msgstr[0] "%1 位成员" msgstr[0] "%1 位成员"
#: src/roominfo/RoomInformation.qml:230 #: src/roominfo/RoomInformation.qml:248
#, kde-format #, kde-format
msgid "No member count" msgid "No member count"
msgstr "无成员计数" msgstr "无成员计数"
@@ -4085,42 +4077,42 @@ msgctxt "@action:button"
msgid "Remove widget" msgid "Remove widget"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:36 #: src/rooms/ExploreComponent.qml:38
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Rooms" msgid "Rooms"
msgstr "聊天室" msgstr "聊天室"
#: src/rooms/ExploreComponent.qml:48 #: src/rooms/ExploreComponent.qml:50
#, kde-format #, kde-format
msgctxt "@action" msgctxt "@action"
msgid "Search Rooms" msgid "Search Rooms"
msgstr "" msgstr ""
#: src/rooms/ExploreComponent.qml:61 #: src/rooms/ExploreComponent.qml:75
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Show Menu" msgid "Show Menu"
msgstr "显示菜单" msgstr "显示菜单"
#: src/rooms/ExploreComponent.qml:78 src/rooms/ExploreComponentMobile.qml:65 #: src/rooms/ExploreComponent.qml:94 src/rooms/ExploreComponentMobile.qml:65
#, kde-format #, kde-format
msgid "Find your friends" msgid "Find your friends"
msgstr "查找好友" msgstr "查找好友"
#: src/rooms/ExploreComponent.qml:83 src/rooms/ExploreComponentMobile.qml:72 #: src/rooms/ExploreComponent.qml:99 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246 #: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246
#, kde-format #, kde-format
msgctxt "@title" msgctxt "@title"
msgid "Find your friends" msgid "Find your friends"
msgstr "查找好友" msgstr "查找好友"
#: src/rooms/ExploreComponent.qml:88 #: src/rooms/ExploreComponent.qml:104
#, kde-format #, kde-format
msgid "Create a Room" msgid "Create a Room"
msgstr "创建聊天室" msgstr "创建聊天室"
#: src/rooms/ExploreComponent.qml:103 #: src/rooms/ExploreComponent.qml:119
#, kde-format #, kde-format
msgid "Scan a QR Code" msgid "Scan a QR Code"
msgstr "扫描二维码" msgstr "扫描二维码"
@@ -4152,13 +4144,13 @@ msgctxt "@action:button"
msgid "Create a Space" msgid "Create a Space"
msgstr "创建空间" msgstr "创建空间"
#: src/rooms/models/roomtreemodel.cpp:364 #: src/rooms/models/roomtreemodel.cpp:366
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "Invited you to chat" msgid "Invited you to chat"
msgstr "" msgstr ""
#: src/rooms/models/roomtreemodel.cpp:366 #: src/rooms/models/roomtreemodel.cpp:368
#, kde-format #, kde-format
msgctxt "@info:label" msgctxt "@info:label"
msgid "%1 invited you" msgid "%1 invited you"
@@ -4240,38 +4232,6 @@ msgstr "聊天室设置"
#: src/rooms/RoomContextMenu.qml:154 #: src/rooms/RoomContextMenu.qml:154
#, kde-format #, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report…"
msgstr ""
#: src/rooms/RoomContextMenu.qml:159
#, kde-format
msgctxt "@title:dialog"
msgid "Report Room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:160
#, kde-format
msgctxt "@info:placeholder"
msgid "Reason for reporting this room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:162
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this room to the administrators'"
msgid "Report"
msgstr ""
#: src/rooms/RoomContextMenu.qml:164
#, kde-format
msgctxt "@title"
msgid "Report Room"
msgstr ""
#: src/rooms/RoomContextMenu.qml:174
#, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Leave Room…" msgid "Leave Room…"
msgstr "" msgstr ""
@@ -4335,13 +4295,13 @@ msgctxt "@action:button"
msgid "Search in friend directory" msgid "Search in friend directory"
msgstr "" msgstr ""
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Collapse <section name>" msgctxt "Collapse <section name>"
msgid "Collapse %1" msgid "Collapse %1"
msgstr "折叠 %1" msgstr "折叠 %1"
#: src/rooms/RoomTreeSection.qml:59 #: src/rooms/RoomTreeSection.qml:61
#, kde-format #, kde-format
msgctxt "Expand <section name" msgctxt "Expand <section name"
msgid "Expand %1" msgid "Expand %1"
@@ -6932,19 +6892,19 @@ msgctxt "@info text-to-speech %1 is author %2 is message text"
msgid "%1 said %2" msgid "%1 said %2"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Unpin' as in 'Unpin this message'" msgctxt "@action:button 'Unpin' as in 'Unpin this message'"
msgid "Unpin" msgid "Unpin"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:402 #: src/timeline/DelegateContextMenu.qml:403
#, kde-format #, kde-format
msgctxt "@action:button 'Pin' as in 'Pin the message in the room'" msgctxt "@action:button 'Pin' as in 'Pin the message in the room'"
msgid "Pin" msgid "Pin"
msgstr "" msgstr ""
#: src/timeline/DelegateContextMenu.qml:415 #: src/timeline/DelegateContextMenu.qml:416
#, kde-format #, kde-format
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "View Source" msgid "View Source"
@@ -7011,31 +6971,31 @@ msgid ""
"this point." "this point."
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to first unread message" msgid "Jump to first unread message"
msgstr "跳转到第一条未读消息" msgstr "跳转到第一条未读消息"
#: src/timeline/TimelineView.qml:214 #: src/timeline/TimelineView.qml:241
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to oldest loaded message" msgid "Jump to oldest loaded message"
msgstr "" msgstr ""
#: src/timeline/TimelineView.qml:245 #: src/timeline/TimelineView.qml:272
#, kde-format #, kde-format
msgctxt "@action:button" msgctxt "@action:button"
msgid "Jump to latest message" msgid "Jump to latest message"
msgstr "跳转到最新消息" msgstr "跳转到最新消息"
#: src/timeline/TimelineView.qml:279 #: src/timeline/TimelineView.qml:307
#, kde-format #, kde-format
msgctxt "@info:placeholder" msgctxt "@info:placeholder"
msgid "Drag items here to share them" msgid "Drag items here to share them"
msgstr "拖动项目到此处来分享" msgstr "拖动项目到此处来分享"
#: src/timeline/TimelineView.qml:304 #: src/timeline/TimelineView.qml:332
#, kde-format #, kde-format
msgctxt "Message displayed when some users are typing" msgctxt "Message displayed when some users are typing"
msgid "%2 is typing" msgid "%2 is typing"

File diff suppressed because it is too large Load Diff

View File

@@ -153,6 +153,7 @@ target_include_directories(neochat-app PRIVATE ${CMAKE_BINARY_DIR})
target_link_libraries(neochat-app PRIVATE target_link_libraries(neochat-app PRIVATE
neochat neochat
KF6::IconThemes
) )
ecm_add_app_icon(NEOCHAT_ICON ICONS ${CMAKE_SOURCE_DIR}/128-logo.png) ecm_add_app_icon(NEOCHAT_ICON ICONS ${CMAKE_SOURCE_DIR}/128-logo.png)

View File

@@ -246,10 +246,7 @@ void Controller::initActiveConnection(NeoChatConnection *oldConnection, NeoChatC
if (newConnection) { if (newConnection) {
connect(newConnection, &NeoChatConnection::errorOccured, this, &Controller::errorOccured); connect(newConnection, &NeoChatConnection::errorOccured, this, &Controller::errorOccured);
connect(newConnection, &NeoChatConnection::badgeNotificationCountChanged, this, &Controller::updateBadgeNotificationCount); connect(newConnection, &NeoChatConnection::badgeNotificationCountChanged, this, &Controller::updateBadgeNotificationCount);
// Refresh and update manually, in case we init too late for the badge count to actually change.
newConnection->refreshBadgeNotificationCount(); newConnection->refreshBadgeNotificationCount();
updateBadgeNotificationCount(newConnection->badgeNotificationCount());
} }
Q_EMIT activeConnectionChanged(newConnection); Q_EMIT activeConnectionChanged(newConnection);
} }

View File

@@ -33,6 +33,7 @@
#include <KWindowSystem> #include <KWindowSystem>
#endif #endif
#include <KIconTheme>
#include <KLocalizedQmlContext> #include <KLocalizedQmlContext>
#include <KLocalizedString> #include <KLocalizedString>
#include <KirigamiApp> #include <KirigamiApp>
@@ -102,6 +103,10 @@ int main(int argc, char *argv[])
{ {
QNetworkProxyFactory::setUseSystemConfiguration(true); QNetworkProxyFactory::setUseSystemConfiguration(true);
// We currently need to do this ourselves,
// KirigamiApp currently called this after constructing the app which breaks icons on Windows.
KIconTheme::initTheme();
#ifdef HAVE_WEBVIEW #ifdef HAVE_WEBVIEW
QtWebView::initialize(); QtWebView::initialize();
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts); QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
@@ -161,6 +166,12 @@ int main(int argc, char *argv[])
Connection::setEncryptionDefault(true); Connection::setEncryptionDefault(true);
Connection::setDirectChatEncryptionDefault(true); Connection::setDirectChatEncryptionDefault(true);
#ifdef NEOCHAT_FLATPAK
// Copy over the included FontConfig configuration to the
// app's config dir:
QFile::copy(u"/app/etc/fonts/conf.d/99-noto-mono-color-emoji.conf"_s, u"/var/config/fontconfig/conf.d/99-noto-mono-color-emoji.conf"_s);
#endif
ColorSchemer colorScheme; ColorSchemer colorScheme;
QCommandLineParser parser; QCommandLineParser parser;

View File

@@ -211,6 +211,10 @@
<label>Enable threads</label> <label>Enable threads</label>
<default>false</default> <default>false</default>
</entry> </entry>
<entry name="SecretBackup" type="bool">
<label>Enable secret backup</label>
<default>false</default>
</entry>
<entry name="Phone3PId" type="bool"> <entry name="Phone3PId" type="bool">
<label>Enable add phone numbers as 3PIDs</label> <label>Enable add phone numbers as 3PIDs</label>
<default>false</default> <default>false</default>

View File

@@ -216,12 +216,12 @@ void NotificationsManager::postNotification(NeoChatRoom *room,
} }
}); });
notification->setTitle(room->displayName());
QString entry; QString entry;
if (sender == room->displayName()) { if (room->isDirectChat()) {
notification->setTitle(sender);
entry = text.toHtmlEscaped(); entry = text.toHtmlEscaped();
} else { } else {
notification->setTitle(room->displayName());
entry = i18n("%1: %2", sender, text.toHtmlEscaped()); entry = i18n("%1: %2", sender, text.toHtmlEscaped());
} }
@@ -253,7 +253,9 @@ void NotificationsManager::postNotification(NeoChatRoom *room,
notification->setReplyAction(std::move(replyAction)); notification->setReplyAction(std::move(replyAction));
} }
notification->setHint(u"x-kde-origin-name"_s, room->localMember().id()); if (Controller::instance().accounts()->rowCount() > 1) {
notification->setHint(u"x-kde-origin-name"_s, room->localMember().id());
}
notification->sendEvent(); notification->sendEvent();
} }
@@ -347,7 +349,9 @@ void NotificationsManager::doPostInviteNotification(QPointer<NeoChatRoom> room)
m_invitations.remove(room->id()); m_invitations.remove(room->id());
}); });
notification->setHint(u"x-kde-origin-name"_s, room->localMember().id()); if (Controller::instance().accounts()->rowCount() > 1) {
notification->setHint(u"x-kde-origin-name"_s, room->localMember().id());
}
notification->sendEvent(); notification->sendEvent();
} }

View File

@@ -79,6 +79,7 @@ KirigamiComponents.ConvergentContextMenu {
Kirigami.Action { Kirigami.Action {
text: i18nc("@action:inmenu", "Open Secret Backup") text: i18nc("@action:inmenu", "Open Secret Backup")
icon.name: "unlock" icon.name: "unlock"
visible: NeoChatConfig.secretBackup
onTriggered: root.window.pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'UnlockSSSSDialog'), {}, { onTriggered: root.window.pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'UnlockSSSSDialog'), {}, {
title: i18nc("@title:window", "Open Key Backup") title: i18nc("@title:window", "Open Key Backup")
}) })

View File

@@ -54,12 +54,6 @@ ColumnLayout {
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
} }
Kirigami.Heading {
text: root.currentRoom.displayName
Layout.alignment: Qt.AlignHCenter
}
Kirigami.SelectableLabel { Kirigami.SelectableLabel {
Layout.fillWidth: true Layout.fillWidth: true
font: Kirigami.Theme.smallFont font: Kirigami.Theme.smallFont
@@ -67,7 +61,12 @@ ColumnLayout {
visible: root.currentRoom && root.currentRoom.canonicalAlias visible: root.currentRoom && root.currentRoom.canonicalAlias
text: root.currentRoom && root.currentRoom.canonicalAlias ? root.currentRoom.canonicalAlias : "" text: root.currentRoom && root.currentRoom.canonicalAlias ? root.currentRoom.canonicalAlias : ""
color: Kirigami.Theme.disabledTextColor color: Kirigami.Theme.disabledTextColor
horizontalAlignment: Text.AlignHCenter }
Kirigami.Heading {
text: root.currentRoom.displayName
Layout.alignment: Qt.AlignHCenter
} }
} }
} }

View File

@@ -23,45 +23,13 @@ Components.AlbumMaximizeComponent {
*/ */
required property NeoChatRoom currentRoom required property NeoChatRoom currentRoom
readonly property string currentEventId: { readonly property string currentEventId: model.data(model.index((content as ListView).currentIndex, 0), TimelineMessageModel.EventIdRole)
const idx = (content as ListView).currentIndex;
if (idx === -1) { readonly property var currentAuthor: model.data(model.index((content as ListView).currentIndex, 0), TimelineMessageModel.AuthorRole)
return ""
}
return model.data(model.index(idx, 0), TimelineMessageModel.EventIdRole) readonly property var currentTime: model.data(model.index((content as ListView).currentIndex, 0), TimelineMessageModel.TimeRole)
}
readonly property var currentAuthor: { readonly property var currentProgressInfo: model.data(model.index((content as ListView).currentIndex, 0), TimelineMessageModel.ProgressInfoRole)
const idx = (content as ListView).currentIndex;
if (idx === -1) {
return {}
}
return model.data(model.index(idx, 0), TimelineMessageModel.AuthorRole)
}
readonly property var currentTime: {
const idx = (content as ListView).currentIndex;
if (idx === -1) {
return {}
}
model.data(model.index(idx, 0), TimelineMessageModel.TimeRole)
}
readonly property var currentProgressInfo: {
const idx = (content as ListView).currentIndex;
if (idx === -1) {
return {}
}
model.data(model.index(idx, 0), TimelineMessageModel.ProgressInfoRole)
}
actions: [ actions: [
ShareAction { ShareAction {

View File

@@ -22,7 +22,7 @@ Kirigami.SearchDialog {
} }
onAccepted: if (currentItem) { onAccepted: if (currentItem) {
(currentItem as QQC2.ItemDelegate).clicked(); (root.currentItem as RoomDelegate).clicked();
} }
onTextChanged: RoomManager.sortFilterRoomListModel.filterText = text onTextChanged: RoomManager.sortFilterRoomListModel.filterText = text

View File

@@ -31,7 +31,7 @@ Kirigami.Page {
Keys.onReturnPressed: event => { Keys.onReturnPressed: event => {
if (event.modifiers & Qt.ControlModifier) { if (event.modifiers & Qt.ControlModifier) {
root.accepted(reason.text); root.accepted(reason.text);
root.closeDialog(); root.Kirigami.PageStack.closeDialog();
} }
} }
@@ -52,14 +52,14 @@ Kirigami.Page {
QQC2.DialogButtonBox.buttonRole: QQC2.DialogButtonBox.AcceptRole QQC2.DialogButtonBox.buttonRole: QQC2.DialogButtonBox.AcceptRole
onClicked: { onClicked: {
root.accepted(reason.text); root.accepted(reason.text);
root.closeDialog(); root.Kirigami.PageStack.closeDialog();
} }
} }
QQC2.Button { QQC2.Button {
icon.name: "dialog-cancel-symbolic" icon.name: "dialog-cancel-symbolic"
text: i18nc("@action", "Cancel") text: i18nc("@action", "Cancel")
QQC2.DialogButtonBox.buttonRole: QQC2.DialogButtonBox.RejectRole QQC2.DialogButtonBox.buttonRole: QQC2.DialogButtonBox.RejectRole
onClicked: root.closeDialog() onClicked: root.Kirigami.PageStack.closeDialog()
} }
} }
} }

View File

@@ -75,6 +75,14 @@ Kirigami.Page {
focus: true focus: true
padding: 0 padding: 0
background: null // This needs to stay null, because of transparency blur
onHeightChanged: {
// HACK: See TimelineView for the hack details.
// We get the height change here *first* so we are informed this is because of a window resize and not due to the pinned message.
(timelineViewLoader.item as TimelineView).resetViewSettling();
}
actions: [ actions: [
Kirigami.Action { Kirigami.Action {
id: jitsiMeetingAction id: jitsiMeetingAction
@@ -113,7 +121,7 @@ Kirigami.Page {
} }
}, },
Kirigami.Action { Kirigami.Action {
visible: Kirigami.Settings.isMobile || !(root.Kirigami.PageStack.pageStack as Kirigami.PageRow).wideMode visible: Kirigami.Settings.isMobile || !(root.Kirigami.PageStack.pageStack as Kirigami.PageRow)?.wideMode
icon.name: "view-right-new" icon.name: "view-right-new"
onTriggered: (root.QQC2.ApplicationWindow.window as Main).openRoomDrawer() onTriggered: (root.QQC2.ApplicationWindow.window as Main).openRoomDrawer()
} }
@@ -255,6 +263,7 @@ Kirigami.Page {
id: timelineView id: timelineView
messageFilterModel: root.messageFilterModel messageFilterModel: root.messageFilterModel
compactLayout: NeoChatConfig.compactLayout compactLayout: NeoChatConfig.compactLayout
fileDropEnabled: !Controller.isFlatpak
markReadCondition: NeoChatConfig.markReadCondition markReadCondition: NeoChatConfig.markReadCondition
} }
} }
@@ -289,7 +298,7 @@ Kirigami.Page {
footer: Loader { footer: Loader {
id: chatBarLoader id: chatBarLoader
height: active ? (item as ChatBar).implicitHeight : 0 height: active ? (item as ChatBar)?.implicitHeight : 0
active: timelineViewLoader.active && !root.currentRoom.readOnly active: timelineViewLoader.active && !root.currentRoom.readOnly
sourceComponent: ChatBar { sourceComponent: ChatBar {
id: chatBar id: chatBar
@@ -349,7 +358,7 @@ Kirigami.Page {
}); });
} }
function onShowDelegateMenu(eventId: string, author, messageComponentType, plainText: string, richText: string, mimeType: string, progressInfo, isThread: bool, selectedText: string, hoveredLink: string) { function onShowDelegateMenu(eventId: string, author, messageComponentType, plainText: string, richText: string, mimeType: string, progressInfo, selectedText: string, hoveredLink: string) {
(delegateContextMenu.createObject(root, { (delegateContextMenu.createObject(root, {
author: author, author: author,
eventId: eventId, eventId: eventId,
@@ -357,6 +366,8 @@ Kirigami.Page {
mimeType: mimeType, mimeType: mimeType,
progressInfo: progressInfo, progressInfo: progressInfo,
messageComponentType: messageComponentType, messageComponentType: messageComponentType,
selectedText,
hoveredLink,
}) as DelegateContextMenu).popup(); }) as DelegateContextMenu).popup();
} }

View File

@@ -11,8 +11,6 @@ import org.kde.neochat
FormCard.FormCardPage { FormCard.FormCardPage {
id: root id: root
property bool processing: false
title: i18nc("@title:window", "Load your encrypted messages") title: i18nc("@title:window", "Load your encrypted messages")
topPadding: Kirigami.Units.gridUnit topPadding: Kirigami.Units.gridUnit
@@ -27,42 +25,75 @@ FormCard.FormCardPage {
position: Kirigami.InlineMessage.Position.Header position: Kirigami.InlineMessage.Position.Header
} }
Connections { property SSSSHandler ssssHandler: SSSSHandler {
target: Controller.activeConnection id: ssssHandler
function onKeyBackupError(): void {
securityKeyField.clear()
root.processing = false
banner.text = i18nc("@info:status", "The security key or backup passphrase was not correct.")
banner.visible = true
}
function onKeyBackupUnlocked(): void { property bool processing: false
root.processing = false
connection: Controller.activeConnection
onKeyBackupUnlocked: {
ssssHandler.processing = false
banner.text = i18nc("@info:status", "Encryption keys restored.") banner.text = i18nc("@info:status", "Encryption keys restored.")
banner.type = Kirigami.MessageType.Positive banner.type = Kirigami.MessageType.Positive
banner.visible = true banner.visible = true
} }
onError: error => {
if (error !== SSSSHandler.WrongKeyError) {
banner.text = error
banner.visible = true
return;
}
passwordField.clear()
ssssHandler.processing = false
banner.text = i18nc("@info:status", "The security phrase was not correct.")
banner.visible = true
}
} }
FormCard.FormHeader { FormCard.FormHeader {
title: i18nc("@title", "Unlock using Security Key or Backup Passphrase") title: i18nc("@title", "Unlock using Passphrase")
} }
FormCard.FormCard { FormCard.FormCard {
FormCard.FormTextDelegate { FormCard.FormTextDelegate {
description: i18nc("@info", "If you have a security key or backup passphrase for this account, enter it below or upload it as a file.") description: i18nc("@info", "If you have a backup passphrase for this account, enter it below.")
}
FormCard.FormTextFieldDelegate {
id: passwordField
label: i18nc("@label:textbox", "Backup Password:")
echoMode: TextInput.Password
}
FormCard.FormButtonDelegate {
id: unlockButton
text: i18nc("@action:button", "Unlock")
icon.name: "unlock"
enabled: passwordField.text.length > 0 && !ssssHandler.processing
onClicked: {
ssssHandler.processing = true
banner.visible = false
ssssHandler.unlockSSSSWithPassphrase(passwordField.text)
}
}
}
FormCard.FormHeader {
title: i18nc("@title", "Unlock using Security Key")
}
FormCard.FormCard {
FormCard.FormTextDelegate {
description: i18nc("@info", "If you have a security key for this account, enter it below or upload it as a file.")
} }
FormCard.FormTextFieldDelegate { FormCard.FormTextFieldDelegate {
id: securityKeyField id: securityKeyField
label: i18nc("@label:textbox", "Security Key or Backup Passphrase:") label: i18nc("@label:textbox", "Security Key:")
echoMode: TextInput.Password echoMode: TextInput.Password
} }
FormCard.FormButtonDelegate { FormCard.FormButtonDelegate {
id: uploadSecurityKeyButton id: uploadSecurityKeyButton
text: i18nc("@action:button", "Upload from File") text: i18nc("@action:button", "Upload from File")
icon.name: "cloud-upload" icon.name: "cloud-upload"
enabled: !root.processing enabled: !ssssHandler.processing
onClicked: { onClicked: {
root.processing = true ssssHandler.processing = true
openFileDialog.open() openFileDialog.open()
} }
} }
@@ -70,10 +101,10 @@ FormCard.FormCardPage {
id: unlockSecurityKeyButton id: unlockSecurityKeyButton
text: i18nc("@action:button", "Unlock") text: i18nc("@action:button", "Unlock")
icon.name: "unlock" icon.name: "unlock"
enabled: securityKeyField.text.length > 0 && !root.processing enabled: securityKeyField.text.length > 0 && !ssssHandler.processing
onClicked: { onClicked: {
root.processing = true ssssHandler.processing = true
Controller.activeConnection.unlockSSSS(securityKeyField.text) ssssHandler.unlockSSSSFromSecurityKey(securityKeyField.text)
} }
} }
} }
@@ -89,10 +120,10 @@ FormCard.FormCardPage {
id: unlockCrossSigningButton id: unlockCrossSigningButton
icon.name: "emblem-shared-symbolic" icon.name: "emblem-shared-symbolic"
text: i18nc("@action:button", "Request from other Devices") text: i18nc("@action:button", "Request from other Devices")
enabled: !root.processing enabled: !ssssHandler.processing
onClicked: { onClicked: {
root.processing = true ssssHandler.processing = true
Controller.activeConnection.unlockSSSS("") ssssHandler.unlockSSSSFromCrossSigning()
} }
} }
} }

View File

@@ -293,25 +293,5 @@ Kirigami.Dialog {
icon.name: "username-copy" icon.name: "username-copy"
onClicked: Clipboard.saveText("https://matrix.to/#/" + root.user.id) onClicked: Clipboard.saveText("https://matrix.to/#/" + root.user.id)
} }
FormCard.FormButtonDelegate {
text: i18nc("@action:button 'Report' as in 'Report this user to the administrators'", "Report…")
icon.name: "dialog-warning-symbolic"
visible: root.connection.supportsMatrixSpecVersion("v1.13")
onClicked: {
let dialog = ((QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack as Kirigami.PageRow).pushDialogLayer(Qt.createComponent('org.kde.neochat', 'ReasonDialog'), {
title: i18nc("@title:dialog", "Report User"),
placeholder: i18nc("@info:placeholder", "Reason for reporting this user"),
icon: "dialog-warning-symbolic",
actionText: i18nc("@action:button 'Report' as in 'Report this user to the administrators'", "Report")
}, {
title: i18nc("@title", "Report User"),
width: Kirigami.Units.gridUnit * 25
}) as ReasonDialog;
dialog.accepted.connect(reason => {
root.connection.reportUser(root.user.id, reason);
});
}
}
} }
} }

View File

@@ -29,6 +29,28 @@
#include <KIO/OpenUrlJob> #include <KIO/OpenUrlJob>
#endif #endif
/**
* @brief Stops RoomManager from updating the last room and space config.
*/
class LastRoomBlocker
{
public:
explicit LastRoomBlocker(RoomManager *manager)
: m_manager(manager)
{
Q_ASSERT(manager);
m_manager->m_dontUpdateLastRoom = true;
}
~LastRoomBlocker()
{
m_manager->m_dontUpdateLastRoom = false;
}
private:
RoomManager *m_manager;
};
RoomManager::RoomManager(QObject *parent) RoomManager::RoomManager(QObject *parent)
: QObject(parent) : QObject(parent)
, m_config(KSharedConfig::openStateConfig()) , m_config(KSharedConfig::openStateConfig())
@@ -324,17 +346,6 @@ void RoomManager::loadInitialRoom()
resolveResource(m_arg); resolveResource(m_arg);
} }
if (m_isMobile) {
QString lastSpace = m_lastRoomConfig.readEntry(u"lastSpace"_s, QString());
// We can't have empty keys in KConfig, so we stored it as "Home"
if (lastSpace == u"Home"_s) {
lastSpace.clear();
}
setCurrentSpace(lastSpace, false);
// We don't want to open a room on startup on mobile
return;
}
if (m_currentRoom) { if (m_currentRoom) {
// we opened a room with the arg parsing already // we opened a room with the arg parsing already
return; return;
@@ -347,16 +358,14 @@ void RoomManager::loadInitialRoom()
void RoomManager::openRoomForActiveConnection() void RoomManager::openRoomForActiveConnection()
{ {
if (!m_connection) { Q_ASSERT(m_connection);
setCurrentRoom({});
setCurrentSpace({}, false);
return;
}
auto lastSpace = m_lastRoomConfig.readEntry(u"lastSpace"_s, QString()); auto lastSpace = m_lastRoomConfig.readEntry(u"lastSpace"_s, QString());
if (lastSpace == u"Home"_s) { if (lastSpace == u"Home"_s) {
lastSpace.clear(); lastSpace.clear();
} }
setCurrentSpace(lastSpace, true); // We don't want to open a room on startup on mobile
setCurrentSpace(lastSpace, !m_isMobile);
} }
UriResolveResult RoomManager::visitUser(User *user, const QString &action) UriResolveResult RoomManager::visitUser(User *user, const QString &action)
@@ -513,7 +522,7 @@ void RoomManager::setConnection(NeoChatConnection *connection)
Q_EMIT connectionChanged(); Q_EMIT connectionChanged();
} }
void RoomManager::setCurrentSpace(const QString &spaceId, bool setRoom) void RoomManager::setCurrentSpace(const QString &spaceId, bool goToLastUsedRoom)
{ {
m_currentSpaceId = spaceId; m_currentSpaceId = spaceId;
@@ -533,25 +542,65 @@ void RoomManager::setCurrentSpace(const QString &spaceId, bool setRoom)
m_lastRoomConfig.writeEntry(u"lastSpace"_s, spaceId.isEmpty() ? u"Home"_s : spaceId); m_lastRoomConfig.writeEntry(u"lastSpace"_s, spaceId.isEmpty() ? u"Home"_s : spaceId);
} }
if (!setRoom) { // If we requested to change to the last opened room, do so:
return; if (goToLastUsedRoom) {
} // We don't want to needlessly update the last room config here, that should only be done during explicit user action.
LastRoomBlocker blocker(this);
// We intentionally don't want to open the last room on mobile // We can't have empty keys in KConfig, so it's stored as "Home":
if (m_isMobile) { if (const auto &lastRoom = m_lastRoomConfig.readEntry(spaceId.isEmpty() ? u"Home"_s : spaceId, QString()); !lastRoom.isEmpty()) {
return; resolveResource(lastRoom, "no_join"_L1);
} return;
}
// We can't have empty keys in KConfig, so it's stored as "Home" // If no last room was opened, go to the space home:
if (const auto &lastRoom = m_lastRoomConfig.readEntry(spaceId.isEmpty() ? u"Home"_s : spaceId, QString()); !lastRoom.isEmpty()) { if (!spaceId.isEmpty() && spaceId != u"DM"_s) {
resolveResource(lastRoom, "no_join"_L1); resolveResource(spaceId, "no_join"_L1);
return; return;
}
// Fallback to no room opened:
setCurrentRoom({});
} }
if (!spaceId.isEmpty() && spaceId != u"DM"_s) { }
resolveResource(spaceId, "no_join"_L1);
return; QString RoomManager::findSpaceIdForCurrentRoom() const
{
if (!m_currentRoom) {
return m_currentSpaceId;
} }
setCurrentRoom({}); if (m_currentRoom->isDirectChat()) {
const auto roomsInSpace = SpaceHierarchyCache::instance().getRoomListForSpace(m_currentSpaceId, false);
if (roomsInSpace.contains(m_currentRoom->id())) {
return m_currentSpaceId;
}
return "DM"_L1;
}
const auto &parentSpaces = SpaceHierarchyCache::instance().parentSpaces(m_currentRoom->id());
if (parentSpaces.contains(m_currentSpaceId)) {
return m_currentSpaceId;
}
static auto config = NeoChatConfig::self();
if (config->allRoomsInHome()) {
return {};
}
if (const auto &parent = m_connection->room(m_currentRoom->canonicalParent())) {
for (const auto &parentParent : SpaceHierarchyCache::instance().parentSpaces(parent->id())) {
if (SpaceHierarchyCache::instance().parentSpaces(parentParent).isEmpty()) {
return parentParent;
}
}
return parent->id();
}
for (const auto &space : parentSpaces) {
if (SpaceHierarchyCache::instance().parentSpaces(space).isEmpty()) {
return space;
}
}
if (m_currentRoom->isSpace()) {
return m_currentSpaceId;
}
return {};
} }
void RoomManager::setCurrentRoom(const QString &roomId) void RoomManager::setCurrentRoom(const QString &roomId)
@@ -571,57 +620,25 @@ void RoomManager::setCurrentRoom(const QString &roomId)
} }
Q_EMIT currentRoomChanged(); Q_EMIT currentRoomChanged();
if (m_connection) {
if (!m_dontUpdateLastRoom) {
if (roomId.isEmpty()) { if (roomId.isEmpty()) {
m_lastRoomConfig.deleteEntry(m_currentSpaceId); m_lastRoomConfig.deleteEntry(m_currentSpaceId);
} else {
// We can't have empty keys in KConfig, so name it "Home"
if (m_currentSpaceId.isEmpty()) {
m_lastRoomConfig.writeEntry(u"Home"_s, roomId);
} else {
m_lastRoomConfig.writeEntry(m_currentSpaceId, roomId);
}
}
}
if (roomId.isEmpty()) {
return;
}
if (m_currentRoom->isSpace()) {
return;
}
if (m_currentRoom->isDirectChat()) {
const auto roomsInSpace = SpaceHierarchyCache::instance().getRoomListForSpace(m_currentSpaceId, false);
if (!roomsInSpace.contains(m_currentRoom->id()) && m_currentSpaceId != "DM"_L1) {
setCurrentSpace("DM"_L1, false);
}
return;
}
const auto &parentSpaces = SpaceHierarchyCache::instance().parentSpaces(roomId);
if (parentSpaces.contains(m_currentSpaceId)) {
return;
}
static auto config = NeoChatConfig::self();
if (config->allRoomsInHome()) {
setCurrentSpace({}, false);
return;
}
if (const auto &parent = m_connection->room(m_currentRoom->canonicalParent())) {
for (const auto &parentParent : SpaceHierarchyCache::instance().parentSpaces(parent->id())) {
if (SpaceHierarchyCache::instance().parentSpaces(parentParent).isEmpty()) {
setCurrentSpace(parentParent, false);
return;
}
}
setCurrentSpace(parent->id(), false);
return;
}
for (const auto &space : parentSpaces) {
if (SpaceHierarchyCache::instance().parentSpaces(space).isEmpty()) {
setCurrentSpace(space, false);
return; return;
} }
const auto spaceIdForRoom = findSpaceIdForCurrentRoom();
// We can't have empty keys in KConfig, so name it "Home"
if (spaceIdForRoom.isEmpty()) {
m_lastRoomConfig.writeEntry(u"Home"_s, roomId);
} else {
m_lastRoomConfig.writeEntry(spaceIdForRoom, roomId);
}
if (m_currentSpaceId != spaceIdForRoom) {
setCurrentSpace(spaceIdForRoom, false);
}
} }
setCurrentSpace({}, false);
} }
void RoomManager::clearCurrentRoom() void RoomManager::clearCurrentRoom()

View File

@@ -337,6 +337,11 @@ Q_SIGNALS:
void currentSpaceChanged(); void currentSpaceChanged();
protected:
bool m_dontUpdateLastRoom = false; // Don't set directly, use LastRoomBlocker.
friend class LastRoomBlocker;
private: private:
bool m_isMobile = false; bool m_isMobile = false;
@@ -373,8 +378,22 @@ private:
void setCurrentRoom(const QString &roomId); void setCurrentRoom(const QString &roomId);
// Space ID, "DM", or empty string /**
void setCurrentSpace(const QString &spaceId, bool setRoom = true); * @brief Find the most appropriate space for the currently selected room
*
* Should be used to figure out what space to switch to after a room change.
*
* @return The Space ID that the currently set room should be displayed as part of. (or "DM" for DM and "" for Home)
*/
QString findSpaceIdForCurrentRoom() const;
/**
* @brief Sets the current space.
*
* @param spaceId The ID of the space, "DM" for direct messages or an empty string for Home.
* @param goToLastUsedRoom If true, we will navigate to the last opened room in this space.
*/
void setCurrentSpace(const QString &spaceId, bool goToLastUsedRoom = true);
/** /**
* @brief Resolve a user URI. * @brief Resolve a user URI.

View File

@@ -286,8 +286,6 @@ QQC2.Control {
quickFormatBar.selectionStart = selectionStart; quickFormatBar.selectionStart = selectionStart;
quickFormatBar.selectionEnd = selectionEnd; quickFormatBar.selectionEnd = selectionEnd;
quickFormatBar.open(); quickFormatBar.open();
} else if (quickFormatBar.visible) {
quickFormatBar.close();
} }
} }

View File

@@ -65,7 +65,7 @@ QQC2.Popup {
padding: 2 padding: 2
implicitHeight: Kirigami.Units.gridUnit * 20 + 2 * padding implicitHeight: Kirigami.Units.gridUnit * 20 + 2 * padding
width: Math.min(contentItem.categoryIconSize * 11 + 2 * padding, QQC2.ApplicationWindow.window.width) width: Math.min(contentItem.categoryIconSize * 11 + 2 * padding, QQC2.ApplicationWindow.window?.width)
contentItem: EmojiPicker { contentItem: EmojiPicker {
id: emojiPicker id: emojiPicker
height: 400 height: 400

View File

@@ -148,7 +148,7 @@ ColumnLayout {
id: quickReactions id: quickReactions
Layout.fillWidth: true Layout.fillWidth: true
model: ["👍", "👎", "😄", "🎉", "😕", "❤", "🚀", "👀"] model: ["👍", "👎", "😄", "🎉", "😕", "❤", "🚀", "👀"]
delegate: EmojiDelegate { delegate: EmojiDelegate {
required property string modelData required property string modelData

View File

@@ -21,6 +21,12 @@ FormCard.FormCard {
onToggled: NeoChatConfig.threads = checked onToggled: NeoChatConfig.threads = checked
} }
FormCard.FormCheckDelegate {
text: i18nc("@option:check Enable the matrix 'secret backup' feature", "Secret Backup")
checked: NeoChatConfig.secretBackup
onToggled: NeoChatConfig.secretBackup = checked
}
FormCard.FormCheckDelegate { FormCard.FormCheckDelegate {
text: i18nc("@option:check Enable the matrix feature to add a phone number as a third party ID", "Add phone numbers as 3PIDs") text: i18nc("@option:check Enable the matrix feature to add a phone number as a third party ID", "Add phone numbers as 3PIDs")
checked: NeoChatConfig.phone3PId checked: NeoChatConfig.phone3PId

View File

@@ -33,8 +33,6 @@ target_sources(LibNeoChat PRIVATE
events/imagepackevent.cpp events/imagepackevent.cpp
events/pollevent.cpp events/pollevent.cpp
jobs/neochatgetcommonroomsjob.cpp jobs/neochatgetcommonroomsjob.cpp
jobs/neochatreportroomjob.cpp
jobs/neochatreportuserjob.cpp
models/actionsmodel.cpp models/actionsmodel.cpp
models/completionmodel.cpp models/completionmodel.cpp
models/completionproxymodel.cpp models/completionproxymodel.cpp

View File

@@ -3,10 +3,6 @@
#include "chatbarcache.h" #include "chatbarcache.h"
#include <QMimeData>
#include <KUrlMimeData>
#include <Quotient/roommember.h> #include <Quotient/roommember.h>
#include "eventhandler.h" #include "eventhandler.h"
@@ -299,17 +295,4 @@ void ChatBarCache::clearCache()
clearRelations(); clearRelations();
} }
void ChatBarCache::drop(QList<QUrl> u, const QString &transferPortal)
{
QMimeData mimeData;
mimeData.setUrls(u);
if (!transferPortal.isEmpty()) {
mimeData.setData(u"application/vnd.portal.filetransfer"_s, transferPortal.toLatin1());
}
auto urls = KUrlMimeData::urlsFromMimeData(&mimeData);
if (urls.size() > 0) {
setAttachmentPath(urls[0].toString());
}
}
#include "moc_chatbarcache.cpp" #include "moc_chatbarcache.cpp"

View File

@@ -198,8 +198,6 @@ public:
*/ */
Q_INVOKABLE void postMessage(); Q_INVOKABLE void postMessage();
Q_INVOKABLE void drop(QList<QUrl> urls, const QString &transferPortal);
Q_SIGNALS: Q_SIGNALS:
void textChanged(); void textChanged();
void relationIdChanged(const QString &oldEventId, const QString &newEventId); void relationIdChanged(const QString &oldEventId, const QString &newEventId);

View File

@@ -389,9 +389,9 @@ QString EventHandler::getBody(const NeoChatRoom *room, const Quotient::RoomEvent
return i18n("left the room"); return i18n("left the room");
} }
if (const auto &reason = e.contentJson()["reason"_L1].toString().toHtmlEscaped(); !reason.isEmpty()) { if (const auto &reason = e.contentJson()["reason"_L1].toString().toHtmlEscaped(); !reason.isEmpty()) {
return i18n("has removed %1 from the room: %2", subjectName, reason); return i18n("has put %1 out of the room: %2", subjectName, reason);
} }
return i18n("has removed %1 from the room", subjectName); return i18n("has put %1 out of the room", subjectName);
case Membership::Ban: case Membership::Ban:
if (e.senderId() != e.userId()) { if (e.senderId() != e.userId()) {
if (e.reason().isEmpty()) { if (e.reason().isEmpty()) {

View File

@@ -1,14 +0,0 @@
// SPDX-FileCopyrightText: 2025 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-2.0-or-later
#include "neochatreportroomjob.h"
using namespace Quotient;
NeochatReportRoomJob::NeochatReportRoomJob(const QString &userId, const QString &reason)
: BaseJob(HttpVerb::Post, u"ReportRoomJob"_s, makePath(" /_matrix/client/v3/", userId, "/report"))
{
QJsonObject _dataJson;
addParam<IfNotEmpty>(_dataJson, "reason"_L1, reason);
setRequestData({_dataJson});
}

View File

@@ -1,13 +0,0 @@
// SPDX-FileCopyrightText: 2025 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <Quotient/jobs/basejob.h>
// TODO: Remove once libQuotient updates to Matrix API v1.14
class NeochatReportRoomJob : public Quotient::BaseJob
{
public:
explicit NeochatReportRoomJob(const QString &roomId, const QString &reason);
};

View File

@@ -1,14 +0,0 @@
// SPDX-FileCopyrightText: 2025 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-2.0-or-later
#include "neochatreportuserjob.h"
using namespace Quotient;
NeochatReportUserJob::NeochatReportUserJob(const QString &userId, const QString &reason)
: BaseJob(HttpVerb::Post, u"ReportUserJob"_s, makePath("/_matrix/client/v3/users/", userId, "/report"))
{
QJsonObject _dataJson;
addParam<IfNotEmpty>(_dataJson, "reason"_L1, reason);
setRequestData({_dataJson});
}

View File

@@ -1,13 +0,0 @@
// SPDX-FileCopyrightText: 2025 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <Quotient/jobs/basejob.h>
// TODO: Remove once libQuotient updates to Matrix API v1.14
class NeochatReportUserJob : public Quotient::BaseJob
{
public:
explicit NeochatReportUserJob(const QString &userId, const QString &reason);
};

View File

@@ -59,7 +59,7 @@ QList<ActionsModel::Action> actions{
Action{ Action{
u"shrug"_s, u"shrug"_s,
[](const QString &message, NeoChatRoom *, ChatBarCache *) { [](const QString &message, NeoChatRoom *, ChatBarCache *) {
return u"¯\\\\_(ツ)_/¯ %1"_s.arg(message); return u"¯\\\\\\_(ツ)\\_/¯ %1"_s.arg(message);
}, },
Quotient::RoomMessageEvent::MsgType::Text, Quotient::RoomMessageEvent::MsgType::Text,
kli18n("<message>"), kli18n("<message>"),

View File

@@ -118,8 +118,10 @@ void RoomListModel::connectRoomSignals(NeoChatRoom *room)
connect(room, &Room::displaynameChanged, this, [this, room] { connect(room, &Room::displaynameChanged, this, [this, room] {
refresh(room, {DisplayNameRole}); refresh(room, {DisplayNameRole});
}); });
connect(room, &Room::unreadStatsChanged, this, [this, room] { connect(room, &Room::changed, this, [this, room](Room::Changes changes) {
refresh(room, {ContextNotificationCountRole, HasHighlightNotificationsRole, NotificationCountRole}); if (changes & (Room::Change::UnreadStats | Room::Change::Highlights)) {
refresh(room, {ContextNotificationCountRole, HasHighlightNotificationsRole, NotificationCountRole});
}
}); });
connect(room, &Room::notificationCountChanged, this, [this, room] { connect(room, &Room::notificationCountChanged, this, [this, room] {
refresh(room); refresh(room);

View File

@@ -6,7 +6,6 @@
#include <QImageReader> #include <QImageReader>
#include <QJsonDocument> #include <QJsonDocument>
#include "jobs/neochatreportuserjob.h"
#include "neochatroom.h" #include "neochatroom.h"
#include "spacehierarchycache.h" #include "spacehierarchycache.h"
@@ -20,7 +19,6 @@
#include <Quotient/csapi/profile.h> #include <Quotient/csapi/profile.h>
#include <Quotient/csapi/registration.h> #include <Quotient/csapi/registration.h>
#include <Quotient/csapi/versions.h> #include <Quotient/csapi/versions.h>
#include <Quotient/e2ee/sssshandler.h>
#include <Quotient/jobs/downloadfilejob.h> #include <Quotient/jobs/downloadfilejob.h>
#include <Quotient/qt_connection_util.h> #include <Quotient/qt_connection_util.h>
#include <Quotient/room.h> #include <Quotient/room.h>
@@ -77,31 +75,37 @@ void NeoChatConnection::connectSignals()
Q_EMIT directChatInvitesChanged(); Q_EMIT directChatInvitesChanged();
for (const auto &chatId : additions) { for (const auto &chatId : additions) {
if (const auto chat = room(chatId)) { if (const auto chat = room(chatId)) {
connect(chat, &Room::unreadStatsChanged, this, [this]() { connect(chat, &Room::changed, this, [this](Room::Changes changes) {
refreshBadgeNotificationCount(); if (changes & (Room::Change::UnreadStats | Room::Change::Highlights)) {
Q_EMIT directChatNotificationsChanged(); refreshBadgeNotificationCount();
Q_EMIT directChatsHaveHighlightNotificationsChanged(); Q_EMIT directChatNotificationsChanged();
Q_EMIT directChatsHaveHighlightNotificationsChanged();
}
}); });
} }
} }
for (const auto &chatId : removals) { for (const auto &chatId : removals) {
if (const auto chat = room(chatId)) { if (const auto chat = room(chatId)) {
disconnect(chat, &Room::unreadStatsChanged, this, nullptr); disconnect(chat, &Room::changed, this, nullptr);
} }
} }
}); });
connect(this, &NeoChatConnection::joinedRoom, this, [this](Room *room) { connect(this, &NeoChatConnection::joinedRoom, this, [this](Room *room) {
if (room->isDirectChat()) { if (room->isDirectChat()) {
connect(room, &Room::unreadStatsChanged, this, [this]() { connect(room, &Room::changed, this, [this](Room::Changes changes) {
Q_EMIT directChatNotificationsChanged(); if (changes & (Room::Change::UnreadStats | Room::Change::Highlights)) {
Q_EMIT directChatsHaveHighlightNotificationsChanged(); Q_EMIT directChatNotificationsChanged();
Q_EMIT directChatsHaveHighlightNotificationsChanged();
}
}); });
} }
Q_EMIT roomInvitesChanged(); Q_EMIT roomInvitesChanged();
connect(room, &Room::unreadStatsChanged, this, [this]() { connect(room, &Room::changed, this, [this](Room::Changes changes) {
refreshBadgeNotificationCount(); if (changes & (Room::Change::UnreadStats | Room::Change::Highlights)) {
Q_EMIT homeNotificationsChanged(); refreshBadgeNotificationCount();
Q_EMIT homeHaveHighlightNotificationsChanged(); Q_EMIT homeNotificationsChanged();
Q_EMIT homeHaveHighlightNotificationsChanged();
}
}); });
}); });
connect(this, &NeoChatConnection::leftRoom, this, [this](Room *room, Room *prev) { connect(this, &NeoChatConnection::leftRoom, this, [this](Room *room, Room *prev) {
@@ -162,10 +166,6 @@ void NeoChatConnection::refreshBadgeNotificationCount()
for (const auto &r : allRooms()) { for (const auto &r : allRooms()) {
if (const auto room = static_cast<NeoChatRoom *>(r)) { if (const auto room = static_cast<NeoChatRoom *>(r)) {
count += room->contextAwareNotificationCount(); count += room->contextAwareNotificationCount();
if (room->joinState() == JoinState::Invite) {
count++;
}
} }
} }
@@ -576,36 +576,4 @@ bool NeoChatConnection::isVerifiedSession() const
return isVerifiedDevice(userId(), deviceId()); return isVerifiedDevice(userId(), deviceId());
} }
void NeoChatConnection::unlockSSSS(const QString &secret)
{
auto handler = new SSSSHandler();
handler->setConnection(this);
connect(handler, &SSSSHandler::error, this, [secret, handler, this]() {
disconnect(handler, &SSSSHandler::error, this, nullptr);
if (!secret.isEmpty()) {
connect(handler, &SSSSHandler::error, this, [handler, this]() {
Q_EMIT keyBackupError();
delete handler;
});
handler->unlockSSSSWithPassphrase(secret);
} else {
Q_EMIT keyBackupError();
}
});
connect(handler, &SSSSHandler::keyBackupUnlocked, this, [handler, this]() {
Q_EMIT keyBackupUnlocked();
connect(handler, &SSSSHandler::finished, handler, &SSSSHandler::deleteLater);
});
if (secret.isEmpty()) {
handler->unlockSSSSFromCrossSigning();
} else {
handler->unlockSSSSFromSecurityKey(secret);
}
}
void NeoChatConnection::reportUser(const QString &userId, const QString &reason)
{
callApi<NeochatReportUserJob>(userId, reason);
}
#include "moc_neochatconnection.cpp" #include "moc_neochatconnection.cpp"

View File

@@ -222,13 +222,6 @@ public:
*/ */
bool isVerifiedSession() const; bool isVerifiedSession() const;
Q_INVOKABLE void unlockSSSS(const QString &secret);
/**
* @brief Report a user.
*/
Q_INVOKABLE void reportUser(const QString &userId, const QString &reason);
Q_SIGNALS: Q_SIGNALS:
void globalUrlPreviewEnabledChanged(); void globalUrlPreviewEnabledChanged();
void labelChanged(); void labelChanged();
@@ -266,9 +259,6 @@ Q_SIGNALS:
*/ */
void ownSessionVerified(); void ownSessionVerified();
void keyBackupUnlocked();
void keyBackupError();
private: private:
static bool m_globalUrlPreviewDefault; static bool m_globalUrlPreviewDefault;
static PushRuleAction::Action m_defaultAction; static PushRuleAction::Action m_defaultAction;

View File

@@ -50,12 +50,12 @@
#include "roomlastmessageprovider.h" #include "roomlastmessageprovider.h"
#include "spacehierarchycache.h" #include "spacehierarchycache.h"
#include "urlhelper.h" #include "urlhelper.h"
#include "jobs/neochatreportroomjob.h"
#ifndef Q_OS_ANDROID #ifndef Q_OS_ANDROID
#include <KIO/Job> #include <KIO/Job>
#include <KIO/JobTracker> #include <KIO/JobTracker>
#endif #endif
#include <KJobTrackerInterface> #include <KJobTrackerInterface>
#include <KLocalizedString> #include <KLocalizedString>
@@ -346,10 +346,6 @@ void NeoChatRoom::forget()
void NeoChatRoom::sendTypingNotification(bool isTyping) void NeoChatRoom::sendTypingNotification(bool isTyping)
{ {
// During the chatbar setup sequence, this may get called while we're still initializing
if (localMember().isEmpty()) {
return;
}
connection()->callApi<SetTypingJob>(BackgroundRequest, localMember().id(), id(), isTyping, 10000); connection()->callApi<SetTypingJob>(BackgroundRequest, localMember().id(), id(), isTyping, 10000);
} }
@@ -1185,7 +1181,10 @@ void NeoChatRoom::loadPinnedMessage()
connection()->callApi<GetOneRoomEventJob>(id(), mostRecentEventId).then([this](const auto &job) { connection()->callApi<GetOneRoomEventJob>(id(), mostRecentEventId).then([this](const auto &job) {
auto event = fromJson<event_ptr_tt<RoomEvent>>(job->jsonData()); auto event = fromJson<event_ptr_tt<RoomEvent>>(job->jsonData());
if (auto encEv = eventCast<EncryptedEvent>(event.get())) { if (auto encEv = eventCast<EncryptedEvent>(event.get())) {
event = decryptMessage(*encEv); auto decryptedMessage = decryptMessage(*encEv);
if (decryptedMessage) {
event = std::move(decryptedMessage);
}
} }
m_pinnedMessage = EventHandler::richBody(this, event.get()); m_pinnedMessage = EventHandler::richBody(this, event.get());
Q_EMIT pinnedMessageChanged(); Q_EMIT pinnedMessageChanged();
@@ -1653,6 +1652,12 @@ void NeoChatRoom::downloadEventFromServer(const QString &eventId)
} }
event_ptr_tt<RoomEvent> event = fromJson<event_ptr_tt<RoomEvent>>(job->jsonData()); event_ptr_tt<RoomEvent> event = fromJson<event_ptr_tt<RoomEvent>>(job->jsonData());
if (auto encEv = eventCast<EncryptedEvent>(event.get())) {
auto decryptedEvent = decryptMessage(*encEv);
if (decryptedEvent) {
event = std::move(decryptedEvent);
}
}
m_extraEvents.push_back(std::move(event)); m_extraEvents.push_back(std::move(event));
Q_EMIT extraEventLoaded(eventId); Q_EMIT extraEventLoaded(eventId);
}, },
@@ -1838,9 +1843,4 @@ QString NeoChatRoom::pinnedMessage() const
return m_pinnedMessage; return m_pinnedMessage;
} }
void NeoChatRoom::report(const QString &reason)
{
connection()->callApi<NeochatReportRoomJob>(id(), reason);
}
#include "moc_neochatroom.cpp" #include "moc_neochatroom.cpp"

View File

@@ -622,11 +622,6 @@ public:
*/ */
QString pinnedMessage() const; QString pinnedMessage() const;
/**
* @brief Send a report about this room.
*/
Q_INVOKABLE void report(const QString &reason);
private: private:
bool m_visible = false; bool m_visible = false;

View File

@@ -22,9 +22,9 @@ ColumnLayout {
/** /**
* @brief The canonical alias of the room, if it exists. Otherwise falls back to the first available alias. * @brief The canonical alias of the room, if it exists. Otherwise falls back to the first available alias.
*/ */
readonly property var roomAlias: room.aliases[0] readonly property string roomAlias: room?.aliases[0] ?? ""
Layout.fillWidth: true spacing: 0
RowLayout { RowLayout {
Layout.fillWidth: true Layout.fillWidth: true

View File

@@ -43,8 +43,8 @@ void SpaceHierarchyCache::cacheSpaceHierarchy()
Qt::SingleShotConnection); Qt::SingleShotConnection);
} }
connect(neoChatRoom, &NeoChatRoom::unreadStatsChanged, this, [this, neoChatRoom]() { connect(neoChatRoom, &NeoChatRoom::changed, this, [this, neoChatRoom](NeoChatRoom::Changes changes) {
if (neoChatRoom != nullptr) { if (neoChatRoom != nullptr && (changes & (NeoChatRoom::Change::UnreadStats | NeoChatRoom::Change::Highlights))) {
const auto parents = parentSpaces(neoChatRoom->id()); const auto parents = parentSpaces(neoChatRoom->id());
if (parents.count() > 0) { if (parents.count() > 0) {
Q_EMIT spaceNotifcationCountChanged(parents); Q_EMIT spaceNotifcationCountChanged(parents);

View File

@@ -121,13 +121,6 @@ QQC2.Control {
} }
} }
TapHandler {
enabled: root.time.toString() !== "Invalid Date"
acceptedButtons: Qt.LeftButton
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad | PointerDevice.Stylus
onTapped: RoomManager.maximizeCode(root.author, root.time, root.display, root.componentAttributes.class)
}
TapHandler { TapHandler {
acceptedDevices: PointerDevice.TouchScreen acceptedDevices: PointerDevice.TouchScreen
onLongPressed: RoomManager.viewEventMenu(root.eventId, root.Message.room, root.Message.selectedText, root.Message.hoveredLink); onLongPressed: RoomManager.viewEventMenu(root.eventId, root.Message.room, root.Message.selectedText, root.Message.hoveredLink);

View File

@@ -43,8 +43,6 @@ Item {
*/ */
property var contentMaxHeight: undefined property var contentMaxHeight: undefined
readonly property alias _private: _private
implicitWidth: mediaSizeHelper.currentSize.width implicitWidth: mediaSizeHelper.currentSize.width
implicitHeight: mediaSizeHelper.currentSize.height implicitHeight: mediaSizeHelper.currentSize.height

View File

@@ -23,9 +23,7 @@ Flow {
*/ */
required property ReactionModel reactionModel required property ReactionModel reactionModel
Layout.fillWidth: true // HACK: We do not set Layout properties here, see BUG 504344 for the crash it caused.
Layout.fillHeight: true
Layout.maximumWidth: Message.maxContentWidth
spacing: Kirigami.Units.smallSpacing spacing: Kirigami.Units.smallSpacing

View File

@@ -38,7 +38,7 @@ RowLayout {
Layout.fillHeight: true Layout.fillHeight: true
implicitWidth: Kirigami.Units.smallSpacing implicitWidth: Kirigami.Units.smallSpacing
color: root.replyContentModel.author.color color: root.replyContentModel.author?.color ?? Kirigami.Theme.highlightColor
radius: Kirigami.Units.cornerRadius radius: Kirigami.Units.cornerRadius
} }
ColumnLayout { ColumnLayout {

View File

@@ -150,10 +150,6 @@ QSize MediaSizeHelper::currentSize() const
if (height > heightLimit()) { if (height > heightLimit()) {
return QSize(qRound(heightLimit() * aspectRatio()), qRound(heightLimit())); return QSize(qRound(heightLimit() * aspectRatio()), qRound(heightLimit()));
} }
// TODO: NO
if (qIsNaN(width) || qIsNaN(height)) {
return {};
}
return QSize(qRound(width), qRound(height)); return QSize(qRound(width), qRound(height));
} else { } else {
qreal height = std::min(heightLimit(), resolvedMediaHeight()); qreal height = std::min(heightLimit(), resolvedMediaHeight());

View File

@@ -269,6 +269,8 @@ void EventMessageContentModel::resetModel()
updateItineraryModel(); updateItineraryModel();
Q_EMIT componentsUpdated(); Q_EMIT componentsUpdated();
// We need QML to re-evaluate author (for example, reply colors) if it was previously null.
Q_EMIT authorChanged();
} }
void EventMessageContentModel::resetContent(bool isEditing, bool isThreading) void EventMessageContentModel::resetContent(bool isEditing, bool isThreading)

View File

@@ -87,7 +87,6 @@ QDateTime MessageContentModel::time() const
QString MessageContentModel::timeString() const QString MessageContentModel::timeString() const
{ {
return time().toLocalTime().toString(u"hh:mm"_s); return time().toLocalTime().toString(u"hh:mm"_s);
;
} }
QString MessageContentModel::authorId() const QString MessageContentModel::authorId() const

Some files were not shown because too many files have changed in this diff Show More