Compare commits

..

69 Commits

Author SHA1 Message Date
Joshua Goins
2f060dcfe6 Fix building with KUnifiedPush on Android
I made sure it doesn't include KDBusService and removed the if check in
CMake.
2025-12-20 17:29:43 -05:00
l10n daemon script
45c5806c5a GIT_SILENT Sync po/docbooks with svn 2025-12-19 01:42:17 +00:00
l10n daemon script
abf37c90cb GIT_SILENT Sync po/docbooks with svn 2025-12-18 01:41:35 +00:00
Jimmy Bergström
5d9508b165 Hide quick format bar when selection is cleared
I noticed a bit of an annoying behavior with the quick format bar. Whenever I make a typo when writing a message I usually go back with a ctrl+shift+arrow selection to correct it, and that of course triggers the bar, but then there wasn't any obvious way to make it go away (other than pressing backspace or delete, [ChatBar.qml#L339](https://invent.kde.org/network/neochat/-/blob/master/src/chatbar/ChatBar.qml?ref_type=heads#L339)), so it'd always be stuck visible until I clicked somewhere with my mouse, which I found somewhat annoying.

This intends to fix that, by hiding it whenever the selection is cleared, which seems like a reasonable and expected behavior to me. I would also be okay with making it dismissable with escape, if this current suggestion has some unintended side-effect that I've missed.

I also think that this should in practice "solve" this bug https://bugs.kde.org/show_bug.cgi?id=511590 but I didn't link it directly as their suggested solution is smarter placement of the bar.
2025-12-17 21:33:08 +00:00
l10n daemon script
f5a652f7a1 GIT_SILENT Sync po/docbooks with svn 2025-12-16 14:25:07 +00:00
Paul Brown
f165cb1f10 Removed list of supporters, as we now have a less annoying way of showing them on the apps website. 2025-12-14 16:41:47 +00:00
l10n daemon script
11132c3e89 GIT_SILENT Sync po/docbooks with svn 2025-12-14 01:40:32 +00:00
l10n daemon script
089ab2009a GIT_SILENT Sync po/docbooks with svn 2025-12-13 01:44:24 +00:00
l10n daemon script
6ebedc5dfc GIT_SILENT Sync po/docbooks with svn 2025-12-12 01:42:29 +00:00
Nicolas Fella
e5b2fb7316 Guard against currentIndex being -1 in NeochatMaximizeComponent
Sometimes the ListView's currentIndex is -1, which results in us
querying data() for an invalid index, causing an assert in Qt model
code

BUG: 513104
2025-12-11 18:01:19 +01:00
l10n daemon script
5da3aff607 GIT_SILENT Sync po/docbooks with svn 2025-12-10 01:47:45 +00:00
l10n daemon script
3fa46d52fe GIT_SILENT Sync po/docbooks with svn 2025-12-09 01:41:23 +00:00
Justin Zobel
ece9811d82 CI - Flatpak - Remove Kirigami Addons as it is now in the runtime 2025-12-08 19:55:46 +10:30
Justin Zobel
b543b1c2f9 CI - Flatpak - Use -DCMAKE_POLICY_VERSION_MINIMUM=3.5 for olm 2025-12-08 19:55:46 +10:30
Justin Zobel
5065bccb64 CI - Flatpak - Fix broken sha256sum 2025-12-08 19:55:46 +10:30
Justin Zobel
10c3125668 CI - Flatpak - Fix broken sha256sums 2025-12-08 19:55:46 +10:30
Justin Zobel
73019cfea2 CI - Flatpak - Update Runtime to 6.10 2025-12-08 19:55:46 +10:30
Justin Zobel
4bc6a88acf CI - Flatpak - Update Versions 2025-12-08 19:55:46 +10:30
l10n daemon script
56a49cfc50 GIT_SILENT Sync po/docbooks with svn 2025-12-08 01:41:51 +00:00
Nate Graham
c50380b448 Tell room page header message to fill the width
Otherwise it scrunches up as small as possible and breaks the layout.
2025-12-07 09:27:58 -05:00
l10n daemon script
673a8c8bc8 GIT_SILENT Sync po/docbooks with svn 2025-12-07 01:45:09 +00:00
l10n daemon script
c298c348a4 GIT_SILENT Sync po/docbooks with svn 2025-12-04 01:45:11 +00:00
Heiko Becker
2fcd535aeb GIT_SILENT Update Appstream for new release
(cherry picked from commit 0e4b52ee62)
2025-12-04 00:20:05 +01:00
l10n daemon script
8f5e68de5d GIT_SILENT Sync po/docbooks with svn 2025-12-03 01:45:04 +00:00
l10n daemon script
5fe36a9057 GIT_SILENT Sync po/docbooks with svn 2025-12-02 01:41:01 +00:00
l10n daemon script
8d8c6444e0 GIT_SILENT Sync po/docbooks with svn 2025-12-01 01:44:51 +00:00
Joshua Goins
03d5955c8d Add support for reporting rooms and users
This was added in recent Matrix versions, and a desperately needed
feature.
2025-11-30 14:01:13 -05:00
Joshua Goins
197d7ce8e8 Add a new function to check supported Matrix spec in QML 2025-11-30 14:01:13 -05:00
l10n daemon script
efbf6d96d4 GIT_SILENT Sync po/docbooks with svn 2025-11-30 01:45:44 +00:00
l10n daemon script
b8cd3c69c2 GIT_SILENT Sync po/docbooks with svn 2025-11-29 01:42:47 +00:00
renner 03
1da24191f0 Fix krunner integration with Flatpak 2025-11-28 09:38:51 -05:00
l10n daemon script
2ecc567792 GIT_SILENT Sync po/docbooks with svn 2025-11-28 01:41:47 +00:00
l10n daemon script
66e1fe067d GIT_SILENT Sync po/docbooks with svn 2025-11-27 01:43:17 +00:00
Nate Graham
d08f014def Rephrase a British English wording for the base string
"X has put Y out of the room" is a British English style sentence. Which
is fine, but I'm using en_US, not en_UK.

Re-phrase this to sound a bit more American (which is the linguistic
style we use for the base strings), and then count on the en_UK
translators bringing back the old phrasing for en_UK.
2025-11-25 22:15:45 -07:00
l10n daemon script
63941d6685 GIT_SILENT Sync po/docbooks with svn 2025-11-26 01:41:17 +00:00
Tobias Fella
38523c97c5 Implement drag&drop support for flatpaks
BUG: 495552
2025-11-25 10:27:38 +00:00
l10n daemon script
65c6f4c1d3 GIT_SILENT Sync po/docbooks with svn 2025-11-25 01:41:04 +00:00
Heiko Becker
0cb3fd32f4 Drop unused dependencies
Both KF6Crash and KF6IconThemes aren't used anymore after porting to
KirigamiApp in eab45e761a.
2025-11-24 21:51:55 +01:00
l10n daemon script
b02cb0157e GIT_SILENT Sync po/docbooks with svn 2025-11-24 01:42:36 +00:00
l10n daemon script
ca163fc169 GIT_SILENT Sync po/docbooks with svn 2025-11-23 01:43:18 +00:00
l10n daemon script
5687eb33e1 GIT_SILENT Sync po/docbooks with svn 2025-11-21 01:43:31 +00:00
l10n daemon script
fc795e50b3 GIT_SILENT Sync po/docbooks with svn 2025-11-20 01:41:22 +00:00
l10n daemon script
c4adfe7939 GIT_SILENT Sync po/docbooks with svn 2025-11-19 01:39:53 +00:00
l10n daemon script
ce96232bbd GIT_SILENT Sync po/docbooks with svn 2025-11-18 02:00:53 +00:00
l10n daemon script
95653cf3f7 GIT_SILENT Sync po/docbooks with svn 2025-11-17 13:25:28 +00:00
l10n daemon script
0c11cd331f GIT_SILENT Sync po/docbooks with svn 2025-11-17 01:40:07 +00:00
Tobias Fella
3c8ca0d421 Simplify key backup unlocking
Replaces the separate text fields for security keys and backup passphrases with a single on; internally, both methods are then tried.
2025-11-16 14:21:26 +00:00
l10n daemon script
52f71d5c55 GIT_SILENT Sync po/docbooks with svn 2025-11-16 01:40:16 +00:00
l10n daemon script
00f7dd5175 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 01:34:16 +00:00
l10n daemon script
52da8415e9 GIT_SILENT Sync po/docbooks with svn 2025-11-15 01:41:08 +00:00
l10n daemon script
953e4cd792 GIT_SILENT Sync po/docbooks with svn 2025-11-14 01:41:28 +00:00
Tobias Fella
ee4b1578b1 Consider highlights when determining whether a room can be marked as read
BUG: 501080
2025-11-13 20:11:06 +00:00
Paul Brown
ae24424a32 Adding anthropy@mastodon.derg.nz to list of supporters 2025-11-13 19:32:43 +00:00
l10n daemon script
51be282824 GIT_SILENT Sync po/docbooks with svn 2025-11-13 01:42:02 +00:00
Tobias Fella
c539dfc352 Fix crash when poll answer has fewer selections than possible
BUG: 511909
2025-11-12 12:29:53 +00:00
Carl Schwan
fe734206df Add Thibault Molleman to the donnors 2025-11-12 11:14:38 +01:00
l10n daemon script
79a49165f1 GIT_SILENT Sync po/docbooks with svn 2025-11-11 01:51:20 +00:00
Tobias Fella
ada5eef088 Remove outdated flatpak font config 2025-11-10 17:27:25 +00:00
Tobias Fella
9cc5778126 Remove secret backup feature flag
There isn't really a point in hiding this behind a flag and it just makes the process even more confusing
2025-11-10 18:04:50 +01:00
l10n daemon script
b129805f94 GIT_SILENT Sync po/docbooks with svn 2025-11-10 01:44:58 +00:00
Joshua Goins
887865c0aa 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.
2025-11-09 12:03:17 -05:00
Joshua Goins
1336194cf4 Don't send an erroneous SetTypingJob on start-up
You can see this while starting NeoChat, as it always fails because
localMember() isn't valid at this point. This is called during the
ChatBar setup as we're setting up the text, which also happens during
room switch.
2025-11-09 10:55:05 -05:00
Joshua Goins
5a7ae3563e Fix alignment on the room invitation page
I forgot to horizontally center the room alias label, so it was usually
stuck to the left-side. I also don't know why I put the room alias on
top and the room name on the bottom, so those are swapped now too.
2025-11-09 10:54:54 -05:00
Joshua Goins
7c56e24fdc Manually update badge count in initActiveConnection
Without doing this, it's possible to start NeoChat and have no badge
count despite having notable notifications. The reason for this is if
badgeNotificationCount was updated and changed before this function
call, and a call to refreshBadgeNotificationCount doesn't emit the
changed signal.

This is easy to work around by calling updateBadgeNotificationCount
ourselves.
2025-11-09 10:19:55 -05:00
Joshua Goins
e6b9abeca3 Account for pending invites in the badge notification count 2025-11-09 10:18:28 -05:00
l10n daemon script
1b45784a88 GIT_SILENT Sync po/docbooks with svn 2025-11-09 01:48:27 +00:00
Albert Astals Cid
a12b0d5282 GIT_SILENT Upgrade release service version to 26.03.70. 2025-11-06 18:29:06 +01:00
Paul Brown
a6d75f2ff5 Adding Joshua Strobl to list of supporters 2025-11-06 17:01:19 +00:00
l10n daemon script
b8f7f33b9a GIT_SILENT Sync po/docbooks with svn 2025-11-06 16:14:20 +00:00
105 changed files with 12946 additions and 16125 deletions

View File

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

View File

@@ -10,7 +10,6 @@ Dependencies:
'frameworks/ki18n': '@latest-kf6'
'frameworks/kconfig': '@latest-kf6'
'frameworks/syntax-highlighting': '@latest-kf6'
'frameworks/kiconthemes': '@latest-kf6'
'frameworks/kitemmodels': '@latest-kf6'
'frameworks/kquickcharts': '@latest-kf6'
'frameworks/knotifications': '@latest-kf6'
@@ -29,11 +28,15 @@ Dependencies:
'frameworks/kio': '@latest-kf6'
'frameworks/kwindowsystem': '@latest-kf6'
'frameworks/kstatusnotifieritem': '@latest-kf6'
- 'on': ['Linux', 'FreeBSD', 'Android']
'require':
'libraries/kunifiedpush': '@latest-kf6'
- 'on': ['Linux', 'FreeBSD']
'require':
'frameworks/kdbusaddons': '@latest-kf6'
'frameworks/purpose': '@latest-kf6'
'libraries/kunifiedpush': '@latest-kf6'
- 'on': ['Linux']
'require':

View File

@@ -7,9 +7,9 @@
cmake_minimum_required(VERSION 3.16)
# KDE Applications version, managed by release script.
set(RELEASE_SERVICE_VERSION_MAJOR "25")
set(RELEASE_SERVICE_VERSION_MINOR "12")
set(RELEASE_SERVICE_VERSION_MICRO "2")
set(RELEASE_SERVICE_VERSION_MAJOR "26")
set(RELEASE_SERVICE_VERSION_MINOR "03")
set(RELEASE_SERVICE_VERSION_MICRO "70")
set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(NeoChat VERSION ${RELEASE_SERVICE_VERSION})
@@ -46,10 +46,6 @@ if (NOT ANDROID)
include(KDEClangFormat)
endif()
if(NEOCHAT_FLATPAK)
include(cmake/Flatpak.cmake)
endif()
set(QUOTIENT_FORCE_NAMESPACED_INCLUDES TRUE)
ecm_set_disabled_deprecation_versions(Qt 6.9.0 KF 6.17.0)
@@ -69,7 +65,7 @@ if (QT_KNOWN_POLICY_QTP0004)
qt_policy(SET QTP0004 NEW)
endif ()
find_package(KF6 ${KF_MIN_VERSION} COMPONENTS Kirigami I18n Notifications Config CoreAddons Sonnet ItemModels ColorScheme IconThemes)
find_package(KF6 ${KF_MIN_VERSION} COMPONENTS Kirigami I18n Notifications Config CoreAddons Sonnet ItemModels ColorScheme)
set_package_properties(KF6 PROPERTIES
TYPE REQUIRED
PURPOSE "Basic application components"
@@ -152,7 +148,7 @@ set_package_properties(KF6DocTools PROPERTIES DESCRIPTION
option(WITH_UNIFIEDPUSH "Build with KUnifiedPush support" ON)
if (ANDROID OR APPLE OR WIN32 OR HAIKU)
if (APPLE OR WIN32 OR HAIKU)
set(WITH_UNIFIEDPUSH OFF)
endif()

View File

@@ -63,7 +63,7 @@ void ActionsTest::testActions_data()
QTest::addColumn<std::optional<QString>>("resultText");
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);
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)

View File

@@ -1,14 +0,0 @@
# 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

@@ -1,23 +0,0 @@
<?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,7 +193,6 @@
<li xml:lang="ar">التصويت - MSC3381</li>
<li xml:lang="ca">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="en-GB">Polls - MSC3381</li>
<li xml:lang="eo">Enketoj - MSC3381</li>
@@ -228,7 +227,6 @@
<li xml:lang="ar">حزم الملصقات - MSC2545</li>
<li xml:lang="ca">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="en-GB">Sticker Packs - MSC2545</li>
<li xml:lang="eo">Glumark-Pakoj - MSC2545</li>
@@ -322,7 +320,6 @@
<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::PromotionalArt16x9">https://invent.kde.org/network/neochat/-/raw/master/icons/windows/promoimage-1920x1080.png</value>
<value key="KDE::supporters">Anonymous donor, Akseli</value>
</custom>
<launchable type="desktop-id">org.kde.neochat.desktop</launchable>
<screenshots>
@@ -490,8 +487,6 @@
<content_attribute id="social-chat">intense</content_attribute>
</content_rating>
<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.08.3" date="2025-11-06"/>
<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 ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-01-28 02:42+0000\n"
"POT-Creation-Date: 2025-12-18 00:43+0000\n"
"PO-Revision-Date: 2023-12-12 01:02+0100\n"
"Last-Translator: Enol P. <enolp@softastur.org>\n"
"Language-Team: Asturian <alministradores@softastur.org>\n"
@@ -25,127 +25,127 @@ msgctxt ""
msgid "Receiving notifications for new messages"
msgstr ""
#: src/app/controller.cpp:316
#: src/app/controller.cpp:319
#, kde-format
msgid "Receiving push notifications"
msgstr ""
#: src/app/main.cpp:136 src/login/WelcomePage.qml:77
#: src/app/main.cpp:131 src/login/WelcomePage.qml:77
#, kde-format
msgid "NeoChat"
msgstr ""
#: src/app/main.cpp:138
#: src/app/main.cpp:133
#, kde-format
msgid "Chat on Matrix"
msgstr ""
#: src/app/main.cpp:140
#: src/app/main.cpp:135
#, kde-format
msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community"
msgstr ""
#: src/app/main.cpp:141
#: src/app/main.cpp:136
#, kde-format
msgid "Carl Schwan"
msgstr ""
#: src/app/main.cpp:141 src/app/main.cpp:142 src/app/main.cpp:143
#: src/app/main.cpp:145
#: src/app/main.cpp:136 src/app/main.cpp:137 src/app/main.cpp:138
#: src/app/main.cpp:140
#, kde-format
msgid "Maintainer"
msgstr ""
#: src/app/main.cpp:142
#: src/app/main.cpp:137
#, kde-format
msgid "Tobias Fella"
msgstr ""
#: src/app/main.cpp:143
#: src/app/main.cpp:138
#, kde-format
msgid "James Graham"
msgstr ""
#: src/app/main.cpp:144
#: src/app/main.cpp:139
#, kde-format
msgid "Joshua Goins"
msgstr ""
#: src/app/main.cpp:149
#: src/app/main.cpp:144
#, kde-format
msgid "Black Hat"
msgstr ""
#: src/app/main.cpp:149
#: src/app/main.cpp:144
#, kde-format
msgid "Original author of Spectral"
msgstr ""
#: src/app/main.cpp:150
#: src/app/main.cpp:145
#, kde-format
msgid "Alexey Rusakov"
msgstr ""
#: src/app/main.cpp:150
#: src/app/main.cpp:145
#, kde-format
msgid "Maintainer of libQuotient"
msgstr ""
#: src/app/main.cpp:151
#: src/app/main.cpp:146
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr ""
#: src/app/main.cpp:151
#: src/app/main.cpp:146
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr ""
#: src/app/main.cpp:155
#: src/app/main.cpp:150
#, kde-format
msgid "A Qt library to write cross-platform clients for Matrix"
msgstr ""
#: src/app/main.cpp:157
#: src/app/main.cpp:152
#, kde-format
msgctxt "<version number> (built against <possibly different version number>)"
msgid "%1 (built against %2)"
msgstr ""
#: src/app/main.cpp:178
#: src/app/main.cpp:167
#, kde-format
msgid "Client for the matrix communication protocol"
msgstr ""
#: src/app/main.cpp:179
#: src/app/main.cpp:168
#, kde-format
msgid "Supports matrix: url scheme"
msgstr ""
#: src/app/main.cpp:180
#: src/app/main.cpp:169
#, kde-format
msgid "Ignore all SSL Errors, e.g., unsigned certificates."
msgstr ""
#: src/app/main.cpp:182
#: src/app/main.cpp:171
#, kde-format
msgctxt "command line description"
msgid "Replace an existing instance"
msgstr ""
#: src/app/main.cpp:185
#: src/app/main.cpp:174
#, kde-format
msgid "Only used for autotests"
msgstr ""
#: src/app/main.cpp:195
#: src/app/main.cpp:184
#, kde-format
msgid "Share a URL to Matrix"
msgstr ""
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:390
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:386
#, kde-format
msgid "Encrypted Message"
msgstr ""
@@ -170,40 +170,40 @@ msgstr ""
msgid "Reply…"
msgstr ""
#: src/app/notificationsmanager.cpp:306
#: src/app/notificationsmanager.cpp:304
#, kde-format
msgid "%1 invited you to a room"
msgstr ""
#: src/app/notificationsmanager.cpp:309
#: src/app/notificationsmanager.cpp:307
#, kde-format
msgid "Open this invitation in NeoChat"
msgstr ""
#: src/app/notificationsmanager.cpp:319
#: src/app/notificationsmanager.cpp:317
#, kde-format
msgctxt "@action:button The thing being accepted is an invitation to chat"
msgid "Accept"
msgstr ""
#: src/app/notificationsmanager.cpp:320
#: src/app/notificationsmanager.cpp:318
#, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject"
msgstr ""
#: src/app/notificationsmanager.cpp:322
#: src/app/notificationsmanager.cpp:320
#, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject and Ignore User"
msgstr ""
#: src/app/notificationsmanager.cpp:383
#: src/app/notificationsmanager.cpp:379
#, kde-format
msgid "%1 (%2)"
msgstr ""
#: src/app/notificationsmanager.cpp:394
#: src/app/notificationsmanager.cpp:390
#, kde-format
msgid "Open NeoChat"
msgstr ""
@@ -244,7 +244,7 @@ msgctxt "@action:inmenu"
msgid "Open Developer Tools"
msgstr ""
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:200
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:182
#, kde-format
msgctxt "@title:window"
msgid "Developer Tools"
@@ -256,31 +256,31 @@ msgctxt "@action:inmenu"
msgid "Open Secret Backup"
msgstr ""
#: src/app/qml/AccountMenu.qml:84
#: src/app/qml/AccountMenu.qml:83
#, kde-format
msgctxt "@title:window"
msgid "Open Key Backup"
msgstr ""
#: src/app/qml/AccountMenu.qml:89
#: src/app/qml/AccountMenu.qml:88
#, kde-format
msgctxt "@action:inmenu"
msgid "Verify This Device"
msgstr ""
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:46
#: src/app/qml/AccountMenu.qml:94 src/settings/DevicesPage.qml:46
#, kde-format
msgctxt "@title"
msgid "Verification Request Sent"
msgstr ""
#: src/app/qml/AccountMenu.qml:96 src/settings/DevicesPage.qml:47
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:47
#, kde-format
msgctxt "@info:label"
msgid "To proceed, accept the verification request on another device."
msgstr ""
#: src/app/qml/AccountMenu.qml:107
#: src/app/qml/AccountMenu.qml:106
#, kde-format
msgctxt "@action:inmenu"
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."
msgstr ""
#: src/app/qml/InvitationView.qml:97
#: src/app/qml/InvitationView.qml:98
#, kde-format
msgctxt "@info:label This user invited you to chat at 'timestamp'"
msgid "This user invited you to chat at %1."
msgstr ""
#: src/app/qml/InvitationView.qml:112
#: src/app/qml/InvitationView.qml:113
#, kde-format
msgctxt "@action:button Accept this invite"
msgid "Accept Invite"
msgstr ""
#: src/app/qml/InvitationView.qml:127
#: src/app/qml/InvitationView.qml:128
#, kde-format
msgctxt "@action:button Reject this invite"
msgid "Reject Invite"
msgstr ""
#: src/app/qml/InvitationView.qml:141
#: src/app/qml/InvitationView.qml:142
#, kde-format
msgctxt "@action:button Block the user"
msgid "Block %1"
msgstr ""
#: src/app/qml/InvitationView.qml:180
#: src/app/qml/InvitationView.qml:181
#, kde-kuit-format
msgctxt ""
"@info:label Ensure you are referring to the same translation used for that "
@@ -937,7 +937,7 @@ msgctxt "@title:dialog"
msgid "Select a File"
msgstr ""
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:125
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:109
#, kde-format
msgctxt "@title"
msgid "Scan a QR Code"
@@ -1027,63 +1027,63 @@ msgctxt "@action:button"
msgid "Ignore"
msgstr ""
#: src/app/qml/RoomPage.qml:95
#: src/app/qml/RoomPage.qml:87
#, kde-format
msgctxt "@action:button"
msgid "Join Jitsi meeting…"
msgstr ""
#: src/app/qml/RoomPage.qml:98
#: src/app/qml/RoomPage.qml:90
#, kde-format
msgctxt "@action:button"
msgid "Start Jitsi meeting…"
msgstr ""
#: src/app/qml/RoomPage.qml:98
#: src/app/qml/RoomPage.qml:90
#, kde-format
msgctxt "@action:button"
msgid "You do not have permissions to start Jitsi meetings"
msgstr ""
#: src/app/qml/RoomPage.qml:137 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:109
#: src/app/qml/RoomPage.qml:129 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:91
#, kde-format
msgctxt "@action:title"
msgid "Search"
msgstr ""
#: src/app/qml/RoomPage.qml:150
#: src/app/qml/RoomPage.qml:142
#, kde-format
msgctxt "@info"
msgid "This room contains official messages from your homeserver."
msgstr ""
#: src/app/qml/RoomPage.qml:161
#: src/app/qml/RoomPage.qml:153
#, kde-format
msgctxt "@info:status"
msgid "NeoChat is offline. Please check your network connection."
msgstr ""
#: src/app/qml/RoomPage.qml:221 src/roominfo/RoomInformation.qml:182
#: src/app/qml/RoomPage.qml:213 src/roominfo/RoomInformation.qml:164
#: src/roominfo/RoomPinnedMessagesPage.qml:22
#, kde-format
msgctxt "@title"
msgid "Pinned Messages"
msgstr ""
#: src/app/qml/RoomPage.qml:294
#: src/app/qml/RoomPage.qml:285
#, kde-format
msgctxt "@title"
msgid "Welcome to NeoChat"
msgstr ""
#: src/app/qml/RoomPage.qml:295
#: src/app/qml/RoomPage.qml:286
#, kde-format
msgctxt "@info:usagetip"
msgid "Select or join a room to get started"
msgstr ""
#: src/app/qml/RoomPage.qml:356
#: src/app/qml/RoomPage.qml:347
#, kde-format
msgctxt "@title:dialog"
msgid "Message Source"
@@ -1167,13 +1167,19 @@ msgctxt "@info"
msgid "Shared url for image is <a href='%1'>%1</a>"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:14
#: src/app/qml/UnlockSSSSDialog.qml:16
#, kde-format
msgctxt "@title:window"
msgid "Load your encrypted messages"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:36
#: src/app/qml/UnlockSSSSDialog.qml:35
#, kde-format
msgctxt "@info:status"
msgid "The security key or backup passphrase was not correct."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:41
#, kde-format
msgctxt "@info:status"
msgid "Encryption keys restored."
@@ -1181,67 +1187,43 @@ msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:48
#, kde-format
msgctxt "@info:status"
msgid "The security phrase was not correct."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:54
#, kde-format
msgctxt "@title"
msgid "Unlock using Passphrase"
msgid "Unlock using Security Key or Backup Passphrase"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:58
#, kde-format
msgctxt "@info"
msgid "If you have a backup passphrase for this account, enter it below."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:62
#, kde-format
msgctxt "@label:textbox"
msgid "Backup Password:"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:67 src/app/qml/UnlockSSSSDialog.qml:102
#, kde-format
msgctxt "@action:button"
msgid "Unlock"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:79
#, kde-format
msgctxt "@title"
msgid "Unlock using Security Key"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:83
#: src/app/qml/UnlockSSSSDialog.qml:52
#, kde-format
msgctxt "@info"
msgid ""
"If you have a security key for this account, enter it below or upload it as "
"a file."
"If you have a security key or backup passphrase for this account, enter it "
"below or upload it as a file."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:87
#: src/app/qml/UnlockSSSSDialog.qml:56
#, kde-format
msgctxt "@label:textbox"
msgid "Security Key:"
msgid "Security Key or Backup Passphrase:"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:92
#: src/app/qml/UnlockSSSSDialog.qml:61
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:113
#: src/app/qml/UnlockSSSSDialog.qml:71
#, kde-format
msgctxt "@action:button"
msgid "Unlock"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:82
#, kde-format
msgctxt "@title"
msgid "Unlock from Cross-Signing"
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:117
#: src/app/qml/UnlockSSSSDialog.qml:86
#, kde-format
msgctxt "@info"
msgid ""
@@ -1249,7 +1231,7 @@ msgid ""
"key from other devices by clicking the button below."
msgstr ""
#: src/app/qml/UnlockSSSSDialog.qml:122
#: src/app/qml/UnlockSSSSDialog.qml:91
#, kde-format
msgctxt "@action:button"
msgid "Request from other Devices"
@@ -1397,6 +1379,38 @@ msgstr ""
msgid "Copy link"
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
#, kde-format
msgctxt "@action:button"
@@ -1599,22 +1613,22 @@ msgctxt "@action:button Done, we are finished with verification"
msgid "Done"
msgstr ""
#: src/app/roommanager.cpp:235
#: src/app/roommanager.cpp:213
#, kde-format
msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier"
msgstr ""
#: src/app/roommanager.cpp:439
#: src/app/roommanager.cpp:430
#, kde-format
msgid "Failed to join %1:<br />%2"
msgstr ""
#: src/app/roommanager.cpp:463
#: src/app/roommanager.cpp:454
#, kde-format
msgid "You requested to join '%1'"
msgstr ""
#: src/app/roommanager.cpp:467
#: src/app/roommanager.cpp:458
#, kde-format
msgid "Failed to request joining room<br />%1"
msgstr ""
@@ -1695,7 +1709,7 @@ msgctxt "@placeholder"
msgid "Send a message…"
msgstr ""
#: src/chatbar/ChatBar.qml:430 src/messagecontent/ChatBarComponent.qml:234
#: src/chatbar/ChatBar.qml:432 src/messagecontent/ChatBarComponent.qml:234
#, kde-format
msgctxt "@action:button"
msgid "Cancel reply"
@@ -1897,19 +1911,13 @@ msgstr ""
#: src/devtools/FeatureFlagPage.qml:25
#, kde-format
msgctxt "@option:check Enable the matrix 'secret backup' feature"
msgid "Secret Backup"
msgstr ""
#: src/devtools/FeatureFlagPage.qml:31
#, kde-format
msgctxt ""
"@option:check Enable the matrix feature to add a phone number as a third "
"party ID"
msgid "Add phone numbers as 3PIDs"
msgstr ""
#: src/devtools/FeatureFlagPage.qml:40
#: src/devtools/FeatureFlagPage.qml:34
#, kde-format
msgctxt "@option:check Enable the matrix feature for audio and video calling"
msgid "Calls"
@@ -2283,12 +2291,12 @@ msgstr ""
#: src/libneochat/eventhandler.cpp:392
#, kde-format
msgid "has put %1 out of the room: %2"
msgid "has removed %1 from the room: %2"
msgstr ""
#: src/libneochat/eventhandler.cpp:394
#, kde-format
msgid "has put %1 out of the room"
msgid "has removed %1 from the room"
msgstr ""
#: src/libneochat/eventhandler.cpp:398
@@ -3128,7 +3136,7 @@ msgctxt "@info the person that created this room"
msgid "Creator"
msgstr ""
#: src/libneochat/neochatconnection.cpp:71
#: src/libneochat/neochatconnection.cpp:73
#, kde-format
msgid ""
"File too large to download.<br />Contact your matrix server administrator "
@@ -3151,12 +3159,12 @@ msgstr ""
msgid "Space creation failed: %1"
msgstr ""
#: src/libneochat/neochatroom.cpp:1253
#: src/libneochat/neochatroom.cpp:1254
#, kde-format
msgid "Report sent successfully."
msgstr ""
#: src/libneochat/neochatroom.cpp:1618 src/libneochat/neochatroom.cpp:1626
#: src/libneochat/neochatroom.cpp:1619 src/libneochat/neochatroom.cpp:1627
#, kde-format
msgctxt "'Lat' and 'Lon' as in Latitude and Longitude"
msgid "Lat: %1, Lon: %2"
@@ -3629,12 +3637,12 @@ msgctxt "@action:button"
msgid "Cancel"
msgstr ""
#: src/messagecontent/CodeComponent.qml:154
#: src/messagecontent/CodeComponent.qml:161
#, kde-format
msgid "Copy to clipboard"
msgstr ""
#: src/messagecontent/CodeComponent.qml:166
#: src/messagecontent/CodeComponent.qml:173
#: src/messagecontent/VideoComponent.qml:374
#, kde-format
msgctxt "@action:button"
@@ -3841,13 +3849,13 @@ msgctxt "as in 'this vote has ended'"
msgid "(Ended)"
msgstr ""
#: src/messagecontent/pollhandler.cpp:306
#: src/messagecontent/pollhandler.cpp:308
#, kde-format
msgctxt "%1 is the poll answer that had the most votes"
msgid "The poll has ended. Top answer: %1"
msgstr ""
#: src/messagecontent/ReactionComponent.qml:88
#: src/messagecontent/ReactionComponent.qml:90
#, kde-format
msgctxt "@button"
msgid "React"
@@ -3882,7 +3890,7 @@ msgctxt "@action:button"
msgid "Volume"
msgstr ""
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:163
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:145
#, kde-format
msgctxt "Locations on a map"
msgid "Locations"
@@ -3893,18 +3901,18 @@ msgstr ""
msgid "There are no locations shared in this room."
msgstr ""
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:50
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:49
#, kde-format
msgctxt "@action:button"
msgid "Room settings"
msgstr ""
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:92
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:91
#, kde-format
msgid "Information"
msgstr ""
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:97
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:96
#, kde-format
msgid "Media"
msgstr ""
@@ -3921,95 +3929,95 @@ msgctxt "@action:title"
msgid "Room Information"
msgstr ""
#: src/roominfo/RoomInformation.qml:90
#: src/roominfo/RoomInformation.qml:72
#, kde-format
msgctxt "Room actions"
msgid "Actions"
msgstr ""
#: src/roominfo/RoomInformation.qml:100
#: src/roominfo/RoomInformation.qml:82
#, kde-format
msgctxt "@action:button"
msgid "Search Messages"
msgstr ""
#: src/roominfo/RoomInformation.qml:117
#: src/roominfo/RoomInformation.qml:99
#, kde-format
msgctxt "@action:button"
msgid "Verify user"
msgstr ""
#: src/roominfo/RoomInformation.qml:128
#: src/roominfo/RoomInformation.qml:110
#, kde-format
msgctxt "@action:button"
msgid "Remove from Favorites"
msgstr ""
#: src/roominfo/RoomInformation.qml:128
#: src/roominfo/RoomInformation.qml:110
#, kde-format
msgctxt "@action:button"
msgid "Add to Favorites"
msgstr ""
#: src/roominfo/RoomInformation.qml:141
#: src/roominfo/RoomInformation.qml:123
#, kde-format
msgctxt "@action:button"
msgid "Extensions"
msgstr ""
#: src/roominfo/RoomInformation.qml:147
#: src/roominfo/RoomInformation.qml:129
#, kde-format
msgctxt "@title:window"
msgid "Extensions"
msgstr ""
#: src/roominfo/RoomInformation.qml:157
#: src/roominfo/RoomInformation.qml:139
#, kde-format
msgctxt "@action:button"
msgid "Shared Locations"
msgstr ""
#: src/roominfo/RoomInformation.qml:173
#: src/roominfo/RoomInformation.qml:155
#, kde-format
msgctxt "@action:button"
msgid "Pinned Messages"
msgstr ""
#: src/roominfo/RoomInformation.qml:188
#: src/roominfo/RoomInformation.qml:170
#, kde-format
msgctxt "@action:inmenu"
msgid "Inspect Room Data"
msgstr ""
#: src/roominfo/RoomInformation.qml:209
#: src/roominfo/RoomInformation.qml:191
#, kde-format
msgctxt "@action:button"
msgid "Leave Space…"
msgstr ""
#: src/roominfo/RoomInformation.qml:209
#: src/roominfo/RoomInformation.qml:191
#, kde-format
msgctxt "@action:button"
msgid "Leave Room…"
msgstr ""
#: src/roominfo/RoomInformation.qml:222
#: src/roominfo/RoomInformation.qml:204
#, kde-format
msgid "Members"
msgstr ""
#: src/roominfo/RoomInformation.qml:237 src/spaces/SpaceHomePage.qml:85
#: src/roominfo/RoomInformation.qml:219 src/spaces/SpaceHomePage.qml:85
#, kde-format
msgctxt "@title"
msgid "Invite a User"
msgstr ""
#: src/roominfo/RoomInformation.qml:241
#: src/roominfo/RoomInformation.qml:223
#, kde-format
msgid "Invite user to room"
msgstr ""
#: src/roominfo/RoomInformation.qml:248
#: src/roominfo/RoomInformation.qml:230
#, kde-format
msgctxt "@info"
msgid "%1 member"
@@ -4017,7 +4025,7 @@ msgid_plural "%1 members"
msgstr[0] ""
msgstr[1] ""
#: src/roominfo/RoomInformation.qml:248
#: src/roominfo/RoomInformation.qml:230
#, kde-format
msgid "No member count"
msgstr ""
@@ -4073,42 +4081,42 @@ msgctxt "@action:button"
msgid "Remove widget"
msgstr ""
#: src/rooms/ExploreComponent.qml:38
#: src/rooms/ExploreComponent.qml:36
#, kde-format
msgctxt "@title"
msgid "Rooms"
msgstr ""
#: src/rooms/ExploreComponent.qml:50
#: src/rooms/ExploreComponent.qml:48
#, kde-format
msgctxt "@action"
msgid "Search Rooms"
msgstr ""
#: src/rooms/ExploreComponent.qml:75
#: src/rooms/ExploreComponent.qml:61
#, kde-format
msgctxt "@action:button"
msgid "Show Menu"
msgstr ""
#: src/rooms/ExploreComponent.qml:94 src/rooms/ExploreComponentMobile.qml:65
#: src/rooms/ExploreComponent.qml:78 src/rooms/ExploreComponentMobile.qml:65
#, kde-format
msgid "Find your friends"
msgstr ""
#: src/rooms/ExploreComponent.qml:99 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/ExploreComponent.qml:83 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246
#, kde-format
msgctxt "@title"
msgid "Find your friends"
msgstr ""
#: src/rooms/ExploreComponent.qml:104
#: src/rooms/ExploreComponent.qml:88
#, kde-format
msgid "Create a Room"
msgstr ""
#: src/rooms/ExploreComponent.qml:119
#: src/rooms/ExploreComponent.qml:103
#, kde-format
msgid "Scan a QR Code"
msgstr ""
@@ -4140,13 +4148,13 @@ msgctxt "@action:button"
msgid "Create a Space"
msgstr ""
#: src/rooms/models/roomtreemodel.cpp:366
#: src/rooms/models/roomtreemodel.cpp:364
#, kde-format
msgctxt "@info:label"
msgid "Invited you to chat"
msgstr ""
#: src/rooms/models/roomtreemodel.cpp:368
#: src/rooms/models/roomtreemodel.cpp:366
#, kde-format
msgctxt "@info:label"
msgid "%1 invited you"
@@ -4228,6 +4236,38 @@ msgstr ""
#: src/rooms/RoomContextMenu.qml:154
#, 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"
msgid "Leave Room…"
msgstr ""
@@ -4291,13 +4331,13 @@ msgctxt "@action:button"
msgid "Search in friend directory"
msgstr ""
#: src/rooms/RoomTreeSection.qml:61
#: src/rooms/RoomTreeSection.qml:59
#, kde-format
msgctxt "Collapse <section name>"
msgid "Collapse %1"
msgstr ""
#: src/rooms/RoomTreeSection.qml:61
#: src/rooms/RoomTreeSection.qml:59
#, kde-format
msgctxt "Expand <section name"
msgid "Expand %1"
@@ -6888,19 +6928,19 @@ msgctxt "@info text-to-speech %1 is author %2 is message text"
msgid "%1 said %2"
msgstr ""
#: src/timeline/DelegateContextMenu.qml:403
#: src/timeline/DelegateContextMenu.qml:402
#, kde-format
msgctxt "@action:button 'Unpin' as in 'Unpin this message'"
msgid "Unpin"
msgstr ""
#: src/timeline/DelegateContextMenu.qml:403
#: src/timeline/DelegateContextMenu.qml:402
#, kde-format
msgctxt "@action:button 'Pin' as in 'Pin the message in the room'"
msgid "Pin"
msgstr ""
#: src/timeline/DelegateContextMenu.qml:416
#: src/timeline/DelegateContextMenu.qml:415
#, kde-format
msgctxt "@action:inmenu"
msgid "View Source"
@@ -6968,31 +7008,31 @@ msgid ""
"this point."
msgstr ""
#: src/timeline/TimelineView.qml:241
#: src/timeline/TimelineView.qml:214
#, kde-format
msgctxt "@action:button"
msgid "Jump to first unread message"
msgstr ""
#: src/timeline/TimelineView.qml:241
#: src/timeline/TimelineView.qml:214
#, kde-format
msgctxt "@action:button"
msgid "Jump to oldest loaded message"
msgstr ""
#: src/timeline/TimelineView.qml:272
#: src/timeline/TimelineView.qml:245
#, kde-format
msgctxt "@action:button"
msgid "Jump to latest message"
msgstr ""
#: src/timeline/TimelineView.qml:307
#: src/timeline/TimelineView.qml:279
#, kde-format
msgctxt "@info:placeholder"
msgid "Drag items here to share them"
msgstr ""
#: src/timeline/TimelineView.qml:332
#: src/timeline/TimelineView.qml:304
#, kde-format
msgctxt "Message displayed when some users are 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 ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-01-28 02:42+0000\n"
"PO-Revision-Date: 2025-11-10 11:43+0100\n"
"POT-Creation-Date: 2025-12-18 00:43+0000\n"
"PO-Revision-Date: 2025-12-01 11:35+0100\n"
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca@valencia\n"
@@ -28,127 +28,127 @@ msgctxt ""
msgid "Receiving notifications for new messages"
msgstr "Rebre les notificacions dels missatges nous"
#: src/app/controller.cpp:316
#: src/app/controller.cpp:319
#, kde-format
msgid "Receiving push notifications"
msgstr "Rebre les notificacions automàtiques"
#: src/app/main.cpp:136 src/login/WelcomePage.qml:77
#: src/app/main.cpp:131 src/login/WelcomePage.qml:77
#, kde-format
msgid "NeoChat"
msgstr "NeoChat"
#: src/app/main.cpp:138
#: src/app/main.cpp:133
#, kde-format
msgid "Chat on Matrix"
msgstr "Xat a Matrix"
#: src/app/main.cpp:140
#: src/app/main.cpp:135
#, kde-format
msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community"
msgstr "© 2018-2020 Black Hat, 2020-2025 la comunitat KDE"
#: src/app/main.cpp:141
#: src/app/main.cpp:136
#, kde-format
msgid "Carl Schwan"
msgstr "Carl Schwan"
#: src/app/main.cpp:141 src/app/main.cpp:142 src/app/main.cpp:143
#: src/app/main.cpp:145
#: src/app/main.cpp:136 src/app/main.cpp:137 src/app/main.cpp:138
#: src/app/main.cpp:140
#, kde-format
msgid "Maintainer"
msgstr "Mantenidor"
#: src/app/main.cpp:142
#: src/app/main.cpp:137
#, kde-format
msgid "Tobias Fella"
msgstr "Tobias Fella"
#: src/app/main.cpp:143
#: src/app/main.cpp:138
#, kde-format
msgid "James Graham"
msgstr "Nate Graham"
#: src/app/main.cpp:144
#: src/app/main.cpp:139
#, kde-format
msgid "Joshua Goins"
msgstr "Joshua Goins"
#: src/app/main.cpp:149
#: src/app/main.cpp:144
#, kde-format
msgid "Black Hat"
msgstr "Black Hat"
#: src/app/main.cpp:149
#: src/app/main.cpp:144
#, kde-format
msgid "Original author of Spectral"
msgstr "Autor original de Spectral"
#: src/app/main.cpp:150
#: src/app/main.cpp:145
#, kde-format
msgid "Alexey Rusakov"
msgstr "Alexey Rusakov"
#: src/app/main.cpp:150
#: src/app/main.cpp:145
#, kde-format
msgid "Maintainer of libQuotient"
msgstr "Mantenidor de la libQuotient"
#: src/app/main.cpp:151
#: src/app/main.cpp:146
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Josep M. Ferrer"
#: src/app/main.cpp:151
#: src/app/main.cpp:146
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "txemaq@gmail.com"
#: src/app/main.cpp:155
#: src/app/main.cpp:150
#, kde-format
msgid "A Qt library to write cross-platform clients for Matrix"
msgstr "Una biblioteca Qt per a escriure clients multiplataforma per a Matrix"
#: src/app/main.cpp:157
#: src/app/main.cpp:152
#, kde-format
msgctxt "<version number> (built against <possibly different version number>)"
msgid "%1 (built against %2)"
msgstr "%1 (construïda amb %2)"
#: src/app/main.cpp:178
#: src/app/main.cpp:167
#, kde-format
msgid "Client for the matrix communication protocol"
msgstr "Client per al protocol de comunicacions Matrix"
#: src/app/main.cpp:179
#: src/app/main.cpp:168
#, kde-format
msgid "Supports matrix: url scheme"
msgstr "Implementa l'esquema d'URL «matrix:»"
#: src/app/main.cpp:180
#: src/app/main.cpp:169
#, kde-format
msgid "Ignore all SSL Errors, e.g., unsigned certificates."
msgstr "Ignora tots els errors d'SSL, p. ex., certificats sense signar."
#: src/app/main.cpp:182
#: src/app/main.cpp:171
#, kde-format
msgctxt "command line description"
msgid "Replace an existing instance"
msgstr "Substituïx una instància existent"
#: src/app/main.cpp:185
#: src/app/main.cpp:174
#, kde-format
msgid "Only used for autotests"
msgstr "Només s'utilitza en les proves automàtiques"
#: src/app/main.cpp:195
#: src/app/main.cpp:184
#, kde-format
msgid "Share a URL to Matrix"
msgstr "Compartix un URL a Matrix"
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:390
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:386
#, kde-format
msgid "Encrypted Message"
msgstr "Missatge encriptat"
@@ -173,40 +173,40 @@ msgstr "Respon"
msgid "Reply…"
msgstr "Respon…"
#: src/app/notificationsmanager.cpp:306
#: src/app/notificationsmanager.cpp:304
#, kde-format
msgid "%1 invited you to a room"
msgstr "%1 vos ha convidat a la sala"
#: src/app/notificationsmanager.cpp:309
#: src/app/notificationsmanager.cpp:307
#, kde-format
msgid "Open this invitation in NeoChat"
msgstr "Obri esta invitació en NeoChat"
#: src/app/notificationsmanager.cpp:319
#: src/app/notificationsmanager.cpp:317
#, kde-format
msgctxt "@action:button The thing being accepted is an invitation to chat"
msgid "Accept"
msgstr "Accepta"
#: src/app/notificationsmanager.cpp:320
#: src/app/notificationsmanager.cpp:318
#, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject"
msgstr "Rebutja"
#: src/app/notificationsmanager.cpp:322
#: src/app/notificationsmanager.cpp:320
#, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject and Ignore User"
msgstr "Rebutja i ignora l'usuari"
#: src/app/notificationsmanager.cpp:383
#: src/app/notificationsmanager.cpp:379
#, kde-format
msgid "%1 (%2)"
msgstr "%1 (%2)"
#: src/app/notificationsmanager.cpp:394
#: src/app/notificationsmanager.cpp:390
#, kde-format
msgid "Open NeoChat"
msgstr "Obri NeoChat"
@@ -247,7 +247,7 @@ msgctxt "@action:inmenu"
msgid "Open Developer Tools"
msgstr "Obri les eines de desenvolupament"
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:200
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:182
#, kde-format
msgctxt "@title:window"
msgid "Developer Tools"
@@ -259,25 +259,25 @@ msgctxt "@action:inmenu"
msgid "Open Secret Backup"
msgstr "Obri una còpia de seguretat del secret"
#: src/app/qml/AccountMenu.qml:84
#: src/app/qml/AccountMenu.qml:83
#, kde-format
msgctxt "@title:window"
msgid "Open Key Backup"
msgstr "Obri una còpia de seguretat de la clau"
#: src/app/qml/AccountMenu.qml:89
#: src/app/qml/AccountMenu.qml:88
#, kde-format
msgctxt "@action:inmenu"
msgid "Verify This Device"
msgstr "Verifica este dispositiu"
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:46
#: src/app/qml/AccountMenu.qml:94 src/settings/DevicesPage.qml:46
#, kde-format
msgctxt "@title"
msgid "Verification Request Sent"
msgstr "Enviament de sol·licitud de verificació"
#: src/app/qml/AccountMenu.qml:96 src/settings/DevicesPage.qml:47
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:47
#, kde-format
msgctxt "@info:label"
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 "
"dispositiu."
#: src/app/qml/AccountMenu.qml:107
#: src/app/qml/AccountMenu.qml:106
#, kde-format
msgctxt "@action:inmenu"
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."
msgstr "%1 vos ha convidat en esta sala %2."
#: src/app/qml/InvitationView.qml:97
#: src/app/qml/InvitationView.qml:98
#, kde-format
msgctxt "@info:label This user invited you to chat at 'timestamp'"
msgid "This user invited you to chat at %1."
msgstr "Este usuari vos ha convidat al xat %1."
#: src/app/qml/InvitationView.qml:112
#: src/app/qml/InvitationView.qml:113
#, kde-format
msgctxt "@action:button Accept this invite"
msgid "Accept Invite"
msgstr "Accepta la invitació"
#: src/app/qml/InvitationView.qml:127
#: src/app/qml/InvitationView.qml:128
#, kde-format
msgctxt "@action:button Reject this invite"
msgid "Reject Invite"
msgstr "Rebutja la invitació"
#: src/app/qml/InvitationView.qml:141
#: src/app/qml/InvitationView.qml:142
#, kde-format
msgctxt "@action:button Block the user"
msgid "Block %1"
msgstr "Bloqueja %1"
#: src/app/qml/InvitationView.qml:180
#: src/app/qml/InvitationView.qml:181
#, kde-kuit-format
msgctxt ""
"@info:label Ensure you are referring to the same translation used for that "
@@ -950,7 +950,7 @@ msgctxt "@title:dialog"
msgid "Select a File"
msgstr "Trieu un fitxer"
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:125
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:109
#, kde-format
msgctxt "@title"
msgid "Scan a QR Code"
@@ -1040,38 +1040,38 @@ msgctxt "@action:button"
msgid "Ignore"
msgstr "Ignora"
#: src/app/qml/RoomPage.qml:95
#: src/app/qml/RoomPage.qml:87
#, kde-format
msgctxt "@action:button"
msgid "Join Jitsi meeting…"
msgstr "Unix-te a una reunió de Jitsi…"
#: src/app/qml/RoomPage.qml:98
#: src/app/qml/RoomPage.qml:90
#, kde-format
msgctxt "@action:button"
msgid "Start Jitsi meeting…"
msgstr "Inicia una reunió de Jitsi…"
#: src/app/qml/RoomPage.qml:98
#: src/app/qml/RoomPage.qml:90
#, kde-format
msgctxt "@action:button"
msgid "You do not have permissions to start Jitsi meetings"
msgstr "No teniu permís per a iniciar reunions de Jitsi"
#: src/app/qml/RoomPage.qml:137 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:109
#: src/app/qml/RoomPage.qml:129 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:91
#, kde-format
msgctxt "@action:title"
msgid "Search"
msgstr "Busca"
#: src/app/qml/RoomPage.qml:150
#: src/app/qml/RoomPage.qml:142
#, kde-format
msgctxt "@info"
msgid "This room contains official messages from your homeserver."
msgstr "La sala conté missatges oficials del vostre servidor domèstic."
#: src/app/qml/RoomPage.qml:161
#: src/app/qml/RoomPage.qml:153
#, kde-format
msgctxt "@info:status"
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 "
"xarxa."
#: src/app/qml/RoomPage.qml:221 src/roominfo/RoomInformation.qml:182
#: src/app/qml/RoomPage.qml:213 src/roominfo/RoomInformation.qml:164
#: src/roominfo/RoomPinnedMessagesPage.qml:22
#, kde-format
msgctxt "@title"
msgid "Pinned Messages"
msgstr "Missatges fixats"
#: src/app/qml/RoomPage.qml:294
#: src/app/qml/RoomPage.qml:285
#, kde-format
msgctxt "@title"
msgid "Welcome to NeoChat"
msgstr "Us donem la benvinguda a NeoChat"
#: src/app/qml/RoomPage.qml:295
#: src/app/qml/RoomPage.qml:286
#, kde-format
msgctxt "@info:usagetip"
msgid "Select or join a room to get started"
msgstr "Trieu o uniu-vos a una per a començar"
#: src/app/qml/RoomPage.qml:356
#: src/app/qml/RoomPage.qml:347
#, kde-format
msgctxt "@title:dialog"
msgid "Message Source"
@@ -1182,13 +1182,21 @@ msgctxt "@info"
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>"
#: src/app/qml/UnlockSSSSDialog.qml:14
#: src/app/qml/UnlockSSSSDialog.qml:16
#, kde-format
msgctxt "@title:window"
msgid "Load your encrypted messages"
msgstr "Càrrega dels missatges encriptats"
#: src/app/qml/UnlockSSSSDialog.qml:36
#: src/app/qml/UnlockSSSSDialog.qml:35
#, 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
msgctxt "@info:status"
msgid "Encryption keys restored."
@@ -1196,71 +1204,47 @@ msgstr "S'han restaurat les claus d'encriptació."
#: src/app/qml/UnlockSSSSDialog.qml:48
#, kde-format
msgctxt "@info:status"
msgid "The security phrase was not correct."
msgstr "La frase de seguretat no és correcta."
#: 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
msgctxt "@info"
msgid "If you have a backup passphrase for this account, enter it below."
msgid "Unlock using Security Key or Backup Passphrase"
msgstr ""
"Si teniu una còpia de seguretat de la frase de pas per a este compte, "
"introduïu-la a continuació."
"Desbloqueja utilitzant la clau de seguretat o la frase de pas de còpia de "
"seguretat"
#: src/app/qml/UnlockSSSSDialog.qml:62
#, kde-format
msgctxt "@label:textbox"
msgid "Backup Password:"
msgstr "Còpia de seguretat de la contrasenya:"
#: src/app/qml/UnlockSSSSDialog.qml:67 src/app/qml/UnlockSSSSDialog.qml:102
#, kde-format
msgctxt "@action:button"
msgid "Unlock"
msgstr "Desbloqueja"
#: 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
#: src/app/qml/UnlockSSSSDialog.qml:52
#, kde-format
msgctxt "@info"
msgid ""
"If you have a security key for this account, enter it below or upload it as "
"a file."
"If you have a security key or backup passphrase 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."
"Si teniu una clau de seguretat o una frase de pas de còpia de seguretat per "
"a este compte, introduïu-la a continuació o carregueu-la com a fitxer."
#: src/app/qml/UnlockSSSSDialog.qml:87
#: src/app/qml/UnlockSSSSDialog.qml:56
#, kde-format
msgctxt "@label:textbox"
msgid "Security Key:"
msgstr "Clau de seguretat:"
msgid "Security Key or Backup Passphrase:"
msgstr "Clau de seguretat o frase de pas de còpia de seguretat:"
#: src/app/qml/UnlockSSSSDialog.qml:92
#: src/app/qml/UnlockSSSSDialog.qml:61
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr "Carrega des del fitxer"
#: src/app/qml/UnlockSSSSDialog.qml:113
#: src/app/qml/UnlockSSSSDialog.qml:71
#, kde-format
msgctxt "@action:button"
msgid "Unlock"
msgstr "Desbloqueja"
#: src/app/qml/UnlockSSSSDialog.qml:82
#, kde-format
msgctxt "@title"
msgid "Unlock from Cross-Signing"
msgstr "Desbloqueja a partir d'una signatura creuada"
#: src/app/qml/UnlockSSSSDialog.qml:117
#: src/app/qml/UnlockSSSSDialog.qml:86
#, kde-format
msgctxt "@info"
msgid ""
@@ -1271,7 +1255,7 @@ msgstr ""
"clau de còpia de seguretat des d'altres dispositius clicant damunt del botó "
"de davall."
#: src/app/qml/UnlockSSSSDialog.qml:122
#: src/app/qml/UnlockSSSSDialog.qml:91
#, kde-format
msgctxt "@action:button"
msgid "Request from other Devices"
@@ -1419,6 +1403,38 @@ msgstr "Busca missatges de %1 a la sala"
msgid "Copy link"
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
#, kde-format
msgctxt "@action:button"
@@ -1654,24 +1670,24 @@ msgctxt "@action:button Done, we are finished with verification"
msgid "Done"
msgstr "Fet"
#: src/app/roommanager.cpp:235
#: src/app/roommanager.cpp:213
#, kde-format
msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier"
msgstr ""
"ID de Matrix amb forma incorrecte o buit<br />%1 no és cap identificador "
"correcte de Matrix"
#: src/app/roommanager.cpp:439
#: src/app/roommanager.cpp:430
#, kde-format
msgid "Failed to join %1:<br />%2"
msgstr "No s'ha pogut unir-se a %1:<br />%2"
#: src/app/roommanager.cpp:463
#: src/app/roommanager.cpp:454
#, kde-format
msgid "You requested to join '%1'"
msgstr "Heu sol·licitat unir-vos a «%1»"
#: src/app/roommanager.cpp:467
#: src/app/roommanager.cpp:458
#, kde-format
msgid "Failed to request joining room<br />%1"
msgstr "Ha fallat mentre se sol·licitava unir-vos a la sala<br />%1"
@@ -1753,7 +1769,7 @@ msgctxt "@placeholder"
msgid "Send a message…"
msgstr "Envia un missatge…"
#: src/chatbar/ChatBar.qml:430 src/messagecontent/ChatBarComponent.qml:234
#: src/chatbar/ChatBar.qml:432 src/messagecontent/ChatBarComponent.qml:234
#, kde-format
msgctxt "@action:button"
msgid "Cancel reply"
@@ -1961,19 +1977,13 @@ msgstr "Fils"
#: src/devtools/FeatureFlagPage.qml:25
#, 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 ""
"@option:check Enable the matrix feature to add a phone number as a third "
"party ID"
msgid "Add phone numbers as 3PIDs"
msgstr "Afig els números de telèfon com a 3PID"
#: src/devtools/FeatureFlagPage.qml:40
#: src/devtools/FeatureFlagPage.qml:34
#, kde-format
msgctxt "@option:check Enable the matrix feature for audio and video calling"
msgid "Calls"
@@ -2351,13 +2361,13 @@ msgstr "ha/n deixat la sala"
#: src/libneochat/eventhandler.cpp:392
#, kde-format
msgid "has put %1 out of the room: %2"
msgstr "ha posat %1 fora de la sala: %2"
msgid "has removed %1 from the room: %2"
msgstr "s'ha eliminat %1 de la sala: %2"
#: src/libneochat/eventhandler.cpp:394
#, kde-format
msgid "has put %1 out of the room"
msgstr "ha posat %1 fora de la sala"
msgid "has removed %1 from the room"
msgstr "s'ha eliminat %1 de la sala"
#: src/libneochat/eventhandler.cpp:398
#, kde-format
@@ -3201,7 +3211,7 @@ msgctxt "@info the person that created this room"
msgid "Creator"
msgstr "Creador"
#: src/libneochat/neochatconnection.cpp:71
#: src/libneochat/neochatconnection.cpp:73
#, kde-format
msgid ""
"File too large to download.<br />Contact your matrix server administrator "
@@ -3226,12 +3236,12 @@ msgstr "No s'ha pogut crear la sala: %1"
msgid "Space creation failed: %1"
msgstr "No s'ha pogut crear l'espai: %1"
#: src/libneochat/neochatroom.cpp:1253
#: src/libneochat/neochatroom.cpp:1254
#, kde-format
msgid "Report sent successfully."
msgstr "L'informe s'ha enviat correctament."
#: src/libneochat/neochatroom.cpp:1618 src/libneochat/neochatroom.cpp:1626
#: src/libneochat/neochatroom.cpp:1619 src/libneochat/neochatroom.cpp:1627
#, kde-format
msgctxt "'Lat' and 'Lon' as in Latitude and Longitude"
msgid "Lat: %1, Lon: %2"
@@ -3710,12 +3720,12 @@ msgctxt "@action:button"
msgid "Cancel"
msgstr "Cancel·la"
#: src/messagecontent/CodeComponent.qml:154
#: src/messagecontent/CodeComponent.qml:161
#, kde-format
msgid "Copy to clipboard"
msgstr "Copia a dins del porta-retalls"
#: src/messagecontent/CodeComponent.qml:166
#: src/messagecontent/CodeComponent.qml:173
#: src/messagecontent/VideoComponent.qml:374
#, kde-format
msgctxt "@action:button"
@@ -3926,13 +3936,13 @@ msgctxt "as in 'this vote has ended'"
msgid "(Ended)"
msgstr "(Finalitzat)"
#: src/messagecontent/pollhandler.cpp:306
#: src/messagecontent/pollhandler.cpp:308
#, kde-format
msgctxt "%1 is the poll answer that had the most votes"
msgid "The poll has ended. Top answer: %1"
msgstr "La votació ha finalitzat. Resposta guanyadora: %1"
#: src/messagecontent/ReactionComponent.qml:88
#: src/messagecontent/ReactionComponent.qml:90
#, kde-format
msgctxt "@button"
msgid "React"
@@ -3968,7 +3978,7 @@ msgctxt "@action:button"
msgid "Volume"
msgstr "Volum"
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:163
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:145
#, kde-format
msgctxt "Locations on a map"
msgid "Locations"
@@ -3979,18 +3989,18 @@ msgstr "Ubicacions"
msgid "There are no locations shared in this room."
msgstr "No hi ha ubicacions compartides en esta sala."
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:50
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:49
#, kde-format
msgctxt "@action:button"
msgid "Room settings"
msgstr "Configureu la sala"
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:92
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:91
#, kde-format
msgid "Information"
msgstr "Informació"
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:97
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:96
#, kde-format
msgid "Media"
msgstr "Multimèdia"
@@ -4007,95 +4017,95 @@ msgctxt "@action:title"
msgid "Room Information"
msgstr "Informació de la sala"
#: src/roominfo/RoomInformation.qml:90
#: src/roominfo/RoomInformation.qml:72
#, kde-format
msgctxt "Room actions"
msgid "Actions"
msgstr "Accions"
#: src/roominfo/RoomInformation.qml:100
#: src/roominfo/RoomInformation.qml:82
#, kde-format
msgctxt "@action:button"
msgid "Search Messages"
msgstr "Busca missatges"
#: src/roominfo/RoomInformation.qml:117
#: src/roominfo/RoomInformation.qml:99
#, kde-format
msgctxt "@action:button"
msgid "Verify user"
msgstr "Verifica l'usuari"
#: src/roominfo/RoomInformation.qml:128
#: src/roominfo/RoomInformation.qml:110
#, kde-format
msgctxt "@action:button"
msgid "Remove from Favorites"
msgstr "Elimina de les preferides"
#: src/roominfo/RoomInformation.qml:128
#: src/roominfo/RoomInformation.qml:110
#, kde-format
msgctxt "@action:button"
msgid "Add to Favorites"
msgstr "Afig a les preferides"
#: src/roominfo/RoomInformation.qml:141
#: src/roominfo/RoomInformation.qml:123
#, kde-format
msgctxt "@action:button"
msgid "Extensions"
msgstr "Extensions"
#: src/roominfo/RoomInformation.qml:147
#: src/roominfo/RoomInformation.qml:129
#, kde-format
msgctxt "@title:window"
msgid "Extensions"
msgstr "Extensions"
#: src/roominfo/RoomInformation.qml:157
#: src/roominfo/RoomInformation.qml:139
#, kde-format
msgctxt "@action:button"
msgid "Shared Locations"
msgstr "Ubicacions compartides"
#: src/roominfo/RoomInformation.qml:173
#: src/roominfo/RoomInformation.qml:155
#, kde-format
msgctxt "@action:button"
msgid "Pinned Messages"
msgstr "Missatges fixats"
#: src/roominfo/RoomInformation.qml:188
#: src/roominfo/RoomInformation.qml:170
#, kde-format
msgctxt "@action:inmenu"
msgid "Inspect Room Data"
msgstr "Inspecciona les dades de la sala"
#: src/roominfo/RoomInformation.qml:209
#: src/roominfo/RoomInformation.qml:191
#, kde-format
msgctxt "@action:button"
msgid "Leave Space…"
msgstr "Ix de l'espai…"
#: src/roominfo/RoomInformation.qml:209
#: src/roominfo/RoomInformation.qml:191
#, kde-format
msgctxt "@action:button"
msgid "Leave Room…"
msgstr "Ix de la sala…"
#: src/roominfo/RoomInformation.qml:222
#: src/roominfo/RoomInformation.qml:204
#, kde-format
msgid "Members"
msgstr "Membres"
#: src/roominfo/RoomInformation.qml:237 src/spaces/SpaceHomePage.qml:85
#: src/roominfo/RoomInformation.qml:219 src/spaces/SpaceHomePage.qml:85
#, kde-format
msgctxt "@title"
msgid "Invite a User"
msgstr "Convida un usuari"
#: src/roominfo/RoomInformation.qml:241
#: src/roominfo/RoomInformation.qml:223
#, kde-format
msgid "Invite user to room"
msgstr "Convida un usuari a la sala"
#: src/roominfo/RoomInformation.qml:248
#: src/roominfo/RoomInformation.qml:230
#, kde-format
msgctxt "@info"
msgid "%1 member"
@@ -4103,7 +4113,7 @@ msgid_plural "%1 members"
msgstr[0] "%1 membre"
msgstr[1] "%1 membres"
#: src/roominfo/RoomInformation.qml:248
#: src/roominfo/RoomInformation.qml:230
#, kde-format
msgid "No member count"
msgstr "No hi ha comptador de membres"
@@ -4159,42 +4169,42 @@ msgctxt "@action:button"
msgid "Remove widget"
msgstr "Elimina el giny"
#: src/rooms/ExploreComponent.qml:38
#: src/rooms/ExploreComponent.qml:36
#, kde-format
msgctxt "@title"
msgid "Rooms"
msgstr "Sales"
#: src/rooms/ExploreComponent.qml:50
#: src/rooms/ExploreComponent.qml:48
#, kde-format
msgctxt "@action"
msgid "Search Rooms"
msgstr "Busca sales"
#: src/rooms/ExploreComponent.qml:75
#: src/rooms/ExploreComponent.qml:61
#, kde-format
msgctxt "@action:button"
msgid "Show Menu"
msgstr "Mostra el menú"
#: src/rooms/ExploreComponent.qml:94 src/rooms/ExploreComponentMobile.qml:65
#: src/rooms/ExploreComponent.qml:78 src/rooms/ExploreComponentMobile.qml:65
#, kde-format
msgid "Find your friends"
msgstr "Busqueu els vostres amics"
#: src/rooms/ExploreComponent.qml:99 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/ExploreComponent.qml:83 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246
#, kde-format
msgctxt "@title"
msgid "Find your friends"
msgstr "Busca d'amics"
#: src/rooms/ExploreComponent.qml:104
#: src/rooms/ExploreComponent.qml:88
#, kde-format
msgid "Create a Room"
msgstr "Crea una sala"
#: src/rooms/ExploreComponent.qml:119
#: src/rooms/ExploreComponent.qml:103
#, kde-format
msgid "Scan a QR Code"
msgstr "Escaneja un codi QR"
@@ -4226,13 +4236,13 @@ msgctxt "@action:button"
msgid "Create a Space"
msgstr "Crea un espai"
#: src/rooms/models/roomtreemodel.cpp:366
#: src/rooms/models/roomtreemodel.cpp:364
#, kde-format
msgctxt "@info:label"
msgid "Invited you to chat"
msgstr "Vos ha convidat al xat"
#: src/rooms/models/roomtreemodel.cpp:368
#: src/rooms/models/roomtreemodel.cpp:366
#, kde-format
msgctxt "@info:label"
msgid "%1 invited you"
@@ -4314,6 +4324,38 @@ msgstr "Configureu la sala"
#: src/rooms/RoomContextMenu.qml:154
#, 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"
msgid "Leave Room…"
msgstr "Ix de la sala…"
@@ -4379,13 +4421,13 @@ msgctxt "@action:button"
msgid "Search in friend directory"
msgstr "Busca en el directori d'amics"
#: src/rooms/RoomTreeSection.qml:61
#: src/rooms/RoomTreeSection.qml:59
#, kde-format
msgctxt "Collapse <section name>"
msgid "Collapse %1"
msgstr "Reduïx %1"
#: src/rooms/RoomTreeSection.qml:61
#: src/rooms/RoomTreeSection.qml:59
#, kde-format
msgctxt "Expand <section name"
msgid "Expand %1"
@@ -5904,7 +5946,7 @@ msgstr "Configureu el servidor intermediari"
#: src/settings/NetworkProxyPage.qml:78
#, kde-format
msgid "Host"
msgstr "Amfitrió"
msgstr "Màquina"
#: src/settings/NetworkProxyPage.qml:91
#, kde-format
@@ -7041,19 +7083,19 @@ msgctxt "@info text-to-speech %1 is author %2 is message text"
msgid "%1 said %2"
msgstr "%1 ha dit %2"
#: src/timeline/DelegateContextMenu.qml:403
#: src/timeline/DelegateContextMenu.qml:402
#, kde-format
msgctxt "@action:button 'Unpin' as in 'Unpin this message'"
msgid "Unpin"
msgstr "Deixa de fixar"
#: src/timeline/DelegateContextMenu.qml:403
#: src/timeline/DelegateContextMenu.qml:402
#, kde-format
msgctxt "@action:button 'Pin' as in 'Pin the message in the room'"
msgid "Pin"
msgstr "Fixa"
#: src/timeline/DelegateContextMenu.qml:416
#: src/timeline/DelegateContextMenu.qml:415
#, kde-format
msgctxt "@action:inmenu"
msgid "View Source"
@@ -7123,31 +7165,31 @@ msgstr ""
"Este és el començament del xat. No hi ha missatges històrics més enllà "
"d'este punt."
#: src/timeline/TimelineView.qml:241
#: src/timeline/TimelineView.qml:214
#, kde-format
msgctxt "@action:button"
msgid "Jump to first unread message"
msgstr "Ves fins al primer missatge sense llegir"
#: src/timeline/TimelineView.qml:241
#: src/timeline/TimelineView.qml:214
#, kde-format
msgctxt "@action:button"
msgid "Jump to oldest loaded message"
msgstr "Ves fins al missatge carregat més antic"
#: src/timeline/TimelineView.qml:272
#: src/timeline/TimelineView.qml:245
#, kde-format
msgctxt "@action:button"
msgid "Jump to latest message"
msgstr "Ves fins a l'últim missatge"
#: src/timeline/TimelineView.qml:307
#: src/timeline/TimelineView.qml:279
#, kde-format
msgctxt "@info:placeholder"
msgid "Drag items here to share them"
msgstr "Arrossegueu ací els elements per a compartir"
#: src/timeline/TimelineView.qml:332
#: src/timeline/TimelineView.qml:304
#, kde-format
msgctxt "Message displayed when some users are 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 ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-01-28 02:42+0000\n"
"PO-Revision-Date: 2025-11-11 01:01+0100\n"
"POT-Creation-Date: 2025-12-18 00:43+0000\n"
"PO-Revision-Date: 2025-12-02 01:39+0100\n"
"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
"Language-Team: Spanish <kde-l10n-es@kde.org>\n"
"Language: es\n"
@@ -27,129 +27,129 @@ msgctxt ""
msgid "Receiving notifications for new messages"
msgstr "Recibir notificaciones de nuevos mensajes"
#: src/app/controller.cpp:316
#: src/app/controller.cpp:319
#, kde-format
msgid "Receiving push notifications"
msgstr "Recepción de notificaciones push"
#: src/app/main.cpp:136 src/login/WelcomePage.qml:77
#: src/app/main.cpp:131 src/login/WelcomePage.qml:77
#, kde-format
msgid "NeoChat"
msgstr "NeoChat"
#: src/app/main.cpp:138
#: src/app/main.cpp:133
#, kde-format
msgid "Chat on Matrix"
msgstr "Chat en Matrix"
#: src/app/main.cpp:140
#: src/app/main.cpp:135
#, kde-format
msgid "© 2018-2020 Black Hat, 2020-2025 KDE Community"
msgstr "© 2018-2020 Black Hat, 2020-2025 La Comunidad KDE"
#: src/app/main.cpp:141
#: src/app/main.cpp:136
#, kde-format
msgid "Carl Schwan"
msgstr "Carl Schwan"
#: src/app/main.cpp:141 src/app/main.cpp:142 src/app/main.cpp:143
#: src/app/main.cpp:145
#: src/app/main.cpp:136 src/app/main.cpp:137 src/app/main.cpp:138
#: src/app/main.cpp:140
#, kde-format
msgid "Maintainer"
msgstr "Responsable"
#: src/app/main.cpp:142
#: src/app/main.cpp:137
#, kde-format
msgid "Tobias Fella"
msgstr "Tobias Fella"
#: src/app/main.cpp:143
#: src/app/main.cpp:138
#, kde-format
msgid "James Graham"
msgstr "James Graham"
#: src/app/main.cpp:144
#: src/app/main.cpp:139
#, kde-format
msgid "Joshua Goins"
msgstr "Joshua Goins"
#: src/app/main.cpp:149
#: src/app/main.cpp:144
#, kde-format
msgid "Black Hat"
msgstr "Black Hat"
#: src/app/main.cpp:149
#: src/app/main.cpp:144
#, kde-format
msgid "Original author of Spectral"
msgstr "Autor original de Spectral"
#: src/app/main.cpp:150
#: src/app/main.cpp:145
#, kde-format
msgid "Alexey Rusakov"
msgstr "Alexey Rusakov"
#: src/app/main.cpp:150
#: src/app/main.cpp:145
#, kde-format
msgid "Maintainer of libQuotient"
msgstr "Responsable de libQuotient"
#: src/app/main.cpp:151
#: src/app/main.cpp:146
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Eloy Cuadra"
#: src/app/main.cpp:151
#: src/app/main.cpp:146
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "ecuadra@eloihr.net"
#: src/app/main.cpp:155
#: src/app/main.cpp:150
#, kde-format
msgid "A Qt library to write cross-platform clients for Matrix"
msgstr ""
"Biblioteca Qt para la escritura de clientes multiplataforma para Matrix"
#: src/app/main.cpp:157
#: src/app/main.cpp:152
#, kde-format
msgctxt "<version number> (built against <possibly different version number>)"
msgid "%1 (built against %2)"
msgstr "%1 (compilado con %2)"
#: src/app/main.cpp:178
#: src/app/main.cpp:167
#, kde-format
msgid "Client for the matrix communication protocol"
msgstr "Cliente para el protocolo de comunicaciones Matrix"
#: src/app/main.cpp:179
#: src/app/main.cpp:168
#, kde-format
msgid "Supports matrix: url scheme"
msgstr "Permite el esquema de URL «matrix:»"
#: src/app/main.cpp:180
#: src/app/main.cpp:169
#, kde-format
msgid "Ignore all SSL Errors, e.g., unsigned certificates."
msgstr ""
"Ignorar todos los errores de SSL (por ejemplo, certificados sin firmar)."
#: src/app/main.cpp:182
#: src/app/main.cpp:171
#, kde-format
msgctxt "command line description"
msgid "Replace an existing instance"
msgstr "Sustituir una instancia existente"
#: src/app/main.cpp:185
#: src/app/main.cpp:174
#, kde-format
msgid "Only used for autotests"
msgstr "Se usa solo para pruebas automáticas"
#: src/app/main.cpp:195
#: src/app/main.cpp:184
#, kde-format
msgid "Share a URL to Matrix"
msgstr "Compartir una URL con Matrix"
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:390
#: src/app/notificationsmanager.cpp:141 src/app/notificationsmanager.cpp:386
#, kde-format
msgid "Encrypted Message"
msgstr "Mensaje cifrado"
@@ -174,40 +174,40 @@ msgstr "Responder"
msgid "Reply…"
msgstr "Responder…"
#: src/app/notificationsmanager.cpp:306
#: src/app/notificationsmanager.cpp:304
#, kde-format
msgid "%1 invited you to a room"
msgstr "%1 le ha invitado a una sala"
#: src/app/notificationsmanager.cpp:309
#: src/app/notificationsmanager.cpp:307
#, kde-format
msgid "Open this invitation in NeoChat"
msgstr "Abrir esta invitación en NeoChat"
#: src/app/notificationsmanager.cpp:319
#: src/app/notificationsmanager.cpp:317
#, kde-format
msgctxt "@action:button The thing being accepted is an invitation to chat"
msgid "Accept"
msgstr "Aceptar"
#: src/app/notificationsmanager.cpp:320
#: src/app/notificationsmanager.cpp:318
#, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject"
msgstr "Rechazar"
#: src/app/notificationsmanager.cpp:322
#: src/app/notificationsmanager.cpp:320
#, kde-format
msgctxt "@action:button The thing being rejected is an invitation to chat"
msgid "Reject and Ignore User"
msgstr "Rechazar e ignorar usuario"
#: src/app/notificationsmanager.cpp:383
#: src/app/notificationsmanager.cpp:379
#, kde-format
msgid "%1 (%2)"
msgstr "%1 (%2)"
#: src/app/notificationsmanager.cpp:394
#: src/app/notificationsmanager.cpp:390
#, kde-format
msgid "Open NeoChat"
msgstr "Abrir NeoChat"
@@ -248,7 +248,7 @@ msgctxt "@action:inmenu"
msgid "Open Developer Tools"
msgstr "Abrir las herramientas del desarrollador"
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:200
#: src/app/qml/AccountMenu.qml:73 src/roominfo/RoomInformation.qml:182
#, kde-format
msgctxt "@title:window"
msgid "Developer Tools"
@@ -260,32 +260,32 @@ msgctxt "@action:inmenu"
msgid "Open Secret Backup"
msgstr "Abrir copia de seguridad secreta"
#: src/app/qml/AccountMenu.qml:84
#: src/app/qml/AccountMenu.qml:83
#, kde-format
msgctxt "@title:window"
msgid "Open Key Backup"
msgstr "Abrir copia de seguridad de la clave"
#: src/app/qml/AccountMenu.qml:89
#: src/app/qml/AccountMenu.qml:88
#, kde-format
msgctxt "@action:inmenu"
msgid "Verify This Device"
msgstr "Verificar este dispositivo"
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:46
#: src/app/qml/AccountMenu.qml:94 src/settings/DevicesPage.qml:46
#, kde-format
msgctxt "@title"
msgid "Verification Request Sent"
msgstr "Solicitud de verificación enviada"
#: src/app/qml/AccountMenu.qml:96 src/settings/DevicesPage.qml:47
#: src/app/qml/AccountMenu.qml:95 src/settings/DevicesPage.qml:47
#, kde-format
msgctxt "@info:label"
msgid "To proceed, accept the verification request on another device."
msgstr ""
"Para continuar, acepte la solicitud de verificación en otro dispositivo."
#: src/app/qml/AccountMenu.qml:107
#: src/app/qml/AccountMenu.qml:106
#, kde-format
msgctxt "@action:inmenu"
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."
msgstr "%1 le ha invitado a esta sala el %2."
#: src/app/qml/InvitationView.qml:97
#: src/app/qml/InvitationView.qml:98
#, kde-format
msgctxt "@info:label This user invited you to chat at 'timestamp'"
msgid "This user invited you to chat at %1."
msgstr "Este usuario le ha invitado a chatear el %1."
#: src/app/qml/InvitationView.qml:112
#: src/app/qml/InvitationView.qml:113
#, kde-format
msgctxt "@action:button Accept this invite"
msgid "Accept Invite"
msgstr "Aceptar invitación"
#: src/app/qml/InvitationView.qml:127
#: src/app/qml/InvitationView.qml:128
#, kde-format
msgctxt "@action:button Reject this invite"
msgid "Reject Invite"
msgstr "Rechazar invitación"
#: src/app/qml/InvitationView.qml:141
#: src/app/qml/InvitationView.qml:142
#, kde-format
msgctxt "@action:button Block the user"
msgid "Block %1"
msgstr "Bloquear a %1"
#: src/app/qml/InvitationView.qml:180
#: src/app/qml/InvitationView.qml:181
#, kde-kuit-format
msgctxt ""
"@info:label Ensure you are referring to the same translation used for that "
@@ -949,7 +949,7 @@ msgctxt "@title:dialog"
msgid "Select a File"
msgstr "Seleccione un archivo"
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:125
#: src/app/qml/QrScannerPage.qml:16 src/rooms/ExploreComponent.qml:109
#, kde-format
msgctxt "@title"
msgid "Scan a QR Code"
@@ -1039,63 +1039,63 @@ msgctxt "@action:button"
msgid "Ignore"
msgstr "Ignorar"
#: src/app/qml/RoomPage.qml:95
#: src/app/qml/RoomPage.qml:87
#, kde-format
msgctxt "@action:button"
msgid "Join Jitsi meeting…"
msgstr "Unirme a una reunión de Jitsi…"
#: src/app/qml/RoomPage.qml:98
#: src/app/qml/RoomPage.qml:90
#, kde-format
msgctxt "@action:button"
msgid "Start Jitsi meeting…"
msgstr "Iniciar reunión de Jitsi…"
#: src/app/qml/RoomPage.qml:98
#: src/app/qml/RoomPage.qml:90
#, kde-format
msgctxt "@action:button"
msgid "You do not have permissions to start Jitsi meetings"
msgstr "No tiene permisos para iniciar reuniones de Jitsi"
#: src/app/qml/RoomPage.qml:137 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:109
#: src/app/qml/RoomPage.qml:129 src/app/qml/UserDetailDialog.qml:285
#: src/roominfo/RoomInformation.qml:91
#, kde-format
msgctxt "@action:title"
msgid "Search"
msgstr "Buscar"
#: src/app/qml/RoomPage.qml:150
#: src/app/qml/RoomPage.qml:142
#, kde-format
msgctxt "@info"
msgid "This room contains official messages from your homeserver."
msgstr "Esta sala contiene mensajes oficiales de su servidor doméstico."
#: src/app/qml/RoomPage.qml:161
#: src/app/qml/RoomPage.qml:153
#, kde-format
msgctxt "@info:status"
msgid "NeoChat is offline. Please check your network connection."
msgstr "NeoChat no está conectado. Compruebe su conexión de red."
#: src/app/qml/RoomPage.qml:221 src/roominfo/RoomInformation.qml:182
#: src/app/qml/RoomPage.qml:213 src/roominfo/RoomInformation.qml:164
#: src/roominfo/RoomPinnedMessagesPage.qml:22
#, kde-format
msgctxt "@title"
msgid "Pinned Messages"
msgstr "Mensajes fijados"
#: src/app/qml/RoomPage.qml:294
#: src/app/qml/RoomPage.qml:285
#, kde-format
msgctxt "@title"
msgid "Welcome to NeoChat"
msgstr "Bienvenido a NeoChat"
#: src/app/qml/RoomPage.qml:295
#: src/app/qml/RoomPage.qml:286
#, kde-format
msgctxt "@info:usagetip"
msgid "Select or join a room to get started"
msgstr "Seleccione o únase a una sala para empezar"
#: src/app/qml/RoomPage.qml:356
#: src/app/qml/RoomPage.qml:347
#, kde-format
msgctxt "@title:dialog"
msgid "Message Source"
@@ -1179,13 +1179,19 @@ msgctxt "@info"
msgid "Shared url for image is <a href='%1'>%1</a>"
msgstr "El URL compartido para la imagen es <a href='%1'>%1</a>"
#: src/app/qml/UnlockSSSSDialog.qml:14
#: src/app/qml/UnlockSSSSDialog.qml:16
#, kde-format
msgctxt "@title:window"
msgid "Load your encrypted messages"
msgstr "Cargar mensajes cifrados…"
#: src/app/qml/UnlockSSSSDialog.qml:36
#: src/app/qml/UnlockSSSSDialog.qml:35
#, 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
msgctxt "@info:status"
msgid "Encryption keys restored."
@@ -1193,71 +1199,45 @@ msgstr "Claves de cifrado restauradas."
#: src/app/qml/UnlockSSSSDialog.qml:48
#, kde-format
msgctxt "@info:status"
msgid "The security phrase was not correct."
msgstr "La frase de seguridad no es correcta."
#: src/app/qml/UnlockSSSSDialog.qml:54
#, kde-format
msgctxt "@title"
msgid "Unlock using Passphrase"
msgstr "Desbloquear usando contraseña larga"
msgid "Unlock using Security Key or Backup Passphrase"
msgstr "Desbloquear mediante clave de seguridad o contraseña de respaldo"
#: src/app/qml/UnlockSSSSDialog.qml:58
#, kde-format
msgctxt "@info"
msgid "If you have a backup passphrase for this account, enter it below."
msgstr ""
"Si dispone de una contraseña de respaldo para esta cuenta, introdúzcala a "
"continuación."
#: src/app/qml/UnlockSSSSDialog.qml:62
#, kde-format
msgctxt "@label:textbox"
msgid "Backup Password:"
msgstr "Contraseña de respaldo:"
#: src/app/qml/UnlockSSSSDialog.qml:67 src/app/qml/UnlockSSSSDialog.qml:102
#, kde-format
msgctxt "@action:button"
msgid "Unlock"
msgstr "Desbloquear"
#: 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
#: src/app/qml/UnlockSSSSDialog.qml:52
#, kde-format
msgctxt "@info"
msgid ""
"If you have a security key for this account, enter it below or upload it as "
"a file."
"If you have a security key or backup passphrase 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."
"Si dispone de una clave de seguridad o de una contraseña de respaldo para "
"esta cuenta, introdúzcala a continuación o envíela como archivo."
#: src/app/qml/UnlockSSSSDialog.qml:87
#: src/app/qml/UnlockSSSSDialog.qml:56
#, kde-format
msgctxt "@label:textbox"
msgid "Security Key:"
msgstr "Clave de seguridad:"
msgid "Security Key or Backup Passphrase:"
msgstr "Clave de seguridad o contraseña de respaldo:"
#: src/app/qml/UnlockSSSSDialog.qml:92
#: src/app/qml/UnlockSSSSDialog.qml:61
#, kde-format
msgctxt "@action:button"
msgid "Upload from File"
msgstr "Enviar un archivo"
#: src/app/qml/UnlockSSSSDialog.qml:113
#: src/app/qml/UnlockSSSSDialog.qml:71
#, kde-format
msgctxt "@action:button"
msgid "Unlock"
msgstr "Desbloquear"
#: src/app/qml/UnlockSSSSDialog.qml:82
#, kde-format
msgctxt "@title"
msgid "Unlock from Cross-Signing"
msgstr "Desbloquear con firmado cruzado"
#: src/app/qml/UnlockSSSSDialog.qml:117
#: src/app/qml/UnlockSSSSDialog.qml:86
#, kde-format
msgctxt "@info"
msgid ""
@@ -1267,7 +1247,7 @@ msgstr ""
"Si ya había verificado este dispositivo anteriormente, puede probar a cargar "
"la clave de respaldo desde otros dispositivos pulsando el botón inferior."
#: src/app/qml/UnlockSSSSDialog.qml:122
#: src/app/qml/UnlockSSSSDialog.qml:91
#, kde-format
msgctxt "@action:button"
msgid "Request from other Devices"
@@ -1415,6 +1395,38 @@ msgstr "Buscar mensajes de %1 en la sala"
msgid "Copy link"
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
#, kde-format
msgctxt "@action:button"
@@ -1652,24 +1664,24 @@ msgctxt "@action:button Done, we are finished with verification"
msgid "Done"
msgstr "Terminado"
#: src/app/roommanager.cpp:235
#: src/app/roommanager.cpp:213
#, kde-format
msgid "Malformed or empty Matrix id<br />%1 is not a correct Matrix identifier"
msgstr ""
"Id de Matrix mal formada o vacía<br />%1 no es un identificador de Matrix "
"correcto"
#: src/app/roommanager.cpp:439
#: src/app/roommanager.cpp:430
#, kde-format
msgid "Failed to join %1:<br />%2"
msgstr "No se ha podido unir a %1:<br />%2"
#: src/app/roommanager.cpp:463
#: src/app/roommanager.cpp:454
#, kde-format
msgid "You requested to join '%1'"
msgstr "Ha solicitado unirse a «%1»"
#: src/app/roommanager.cpp:467
#: src/app/roommanager.cpp:458
#, kde-format
msgid "Failed to request joining room<br />%1"
msgstr "No se ha podido solicitar unirse a la sala<br />%1"
@@ -1752,7 +1764,7 @@ msgctxt "@placeholder"
msgid "Send a message…"
msgstr "Enviar un mensaje…"
#: src/chatbar/ChatBar.qml:430 src/messagecontent/ChatBarComponent.qml:234
#: src/chatbar/ChatBar.qml:432 src/messagecontent/ChatBarComponent.qml:234
#, kde-format
msgctxt "@action:button"
msgid "Cancel reply"
@@ -1960,19 +1972,13 @@ msgstr "Hilos"
#: src/devtools/FeatureFlagPage.qml:25
#, 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 ""
"@option:check Enable the matrix feature to add a phone number as a third "
"party ID"
msgid "Add phone numbers as 3PIDs"
msgstr "Añadir números de teléfono como 3PID"
#: src/devtools/FeatureFlagPage.qml:40
#: src/devtools/FeatureFlagPage.qml:34
#, kde-format
msgctxt "@option:check Enable the matrix feature for audio and video calling"
msgid "Calls"
@@ -2352,12 +2358,12 @@ msgstr "ha salido de la sala"
#: src/libneochat/eventhandler.cpp:392
#, kde-format
msgid "has put %1 out of the room: %2"
msgid "has removed %1 from the room: %2"
msgstr "ha echado a %1 de la sala: %2"
#: src/libneochat/eventhandler.cpp:394
#, kde-format
msgid "has put %1 out of the room"
msgid "has removed %1 from the room"
msgstr "ha echado a %1 de la sala"
#: src/libneochat/eventhandler.cpp:398
@@ -3198,7 +3204,7 @@ msgctxt "@info the person that created this room"
msgid "Creator"
msgstr "Creador"
#: src/libneochat/neochatconnection.cpp:71
#: src/libneochat/neochatconnection.cpp:73
#, kde-format
msgid ""
"File too large to download.<br />Contact your matrix server administrator "
@@ -3223,12 +3229,12 @@ msgstr "La creación de la sala ha fallado: %1"
msgid "Space creation failed: %1"
msgstr "La creación del espacio ha fallado: %1"
#: src/libneochat/neochatroom.cpp:1253
#: src/libneochat/neochatroom.cpp:1254
#, kde-format
msgid "Report sent successfully."
msgstr "La denuncia se ha enviado correctamente."
#: src/libneochat/neochatroom.cpp:1618 src/libneochat/neochatroom.cpp:1626
#: src/libneochat/neochatroom.cpp:1619 src/libneochat/neochatroom.cpp:1627
#, kde-format
msgctxt "'Lat' and 'Lon' as in Latitude and Longitude"
msgid "Lat: %1, Lon: %2"
@@ -3706,12 +3712,12 @@ msgctxt "@action:button"
msgid "Cancel"
msgstr "Cancelar"
#: src/messagecontent/CodeComponent.qml:154
#: src/messagecontent/CodeComponent.qml:161
#, kde-format
msgid "Copy to clipboard"
msgstr "Copiar en el portapapeles"
#: src/messagecontent/CodeComponent.qml:166
#: src/messagecontent/CodeComponent.qml:173
#: src/messagecontent/VideoComponent.qml:374
#, kde-format
msgctxt "@action:button"
@@ -3922,13 +3928,13 @@ msgctxt "as in 'this vote has ended'"
msgid "(Ended)"
msgstr "(Finalizada)"
#: src/messagecontent/pollhandler.cpp:306
#: src/messagecontent/pollhandler.cpp:308
#, kde-format
msgctxt "%1 is the poll answer that had the most votes"
msgid "The poll has ended. Top answer: %1"
msgstr "La encuesta ha finalizado: Respuesta más elegida: %1"
#: src/messagecontent/ReactionComponent.qml:88
#: src/messagecontent/ReactionComponent.qml:90
#, kde-format
msgctxt "@button"
msgid "React"
@@ -3963,7 +3969,7 @@ msgctxt "@action:button"
msgid "Volume"
msgstr "Volumen"
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:163
#: src/roominfo/LocationsPage.qml:17 src/roominfo/RoomInformation.qml:145
#, kde-format
msgctxt "Locations on a map"
msgid "Locations"
@@ -3974,18 +3980,18 @@ msgstr "Ubicaciones"
msgid "There are no locations shared in this room."
msgstr "No hay ubicaciones compartidas en esta sala."
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:50
#: src/roominfo/RoomDrawer.qml:120 src/roominfo/RoomDrawerPage.qml:49
#, kde-format
msgctxt "@action:button"
msgid "Room settings"
msgstr "Preferencias de la sala"
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:92
#: src/roominfo/RoomDrawer.qml:171 src/roominfo/RoomDrawerPage.qml:91
#, kde-format
msgid "Information"
msgstr "Información"
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:97
#: src/roominfo/RoomDrawer.qml:176 src/roominfo/RoomDrawerPage.qml:96
#, kde-format
msgid "Media"
msgstr "Multimedia"
@@ -4002,95 +4008,95 @@ msgctxt "@action:title"
msgid "Room Information"
msgstr "Información de la sala"
#: src/roominfo/RoomInformation.qml:90
#: src/roominfo/RoomInformation.qml:72
#, kde-format
msgctxt "Room actions"
msgid "Actions"
msgstr "Acciones"
#: src/roominfo/RoomInformation.qml:100
#: src/roominfo/RoomInformation.qml:82
#, kde-format
msgctxt "@action:button"
msgid "Search Messages"
msgstr "Buscar mensajes"
#: src/roominfo/RoomInformation.qml:117
#: src/roominfo/RoomInformation.qml:99
#, kde-format
msgctxt "@action:button"
msgid "Verify user"
msgstr "Verificar usuario"
#: src/roominfo/RoomInformation.qml:128
#: src/roominfo/RoomInformation.qml:110
#, kde-format
msgctxt "@action:button"
msgid "Remove from Favorites"
msgstr "Eliminar de favoritas"
#: src/roominfo/RoomInformation.qml:128
#: src/roominfo/RoomInformation.qml:110
#, kde-format
msgctxt "@action:button"
msgid "Add to Favorites"
msgstr "Añadir a favoritas"
#: src/roominfo/RoomInformation.qml:141
#: src/roominfo/RoomInformation.qml:123
#, kde-format
msgctxt "@action:button"
msgid "Extensions"
msgstr "Extensiones"
#: src/roominfo/RoomInformation.qml:147
#: src/roominfo/RoomInformation.qml:129
#, kde-format
msgctxt "@title:window"
msgid "Extensions"
msgstr "Extensiones"
#: src/roominfo/RoomInformation.qml:157
#: src/roominfo/RoomInformation.qml:139
#, kde-format
msgctxt "@action:button"
msgid "Shared Locations"
msgstr "Ubicaciones compartidas"
#: src/roominfo/RoomInformation.qml:173
#: src/roominfo/RoomInformation.qml:155
#, kde-format
msgctxt "@action:button"
msgid "Pinned Messages"
msgstr "Mensajes fijados"
#: src/roominfo/RoomInformation.qml:188
#: src/roominfo/RoomInformation.qml:170
#, kde-format
msgctxt "@action:inmenu"
msgid "Inspect Room Data"
msgstr "Inspeccionar datos de la sala"
#: src/roominfo/RoomInformation.qml:209
#: src/roominfo/RoomInformation.qml:191
#, kde-format
msgctxt "@action:button"
msgid "Leave Space…"
msgstr "Salir del espacio…"
#: src/roominfo/RoomInformation.qml:209
#: src/roominfo/RoomInformation.qml:191
#, kde-format
msgctxt "@action:button"
msgid "Leave Room…"
msgstr "Salir de la sala…"
#: src/roominfo/RoomInformation.qml:222
#: src/roominfo/RoomInformation.qml:204
#, kde-format
msgid "Members"
msgstr "Miembros"
#: src/roominfo/RoomInformation.qml:237 src/spaces/SpaceHomePage.qml:85
#: src/roominfo/RoomInformation.qml:219 src/spaces/SpaceHomePage.qml:85
#, kde-format
msgctxt "@title"
msgid "Invite a User"
msgstr "Invitar a un usuario"
#: src/roominfo/RoomInformation.qml:241
#: src/roominfo/RoomInformation.qml:223
#, kde-format
msgid "Invite user to room"
msgstr "Invitar usuario a la sala"
#: src/roominfo/RoomInformation.qml:248
#: src/roominfo/RoomInformation.qml:230
#, kde-format
msgctxt "@info"
msgid "%1 member"
@@ -4098,7 +4104,7 @@ msgid_plural "%1 members"
msgstr[0] "%1 miembro"
msgstr[1] "%1 miembros"
#: src/roominfo/RoomInformation.qml:248
#: src/roominfo/RoomInformation.qml:230
#, kde-format
msgid "No member count"
msgstr "Sin contador de miembros"
@@ -4154,42 +4160,42 @@ msgctxt "@action:button"
msgid "Remove widget"
msgstr "Eliminar widget"
#: src/rooms/ExploreComponent.qml:38
#: src/rooms/ExploreComponent.qml:36
#, kde-format
msgctxt "@title"
msgid "Rooms"
msgstr "Salas"
#: src/rooms/ExploreComponent.qml:50
#: src/rooms/ExploreComponent.qml:48
#, kde-format
msgctxt "@action"
msgid "Search Rooms"
msgstr "Buscar salas"
#: src/rooms/ExploreComponent.qml:75
#: src/rooms/ExploreComponent.qml:61
#, kde-format
msgctxt "@action:button"
msgid "Show Menu"
msgstr "Mostrar el menú"
#: src/rooms/ExploreComponent.qml:94 src/rooms/ExploreComponentMobile.qml:65
#: src/rooms/ExploreComponent.qml:78 src/rooms/ExploreComponentMobile.qml:65
#, kde-format
msgid "Find your friends"
msgstr "Encontrar amigos"
#: src/rooms/ExploreComponent.qml:99 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/ExploreComponent.qml:83 src/rooms/ExploreComponentMobile.qml:72
#: src/rooms/RoomListPage.qml:190 src/rooms/RoomListPage.qml:246
#, kde-format
msgctxt "@title"
msgid "Find your friends"
msgstr "Encontrar amigos"
#: src/rooms/ExploreComponent.qml:104
#: src/rooms/ExploreComponent.qml:88
#, kde-format
msgid "Create a Room"
msgstr "Crear una sala"
#: src/rooms/ExploreComponent.qml:119
#: src/rooms/ExploreComponent.qml:103
#, kde-format
msgid "Scan a QR Code"
msgstr "Escanear un código QR"
@@ -4221,13 +4227,13 @@ msgctxt "@action:button"
msgid "Create a Space"
msgstr "Crear un espacio"
#: src/rooms/models/roomtreemodel.cpp:366
#: src/rooms/models/roomtreemodel.cpp:364
#, kde-format
msgctxt "@info:label"
msgid "Invited you to chat"
msgstr "Le ha invitado a chatear"
#: src/rooms/models/roomtreemodel.cpp:368
#: src/rooms/models/roomtreemodel.cpp:366
#, kde-format
msgctxt "@info:label"
msgid "%1 invited you"
@@ -4309,6 +4315,38 @@ msgstr "Preferencias de la sala"
#: src/rooms/RoomContextMenu.qml:154
#, 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"
msgid "Leave Room…"
msgstr "Salir de la sala…"
@@ -4372,13 +4410,13 @@ msgctxt "@action:button"
msgid "Search in friend directory"
msgstr "Buscar en el directorio de amigos"
#: src/rooms/RoomTreeSection.qml:61
#: src/rooms/RoomTreeSection.qml:59
#, kde-format
msgctxt "Collapse <section name>"
msgid "Collapse %1"
msgstr "Contraer %1"
#: src/rooms/RoomTreeSection.qml:61
#: src/rooms/RoomTreeSection.qml:59
#, kde-format
msgctxt "Expand <section name"
msgid "Expand %1"
@@ -7033,19 +7071,19 @@ msgctxt "@info text-to-speech %1 is author %2 is message text"
msgid "%1 said %2"
msgstr "%1 dijo %2"
#: src/timeline/DelegateContextMenu.qml:403
#: src/timeline/DelegateContextMenu.qml:402
#, kde-format
msgctxt "@action:button 'Unpin' as in 'Unpin this message'"
msgid "Unpin"
msgstr "No fijar"
#: src/timeline/DelegateContextMenu.qml:403
#: src/timeline/DelegateContextMenu.qml:402
#, kde-format
msgctxt "@action:button 'Pin' as in 'Pin the message in the room'"
msgid "Pin"
msgstr "Fijar"
#: src/timeline/DelegateContextMenu.qml:416
#: src/timeline/DelegateContextMenu.qml:415
#, kde-format
msgctxt "@action:inmenu"
msgid "View Source"
@@ -7115,31 +7153,31 @@ msgstr ""
"Este es el inicio del chat. No hay mensajes en el historial antes de este "
"punto."
#: src/timeline/TimelineView.qml:241
#: src/timeline/TimelineView.qml:214
#, kde-format
msgctxt "@action:button"
msgid "Jump to first unread message"
msgstr "Saltar al primer mensaje sin leer"
#: src/timeline/TimelineView.qml:241
#: src/timeline/TimelineView.qml:214
#, kde-format
msgctxt "@action:button"
msgid "Jump to oldest loaded message"
msgstr "Saltar al mensaje cargado más antiguo"
#: src/timeline/TimelineView.qml:272
#: src/timeline/TimelineView.qml:245
#, kde-format
msgctxt "@action:button"
msgid "Jump to latest message"
msgstr "Saltar al último mensaje"
#: src/timeline/TimelineView.qml:307
#: src/timeline/TimelineView.qml:279
#, kde-format
msgctxt "@info:placeholder"
msgid "Drag items here to share them"
msgstr "Arrastre elementos aquí para compartirlos"
#: src/timeline/TimelineView.qml:332
#: src/timeline/TimelineView.qml:304
#, kde-format
msgctxt "Message displayed when some users are 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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -246,7 +246,10 @@ void Controller::initActiveConnection(NeoChatConnection *oldConnection, NeoChatC
if (newConnection) {
connect(newConnection, &NeoChatConnection::errorOccured, this, &Controller::errorOccured);
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();
updateBadgeNotificationCount(newConnection->badgeNotificationCount());
}
Q_EMIT activeConnectionChanged(newConnection);
}

View File

@@ -33,7 +33,6 @@
#include <KWindowSystem>
#endif
#include <KIconTheme>
#include <KLocalizedQmlContext>
#include <KLocalizedString>
#include <KirigamiApp>
@@ -103,10 +102,6 @@ int main(int argc, char *argv[])
{
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
QtWebView::initialize();
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
@@ -166,12 +161,6 @@ int main(int argc, char *argv[])
Connection::setEncryptionDefault(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;
QCommandLineParser parser;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -75,14 +75,6 @@ Kirigami.Page {
focus: true
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: [
Kirigami.Action {
id: jitsiMeetingAction
@@ -121,7 +113,7 @@ Kirigami.Page {
}
},
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"
onTriggered: (root.QQC2.ApplicationWindow.window as Main).openRoomDrawer()
}
@@ -263,7 +255,6 @@ Kirigami.Page {
id: timelineView
messageFilterModel: root.messageFilterModel
compactLayout: NeoChatConfig.compactLayout
fileDropEnabled: !Controller.isFlatpak
markReadCondition: NeoChatConfig.markReadCondition
}
}
@@ -298,7 +289,7 @@ Kirigami.Page {
footer: Loader {
id: chatBarLoader
height: active ? (item as ChatBar)?.implicitHeight : 0
height: active ? (item as ChatBar).implicitHeight : 0
active: timelineViewLoader.active && !root.currentRoom.readOnly
sourceComponent: ChatBar {
id: chatBar
@@ -358,7 +349,7 @@ Kirigami.Page {
});
}
function onShowDelegateMenu(eventId: string, author, messageComponentType, plainText: string, richText: string, mimeType: string, progressInfo, selectedText: string, hoveredLink: string) {
function onShowDelegateMenu(eventId: string, author, messageComponentType, plainText: string, richText: string, mimeType: string, progressInfo, isThread: bool, selectedText: string, hoveredLink: string) {
(delegateContextMenu.createObject(root, {
author: author,
eventId: eventId,
@@ -366,8 +357,6 @@ Kirigami.Page {
mimeType: mimeType,
progressInfo: progressInfo,
messageComponentType: messageComponentType,
selectedText,
hoveredLink,
}) as DelegateContextMenu).popup();
}

View File

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

View File

@@ -293,5 +293,25 @@ Kirigami.Dialog {
icon.name: "username-copy"
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,28 +29,6 @@
#include <KIO/OpenUrlJob>
#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)
: QObject(parent)
, m_config(KSharedConfig::openStateConfig())
@@ -346,6 +324,17 @@ void RoomManager::loadInitialRoom()
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) {
// we opened a room with the arg parsing already
return;
@@ -358,14 +347,16 @@ void RoomManager::loadInitialRoom()
void RoomManager::openRoomForActiveConnection()
{
Q_ASSERT(m_connection);
if (!m_connection) {
setCurrentRoom({});
setCurrentSpace({}, false);
return;
}
auto lastSpace = m_lastRoomConfig.readEntry(u"lastSpace"_s, QString());
if (lastSpace == u"Home"_s) {
lastSpace.clear();
}
// We don't want to open a room on startup on mobile
setCurrentSpace(lastSpace, !m_isMobile);
setCurrentSpace(lastSpace, true);
}
UriResolveResult RoomManager::visitUser(User *user, const QString &action)
@@ -522,7 +513,7 @@ void RoomManager::setConnection(NeoChatConnection *connection)
Q_EMIT connectionChanged();
}
void RoomManager::setCurrentSpace(const QString &spaceId, bool goToLastUsedRoom)
void RoomManager::setCurrentSpace(const QString &spaceId, bool setRoom)
{
m_currentSpaceId = spaceId;
@@ -542,65 +533,25 @@ void RoomManager::setCurrentSpace(const QString &spaceId, bool goToLastUsedRoom)
m_lastRoomConfig.writeEntry(u"lastSpace"_s, spaceId.isEmpty() ? u"Home"_s : spaceId);
}
// If we requested to change to the last opened room, do so:
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);
if (!setRoom) {
return;
}
// We can't have empty keys in KConfig, so it's stored as "Home":
if (const auto &lastRoom = m_lastRoomConfig.readEntry(spaceId.isEmpty() ? u"Home"_s : spaceId, QString()); !lastRoom.isEmpty()) {
resolveResource(lastRoom, "no_join"_L1);
return;
}
// We intentionally don't want to open the last room on mobile
if (m_isMobile) {
return;
}
// If no last room was opened, go to the space home:
if (!spaceId.isEmpty() && spaceId != u"DM"_s) {
resolveResource(spaceId, "no_join"_L1);
return;
}
// Fallback to no room opened:
setCurrentRoom({});
// We can't have empty keys in KConfig, so it's stored as "Home"
if (const auto &lastRoom = m_lastRoomConfig.readEntry(spaceId.isEmpty() ? u"Home"_s : spaceId, QString()); !lastRoom.isEmpty()) {
resolveResource(lastRoom, "no_join"_L1);
return;
}
}
QString RoomManager::findSpaceIdForCurrentRoom() const
{
if (!m_currentRoom) {
return m_currentSpaceId;
if (!spaceId.isEmpty() && spaceId != u"DM"_s) {
resolveResource(spaceId, "no_join"_L1);
return;
}
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 {};
setCurrentRoom({});
}
void RoomManager::setCurrentRoom(const QString &roomId)
@@ -620,25 +571,57 @@ void RoomManager::setCurrentRoom(const QString &roomId)
}
Q_EMIT currentRoomChanged();
if (!m_dontUpdateLastRoom) {
if (m_connection) {
if (roomId.isEmpty()) {
m_lastRoomConfig.deleteEntry(m_currentSpaceId);
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);
// 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;
}
}
setCurrentSpace({}, false);
}
void RoomManager::clearCurrentRoom()

View File

@@ -337,11 +337,6 @@ Q_SIGNALS:
void currentSpaceChanged();
protected:
bool m_dontUpdateLastRoom = false; // Don't set directly, use LastRoomBlocker.
friend class LastRoomBlocker;
private:
bool m_isMobile = false;
@@ -378,22 +373,8 @@ private:
void setCurrentRoom(const QString &roomId);
/**
* @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);
// Space ID, "DM", or empty string
void setCurrentSpace(const QString &spaceId, bool setRoom = true);
/**
* @brief Resolve a user URI.

View File

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

View File

@@ -65,7 +65,7 @@ QQC2.Popup {
padding: 2
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 {
id: emojiPicker
height: 400

View File

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

View File

@@ -21,12 +21,6 @@ FormCard.FormCard {
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 {
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

View File

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

View File

@@ -3,6 +3,10 @@
#include "chatbarcache.h"
#include <QMimeData>
#include <KUrlMimeData>
#include <Quotient/roommember.h>
#include "eventhandler.h"
@@ -295,4 +299,17 @@ void ChatBarCache::clearCache()
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"

View File

@@ -198,6 +198,8 @@ public:
*/
Q_INVOKABLE void postMessage();
Q_INVOKABLE void drop(QList<QUrl> urls, const QString &transferPortal);
Q_SIGNALS:
void textChanged();
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");
}
if (const auto &reason = e.contentJson()["reason"_L1].toString().toHtmlEscaped(); !reason.isEmpty()) {
return i18n("has put %1 out of the room: %2", subjectName, reason);
return i18n("has removed %1 from the room: %2", subjectName, reason);
}
return i18n("has put %1 out of the room", subjectName);
return i18n("has removed %1 from the room", subjectName);
case Membership::Ban:
if (e.senderId() != e.userId()) {
if (e.reason().isEmpty()) {

View File

@@ -0,0 +1,14 @@
// 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

@@ -0,0 +1,13 @@
// 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

@@ -0,0 +1,14 @@
// 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

@@ -0,0 +1,13 @@
// 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{
u"shrug"_s,
[](const QString &message, NeoChatRoom *, ChatBarCache *) {
return u"¯\\\\\\_(ツ)\\_/¯ %1"_s.arg(message);
return u"¯\\\\_(ツ)_/¯ %1"_s.arg(message);
},
Quotient::RoomMessageEvent::MsgType::Text,
kli18n("<message>"),

View File

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

View File

@@ -6,6 +6,7 @@
#include <QImageReader>
#include <QJsonDocument>
#include "jobs/neochatreportuserjob.h"
#include "neochatroom.h"
#include "spacehierarchycache.h"
@@ -19,6 +20,7 @@
#include <Quotient/csapi/profile.h>
#include <Quotient/csapi/registration.h>
#include <Quotient/csapi/versions.h>
#include <Quotient/e2ee/sssshandler.h>
#include <Quotient/jobs/downloadfilejob.h>
#include <Quotient/qt_connection_util.h>
#include <Quotient/room.h>
@@ -75,37 +77,31 @@ void NeoChatConnection::connectSignals()
Q_EMIT directChatInvitesChanged();
for (const auto &chatId : additions) {
if (const auto chat = room(chatId)) {
connect(chat, &Room::changed, this, [this](Room::Changes changes) {
if (changes & (Room::Change::UnreadStats | Room::Change::Highlights)) {
refreshBadgeNotificationCount();
Q_EMIT directChatNotificationsChanged();
Q_EMIT directChatsHaveHighlightNotificationsChanged();
}
connect(chat, &Room::unreadStatsChanged, this, [this]() {
refreshBadgeNotificationCount();
Q_EMIT directChatNotificationsChanged();
Q_EMIT directChatsHaveHighlightNotificationsChanged();
});
}
}
for (const auto &chatId : removals) {
if (const auto chat = room(chatId)) {
disconnect(chat, &Room::changed, this, nullptr);
disconnect(chat, &Room::unreadStatsChanged, this, nullptr);
}
}
});
connect(this, &NeoChatConnection::joinedRoom, this, [this](Room *room) {
if (room->isDirectChat()) {
connect(room, &Room::changed, this, [this](Room::Changes changes) {
if (changes & (Room::Change::UnreadStats | Room::Change::Highlights)) {
Q_EMIT directChatNotificationsChanged();
Q_EMIT directChatsHaveHighlightNotificationsChanged();
}
connect(room, &Room::unreadStatsChanged, this, [this]() {
Q_EMIT directChatNotificationsChanged();
Q_EMIT directChatsHaveHighlightNotificationsChanged();
});
}
Q_EMIT roomInvitesChanged();
connect(room, &Room::changed, this, [this](Room::Changes changes) {
if (changes & (Room::Change::UnreadStats | Room::Change::Highlights)) {
refreshBadgeNotificationCount();
Q_EMIT homeNotificationsChanged();
Q_EMIT homeHaveHighlightNotificationsChanged();
}
connect(room, &Room::unreadStatsChanged, this, [this]() {
refreshBadgeNotificationCount();
Q_EMIT homeNotificationsChanged();
Q_EMIT homeHaveHighlightNotificationsChanged();
});
});
connect(this, &NeoChatConnection::leftRoom, this, [this](Room *room, Room *prev) {
@@ -166,6 +162,10 @@ void NeoChatConnection::refreshBadgeNotificationCount()
for (const auto &r : allRooms()) {
if (const auto room = static_cast<NeoChatRoom *>(r)) {
count += room->contextAwareNotificationCount();
if (room->joinState() == JoinState::Invite) {
count++;
}
}
}
@@ -576,4 +576,36 @@ bool NeoChatConnection::isVerifiedSession() const
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"

View File

@@ -222,6 +222,13 @@ public:
*/
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:
void globalUrlPreviewEnabledChanged();
void labelChanged();
@@ -259,6 +266,9 @@ Q_SIGNALS:
*/
void ownSessionVerified();
void keyBackupUnlocked();
void keyBackupError();
private:
static bool m_globalUrlPreviewDefault;
static PushRuleAction::Action m_defaultAction;

View File

@@ -50,12 +50,12 @@
#include "roomlastmessageprovider.h"
#include "spacehierarchycache.h"
#include "urlhelper.h"
#include "jobs/neochatreportroomjob.h"
#ifndef Q_OS_ANDROID
#include <KIO/Job>
#include <KIO/JobTracker>
#endif
#include <KJobTrackerInterface>
#include <KLocalizedString>
@@ -346,6 +346,10 @@ void NeoChatRoom::forget()
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);
}
@@ -1181,10 +1185,7 @@ void NeoChatRoom::loadPinnedMessage()
connection()->callApi<GetOneRoomEventJob>(id(), mostRecentEventId).then([this](const auto &job) {
auto event = fromJson<event_ptr_tt<RoomEvent>>(job->jsonData());
if (auto encEv = eventCast<EncryptedEvent>(event.get())) {
auto decryptedMessage = decryptMessage(*encEv);
if (decryptedMessage) {
event = std::move(decryptedMessage);
}
event = decryptMessage(*encEv);
}
m_pinnedMessage = EventHandler::richBody(this, event.get());
Q_EMIT pinnedMessageChanged();
@@ -1652,12 +1653,6 @@ void NeoChatRoom::downloadEventFromServer(const QString &eventId)
}
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));
Q_EMIT extraEventLoaded(eventId);
},
@@ -1843,4 +1838,9 @@ QString NeoChatRoom::pinnedMessage() const
return m_pinnedMessage;
}
void NeoChatRoom::report(const QString &reason)
{
connection()->callApi<NeochatReportRoomJob>(id(), reason);
}
#include "moc_neochatroom.cpp"

View File

@@ -622,6 +622,11 @@ public:
*/
QString pinnedMessage() const;
/**
* @brief Send a report about this room.
*/
Q_INVOKABLE void report(const QString &reason);
private:
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.
*/
readonly property string roomAlias: room?.aliases[0] ?? ""
readonly property var roomAlias: room.aliases[0]
spacing: 0
Layout.fillWidth: true
RowLayout {
Layout.fillWidth: true

View File

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

View File

@@ -121,6 +121,13 @@ 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 {
acceptedDevices: PointerDevice.TouchScreen
onLongPressed: RoomManager.viewEventMenu(root.eventId, root.Message.room, root.Message.selectedText, root.Message.hoveredLink);

View File

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

View File

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

View File

@@ -269,8 +269,6 @@ void EventMessageContentModel::resetModel()
updateItineraryModel();
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)

View File

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

View File

@@ -121,7 +121,9 @@ void PollHandler::handleResponse(const Quotient::PollResponseEvent *event)
return;
}
m_selections[event->senderId()] = event->selections().size() > 0 ? event->selections().first(pollStartEvent->maxSelections()) : event->selections();
m_selections[event->senderId()] = event->selections().size() > 0
? event->selections().first(std::min(pollStartEvent->maxSelections(), (int)event->selections().size()))
: event->selections();
if (m_selections.contains(event->senderId()) && m_selections[event->senderId()].isEmpty()) {
m_selections.remove(event->senderId());
}

View File

@@ -20,6 +20,8 @@ ColumnLayout {
signal resolveResource(string idOrUri, string action)
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
spacing: 0
Item {

View File

@@ -8,7 +8,6 @@ import org.kde.kirigami as Kirigami
import org.kde.neochat.libneochat
import org.kde.neochat.timeline as Timeline
import org.kde.neochat.settings as Settings
/**
* @brief Page for holding a room drawer component.
@@ -50,7 +49,7 @@ Kirigami.Page {
text: i18nc("@action:button", "Room settings")
icon.name: 'settings-configure-symbolic'
onTriggered: {
Settings.RoomSettingsView.openRoomSettings(root.room, Settings.RoomSettingsView.Room);
RoomSettingsView.openRoomSettings(root.room, RoomSettingsView.Room);
}
}
]

View File

@@ -48,10 +48,6 @@ QQC2.ScrollView {
ListView {
id: userList
// Used to determine if the view has settled and should stop perfoming the hack
property bool viewHasSettled: false
header: ColumnLayout {
id: columnLayout
@@ -60,29 +56,15 @@ QQC2.ScrollView {
spacing: 0
width: ListView.view ? ListView.view.width - ListView.view.leftMargin - ListView.view.rightMargin : 0
// HACK: Resettle this ListView while our labels wrap themselves. ListView doesn't do this automatically.
// We use the Timer to determine when its done internally reshuffling, so we don't accidentally send you to the top if you actually scrolled down.
onHeightChanged: {
if (!userList.viewHasSettled) {
userList.positionViewAtBeginning();
hackTimer.restart();
}
}
Timer {
id: hackTimer
// The internal wrapping and height changes happen quickly, so we don't need a long interval here
interval: 1
onTriggered: userList.viewHasSettled = true
}
Loader {
active: true
Layout.fillWidth: true
Layout.topMargin: Kirigami.Units.smallSpacing
visible: !root.room.isSpace
sourceComponent: root.room.isDirectChat() ? directChatDrawerHeader : groupChatDrawerHeader
onItemChanged: if (item) {
userList.positionViewAtBeginning();
}
}
Kirigami.ListSectionHeader {
@@ -352,6 +334,5 @@ QQC2.ScrollView {
userList.headerItem.userListSearchField.text = "";
}
userList.currentIndex = -1;
userList.viewHasSettled = false;
}
}

View File

@@ -32,8 +32,6 @@ RowLayout {
Kirigami.Heading {
Layout.fillWidth: true
// Roughly equivalent to what Kirigami does for its built-in headings
Layout.leftMargin: Kirigami.Units.gridUnit - Kirigami.Units.mediumSpacing
visible: !root.collapsed
text: i18nc("@title", "Rooms")
}
@@ -56,31 +54,19 @@ RowLayout {
QQC2.ToolButton {
id: menuButton
property QQC2.Menu menuItem: null
function openMenu(): void {
if (!menuItem || !menuItem.visible) {
menuItem = menu.createObject(menuButton) as QQC2.Menu;
menuItem.closed.connect(menuButton.toggle);
menuItem.open();
} else {
menuItem.dismiss()
}
}
Accessible.role: Accessible.ButtonMenu
Accessible.onPressAction: menuButton.action.trigger()
display: QQC2.AbstractButton.IconOnly
down: pressed || menuItem?.visible
checkable: true
text: i18nc("@action:button", "Show Menu")
icon.name: "application-menu-symbolic"
onClicked: {
const item = menu.createObject(menuButton) as QQC2.Menu;
item.closed.connect(menuButton.toggle);
item.open();
}
onPressed: openMenu()
Keys.onReturnPressed: openMenu()
Keys.onEnterPressed: openMenu()
Accessible.onPressAction: openMenu()
QQC2.ToolTip.visible: hovered && !menuItem?.visible
QQC2.ToolTip.visible: hovered
QQC2.ToolTip.text: text
QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
}
@@ -88,8 +74,6 @@ RowLayout {
Component {
id: menu
QQC2.Menu {
y: menuButton.height
QQC2.MenuItem {
text: i18n("Find your friends")
icon.name: "list-add-user"

View File

@@ -46,7 +46,7 @@ KirigamiComponents.ConvergentContextMenu {
QQC2.Action {
text: i18nc("@action:inmenu", "Mark as Read")
icon.name: "checkmark"
enabled: root.room.notificationCount > 0
enabled: root.room.notificationCount > 0 || root.room.highlightCount > 0
onTriggered: root.room.markAllMessagesAsRead()
}
@@ -150,6 +150,26 @@ KirigamiComponents.ConvergentContextMenu {
separator: true
}
Kirigami.Action {
text: i18nc("@action:button 'Report' as in 'Report this room to the administrators'", "Report…")
icon.name: "dialog-warning-symbolic"
visible: root.connection.supportsMatrixSpecVersion("v1.13")
onTriggered: {
let dialog = (root.Kirigami.PageStack.pageStack as Kirigami.PageRow).pushDialogLayer(Qt.createComponent('org.kde.neochat', 'ReasonDialog'), {
title: i18nc("@title:dialog", "Report Room"),
placeholder: i18nc("@info:placeholder", "Reason for reporting this room"),
icon: "dialog-warning-symbolic",
actionText: i18nc("@action:button 'Report' as in 'Report this room to the administrators'", "Report")
}, {
title: i18nc("@title", "Report Room"),
width: Kirigami.Units.gridUnit * 25
}) as ReasonDialog;
dialog.accepted.connect(reason => {
currentRoom.report(reason);
});
}
}
QQC2.Action {
text: i18nc("@action:inmenu", "Leave Room…")
icon.name: "go-previous"

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