diff --git a/.ci/macos/build.sh b/.ci/macos/build.sh new file mode 100755 index 00000000..5724b438 --- /dev/null +++ b/.ci/macos/build.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env sh + +set -u + +# unused +#TAG=$(git tag -l --points-at HEAD) + +# Add Qt binaries to path +PATH="$(brew --prefix qt5):${PATH}" +export PATH + +CMAKE_PREFIX_PATH="$(brew --prefix qt5)" +export CMAKE_PREFIX_PATH + +cmake -GNinja -S. -Bbuild \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX=.deps/usr \ + -DHUNTER_ROOT="../.hunter" \ + -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHUNTER_CONFIGURATION_TYPES=RelWithDebInfo \ + -DUSE_BUNDLED_OPENSSL=ON \ + -DCI_BUILD=ON +cmake --build build +( cd build || exit + git clone https://github.com/Nheko-Reborn/qt-jdenticon.git + ( cd qt-jdenticon || exit + qmake + make -j 4 + cp libqtjdenticon.dylib ../nheko.app/Contents/MacOS + ) + "$(brew --prefix qt5)/bin/macdeployqt" nheko.app -always-overwrite -qmldir=../resources/qml/ +) diff --git a/.ci/macos/deploy.sh b/.ci/macos/deploy.sh deleted file mode 100755 index 56a1f23a..00000000 --- a/.ci/macos/deploy.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env sh - -set -eux - -# unused -#TAG=$(git tag -l --points-at HEAD) - -# Add Qt binaries to path -PATH=/usr/local/opt/qt@5/bin/:${PATH} - -( cd build - # macdeployqt does not copy symlinks over. - # this specifically addresses icu4c issues but nothing else. - ICU_LIB="$(brew --prefix icu4c)/lib" - export ICU_LIB - mkdir -p nheko.app/Contents/Frameworks - find "${ICU_LIB}" -type l -name "*.dylib" -exec cp -a -n {} nheko.app/Contents/Frameworks/ \; || true - - macdeployqt nheko.app -dmg -always-overwrite -qmldir=../resources/qml/ - - user=$(id -nu) - chown "${user}" nheko.dmg - mv nheko.dmg .. -) - -dmgbuild -s ./.ci/macos/settings.json "Nheko" nheko.dmg - -VERSION=${CI_COMMIT_SHORT_SHA} - -if [ -n "$VERSION" ]; then - mv nheko.dmg "nheko-${VERSION}.dmg" - mkdir artifacts - cp "nheko-${VERSION}.dmg" artifacts/ -fi diff --git a/.ci/macos/notarize.sh b/.ci/macos/notarize.sh index af62a6d2..2757d44c 100755 --- a/.ci/macos/notarize.sh +++ b/.ci/macos/notarize.sh @@ -7,24 +7,28 @@ set -u # Add Qt binaries to path PATH="/usr/local/opt/qt@5/bin/:${PATH}" +export PATH security unlock-keychain -p "${RUNNER_USER_PW}" login.keychain -( cd build || exit - # macdeployqt does not copy symlinks over. - # this specifically addresses icu4c issues but nothing else. - # We might not even need this any longer... - # ICU_LIB="$(brew --prefix icu4c)/lib" - # export ICU_LIB - # mkdir -p nheko.app/Contents/Frameworks - # find "${ICU_LIB}" -type l -name "*.dylib" -exec cp -a -n {} nheko.app/Contents/Frameworks/ \; || true +if [ -n "${CI_PIPELINE_TRIGGERED:-}" ] && [ "${TRIGGERED_BY:-}" = "cirrus" ]; then + echo "cirrus build id: ${TRIGGER_BUILD_ID}" + cat "${TRIGGER_PAYLOAD}" + # download the build artifacts from cirrus api + curl "https://api.cirrus-ci.com/v1/artifact/build/${TRIGGER_BUILD_ID}/binaries.zip" -o binaries.zip + # cirrus ci artifacts task name is 'binaries' so that's the zip name. + unzip binaries.zip + # we zip 'build/nheko.app' in cirrus ci, cirrus itself puts it in a 'build' directory + # so move it to the right place for the rest of the process. + ( cd build || exit + unzip nheko.zip + ) +fi - #macdeployqt nheko.app -dmg -always-overwrite -qmldir=../resources/qml/ -sign-for-notarization="${APPLE_DEV_IDENTITY}" - macdeployqt nheko.app -always-overwrite -qmldir=../resources/qml/ - - # user=$(id -nu) - # chown "${user}" nheko.dmg -) +if [ ! -d "build/nheko.app" ]; then + echo "nheko.app is missing, you did something wrong!" + exit 1 +fi echo "[INFO] Signing app contents" find "build/nheko.app/Contents"|while read -r fname; do @@ -46,6 +50,7 @@ trap finish EXIT dmgbuild -s .ci/macos/settings.json "Nheko" nheko.dmg codesign -s "${APPLE_DEV_IDENTITY}" nheko.dmg + user=$(id -nu) chown "${user}" nheko.dmg @@ -72,7 +77,7 @@ while sleep 60 && date; do #isSuccess=$(grep "success" "$NOTARIZE_STATUS_LOG") #isFailure=$(grep "invalid" "$NOTARIZE_STATUS_LOG") - echo "Status for submission \"${requestUUID}\": \"${sub_status}\"" + echo "Status for submission \"${requestUUID}\": \"${sub_status}\"" if [ "${sub_status}" = "Accepted" ]; then echo "Notarization done!" @@ -82,6 +87,7 @@ while sleep 60 && date; do fi if [ "${sub_status}" = "Invalid" ] || [ "${sub_status}" = "Rejected" ]; then echo "Notarization failed" + xcrun notarytool log "${requestUUID}" --apple-id "${APPLE_DEV_USER}" --password "${APPLE_DEV_PASS}" --team-id "${APPLE_TEAM_ID}" > "$NOTARIZE_STATUS_LOG" 2>&1 cat "$NOTARIZE_STATUS_LOG" 1>&2 exit 1 fi @@ -91,7 +97,7 @@ done VERSION=${CI_COMMIT_SHORT_SHA} if [ -n "$VERSION" ]; then - mv nheko.dmg "nheko-${VERSION}.dmg" + mv nheko.dmg "nheko-${VERSION}_${PLAT}.dmg" mkdir artifacts - cp "nheko-${VERSION}.dmg" artifacts/ + cp "nheko-${VERSION}_${PLAT}.dmg" artifacts/ fi \ No newline at end of file diff --git a/.cirrus.yml b/.cirrus.yml new file mode 100644 index 00000000..2658b4b3 --- /dev/null +++ b/.cirrus.yml @@ -0,0 +1,24 @@ +task: + macos_instance: + image: ghcr.io/cirruslabs/macos-monterey-xcode:13 + name: Build - macOS Apple Silicon + only_if: $CIRRUS_REPO_OWNER == 'Nheko-Reborn' + environment: + GITLAB_TRIGGER_TOKEN: ENCRYPTED[!5fb4bbdecbde3b2c766ac7383dca573cd5ec8b815c5ac9bede0cadfe9ad70ecd3e64b1728f7840da087099f3fc1fd4f7!] + homebrew_script: + - brew bundle --file .ci/macos/Brewfile + build_script: + - export PATH="$(brew --prefix qt5)/bin/:${PATH}" + - ./.ci/macos/build.sh + zip_script: + - ditto -c -k --sequesterRsrc --keepParent build/nheko.app build/nheko.zip + gitlab_script: + - curl -X POST + --fail + -F token="${GITLAB_TRIGGER_TOKEN}" + -F ref="${CIRRUS_BRANCH}" + -F "variables[TRIGGER_BUILD_ID]=${CIRRUS_BUILD_ID}" + -F "variables[TRIGGERED_BY]=cirrus" + "https://nheko.im/api/v4/projects/2/trigger/pipeline" + binaries_artifacts: + path: build/nheko.zip \ No newline at end of file diff --git a/.clang-format b/.clang-format index e9ebcb6d..adb43177 100644 --- a/.clang-format +++ b/.clang-format @@ -13,3 +13,6 @@ KeepEmptyLinesAtTheStartOfBlocks: false PointerAlignment: Right Cpp11BracedListStyle: true PenaltyReturnTypeOnItsOwnLine: 0 +--- +BasedOnStyle: WebKit +Language: ObjC \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2b9cc03b..14063f88 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,10 +14,10 @@ build-clazy: before_script: - apt-get update - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake liblmdb-dev libre2-dev - libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev - qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev - qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform - qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev + libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev + qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev + qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform + qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev script: - export PATH="/usr/local/bin/:/usr/lib/ccache:${PATH}" - export CMAKE_BUILD_PARALLEL_LEVEL=$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | wc -l) @@ -28,6 +28,8 @@ build-clazy: -DCMAKE_BUILD_TYPE=Release -DCI_BUILD=ON -DFETCHCONTENT_QUIET=OFF -DCMAKE_CXX_COMPILER=clazy - cmake --build build + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -41,11 +43,11 @@ build-gcc11: TRAVIS_OS_NAME: linux before_script: - apt-get update - - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev - libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev - qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev - qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform - qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev + - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev + libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev + qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev + qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform + qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev # need recommended deps for wget - apt-get -y install wget - /usr/sbin/update-ccache-symlinks @@ -63,6 +65,8 @@ build-gcc11: - cmake --build build after_script: - mv ../.hunter .hunter + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -77,11 +81,11 @@ build-gcc10: TRAVIS_OS_NAME: linux before_script: - apt-get update - - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev - libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev - qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev - qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform - qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev + - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev + libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev + qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev + qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform + qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev # need recommended deps for wget - apt-get -y install wget - /usr/sbin/update-ccache-symlinks @@ -100,6 +104,8 @@ build-gcc10: - cmake --build build after_script: - mv ../.hunter .hunter + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -112,22 +118,11 @@ build-macos: before_script: - rm -rf ../.hunter && mv .hunter ../.hunter || true script: - - export PATH=/usr/local/opt/qt@5/bin/:${PATH} - - export CMAKE_PREFIX_PATH=/usr/local/opt/qt@5 - - cmake -GNinja -H. -Bbuild - -DCMAKE_BUILD_TYPE=RelWithDebInfo - -DCMAKE_INSTALL_PREFIX=.deps/usr - -DHUNTER_ROOT="../.hunter" - -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF - -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHUNTER_CONFIGURATION_TYPES=RelWithDebInfo - -DUSE_BUNDLED_OPENSSL=ON - -DUSE_BUNDLED_BOOST=ON - -DCI_BUILD=ON - -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 - - cmake --build build - - (cd build && git clone https://github.com/Nheko-Reborn/qt-jdenticon.git && cd qt-jdenticon && qmake && make -j 4 && cp libqtjdenticon.dylib ../nheko.app/Contents/MacOS) + - ./.ci/macos/build.sh after_script: - mv ../.hunter .hunter + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' artifacts: paths: - build/nheko.app @@ -143,22 +138,27 @@ build-macos: codesign-macos: stage: deploy tags: [macos] + variables: + PLAT: "intel" before_script: - - 'brew upgrade qt@5' - pip3 install dmgbuild script: - export PATH=/usr/local/opt/qt@5/bin/:${PATH} - ./.ci/macos/notarize.sh after_script: - - ./.ci/upload-nightly-gitlab.sh artifacts/nheko-${CI_COMMIT_SHORT_SHA}.dmg + - ./.ci/upload-nightly-gitlab.sh artifacts/nheko-${CI_COMMIT_SHORT_SHA}_${PLAT}.dmg needs: - - build-macos + - job: build-macos + optional: true # optional since we want to be able to also trigger this job from cirrus ci for apple silicon builds. rules: - - if: '$CI_COMMIT_BRANCH == "master"' + - if : '$CI_PIPELINE_TRIGGERED && $CI_COMMIT_REF_PROTECTED == "true"' + variables: + PLAT: "m1" + - if : '$CI_COMMIT_BRANCH == "master"' - if : $CI_COMMIT_TAG artifacts: paths: - - artifacts/nheko-${CI_COMMIT_SHORT_SHA}.dmg + - artifacts/nheko-${CI_COMMIT_SHORT_SHA}_${PLAT}.dmg - /tmp/notarize* name: nheko-${CI_COMMIT_SHORT_SHA}-macos @@ -181,6 +181,8 @@ build-flatpak-amd64: after_script: - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true - bash ./.ci/upload-nightly-gitlab.sh build-flatpak/nheko-amd64.flatpak + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -202,13 +204,16 @@ build-flatpak-arm64: - flatpak --noninteractive install --user flathub org.kde.Sdk//5.15-22.08 script: - export VERSION=$(git describe) + - if [ "$(grep MemTotal /proc/meminfo | tr -cd '[0-9]')" -lt "6000000" ]; then export EXTRA_FLAGS='--jobs=3'; fi - mkdir -p build-flatpak - cd build-flatpak - - flatpak-builder --user --disable-rofiles-fuse --ccache --repo=repo --default-branch=${CI_COMMIT_REF_NAME//\//_} --subject="Build of Nheko ${VERSION} `date` for arm64" app ../io.github.NhekoReborn.Nheko.yaml + - flatpak-builder --user --disable-rofiles-fuse --ccache $EXTRA_FLAGS --repo=repo --default-branch=${CI_COMMIT_REF_NAME//\//_} --subject="Build of Nheko ${VERSION} `date` for arm64" app ../io.github.NhekoReborn.Nheko.yaml - flatpak build-bundle repo nheko-arm64.flatpak io.github.NhekoReborn.Nheko ${CI_COMMIT_REF_NAME//\//_} after_script: - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true - bash ./.ci/upload-nightly-gitlab.sh build-flatpak/nheko-arm64.flatpak + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -285,3 +290,6 @@ linting: script: - make lint - make license + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' + diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a11a187..8658b228 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,9 +25,9 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "compile as PIC by default") option(HUNTER_ENABLED "Enable Hunter package manager" OFF) include("cmake/HunterGate.cmake") HunterGate( - URL "https://github.com/cpp-pm/hunter/archive/v0.24.3.tar.gz" - SHA1 "10738b59e539818a01090e64c2d09896247530c7" - LOCAL + URL "https://github.com/cpp-pm/hunter/archive/v0.24.8.tar.gz" + SHA1 "ca7838dded9a1811b04ffd56175f629e0af82d3d" + LOCAL ) macro(hunter_add_package_safe) @@ -186,7 +186,7 @@ if(USE_BUNDLED_COEURL) FetchContent_Declare( coeurl GIT_REPOSITORY https://nheko.im/Nheko-Reborn/coeurl.git - GIT_TAG v0.2.1 + GIT_TAG f989f3c54c1ca15e29c5bd6b1ce4efbcb3fd8078 ) FetchContent_MakeAvailable(coeurl) set(COEURL_TARGET_NAME coeurl::coeurl) @@ -451,6 +451,8 @@ set(SRC_FILES src/ColorImageProvider.h src/CombinedImagePackModel.cpp src/CombinedImagePackModel.h + src/CommandCompleter.cpp + src/CommandCompleter.h src/CompletionModelRoles.h src/CompletionProxyModel.cpp src/CompletionProxyModel.h @@ -592,8 +594,8 @@ if(USE_BUNDLED_MTXCLIENT) include(FetchContent) FetchContent_Declare( MatrixClient - GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG e139f8b98fb2cfb0d89b44b63af86d037c2f2c55 + GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git + GIT_TAG d187c63a27710fa87a44ab44d43b7cfa2023132a ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") @@ -629,9 +631,9 @@ set(TRANSLATION_DEPS ${LANG_QRC} ${QRC} ${QM_SRC}) if (APPLE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Foundation -framework Cocoa -framework UserNotifications") - set(SRC_FILES ${SRC_FILES} src/notifications/ManagerMac.mm src/notifications/ManagerMac.cpp src/emoji/MacHelper.mm src/emoji/MacHelper.h) + set(SRC_FILES ${SRC_FILES} src/notifications/NotificationManagerProxy.h src/notifications/MacNotificationDelegate.h src/notifications/MacNotificationDelegate.mm src/notifications/ManagerMac.mm src/notifications/ManagerMac.cpp src/emoji/MacHelper.mm src/emoji/MacHelper.h) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0") - set_source_files_properties( src/notifications/ManagerMac.mm src/emoji/MacHelper.mm src/emoji/MacHelper.h PROPERTIES SKIP_PRECOMPILE_HEADERS ON) + set_source_files_properties( src/notifications/NotificationManagerProxy.h src/notifications/MacNotificationDelegate.h src/notifications/MacNotificationDelegate.mm src/notifications/ManagerMac.mm src/emoji/MacHelper.mm src/emoji/MacHelper.h PROPERTIES SKIP_PRECOMPILE_HEADERS ON) endif() elseif (WIN32) file(DOWNLOAD diff --git a/cmake/Findcmark.cmake b/cmake/Findcmark.cmake index 29092bb0..6f3e72a3 100644 --- a/cmake/Findcmark.cmake +++ b/cmake/Findcmark.cmake @@ -2,7 +2,7 @@ # CMake module to search for the cmark library # -include(FindPkgConfig) +find_package(PkgConfig) pkg_check_modules(PC_CMARK QUIET cmark) if(NOT CMARK_INCLUDE_DIR) @@ -34,9 +34,8 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(cmark - DEFAULT_MSG - CMARK_INCLUDE_DIR - CMARK_LIBRARY) + REQUIRED_VARS CMARK_LIBRARY CMARK_INCLUDE_DIR +) mark_as_advanced(CMARK_LIBRARY CMARK_INCLUDE_DIR) diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index c2c8e5fa..e8b6e9f2 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -170,8 +170,8 @@ modules: - -Ddefault_library=static name: coeurl sources: - - commit: cfeae3acef061dbb19706f462ee58b9be2e6ec76 - tag: v0.2.1 + - commit: f989f3c54c1ca15e29c5bd6b1ce4efbcb3fd8078 + #tag: v0.2.1 type: git url: https://nheko.im/nheko-reborn/coeurl.git - config-opts: @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: e139f8b98fb2cfb0d89b44b63af86d037c2f2c55 + - commit: d187c63a27710fa87a44ab44d43b7cfa2023132a #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/resources/confettiparticle.png b/resources/confettiparticle.png new file mode 100644 index 00000000..808429d8 Binary files /dev/null and b/resources/confettiparticle.png differ diff --git a/resources/confettiparticle.svg b/resources/confettiparticle.svg new file mode 100644 index 00000000..80b85629 --- /dev/null +++ b/resources/confettiparticle.svg @@ -0,0 +1,49 @@ + + + + + + + diff --git a/resources/langs/nheko_ca.ts b/resources/langs/nheko_ca.ts index aa521bbb..02017193 100644 --- a/resources/langs/nheko_ca.ts +++ b/resources/langs/nheko_ca.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,27 @@ - + Invited user: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -313,17 +318,24 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3554,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3562,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4190,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4199,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4233,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4313,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4514,7 @@ Reason: %4 - + Default @@ -4159,6 +4556,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4600,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4624,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4650,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4275,7 +4687,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4740,7 @@ This setting will take effect upon restart. - + Select a file @@ -4480,7 +4892,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4946,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +5007,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5067,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts index b8255ea7..ecdf1824 100644 --- a/resources/langs/nheko_cs.ts +++ b/resources/langs/nheko_cs.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -209,7 +209,7 @@ CallManager - + Entire screen @@ -223,22 +223,27 @@ - + Invited user: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -264,12 +269,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -314,17 +319,24 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -334,7 +346,7 @@ - + Failed to restore OLM account. Please login again. @@ -346,13 +358,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1354,7 +1665,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1419,27 +1730,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 - + Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2755,7 +3117,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2889,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2985,7 +3347,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3098,19 +3460,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3130,7 +3492,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3403,7 +3765,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3564,7 +3926,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3572,22 +3944,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3607,12 +3979,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3641,6 +4018,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3683,7 +4065,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3819,8 +4201,8 @@ Reason: %4 UserSettings - - + + Default @@ -3828,7 +4210,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3862,6 +4244,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3937,8 +4324,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4128,7 +4525,7 @@ Reason: %4 - + Default @@ -4170,6 +4567,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4209,9 +4611,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4223,23 +4635,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4249,7 +4661,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4286,7 +4698,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4339,7 +4751,7 @@ This setting will take effect upon restart. - + Select a file @@ -4491,7 +4903,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4545,7 +4957,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4606,16 +5018,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4654,6 +5078,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 9be4599f..76a540bd 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -89,12 +89,12 @@ Adresse entfernen - + #new-alias:server.tld #neue-addresse:server.domain - + Add Hinzufügen @@ -104,33 +104,33 @@ Allowed rooms settings - + Erlaubte Raumeinstellungen List of rooms that allow access to this room. Anyone who is in any of those rooms can join this room. - + Liste der Räume, die Zugriff zu diesem Raum erlauben. Personen in einem dieser Räume können diesen Raum betreten. Parent community - + Übergeordnete Community Other room - + Anderer Raum Enter additional rooms not in the list yet... - + Weitere Räume eingeben, die noch nicht in der Liste sind… Cache - + %1 and %n other(s) %1 und %n anderer Teilnehmer @@ -208,7 +208,7 @@ CallManager - + Entire screen Ganzer Bildschirm @@ -222,22 +222,27 @@ - + Invited user: %1 Eingeladener Benutzer: %1 - + + Confirm logout + Abmelden bestätigen + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Das Datenbankformat auf der Festplatte ist neuer als die von dieser Nhekoversion unterstützte Version. Bitte update Nheko oder lösche die Datenbank. - + Failed to open database, logging out! Öffnen der Datenbank fehlgeschlagen, du wirst ausgeloggt! - + Knock on room Raumbeitritt anfragen (anklopfen) @@ -263,12 +268,12 @@ - + Confirm invite Einladung bestätigen - + Do you really want to invite %1 (%2)? Nutzer %1 (%2) wirklich einladen? @@ -313,19 +318,28 @@ Verbannung aufgehoben: %1 - + Do you really want to start a private chat with %1? Möchtest du wirklich eine private Konversation mit %1 beginnen? - + Cache migration failed! Migration des Caches fehlgeschlagen! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + Aus folgendem Grund möchte dich Nheko zurück zur Anmeldeseite schicken: +%1 +Wenn du glaubst,.dass das ein Fehler ist, dann kannst du Nheko schließen und vielleicht deine Schlüssel sichern. Von der Anmeldeseite kannst du dich mit den normalen Methoden anmelden. + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. - + Die Migration der Datenbank auf die aktuelle Version ist fehlgeschlagen. Dies kann verschiedene Gründe haben. Bitte erstelle einen Fehlereport auf https://github.com/Nheko-Reborn/nheko und versuche zwischenzeitlich eine ältere Version zu verwenden. Alternativ kannst du die Datenbank manuell löschen. @@ -333,7 +347,7 @@ Inkompatible Version des Caches - + Failed to restore OLM account. Please login again. Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein. @@ -345,13 +359,13 @@ Gespeicherte Nachrichten konnten nicht wiederhergestellt werden. Bitte melde Dich erneut an. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Fehler beim Setup der Verschlüsselungsschlüssel. Servermeldung: %1 %2. Bitte versuche es später erneut. - + Please try to login again: %1 Bitte melde dich erneut an: %1 @@ -359,7 +373,8 @@ You failed to join %1. You can try to knock so that others can invite you in. Do you want to do so? You may optionally provide a reason for others to accept your knock: - + Du konntest %1 nicht betreten. Du kannst versuchen anzuklopfen, so dass andere Leute dich einladen können. Möchtest du das tun? +Du kannst zusätzlich einen Grund angeben, warum die anderen dein Anklopfen annehmen sollten: @@ -412,17 +427,316 @@ You may optionally provide a reason for others to accept your knock: Keine Netzwerkverbindung + + CommandCompleter + + + /me <message> + /me <Nachricht> + + + + /react <text> + /react <Text> + + + + /join (!roomid|#alias) [reason] + /join (!raumid|#alias) [Grund] + + + + /knock (!roomid|#alias) [reason] + /knock (!raumid|#alias) [Grund] + + + + /part [reason] + /part [Grund] + + + + /leave [reason] + /leave [Grund] + + + + /invite @userid [reason] + /invite @nutzerid [Grund] + + + + /kick @userid [reason] + /kick @nutzerid [Grund] + + + + /ban @userid [reason] + /ban @nutzerid [Grund] + + + + /unban @userid [reason] + /unban @nutzerid [Grund] + + + + /redact ($eventid|@userid) + /redact ($eventid|@nutzerid) + + + + /roomnick <displayname> + /roomnick <Anzeigename> + + + + /shrug [message] + /shrug [Nachricht] + + + + /fliptable + /fliptable + + + + /unfliptable + /unfliptable + + + + /sovietflip + /sovietflip + + + + /clear-timeline + /clear-timeline + + + + /reset-state + /reset-state + + + + /rotate-megolm-session + /rotate-megolm-session + + + + /md [message] + /md [Nachricht] + + + + /plain [message] + /plain [Nachricht] + + + + /rainbow [message] + /rainbow [Nachricht] + + + + /rainbowme [message] + /rainbowme [Nachricht] + + + + /notice [message] + /notice [Nachricht] + + + + /rainbownotice [message] + /rainbownotice [Nachricht] + + + + /confetti [message] + /confetti [Nachricht] + + + + /rainbowconfetti [message] + /rainbowconfetti [Nachricht] + + + + /goto ($eventid|message index|matrix:r/room/e/event) + /goto ($eventid|Nachrichten Index|matrix:r/raumid/e/eventid) + + + + /converttodm + /converttodm + + + + /converttoroom + /converttoroom + + + + Send a message expressing an action. + Sende eine Nachricht, die eine Aktion ausdrückt. + + + + Send <text> as a reaction when you’re replying to a message. + Sende <Text> als Reaktion auf eine Nachricht anstatt als Antwort. + + + + Join a room. Reason is optional. + Raum betreten. Ein Grund ist optional. + + + + Ask to join a room. Reason is optional. + Anfragen einen Raum zu betreten. Ein Grund ist optional. + + + + + Leave a room. Reason is optional. + Raum verlassen. Ein Grund ist optional. + + + + Invite a user into the current room. Reason is optional. + Einen Nutzer in diesen Raum einladen. Ein Grund ist optional. + + + + Kick a user from the current room. Reason is optional. + Einen Nutzer aus diesem Raum werfen. Ein Grund ist optional. + + + + Ban a user from the current room. Reason is optional. + Einen Nutzer von diesem Raum verbannen. Ein Grund ist optional. + + + + Unban a user in the current room. Reason is optional. + Verbannung eines Nutzers aufheben. Ein Grund ist optional. + + + + Redact an event or all locally cached messages of a user. + Eine bestimmte Nachricht oder alle lokal geladenen Nachrichten eines Nutzers löschen. + + + + Change your displayname in this room. + Ändere deinen Anzeigenamen in diesem Raum. + + + + ¯\_(ツ)_/¯ with an optional message. + ¯\_(ツ)_/¯ mit einer optionalen Nachricht. + + + + (╯°□°)╯︵ ┻━┻ + (╯°□°)╯︵ ┻━┻ + + + + ┯━┯╭( º _ º╭) + ┯━┯╭( º _ º╭) + + + + ノ┬─┬ノ ︵ ( \o°o)\ + ノ┬─┬ノ ︵ ( \o°o)\ + + + + Clear the currently cached messages in this room. + Lokalen Nachrichtenspeicher für diesen Raum leeren. + + + + Refetch the state in this room. + Raumzustand für diesen Raum vom Server aktualisieren. + + + + Rotate the current symmetric encryption key. + Den symmetrischen Nachrichtenschlüssel wechseln. + + + + Send a markdown formatted message (ignoring the global setting). + Sende diese Nachricht als Markdown (selbst wenn die globale Einstellung Plaintext preferiert). + + + + Send an unformatted message (ignoring the global setting). + Sende diese Nachricht unformatiert (selbst wenn die globale Einstellung Markdown preferiert). + + + + Send a message in rainbow colors. + Sende eine Nachricht in Regenbogenfarben. + + + + Send /me in rainbow colors. + Sende eine /me-Nachricht in Regenbogenfarben. + + + + Send a bot message. + Sende eine Nachricht als wärst du ein Bot. + + + + Send a bot message in rainbow colors. + Sende eine Botnachricht, aber in Regenbogenfarben. + + + + Send a message with confetti. + Sende eine Nachricht mit Konfetti. + + + + Send a message in rainbow colors with confetti. + Sende eine Nachricht in Regenbogenfarben mit Konfetti. + + + + Go to this event or link. + Navigiere zu dieser Nachricht oder diesem Link. + + + + Convert this room to a direct chat. + Verwandel diesen Raum in eine Direktnachricht. + + + + Convert this direct chat into a room. + Verwandle diese Direktnachricht in einen normalen Chatraum. + + CommunitiesList Do not show notification counts for this community or tag. - + Zeige keine Benachrichtigungen für diese Gruppe oder Tag an. Hide rooms with this tag or from this community by default. - + Verstecke Räume dieser Gruppe oder dieses Tags standardmäßig. @@ -458,7 +772,7 @@ You may optionally provide a reason for others to accept your knock: Zeige 1:1 Konversationen an. - + Favourites Favoriten @@ -490,22 +804,22 @@ You may optionally provide a reason for others to accept your knock: Failed to update community: %1 - + Konnte diese Gruppe nicht aktualisieren: %1 Failed to delete room from community: %1 - + Konnte Raum nicht von dieser Gruppe entfernen: %1 Failed to update community for room: %1 - + Konnte Gruppe für den Raum nicht aktualisieren: %1 Failed to remove community from room: %1 - + Konnte Gruppe für den Raum nicht entfernen: %1 @@ -536,7 +850,7 @@ You may optionally provide a reason for others to accept your knock: This room can't be joined directly. You can, however, knock on the room and room members can accept or decline this join request. You can additionally provide a reason for them to let you in below: - + Dieser Raum kann nicht direkt betreten werden. Du kanns aber anklopfen und die Personen in dem Raum können dich dann reinlassen oder auch nicht. Optional kannst du auch einen Grund angeben, warum sie das tun sollten. @@ -622,7 +936,7 @@ You may optionally provide a reason for others to accept your knock: Public rooms can be joined by anyone; private rooms need explicit invites. - + Öffentliche Räume können von jedem betreten werden. Private Räume benötigen eine Einladung. @@ -648,7 +962,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Geheimnisse entschlüsseln @@ -892,7 +1206,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Konnte die versteckten Events nicht ändern: %1 @@ -1107,7 +1421,7 @@ You may optionally provide a reason for others to accept your knock: Alle Dateien (*) - + Upload of '%1' failed Das Hochladen von '%1' ist fehlgeschlagen @@ -1167,7 +1481,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Raum verlassen @@ -1195,7 +1509,10 @@ You may optionally provide a reason for others to accept your knock: You can also put your homeserver address there if your server doesn't support .well-known lookup. Example: @user:server.my If Nheko fails to discover your homeserver, it will show you a field to enter the server manually. - + Dein Anmeldename. Eine mxid sollte mit eine @ anfangen gefolgt von der Nutzerid. Nach dem Nutzernamen folgt der servername, getrennt durch ein :. +Wenn dein Server keinen .well-known unterstützt, kannst du auch eine Serveradresse angeben. +Beispiel: @nutzer:mein.server +Wenn Nheko den Server nicht finden kann, wird es dich nach der Serveradresse fragen. @@ -1215,13 +1532,14 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th A name for this device which will be shown to others when verifying your devices. If nothing is provided, a default is used. - + Der Name für dieses Gerät, den andere sehen, wenn sie deine Geräte verifizieren. Wenn nichts angeben ist, wird ein Standardwert verwendet. The address that can be used to contact you homeserver's client API. Example: https://server.my:8787 - + Die Adresse unter der die Client-API deines Heimservers erreicht wird. +Beispiel: https://mein.server:8787 @@ -1246,7 +1564,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Du hast eine invalide Matrix ID eingegeben. Normalerwise sehen die so aus: @joe:matrix.org @@ -1279,7 +1597,7 @@ Example: https://server.my:8787 The selected server does not support a version of the Matrix protocol, that this client understands (v1.1 to v1.4). You can't sign in. - + Der ausgewählte Server unterstützt keine der Matrix versionen, die Nheko versteht (v1.1 bis v1.4). Du kannst dich nicht anmelden. @@ -1352,7 +1670,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + Dieser Raum wurde aus folgendem Grund ersetzt: %1 + + + + Go to replacement room + Gehe zum neuen Raum + + + %1 removed a message %1 hat eine Nachricht gelöscht @@ -1399,7 +1727,7 @@ Example: https://server.my:8787 %1 changed the parent communities for this room. - + %1 hat die übergeordneten Gruppen für diesen Raum bearbeitet. @@ -1426,18 +1754,29 @@ Example: https://server.my:8787 %1 answered the call. %1 hat den Anruf angenommen. + + + %1 rejected the call. + %1 hat den Anruf abgewiesen. + + + + %1 select answer + %1 hat einen Anruf ausgewählt + %1 ended the call. %1 hat den Anruf beendet. + %1 is negotiating the call... %1 wartet auf Verbindung... - + Allow them in Reinlassen @@ -1455,7 +1794,12 @@ Example: https://server.my:8787 Anrufen - + + Already on a call + Bereits in einem Telefonat + + + Send a file Versende Datei @@ -1465,7 +1809,7 @@ Example: https://server.my:8787 Schreibe eine Nachricht… - + Stickers Sticker @@ -1488,7 +1832,7 @@ Example: https://server.my:8787 MessageView - + Edit Bearbeiten @@ -1500,12 +1844,12 @@ Example: https://server.my:8787 Reply in thread - + In Gesprächsfaden antworten New thread - + Neuer Gesprächsfaden @@ -1518,7 +1862,7 @@ Example: https://server.my:8787 Optionen - + Reason for removal Grund für die Löschung @@ -1557,7 +1901,7 @@ Example: https://server.my:8787 &Thread - + &Gesprächsfaden @@ -1572,7 +1916,7 @@ Example: https://server.my:8787 &Read receipts - + &Lesebestätigung @@ -1635,12 +1979,12 @@ Example: https://server.my:8787 To allow other users to see which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify an unverified device now? (Please make sure you have one of those devices available.) - + Damit andere Nutzer sehen können, welche Geräte wirklich dir gehören, kannst du sie verifizieren. Das aktiviert auch den Onlinespeicher für Nachrichtenschlüssel. Willst du ein unverifiziertes Gerät verifizieren? (Stelle sicher, dass du eines der Geräte in deiner Nähe hast.) To allow other users to see which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify %1 now? - + Damit andere Nutzer sehen können, welche Geräte wirklich dir gehören, kannst du sie verifizieren. Das aktiviert auch den Onlinespeicher für Nachrichtenschlüssel. Willst du %1 verifizieren? @@ -1694,8 +2038,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 hat eine verschlüsselte Nachricht gesendet @@ -1711,7 +2055,7 @@ Example: https://server.my:8787 %1 hat mit einer verschlüsselten Nachricht geantwortet - + %1 replied to a message %1 hat auf eine Nachricht geantwortet @@ -1853,50 +2197,50 @@ Example: https://server.my:8787 Apply permission changes - + Berechtigungsänderungen anwenden Which of the subcommunities and rooms should these permissions be applied to? - + Auf welche Unterguppen und Räume sollen diese Berechtigungen angewandt werden? Apply permissions recursively - + Berechtigungen rekursiv anwenden Overwrite exisiting modifications in rooms - + Existierende Änderungen in den Räumen überschreiben No permissions to apply the new permissions here - + Keine Berechtigung die Berechtigungen hier zu verändern No changes needed - + Keine Änderungen notwendig Existing modifications to the permissions in this room will be overwritten - + Existierende Änderungen in diesem Raum werden überschrieben Permissions synchronized with community - + Berechtigungen mit der Gruppe synchronisiert PowerLevels - + Failed to update powerlevel: %1 - Konnte Berechtigungen nicht aktualisieren: %1 + Konnte Berechtigungen nicht aktualisieren: %1 @@ -1910,7 +2254,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Andere Events @@ -2052,12 +2396,12 @@ Example: https://server.my:8787 Edit child communities and rooms - + Untergeordnete Gruppen und Räume ändern Change parent communities - + Übergeordnete Gruppen ändern @@ -2079,6 +2423,11 @@ Example: https://server.my:8787 Hang up a call Anruf auflegen + + + Reject a call + Anruf abweisen + Change the room emotes @@ -2096,9 +2445,9 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. - + Erstelle ein separates Profil, was mehrere Instanzen von Nheko mit verschiedenen Accounts zur gleichen Zeit ermöglicht. @@ -2116,27 +2465,42 @@ Example: https://server.my:8787 Alias for '--log-level trace'. - + Alias für '--log-level trace'. Set the global log level, or a comma-separated list of <component>=<level> pairs, or both. For example, to set the default log level to 'warn' but disable logging for the 'ui' component, pass 'warn,ui=off'. levels:{trace,debug,info,warning,error,critical,off} components:{crypto,db,mtx,net,qml,ui} - + Setze das globale loglevel oder eine kommaseparierte liste con <Komponente>=<Level> Paaren oder beides. Z.B. um das Loglevel auf 'warn' zu setzen aber für die 'ui' Komponente zu deaktivieren, kannst du 'warn,ui=off' verwenden. Level: {trace,debug,info,warning,error,critical,off}, Komponenten: {crypto,db,mtx,net,qml,ui} level - + Level Set the log output type. A comma-separated list is allowed. The default is 'file,stderr'. types:{file,stderr,none} - + Definiere wohin geloggt wird. Eine kommaseparierte Liste kann angegeben werden. Standartwert ist 'file,stderr'. Valide Typen: {file,stderr,none} type - + Typ + + + + Respond + Antworten + + + + Send + Senden + + + + Write a message... + Schreibe eine Nachricht… @@ -2150,7 +2514,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Gestern, %1 @@ -2191,7 +2555,7 @@ Example: https://server.my:8787 A name for this device which will be shown to others when verifying your devices. If nothing is provided a default is used. - + Ein Name für dieses Gerät, der eventuell anderen Nutzern gezeigt wird, wenn du Geräte verifizierst. Ohne Angabe wird ein Standardwert verwendet. @@ -2224,7 +2588,7 @@ Example: https://server.my:8787 REGISTRIEREN - + Autodiscovery failed. Received malformed response. Automatische Erkennung fehlgeschlagen. Antwort war fehlerhaft. @@ -2251,7 +2615,7 @@ Example: https://server.my:8787 The selected server does not support a version of the Matrix protocol that this client understands (v1.1 to v1.4). You can't register. - + Der ausgewählte Server unterstützt keine der Matrix versionen, die Nheko versteht (v1.1 bis v1.4). Du kannst dich nicht registrieren. @@ -2294,7 +2658,7 @@ Example: https://server.my:8787 Cancel Thread - + Gesprächsfaden abbrechen @@ -2318,7 +2682,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored keine Version gespeichert @@ -2342,6 +2706,11 @@ Example: https://server.my:8787 + Room settings + Raumeinstellungen + + + Leave room Raum verlassen @@ -2378,7 +2747,7 @@ Example: https://server.my:8787 Add or remove from community... - + Zu Gruppe hinzufügen oder entfernen... @@ -2674,37 +3043,37 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer Anyone can join - + Jeder kann beitreten Allow knocking - + Anklopfen erlauben Allow joining via other rooms - + Durch andere Räume betreten Rooms to join via - + Räume die Zutritt erlauben Change the list of rooms users can join this room via. Usually this is the official community of this room. - + Ändere die Liste an Räumen, die den Zutritt erlauben. Normalerweise ist das die offizielle Gruppe dieses Raumes. Allow guests to join - + Erlaube Gästen beizutreten Apply access rules - + Zugriffsregeln anwenden @@ -2714,7 +3083,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer Change what packs are enabled, remove packs, or create new ones - + Ändere welche Packungen aktiv sind, entferne oder erstelle neue Packungen. @@ -2752,7 +3121,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer mehr anzeigen - + Failed to enable encryption: %1 Aktivierung der Verschlüsselung fehlgeschlagen: %1 @@ -2821,7 +3190,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer Please enter the token which has been sent to you: - + Bitte gib das Token ein, dass dir geschickt wurde: @@ -2886,7 +3255,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer SecretStorage - + Failed to connect to secret storage Verbindung zum kryptografischen Speicher fehlgeschlagen @@ -2984,7 +3353,7 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn SingleImagePackModel - + Failed to update image pack: %1 Konnte die Bilderpackung nicht aktualisieren: %1 @@ -3012,7 +3381,7 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn Add or remove from community - + Zu Gruppe hinzufügen oder entfernen @@ -3097,19 +3466,19 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn TimelineModel - + Message redaction failed: %1 Nachricht zurückziehen fehlgeschlagen: %1 - + Failed to encrypt event, sending aborted! Event konnte nicht verschlüsselt werden, senden wurde abgebrochen! - + Save image Bild speichern @@ -3129,7 +3498,7 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn Datei speichern - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3398,7 +3767,7 @@ Reason: %4 Grund: %4 - + %2 revoked the invite to %1. %2 hat die Einladung an %1 zurückgezogen. @@ -3458,17 +3827,17 @@ Grund: %4 %1 hat das Anklopfen zurückgezogen. - + You joined this room. Du bist dem Raum beigetreten. - + %1 made this room require an invitation to join. - + %1 hat diesen Raum nur eingeladenen Nutzern zugänglich gemacht. - + %1 invited %2. %1 hat %2 eingeladen. @@ -3502,25 +3871,25 @@ Grund: %4 TimelineRow - + Edited Bearbeitet Part of a thread - + Teil eines Gesprächfadens TimelineView - + No room open Kein Raum geöffnet - + No preview available Keine Vorschau verfügbar @@ -3558,7 +3927,17 @@ Grund: %4 Einladung ablehnen - + + Hide invite reason + Einladungsgrund verstecken + + + + Show invite reason + Einladungsgrund anzeigen + + + Back to room list Zurück zur Raumliste @@ -3566,22 +3945,22 @@ Grund: %4 TopBar - + Back to room list Zurück zur Raumliste - + No room selected Kein Raum ausgewählt - + In %1 - + In %1 - + Show room members. Zeige Raummitglieder an. @@ -3601,12 +3980,17 @@ Grund: %4 Dieser Raum enthält unverifizierte Geräte! - + Show or hide pinned messages Angehefte Nachrichten anzeigen oder verstecken - + + Search this room + Diesen Raum durchsuchen + + + Room options Raumoptionen @@ -3635,6 +4019,11 @@ Grund: %4 Unpin Anheften aufheben + + + Enter search query + Suchanfrage eingeben + TrayIcon @@ -3677,7 +4066,7 @@ Grund: %4 UploadBox - + Upload %n file(s) Datei hochladen @@ -3812,8 +4201,8 @@ Grund: %4 UserSettings - - + + Default Standard @@ -3821,7 +4210,7 @@ Grund: %4 UserSettingsModel - + Theme Erscheinungsbild @@ -3855,6 +4244,11 @@ Grund: %4 Send messages as Markdown Sende Nachrichten als Markdown formatiert + + + Use shift+enter to send and enter to start a new line + Neuzeile mit Umschalt+Enter einfügen. + Enable message bubbles @@ -3930,8 +4324,18 @@ Grund: %4 Decrypt messages in sidebar Entschlüssele Nachrichten in der Raumliste + + + Decrypt notifications + Benachrichtigungen entschlüsseln + + Display fancy effects such as confetti + Lustige Chateffekte wie Konfetti anzeigen + + + Privacy Screen Blickschutz @@ -4121,7 +4525,7 @@ Grund: %4 Mache Rauminformationen über D-Bus verfügbar - + Default Standard @@ -4166,6 +4570,11 @@ When disabled, all messages are sent as a plain text. Nutze Markdown als Format für Nachrichten. Wenn deaktiviert werden alle Nachrichten als unformatierter Text gesendet. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + Erlaubt das invertieren des Verhaltens der Enter taste. Kontrolliert ob Umschalt+Enter eine Neuzeile einfügt oder die Nachricht sendet. + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4207,13 +4616,23 @@ AUS - Quadratisch, AN - Kreisförmig. + Decrypt messages shown in notifications for encrypted chats. + Nachrichten in Benachrichtigungen entschlüsseln in verschlüsselten Räumen. + + + Choose where to show the total number of notifications contained within a community or tag. - + Wähle aus ob die Benachrichtigungsanzahl für Gruppen und Tags angezeigt werden oder nicht. + + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + Manche Nachrichten lösen extra Effekte aus. Z.B. erzeugen Nachrichten, die mit /confetti gesendet wurden, einen kleinen Konfettischauer. Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. - + Teilt automatisch Schlüssel für Nachrichten mit verifizierten Nutzern (auf Anfrage), selbst wenn diese sonst keinen Zugriff darauf hätten. @@ -4221,38 +4640,40 @@ AUS - Quadratisch, AN - Kreisförmig. Der Schlüssel um deine eigenen Geräte zu verifizieren. Wenn dieser im Cache ist, dann werden alle deine Geräte als verifiziert für andere Nutzer erscheinen, wenn du diese verifiziert hast. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Hebe das Fenster hervor, wenn eine Nachricht empfangen wurde. Normalerweise animiert das den Taskbaricon oder färbt das Fenster orange ein. - + Communities sidebar - + Gruppenseitenleiste - + Show message counts for communities and tags - + Zeige Nachrichtenzahl für Gruppen und Tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized - + Setze eine maximale Breite für Nachrichten im Chat (in Pixeln). Das kann die Lesbarkeit auf breiten Bildschirmen erhöhen. Show a column containing communities and tags next to the room list. - + Zeige eine Liste mit Gruppen und Tags neben der Raumliste. - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. - + Zeige Räume mit neuen Nachrichten zuerst an. +Wenn dies aus ist, dann werden Räume nur nach Zeitstempel der letzten Nachricht sortiert. +Wenn dies an ist, dann werden Nachrichten mit aktiven Benachrichtigungen (der kleine Kreis mit der Zahl drin) zuerst angezeigt. Räume, die stummgestellt sind, werden immer noch nach Zeitstempel sortiert, nachdem diese weniger wichtig zu sein scheinen. @@ -4290,7 +4711,7 @@ Only affects messages in encrypted chats. Betrifft nur Nachrichten in verschlüsselten Chats. - + When the window loses focus, the timeline will be blurred. Die Zeitliste wird unscharf, wenn das Fenster den Fokus verliert. @@ -4345,7 +4766,7 @@ This setting will take effect upon restart. Diese Einstellung benötigt einen Neustart von Nheko. - + Select a file Datei auswählen @@ -4497,7 +4918,7 @@ Diese Einstellung benötigt einen Neustart von Nheko. descriptiveTime - + Yesterday Gestern @@ -4522,7 +4943,7 @@ Diese Einstellung benötigt einen Neustart von Nheko. Open the fallback, follow the steps, and confirm after completing them. - + Öffne die Webseite und folge den Schritten auf dieser. Klicke dann auf Bestätigen. @@ -4551,7 +4972,7 @@ Diese Einstellung benötigt einen Neustart von Nheko. message-description sent: - + You sent an audio clip Du hast eine Audiodatei gesendet @@ -4612,16 +5033,28 @@ Diese Einstellung benötigt einen Neustart von Nheko. + You: %1 Du: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + Du hast etwas Konfetti geschicht + + + + %1 sent some confetti + %1 hat etwas Konfetti geschicht + + + You sent an encrypted message Du hast eine verschlüsselte Nachricht gesendet @@ -4660,6 +5093,16 @@ Diese Einstellung benötigt einen Neustart von Nheko. %1 ended a call %1 hat einen Anruf beendet + + + You rejected a call + Du hast einen Anruf abgewiesen + + + + %1 rejected a call + %1 hat einen Anruf abgewiesen + utils diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index a6c65c4f..c894cdea 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,27 @@ - + Invited user: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -313,17 +318,24 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Όλα τα αρχεία (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Βγές @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. + %1 is negotiating the call... - + Allow them in @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Γράψε ένα μήνυμα... - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + Γράψε ένα μήνυμα... + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 ΕΓΓΡΑΦΗ - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Βγές @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image Αποθήκευση Εικόνας @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3554,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3562,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4190,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4199,7 @@ Reason: %4 UserSettingsModel - + Theme Φόντο @@ -3851,6 +4233,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4313,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4514,7 @@ Reason: %4 - + Default @@ -4159,6 +4556,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4600,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4624,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4650,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4275,7 +4687,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4740,7 @@ This setting will take effect upon restart. - + Select a file Διάλεξε ένα αρχείο @@ -4480,7 +4892,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4946,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +5007,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5067,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index fe97cd35..fed69aab 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -89,12 +89,12 @@ Remove this alias - + #new-alias:server.tld #new-alias:server.tld - + Add Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 and %n other @@ -208,7 +208,7 @@ CallManager - + Entire screen Entire screen @@ -222,22 +222,27 @@ - + Invited user: %1 Invited user: %1 - + + Confirm logout + Confirm logout + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! Failed to open database, logging out! - + Knock on room Knock on room @@ -263,12 +268,12 @@ - + Confirm invite Confirm invite - + Do you really want to invite %1 (%2)? Do you really want to invite %1 (%2)? @@ -313,17 +318,26 @@ Unbanned user: %1 - + Do you really want to start a private chat with %1? Do you really want to start a private chat with %1? - + Cache migration failed! Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +347,7 @@ Incompatible cache version - + Failed to restore OLM account. Please login again. Failed to restore OLM account. Please login again. @@ -345,13 +359,13 @@ Failed to restore saved data. Please login again. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 Please try to login again: %1 @@ -413,6 +427,305 @@ You may optionally provide a reason for others to accept your knock:No network connection + + CommandCompleter + + + /me <message> + /me <message> + + + + /react <text> + /react <text> + + + + /join (!roomid|#alias) [reason] + /join (!roomid|#alias) [reason] + + + + /knock (!roomid|#alias) [reason] + /knock (!roomid|#alias) [reason] + + + + /part [reason] + /part [reason] + + + + /leave [reason] + /leave [reason] + + + + /invite @userid [reason] + /invite @userid [reason] + + + + /kick @userid [reason] + /kick @userid [reason] + + + + /ban @userid [reason] + /ban @userid [reason] + + + + /unban @userid [reason] + /unban @userid [reason] + + + + /redact ($eventid|@userid) + /redact ($eventid|@userid) + + + + /roomnick <displayname> + /roomnick <displayname> + + + + /shrug [message] + /shrug [message] + + + + /fliptable + /fliptable + + + + /unfliptable + /unfliptable + + + + /sovietflip + /sovietflip + + + + /clear-timeline + /clear-timeline + + + + /reset-state + /reset-state + + + + /rotate-megolm-session + /rotate-megolm-session + + + + /md [message] + /md [message] + + + + /plain [message] + /plain [message] + + + + /rainbow [message] + /rainbow [message] + + + + /rainbowme [message] + /rainbowme [message] + + + + /notice [message] + /notice [message] + + + + /rainbownotice [message] + /rainbownotice [message] + + + + /confetti [message] + /confetti [message] + + + + /rainbowconfetti [message] + /rainbowconfetti [message] + + + + /goto ($eventid|message index|matrix:r/room/e/event) + /goto ($eventid|message index|matrix:r/room/e/event) + + + + /converttodm + /converttodm + + + + /converttoroom + /converttoroom + + + + Send a message expressing an action. + Send a message expressing an action. + + + + Send <text> as a reaction when you’re replying to a message. + Send <text> as a reaction when you’re replying to a message. + + + + Join a room. Reason is optional. + Join a room. Reason is optional. + + + + Ask to join a room. Reason is optional. + Ask to join a room. Reason is optional. + + + + + Leave a room. Reason is optional. + Leave a room. Reason is optional. + + + + Invite a user into the current room. Reason is optional. + Invite a user into the current room. Reason is optional. + + + + Kick a user from the current room. Reason is optional. + Kick a user from the current room. Reason is optional. + + + + Ban a user from the current room. Reason is optional. + Ban a user from the current room. Reason is optional. + + + + Unban a user in the current room. Reason is optional. + Unban a user in the current room. Reason is optional. + + + + Redact an event or all locally cached messages of a user. + Redact an event or all locally cached messages of a user. + + + + Change your displayname in this room. + Change your displayname in this room. + + + + ¯\_(ツ)_/¯ with an optional message. + ¯\_(ツ)_/¯ with an optional message. + + + + (╯°□°)╯︵ ┻━┻ + (╯°□°)╯︵ ┻━┻ + + + + ┯━┯╭( º _ º╭) + ┯━┯╭( º _ º╭) + + + + ノ┬─┬ノ ︵ ( \o°o)\ + ノ┬─┬ノ ︵ ( \o°o)\ + + + + Clear the currently cached messages in this room. + Clear the currently cached messages in this room. + + + + Refetch the state in this room. + Refetch the state in this room. + + + + Rotate the current symmetric encryption key. + Rotate the current symmetric encryption key. + + + + Send a markdown formatted message (ignoring the global setting). + Send a markdown formatted message (ignoring the global setting). + + + + Send an unformatted message (ignoring the global setting). + Send an unformatted message (ignoring the global setting). + + + + Send a message in rainbow colors. + Send a message in rainbow colors. + + + + Send /me in rainbow colors. + Send /me in rainbow colors. + + + + Send a bot message. + Send a bot message. + + + + Send a bot message in rainbow colors. + Send a bot message in rainbow colors. + + + + Send a message with confetti. + Send a message with confetti. + + + + Send a message in rainbow colors with confetti. + Send a message in rainbow colors with confetti. + + + + Go to this event or link. + Go to this event or link. + + + + Convert this room to a direct chat. + Convert this room to a direct chat. + + + + Convert this direct chat into a room. + Convert this direct chat into a room. + + CommunitiesList @@ -459,7 +772,7 @@ You may optionally provide a reason for others to accept your knock:Show direct chats. - + Favourites Favourites @@ -649,7 +962,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Decrypt secrets @@ -893,7 +1206,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Failed to set hidden events: %1 @@ -1108,7 +1421,7 @@ You may optionally provide a reason for others to accept your knock:All Files (*) - + Upload of '%1' failed Upload of '%1' failed @@ -1168,7 +1481,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Leave room @@ -1251,7 +1564,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1357,7 +1670,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message %1 removed a message @@ -1422,27 +1735,48 @@ Example: https://server.my:8787 %1 placed a call. - + + %1 rejected the call. + %1 rejected the call. + + + + %1 select answer + %1 select answer + + + + %1 is negotiating the call... %1 is negotiating the call... - + Allow them in Allow them in - + %1 answered the call. %1 answered the call. - + + This room was replaced for the following reason: %1 + This room was replaced for the following reason: %1 + + + + Go to replacement room + Go to replacement room + + + %1 changed the parent communities for this room. %1 changed the parent communities for this room. - + %1 ended the call. %1 ended the call. @@ -1460,7 +1794,12 @@ Example: https://server.my:8787 Place a call - + + Already on a call + Already on a call + + + Send a file Send a file @@ -1470,7 +1809,7 @@ Example: https://server.my:8787 Write a message… - + Stickers Stickers @@ -1493,7 +1832,7 @@ Example: https://server.my:8787 MessageView - + Edit Edit @@ -1523,7 +1862,7 @@ Example: https://server.my:8787 Options - + Reason for removal Reason for removal @@ -1699,8 +2038,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 sent an encrypted message @@ -1716,7 +2055,7 @@ Example: https://server.my:8787 %1 replied with an encrypted message - + %1 replied to a message %1 replied to a message @@ -1899,7 +2238,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 Failed to update powerlevel: %1 @@ -1915,7 +2254,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Other events @@ -2084,6 +2423,11 @@ Example: https://server.my:8787 Hang up a call Hang up a call + + + Reject a call + Reject a call + Change the room emotes @@ -2101,7 +2445,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2143,6 +2487,21 @@ Example: https://server.my:8787 type type + + + Respond + Respond + + + + Send + Send + + + + Write a message... + Write a message… + ReadReceipts @@ -2155,7 +2514,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Yesterday, %1 @@ -2229,7 +2588,7 @@ Example: https://server.my:8787 REGISTER - + Autodiscovery failed. Received malformed response. Autodiscovery failed. Received malformed response. @@ -2323,7 +2682,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored no version stored @@ -2347,6 +2706,11 @@ Example: https://server.my:8787 + Room settings + Room settings + + + Leave room Leave room @@ -2757,7 +3121,7 @@ Please take note that it can't be disabled afterwards. show more - + Failed to enable encryption: %1 Failed to enable encryption: %1 @@ -2891,7 +3255,7 @@ Please take note that it can't be disabled afterwards. SecretStorage - + Failed to connect to secret storage Failed to connect to secret storage @@ -2989,7 +3353,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 Failed to update image pack: %1 @@ -3102,19 +3466,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Message redaction failed: %1 - + Failed to encrypt event, sending aborted! Failed to encrypt event, sending aborted! - + Save image Save image @@ -3134,7 +3498,7 @@ If you choose verify, you need to have the other device available. If you choose Save file - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3403,7 +3767,7 @@ Reason: %4 Reason: %4 - + %2 revoked the invite to %1. %2 revoked the invite to %1. @@ -3463,17 +3827,17 @@ Reason: %4 %1 redacted their knock. - + You joined this room. You joined this room. - + %1 made this room require an invitation to join. %1 made this room require an invitation to join. - + %1 invited %2. %1 invited %2. @@ -3507,7 +3871,7 @@ Reason: %4 TimelineRow - + Edited Edited @@ -3520,12 +3884,12 @@ Reason: %4 TimelineView - + No room open No room open - + No preview available No preview available @@ -3563,7 +3927,17 @@ Reason: %4 decline invite - + + Hide invite reason + Hide invite reason + + + + Show invite reason + Show invite reason + + + Back to room list Back to room list @@ -3571,22 +3945,22 @@ Reason: %4 TopBar - + Back to room list Back to room list - + No room selected No room selected - + In %1 In %1 - + Show room members. Show room members. @@ -3606,12 +3980,17 @@ Reason: %4 This room contains unverified devices! - + Show or hide pinned messages Show or hide pinned messages - + + Search this room + Search this room + + + Room options Room options @@ -3640,6 +4019,11 @@ Reason: %4 Unpin Unpin + + + Enter search query + Enter search query + TrayIcon @@ -3682,7 +4066,7 @@ Reason: %4 UploadBox - + Upload %n file(s) Upload file @@ -3817,8 +4201,8 @@ Reason: %4 UserSettings - - + + Default Default @@ -3826,7 +4210,7 @@ Reason: %4 UserSettingsModel - + Theme Theme @@ -3860,6 +4244,11 @@ Reason: %4 Send messages as Markdown Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + Use shift+enter to send and enter to start a new line + Enable message bubbles @@ -3935,8 +4324,18 @@ Reason: %4 Decrypt messages in sidebar Decrypt messages in sidebar + + + Decrypt notifications + Decrypt notifications + + Display fancy effects such as confetti + Display fancy effects such as confetti + + + Privacy Screen Privacy Screen @@ -4126,7 +4525,7 @@ Reason: %4 Expose room information via D-Bus - + Default Default @@ -4171,6 +4570,11 @@ When disabled, all messages are sent as a plain text. Allow using markdown in messages. When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4212,9 +4616,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + Decrypt messages shown in notifications for encrypted chats. + + + Choose where to show the total number of notifications contained within a community or tag. Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4226,24 +4640,24 @@ OFF - square, ON - circle. The key to verify your own devices. If it is cached, verifying one of your devices will mark it verified for all your other devices and for users that have verified you. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar Communities sidebar - + Show message counts for communities and tags Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4253,7 +4667,7 @@ This usually causes the application icon in the task bar to animate in some fash Show a column containing communities and tags next to the room list. - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4297,7 +4711,7 @@ Only affects messages in encrypted chats. Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. When the window loses focus, the timeline will @@ -4353,7 +4767,7 @@ This setting will take effect upon restart. This setting will take effect upon restart. - + Select a file Select a file @@ -4505,7 +4919,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Yesterday @@ -4559,7 +4973,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip You sent an audio clip @@ -4620,16 +5034,28 @@ This setting will take effect upon restart. + You: %1 You: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + You sent some confetti + + + + %1 sent some confetti + %1 sent some confetti + + + You sent an encrypted message You sent an encrypted message @@ -4668,6 +5094,16 @@ This setting will take effect upon restart. %1 ended a call %1 ended a call + + + You rejected a call + You rejected a call + + + + %1 rejected a call + %1 rejected a call + utils diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts index 0d448988..6b98b9c2 100644 --- a/resources/langs/nheko_eo.ts +++ b/resources/langs/nheko_eo.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add Aldoni @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen Tuta ekrano @@ -222,22 +222,27 @@ - + Invited user: %1 Invitita uzanto: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. La kaŝmemoro sur via disko pli novas, ol tio, kion povas subteni ĉi tiu versio de Nheko. Bonvolu ĝisdatigi Nhekon aŭ vakigi vian kaŝmemoron. - + Failed to open database, logging out! Malsukcesis malfermi datumbazon; adiaŭas! - + Knock on room @@ -264,12 +269,12 @@ - + Confirm invite Konfirmu inviton - + Do you really want to invite %1 (%2)? Ĉu vi certe volas inviti uzanton %1 (%2)? @@ -314,17 +319,24 @@ Malforbaris uzanton: %1 - + Do you really want to start a private chat with %1? Ĉu vi certe volas komenci privatan babilon kun %1? - + Cache migration failed! Malsukcesis migrado de kaŝmemoro! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -334,7 +346,7 @@ Neakorda versio de kaŝmemoro - + Failed to restore OLM account. Please login again. Malsukcesis rehavi konton je OLM. Bonvolu resaluti. @@ -346,13 +358,13 @@ Malsukcesis rehavi konservitajn datumojn. Bonvolu resaluti. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Malsukcesis agordi ĉifrajn ŝlosilojn. Respondo de servilo: %1 %2. Bonvolu reprovi poste. - + Please try to login again: %1 Bonvolu provi resaluti: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: Neniu retkonekto + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: Montri individuajn ĉambrojn. - + Favourites Elstaraj @@ -649,7 +960,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Malĉifri sekretojn @@ -893,7 +1204,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Malsukcesis agordi kaŝitajn okazojn: %1 @@ -1108,7 +1419,7 @@ You may optionally provide a reason for others to accept your knock: Ĉiuj dosieroj (*) - + Upload of '%1' failed @@ -1168,7 +1479,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Eliri el ĉambro @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Vi enigis nevalidan identigilon de Matrikso ekz. @tacuo:matrix.org @@ -1354,7 +1665,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 forigis mesaĝon @@ -1428,18 +1749,29 @@ Example: https://server.my:8787 %1 answered the call. %1 respondis la vokon. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 finis la vokon. + %1 is negotiating the call... - + Allow them in Enlasi ĝin @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 Voki - + + Already on a call + + + + Send a file Sendi dosieron @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 Skribu mesaĝon… - + Stickers Glumarkoj @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit Redakti @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Elektebloj - + Reason for removal Kialo de forigo @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 sendis ĉifritan mesaĝon @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 %1 respondis per ĉifrita mesaĝo - + %1 replied to a message %1 respondis al mesaĝo @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Sendi + + + + Write a message... + Skribu mesaĝon… + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Hieraŭ, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 REGISTRIĜI - + Autodiscovery failed. Received malformed response. Malsukcesis memaga trovado. Ricevis misformitan respondon. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored neniu versio konservita @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Eliri el ĉambro @@ -2753,7 +3115,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Malsukcesis ŝalti ĉifradon: %1 @@ -2887,7 +3249,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Malsukcesis konektiĝi al sekreta deponejo @@ -2985,7 +3347,7 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos SingleImagePackModel - + Failed to update image pack: %1 Malsukcesis ĝisdatigi bildopakon: %1 @@ -3099,19 +3461,19 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos TimelineModel - + Message redaction failed: %1 Malsukcesis redaktado de mesaĝo: %1 - + Failed to encrypt event, sending aborted! Malsukcesis ĉifri okazon; sendado nuliĝis! - + Save image Konservi bildon @@ -3131,7 +3493,7 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos Konservi dosieron - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3400,7 +3762,7 @@ Reason: %4 Kialo: %4 - + %2 revoked the invite to %1. @@ -3461,17 +3823,17 @@ Kialo: %4 %1 forigis sian frapon. - + You joined this room. Vi aliĝis ĉi tiun ĉambron. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3505,7 +3867,7 @@ Kialo: %4 TimelineRow - + Edited Redaktita @@ -3518,12 +3880,12 @@ Kialo: %4 TimelineView - + No room open Neniu ĉambro estas malfermita - + No preview available Neniu antaŭrigardo disponeblas @@ -3561,7 +3923,17 @@ Kialo: %4 rifuzi inviton - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Reen al listo de ĉambroj @@ -3569,22 +3941,22 @@ Kialo: %4 TopBar - + Back to room list Reen al listo de ĉambroj - + No room selected Neniu ĉambro estas elektita - + In %1 - + Show room members. @@ -3604,12 +3976,17 @@ Kialo: %4 Ĉi tiu ĉambro enhavas nekontrolitajn aparatojn! - + Show or hide pinned messages - + + Search this room + + + + Room options Elektebloj de ĉambro @@ -3638,6 +4015,11 @@ Kialo: %4 Unpin + + + Enter search query + + TrayIcon @@ -3680,7 +4062,7 @@ Kialo: %4 UploadBox - + Upload %n file(s) @@ -3815,8 +4197,8 @@ Kialo: %4 UserSettings - - + + Default Implicita @@ -3824,7 +4206,7 @@ Kialo: %4 UserSettingsModel - + Theme Haŭto @@ -3858,6 +4240,11 @@ Kialo: %4 Send messages as Markdown Sendi mesaĝojn Markdaŭne + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3933,8 +4320,18 @@ Kialo: %4 Decrypt messages in sidebar Malĉifri mesaĝojn en flanka breto + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privateca ŝirmilo @@ -4124,7 +4521,7 @@ Kialo: %4 - + Default Implicita @@ -4170,6 +4567,11 @@ When disabled, all messages are sent as a plain text. Permesas uzon de Markdaŭno en mesaĝoj. Kun ĉi tio malŝaltita, ĉiuj mesaĝoj sendiĝas en plata teksto. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4211,9 +4613,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4225,24 +4637,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Atentigas je ricevo de mesaĝo. Ĉi tio kutime movbildigas la simbolbildon sur la pleto iumaniere. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4252,7 +4664,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4290,7 +4702,7 @@ Only affects messages in encrypted chats. Influas nur sur mesaĝoj en ĉifritaj babiloj. - + When the window loses focus, the timeline will be blurred. Kiam la fenestro ne estos fokusata, la historio @@ -4344,7 +4756,7 @@ This setting will take effect upon restart. - + Select a file Elektu dosieron @@ -4497,7 +4909,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Hieraŭ @@ -4551,7 +4963,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Vi sendis sonmesaĝon @@ -4612,16 +5024,28 @@ This setting will take effect upon restart. + You: %1 Vi: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Vi sendis ĉifritan mesaĝon @@ -4660,6 +5084,16 @@ This setting will take effect upon restart. %1 ended a call %1 finis vokon + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_es.ts b/resources/langs/nheko_es.ts index de839198..df8e46aa 100644 --- a/resources/langs/nheko_es.ts +++ b/resources/langs/nheko_es.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add Añadir @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 y %n otro @@ -208,7 +208,7 @@ CallManager - + Entire screen Pantalla completa @@ -222,22 +222,27 @@ - + Invited user: %1 Se invitó al usuario: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. La cache en su disco es más reciente de lo que esta versión de Nheko soporta. Por favor actualiza Nheko o limpia la cache. - + Failed to open database, logging out! Error al abrir la base de datos, cerrando sesión! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite Confirmar invitación - + Do you really want to invite %1 (%2)? ¿Seguro que quieres invitar a %1 (%2)? @@ -313,17 +318,24 @@ Usuario desbaneado: %1 - + Do you really want to start a private chat with %1? ¿Seguro que quieres comenzar un chat privado con %1? - + Cache migration failed! Migración de cache fallida! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ Versión de cache incompatible - + Failed to restore OLM account. Please login again. No se ha podido restaurar la cuenta OLM. Por favor inicia sesión de nuevo. @@ -345,13 +357,13 @@ No se ha podido restaurar los datos guardados. Por favor inicia sesión de nuevo. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. No se han podido configurar las claves de encriptación. Respuesta del servidor: %1 %2. Por favor intentalo de nuevo más tarde. - + Please try to login again: %1 Por favor intenta iniciar sesión de nuevo: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Mostrar chats directos. - + Favourites Favoritos @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Desencriptar secretos @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: Todos los archivos (*) - + Upload of '%1' failed @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Salir de la sala @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Has insertado un ID de Matrix invalido ej @joe:matrix.org @@ -1354,7 +1665,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1419,27 +1730,48 @@ Example: https://server.my:8787 %1 hizo una llamada. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in Permitir que entren - + %1 answered the call. %1 atendió la llamada. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 terminó la llamada. @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 Llamar - + + Already on a call + + + + Send a file Enviar archivo @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 Escribe un mensaje... - + Stickers Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit Editar @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Opciones - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 envió un mensaje encriptado @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 %1 respondió con un mensaje encriptado - + %1 replied to a message %1 respondió a un mensaje @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Enviar + + + + Write a message... + Escribe un mensaje... + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Ayer, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 REGISTRARSE - + Autodiscovery failed. Received malformed response. El autodescubrimiento falló. Se ha recibido una respuesta malformada. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored ninguna version guardada @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Salir de la sala @@ -2754,7 +3116,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Error al activar la encriptación: %1 @@ -2888,7 +3250,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Hubo en error al conectarse al almacenamiento secreto @@ -2986,7 +3348,7 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q SingleImagePackModel - + Failed to update image pack: %1 Falló en la actualización del pack de imágenes: %1 @@ -3099,19 +3461,19 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q TimelineModel - + Message redaction failed: %1 Falló en la eliminación del mensaje: %1 - + Failed to encrypt event, sending aborted! Falló al encriptar el evento, abortando el envío! - + Save image Guardar imagen @@ -3131,7 +3493,7 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q Guardar archivo - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3400,7 +3762,7 @@ Reason: %4 Razón: %4 - + %1 invited %2. @@ -3430,12 +3792,12 @@ Razón: %4 %1 cambió su avatar y su nombre a %2. - + %1 made this room require an invitation to join. - + %1 has changed their display name to %2. %1 cambió su nombre a %2. @@ -3480,12 +3842,12 @@ Razón: %4 %1 canceló después de tocar la puerta. - + You joined this room. Te has unido a esta sala. - + %1 left after having already left! This is a leave event after the user already left and shouldn't happen apart from state resets %1 se fue después de ya haberse ido! @@ -3504,7 +3866,7 @@ Razón: %4 TimelineRow - + Edited Editado @@ -3517,12 +3879,12 @@ Razón: %4 TimelineView - + No room open Ninguna sala abierta - + No preview available Vista previa no disponible @@ -3560,7 +3922,17 @@ Razón: %4 rechazar invitación - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list De vuelta a la lista de salas @@ -3568,22 +3940,22 @@ Razón: %4 TopBar - + Back to room list Volver a la lista de salas - + No room selected Ninguna sala seleccionada - + In %1 - + Show room members. @@ -3603,12 +3975,17 @@ Razón: %4 Esta sala contiene dispositivos sin verificar! - + Show or hide pinned messages Mostrar u ocultar mensajes fijados - + + Search this room + + + + Room options Ajustes de la sala @@ -3637,6 +4014,11 @@ Razón: %4 Unpin Desfijar + + + Enter search query + + TrayIcon @@ -3679,7 +4061,7 @@ Razón: %4 UploadBox - + Upload %n file(s) @@ -3814,8 +4196,8 @@ Razón: %4 UserSettings - - + + Default Por defecto @@ -3823,7 +4205,7 @@ Razón: %4 UserSettingsModel - + Theme Tema @@ -3857,6 +4239,11 @@ Razón: %4 Send messages as Markdown Enviar mensajes en Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3932,8 +4319,18 @@ Razón: %4 Decrypt messages in sidebar Desencriptar mensajes en la barra lateral + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privacidad de pantalla @@ -4123,7 +4520,7 @@ Razón: %4 - + Default Por defecto @@ -4168,6 +4565,11 @@ When disabled, all messages are sent as a plain text. Permitir usar markdown en los mensajes. Cuando está deshabilitado, todos los mensajes son enviados en texto sin formato. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4208,9 +4610,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4222,24 +4634,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Mostrar una alerta cuando un mensaje sea recibido. Esto usualmente causa que el icono de la aplicación en la barra de tareas sea animado de alguna forma. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4249,7 +4661,7 @@ Esto usualmente causa que el icono de la aplicación en la barra de tareas sea a - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4287,7 +4699,7 @@ Only affects messages in encrypted chats. Sólo afecta a los mensajes en chats encriptados. - + When the window loses focus, the timeline will be blurred. Cuando la ventana no este enfocada, la línea de tiempo se volverá borrosa. @@ -4340,7 +4752,7 @@ This setting will take effect upon restart. - + Select a file Seleccionar un archivo @@ -4492,7 +4904,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Ayer @@ -4546,7 +4958,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Enviaste un clip de audio @@ -4607,16 +5019,28 @@ This setting will take effect upon restart. + You: %1 Tú: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Enviaste un mensaje encriptado @@ -4655,6 +5079,16 @@ This setting will take effect upon restart. %1 ended a call %1 terminó la llamada + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index 6a007c36..8e9ac3e5 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -89,12 +89,12 @@ Kustuta see alias - + #new-alias:server.tld #uus-alias:server.tippdomeen - + Add Lisa @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 ja veel %n teine kasutaja @@ -208,7 +208,7 @@ CallManager - + Entire screen Terve ekraan @@ -222,22 +222,27 @@ - + Invited user: %1 Kutsutud kasutaja: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Sinu andmekandjale salvestatud puhvri versioon on uuem, kui käesolev Nheko versioon kasutada oskab. Palun tee Nheko uuendus või kustuta puhverdatud andmed. - + Failed to open database, logging out! Andmebaasi avamine ei õnnestunud. Login välja! - + Knock on room Koputa jututoa uksele @@ -263,12 +268,12 @@ - + Confirm invite Kinnita kutse - + Do you really want to invite %1 (%2)? Kas sa tõesti soovid saata kutset kasutajale %1 (%2)? @@ -313,17 +318,24 @@ Suhtluskeeld eemaldatud: %1 - + Do you really want to start a private chat with %1? Kas sa kindlasti soovid alustada otsevestlust kasutajaga %1? - + Cache migration failed! Puhvri versiooniuuendus ebaõnnestus! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ Mitteühilduv puhvri versioon - + Failed to restore OLM account. Please login again. OLM konto taastamine ei õnnestunud. Palun logi uuesti sisse. @@ -345,13 +357,13 @@ Salvestatud andmete taastamine ei õnnestunud. Palun logi uuesti sisse. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Krüptovõtmete kasutusele võtmine ei õnnestunud. Koduserveri vastus päringule: %1 %2. Palun proovi hiljem uuesti. - + Please try to login again: %1 Palun proovi uuesti sisse logida: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: Võrguühendus puudub + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Näita otsevestluseid. - + Favourites Lemmikud @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Dekrüpti andmed @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Peidetud sündmuste loomine ei õnnestunud: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Kõik failid (*) - + Upload of '%1' failed „%1“ üleslaadimine ei õnnestunud @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Lahku jututoast @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Sisestatud Matrix'i kasutajatunnus on vigane - peaks olema @kasutaja:server.tld @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message %1 eemaldas sõnumi @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 %1 helistas. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... %1 alustab kõnet... - + Allow them in Luba neid - + %1 answered the call. %1 vastas kõnele. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 lõpetas kõne. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Helista - + + Already on a call + + + + Send a file Saada fail @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Kirjuta sõnum… - + Stickers Kleepsud @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Muuda @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Valikud - + Reason for removal Eemaldamise põhjus @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 saatis krüptitud sõnumi @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 vastas krüptitud sõnumiga - + %1 replied to a message %1 vastas sõnumile @@ -1894,9 +2231,9 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 - Õiguste muutmine ei õnnestunud: %1 + Õiguste muutmine ei õnnestunud: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Muud sündmused @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call Kõne lõpetamine + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Saada + + + + Write a message... + Kirjuta sõnum… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Eile, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTREERI - + Autodiscovery failed. Received malformed response. Koduserveri automaatne tuvastamine ei õnnestunud: päringuvastus oli vigane. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored salvestatud versiooni ei leidu @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Lahku jututoast @@ -2752,7 +3114,7 @@ Palun arvesta, et krüptimist ei saa hiljem enam välja lülitada. näita rohkem - + Failed to enable encryption: %1 Krüptimise kasutuselevõtmine ei õnnestunud: %1 @@ -2886,7 +3248,7 @@ Palun arvesta, et krüptimist ei saa hiljem enam välja lülitada. SecretStorage - + Failed to connect to secret storage Ühenduse loomine võtmehoidlaga ei õnnestunud @@ -2984,7 +3346,7 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui SingleImagePackModel - + Failed to update image pack: %1 Pildipaki uuendamine ei õnnestunud: %1 @@ -3097,19 +3459,19 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui TimelineModel - + Message redaction failed: %1 Sõnumi ümbersõnastamine ebaõnnestus: %1 - + Failed to encrypt event, sending aborted! Sündmuse krüptimine ei õnnestunud, katkestame saatmise! - + Save image Salvesta pilt @@ -3129,7 +3491,7 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui Salvesta fail - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3398,7 +3760,7 @@ Reason: %4 Põhjus: %4 - + %2 revoked the invite to %1. %2 tühistas kutse kasutajale %1. @@ -3458,17 +3820,17 @@ Põhjus: %4 %1 muutis oma koputust jututoa uksele. - + You joined this room. Sa liitusid jututoaga. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 saatis kutse kasutajale %2. @@ -3502,7 +3864,7 @@ Põhjus: %4 TimelineRow - + Edited Muudetud @@ -3515,12 +3877,12 @@ Põhjus: %4 TimelineView - + No room open Ühtegi jututuba pole avatud - + No preview available Eelvaade pole saadaval @@ -3558,7 +3920,17 @@ Põhjus: %4 lükka kutse tagasi - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Tagasi jututubade loendisse @@ -3566,22 +3938,22 @@ Põhjus: %4 TopBar - + Back to room list Tagasi jututubade loendisse - + No room selected Jututuba on valimata - + In %1 - + Show room members. Näita jututoas osalejaid. @@ -3601,12 +3973,17 @@ Põhjus: %4 Selles jututoas leidub verifitseerimata seadmeid! - + Show or hide pinned messages Näita klammerdatud sõnumeid või peida nad - + + Search this room + + + + Room options Jututoa valikud @@ -3635,6 +4012,11 @@ Põhjus: %4 Unpin Võta lahti + + + Enter search query + + TrayIcon @@ -3677,7 +4059,7 @@ Põhjus: %4 UploadBox - + Upload %n file(s) Laadi fail üles @@ -3812,8 +4194,8 @@ Põhjus: %4 UserSettings - - + + Default Vaikimisi @@ -3821,7 +4203,7 @@ Põhjus: %4 UserSettingsModel - + Theme Teema @@ -3855,6 +4237,11 @@ Põhjus: %4 Send messages as Markdown Saada sõnumid kasutades Markdown vormindust + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3930,8 +4317,18 @@ Põhjus: %4 Decrypt messages in sidebar Dekrüpti sõnumid külgribal + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privaatsust tagav sirm @@ -4121,7 +4518,7 @@ Põhjus: %4 Jaga jututoa teavet D-Bus'i vahendusel - + Default Vaikimisi @@ -4166,6 +4563,11 @@ When disabled, all messages are sent as a plain text. Luba Markdown-vormingu kasutamine sõnumite koostamisel. Kui Markdown ei ole kasutusel, siis saadetakse kõik sõnumid vormindamata tekstina. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4207,9 +4609,19 @@ Väljalülitatuna - ruut, sisselülitatuna - ümmargune. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4221,24 +4633,24 @@ Väljalülitatuna - ruut, sisselülitatuna - ümmargune. Selle võtmega verifitseerid oma seadmeid. Kui ta on puhverdatud, siis sinu seadme verifitseerimine märgib selle seadme usaldusväärseks nii sinu muude seadmete kui selliste kasutajate jaoks, kes on sinu verifitseerinud. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Sõnumi saabumisel näita teavitust. See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti animatsiooniga sulle märku. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4248,7 +4660,7 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4290,7 +4702,7 @@ Only affects messages in encrypted chats. Kehtib vaid läbivalt krüptitud vestluste puhul. - + When the window loses focus, the timeline will be blurred. Kui aken kaotab fookuse, @@ -4346,7 +4758,7 @@ This setting will take effect upon restart. Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist. - + Select a file Vali fail @@ -4498,7 +4910,7 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist. descriptiveTime - + Yesterday Eile @@ -4552,7 +4964,7 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist. message-description sent: - + You sent an audio clip Sa saatsid helifaili @@ -4613,16 +5025,28 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist. + You: %1 Sina: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Sa saatsid krüptitud sõnumi @@ -4661,6 +5085,16 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.%1 ended a call %1 lõpetas kõne + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index d720082f..19ab336d 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -89,12 +89,12 @@ Poista tämä alias - + #new-alias:server.tld #uusi-alias:palvelin.tld - + Add Lisää @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 ja %n muu @@ -208,7 +208,7 @@ CallManager - + Entire screen Koko näyttö @@ -222,22 +222,27 @@ - + Invited user: %1 Kutsuttiin käyttäjä: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Levylläsi oleva välimuisti on uudempaa kuin mitä tämä Nhekon versio tukee. Päivitä Nheko tai poista välimuistisi. - + Failed to open database, logging out! Tietokannan avaaminen epäonnistui, kirjaudutaan ulos! - + Knock on room Koputa huoneeseen @@ -263,12 +268,12 @@ - + Confirm invite Vahvista kutsu - + Do you really want to invite %1 (%2)? Haluatko varmasti kutsua %1 (%2)? @@ -313,17 +318,24 @@ Purettiin porttikielto käyttäjältä %1 - + Do you really want to start a private chat with %1? Haluatko luoda yksityisen keskustelun käyttäjän %1 kanssa? - + Cache migration failed! Välimuistin siirto epäonnistui! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. Välimuistin siirtäminen nykyiseen versioon epäonnistui. Tähän voi olla eri syitä. Luothan raportin sivulla https://github.com/Nheko-Reborn/nheko ja kokeile sillä välin vanhaa versiota. Voit myös kokeilla käsin välimuistin poistamista. @@ -333,7 +345,7 @@ Yhteensopimaton välimuistin versio - + Failed to restore OLM account. Please login again. OLM-tilin palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen. @@ -345,13 +357,13 @@ Tallennettujen tietojen palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Salausavainten lähetys epäonnistui. Palvelimen vastaus: %1 %2. Ole hyvä ja yritä uudelleen myöhemmin. - + Please try to login again: %1 Ole hyvä ja yritä kirjautua sisään uudelleen: %1 @@ -413,6 +425,305 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: Ei verkkoyhteyttä + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: Näytä suorat keskustelut. - + Favourites Suosikit @@ -649,7 +960,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: CrossSigningSecrets - + Decrypt secrets Salaisuuksien salauksen purku @@ -893,7 +1204,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: HiddenEvents - + Failed to set hidden events: %1 Piilotettujen tapahtumien asettaminen epäonnistui: %1 @@ -1108,7 +1419,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: Kaikki Tiedostot (*) - + Upload of '%1' failed Tiedoston "%1" lähetys epäonnistui @@ -1168,7 +1479,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: LeaveRoomDialog - + Leave room Poistu huoneesta @@ -1250,7 +1561,7 @@ Esimerkki: https://palvelime.ni:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Väärä Matrix-tunnus. Esim. @joe:matrix.org @@ -1356,7 +1667,17 @@ Esimerkki: https://palvelime.ni:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 poisti viestin @@ -1430,18 +1751,29 @@ Esimerkki: https://palvelime.ni:8787 %1 answered the call. %1 vastasi puheluun. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 päätti puhelun. + %1 is negotiating the call... %1 neuvottelee puhelua... - + Allow them in Päästä hänet sisään @@ -1459,7 +1791,12 @@ Esimerkki: https://palvelime.ni:8787 Soita puhelu - + + Already on a call + + + + Send a file Lähetä tiedosto @@ -1469,7 +1806,7 @@ Esimerkki: https://palvelime.ni:8787 Kirjoita viesti… - + Stickers Tarrat @@ -1492,7 +1829,7 @@ Esimerkki: https://palvelime.ni:8787 MessageView - + Edit Muokkaa @@ -1522,7 +1859,7 @@ Esimerkki: https://palvelime.ni:8787 Asetukset - + Reason for removal Syy poistamiselle @@ -1698,8 +2035,8 @@ Esimerkki: https://palvelime.ni:8787 NotificationsManager - - + + %1 sent an encrypted message %1 lähetti salatun viestin @@ -1715,7 +2052,7 @@ Esimerkki: https://palvelime.ni:8787 %1 vastasi salatulla viestillä - + %1 replied to a message %1 vastasi viestiin @@ -1898,7 +2235,7 @@ Esimerkki: https://palvelime.ni:8787 PowerLevels - + Failed to update powerlevel: %1 Oikeustason päivitys epäonnistui: %1 @@ -1914,7 +2251,7 @@ Esimerkki: https://palvelime.ni:8787 PowerlevelsTypeListModel - + Other events Muut tapahtumat @@ -2083,6 +2420,11 @@ Esimerkki: https://palvelime.ni:8787 Hang up a call Lopeta puheluita + + + Reject a call + + Change the room emotes @@ -2100,7 +2442,7 @@ Esimerkki: https://palvelime.ni:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. Luo ainutkertainen profiili, jonka kautta voit kirjautua sisään samanaikaisesti usealla käyttäjällä, sekä käynnistää Nhekosta monta ilmentymää. @@ -2142,6 +2484,21 @@ Esimerkki: https://palvelime.ni:8787 type tyyppi + + + Respond + + + + + Send + Lähetä + + + + Write a message... + Kirjoita viesti… + ReadReceipts @@ -2154,7 +2511,7 @@ Esimerkki: https://palvelime.ni:8787 ReadReceiptsModel - + Yesterday, %1 Eilen, %1 @@ -2228,7 +2585,7 @@ Esimerkki: https://palvelime.ni:8787 REKISTERÖIDY - + Autodiscovery failed. Received malformed response. Palvelimen tietojen hakeminen epäonnistui: virheellinen vastaus. @@ -2322,7 +2679,7 @@ Esimerkki: https://palvelime.ni:8787 RoomInfo - + no version stored ei tallennettua versiota @@ -2346,6 +2703,11 @@ Esimerkki: https://palvelime.ni:8787 + Room settings + + + + Leave room Poistu huoneesta @@ -2756,7 +3118,7 @@ Huomaathan ettei sitä voida poistaa käytöstä myöhemmin. näytä enemmän - + Failed to enable encryption: %1 Salauksen aktivointi epäonnistui: %1 @@ -2890,7 +3252,7 @@ Huomaathan ettei sitä voida poistaa käytöstä myöhemmin. SecretStorage - + Failed to connect to secret storage Salattuun tallennustilaan ei saatu yhteyttä @@ -2988,7 +3350,7 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s SingleImagePackModel - + Failed to update image pack: %1 Kuvapakkausta %1 ei onnistuttu päivittämään @@ -3101,19 +3463,19 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s TimelineModel - + Message redaction failed: %1 Viestin muokkaus epäonnistui: %1 - + Failed to encrypt event, sending aborted! Tapahtuman salaus epäonnistui, lähetys keskeytetään! - + Save image Tallenna kuva @@ -3133,7 +3495,7 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s Tallenna tiedosto - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3402,7 +3764,7 @@ Reason: %4 Syy: %4 - + %2 revoked the invite to %1. %2 perui käyttäjän %1 kutsun. @@ -3462,17 +3824,17 @@ Syy: %4 %1 perui koputuksensa. - + You joined this room. Liityit tähän huoneeseen. - + %1 made this room require an invitation to join. %1 teki tämän huoneen vaatimaan kutsun liittymiseen. - + %1 invited %2. %1 kutsui käyttäjän %2. @@ -3506,7 +3868,7 @@ Syy: %4 TimelineRow - + Edited Muokattu @@ -3519,12 +3881,12 @@ Syy: %4 TimelineView - + No room open Yhtäkään huonetta ei ole avattu - + No preview available Esikatselu ei saatavilla @@ -3562,7 +3924,17 @@ Syy: %4 kieltäydy kutsusta - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Takaisin huonelistaan @@ -3570,22 +3942,22 @@ Syy: %4 TopBar - + Back to room list Takaisin huonelistaan - + No room selected Ei valittua huonetta - + In %1 Osa yhteisöä %1 - + Show room members. Näytä huoneen jäsenet. @@ -3605,12 +3977,17 @@ Syy: %4 Tämä huone sisältää varmentamattomia laitteita! - + Show or hide pinned messages Näytä tai piilota kiinnitetyt viestit - + + Search this room + + + + Room options Huoneen asetukset @@ -3639,6 +4016,11 @@ Syy: %4 Unpin Poista kiinnitys + + + Enter search query + + TrayIcon @@ -3681,7 +4063,7 @@ Syy: %4 UploadBox - + Upload %n file(s) Lähetä tiedosto @@ -3816,8 +4198,8 @@ Syy: %4 UserSettings - - + + Default Oletus @@ -3825,7 +4207,7 @@ Syy: %4 UserSettingsModel - + Theme Teema @@ -3859,6 +4241,11 @@ Syy: %4 Send messages as Markdown Lähetä viestit Markdownina + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3934,8 +4321,18 @@ Syy: %4 Decrypt messages in sidebar Pura viestien salaus sivupalkissa + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Yksityisyysnäkymä @@ -4125,7 +4522,7 @@ Syy: %4 Paljasta huonetiedot D-Bus:in kautta - + Default Oletus @@ -4170,6 +4567,11 @@ When disabled, all messages are sent as a plain text. Salli Markdownin käyttö viesteissä. Kun poissa päältä, kaikki viestit lähetetään tavallisena tekstinä. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4211,9 +4613,19 @@ POIS - neliö, PÄÄLLÄ - ympyrä. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. Valitse, missä yhteisön tai tagin ilmoitusten kokonaismäärä näytetään. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4225,24 +4637,24 @@ POIS - neliö, PÄÄLLÄ - ympyrä. Omien laitteidesi vahvistamiseen käytettävä avain. Jos avain on välimuistissa, jonkun laitteesi vahvistus tekee siitä vahvistetun kaikille muille laitteillesi, ja käyttäjille, jotka ovat vahvistaneet sinut. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Näytä hälytys kun viesti on vastaanotettu. Tämä yleensä saa sovelluksen kuvakkeen liikkumaan jollain tapaa tehtäväpalkissa. - + Communities sidebar Yhteisösivupalkki - + Show message counts for communities and tags Näytä yhteisöjen ja tagien viestimäärät - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized Aseta viestien maksimileveys aikajanalla (pikseleinä). Voi auttaa luettavuudessa, kun Nheko on suurennettuna @@ -4252,7 +4664,7 @@ Tämä yleensä saa sovelluksen kuvakkeen liikkumaan jollain tapaa tehtäväpalk Näytä yhteisöt ja tagit sisältävä sarake huonelistan vieressä. - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4296,7 +4708,7 @@ Only affects messages in encrypted chats. Vaikuttaa vain salattujen keskustelujen viesteihin. - + When the window loses focus, the timeline will be blurred. Kun ikkuna ei ole kohdistettuna, tämä aikajana @@ -4352,7 +4764,7 @@ This setting will take effect upon restart. Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. - + Select a file Valitse tiedosto @@ -4504,7 +4916,7 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. descriptiveTime - + Yesterday Eilen @@ -4558,7 +4970,7 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. message-description sent: - + You sent an audio clip Lähetit äänileikkeen @@ -4619,16 +5031,28 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. + You: %1 Sinä: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Lähetit salatun viestin @@ -4667,6 +5091,16 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. %1 ended a call %1 lopetti puhelun + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index 3c1a120e..59f98987 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add Ajouter @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 et %n autre @@ -208,7 +208,7 @@ CallManager - + Entire screen Tout l'écran @@ -222,22 +222,27 @@ - + Invited user: %1 Utilisateur %1 invité(e) - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Le cache sur votre disque a été créé avec une version de Nheko plus récente que la vôtre. Veuillez mettre Nheko à jour ou vider votre cache. - + Failed to open database, logging out! Impossible d'ouvrir la base de données, déconnexion ! - + Knock on room Frapper à la porte @@ -263,12 +268,12 @@ - + Confirm invite Confirmer l'invitation - + Do you really want to invite %1 (%2)? Voulez-vous vraiment inviter %1 (%2) ? @@ -313,17 +318,24 @@ %1 n'est plus banni(e) - + Do you really want to start a private chat with %1? Voulez-vous vraiment commencer une discussion privée avec %1 ? - + Cache migration failed! Échec de la migration du cache ! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ Version du cache incompatible - + Failed to restore OLM account. Please login again. Échec de la restauration du compte OLM. Veuillez vous reconnecter. @@ -345,13 +357,13 @@ Échec de la restauration des données sauvegardées. Veuillez vous reconnecter. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Échec de la configuration des clés de chiffrement. Réponse du serveur : %1 %2. Veuillez réessayer plus tard. - + Please try to login again: %1 Veuillez re-tenter vous reconnecter : %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: Pas de connexion réseau + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Montrer les messages privés. - + Favourites Favoris @@ -582,7 +893,7 @@ You may optionally provide a reason for others to accept your knock: Name - Nom + Nom @@ -612,7 +923,7 @@ You may optionally provide a reason for others to accept your knock: Alias - Alias + Alias @@ -637,7 +948,7 @@ You may optionally provide a reason for others to accept your knock: Encryption - Chiffrement + Chiffrement @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Déchiffrer les secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Impossible de modifier les évènements cachés : %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Tous les types de fichiers (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Quitter le salon @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Vous avez entré un identifiant Matrix invalide exemple correct : @moi:monserveur.example.com) @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 a effacé un message @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. %1 a répondu à l'appel. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 a terminé l'appel. + %1 is negotiating the call... %1 est en train de négocier l'appel... - + Allow them in Les laisser entrer @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Appeler - + + Already on a call + + + + Send a file Envoyer un fichier @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Écrivez un message… - + Stickers Autocollants @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Modifier @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Options - + Reason for removal Raison de la suppression @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 a envoyé un message chiffré @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 a répondu avec un message chiffré - + %1 replied to a message %1 a répondu à un message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Envoyer + + + + Write a message... + Écrivez un message… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Hier, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 S'ENREGISTRER - + Autodiscovery failed. Received malformed response. Échec de la découverte automatique. Réponse mal formée reçue. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored pas de version enregistrée @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Quitter le salon @@ -2752,7 +3114,7 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite.montrer plus - + Failed to enable encryption: %1 Échec de l'activation du chiffrement : %1 @@ -2886,7 +3248,7 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. SecretStorage - + Failed to connect to secret storage Échec de la connexion au stockage des secrets @@ -2984,7 +3346,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si SingleImagePackModel - + Failed to update image pack: %1 Échec de la mise à jour du paquet d'images : %1 @@ -3097,19 +3459,19 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si TimelineModel - + Message redaction failed: %1 Échec de la suppression du message : %1 - + Failed to encrypt event, sending aborted! Échec du chiffrement de l'évènement, envoi abandonné ! - + Save image Enregistrer l'image @@ -3129,7 +3491,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si Enregistrer le fichier - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3398,7 +3760,7 @@ Reason: %4 Raison : %4 - + %2 revoked the invite to %1. %2 a révoqué l'invitation à %1. @@ -3458,17 +3820,17 @@ Raison : %4 %1 a arrêté de toquer. - + You joined this room. Vous avez rejoint ce salon. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 a invité %2. @@ -3502,7 +3864,7 @@ Raison : %4 TimelineRow - + Edited Modifié @@ -3515,12 +3877,12 @@ Raison : %4 TimelineView - + No room open Aucun salon ouvert - + No preview available Aucune prévisualisation disponible @@ -3558,7 +3920,17 @@ Raison : %4 décliner l'invitation - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Revenir à la liste des salons @@ -3566,22 +3938,22 @@ Raison : %4 TopBar - + Back to room list Revenir à la liste des salons - + No room selected Pas de salon sélectionné - + In %1 - + Show room members. @@ -3601,12 +3973,17 @@ Raison : %4 Ce salon contient des appareils non vérifiés ! - + Show or hide pinned messages Montrer ou cacher les messages épinglés - + + Search this room + + + + Room options Options du salon @@ -3635,6 +4012,11 @@ Raison : %4 Unpin Désépingler + + + Enter search query + + TrayIcon @@ -3677,7 +4059,7 @@ Raison : %4 UploadBox - + Upload %n file(s) Mettre en ligne un fichier @@ -3812,8 +4194,8 @@ Raison : %4 UserSettings - - + + Default Défaut @@ -3821,7 +4203,7 @@ Raison : %4 UserSettingsModel - + Theme Thème @@ -3855,6 +4237,11 @@ Raison : %4 Send messages as Markdown Composer les messages au format Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3930,8 +4317,18 @@ Raison : %4 Decrypt messages in sidebar Déchiffrer les messages dans la liste des salons + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Protection anti-indiscrétion @@ -4121,7 +4518,7 @@ Raison : %4 - + Default Défaut @@ -4165,6 +4562,11 @@ When disabled, all messages are sent as a plain text. Permet l'utilisation de Markdown dans les messages. Si désactivé, tous les messages sont envoyés comme texte brut. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4206,9 +4608,19 @@ OFF - carré, ON - circulaire. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4220,24 +4632,24 @@ OFF - carré, ON - circulaire. La clef pour vérifier vos propres appareils. Si elle est en cache, vérifier un de vos appareils le marquera comme vérifié pour tous vos autres appareils et pour les utilisateurs qui vous ont vérifié. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Alerte lorsqu'un message est reçu. Typiquement, l'icône de l'application est mise en évidence dans la barre des tâches. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4247,7 +4659,7 @@ Typiquement, l'icône de l'application est mise en évidence dans la b - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4287,7 +4699,7 @@ Only affects messages in encrypted chats. Cela n'affecte que les messages des salons chiffrés. - + When the window loses focus, the timeline will be blurred. Lorsque la fenêtre devient inactive, la discussion devient floutée. @@ -4340,7 +4752,7 @@ This setting will take effect upon restart. - + Select a file Sélectionnez un fichier @@ -4492,7 +4904,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Hier @@ -4546,7 +4958,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Vous avez envoyé un message audio @@ -4607,16 +5019,28 @@ This setting will take effect upon restart. + You: %1 Vous : %1 - + + %1: %2 %1 : %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Vous avez envoyé un message chiffré @@ -4655,6 +5079,16 @@ This setting will take effect upon restart. %1 ended a call %1 a terminé un appel + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index eef785d0..c3b5792b 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -207,7 +207,7 @@ CallManager - + Entire screen Az egész képernyő @@ -221,22 +221,27 @@ - + Invited user: %1 A felhasználó meg lett hívva: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -262,12 +267,12 @@ - + Confirm invite Meghívás megerősítése - + Do you really want to invite %1 (%2)? Biztos, hogy meg akarod hívni a következő felhasználót: %1 (%2)? @@ -312,17 +317,24 @@ Kitiltás feloldva a felhasználónak: %1 - + Do you really want to start a private chat with %1? Biztosan privát csevegést akarsz indítani %1 felhasználóval? - + Cache migration failed! Gyorsítótár migráció nem sikerült! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -332,7 +344,7 @@ Inkompatibilis gyorsítótár-verzió - + Failed to restore OLM account. Please login again. Nem sikerült visszaállítani az OLM fiókot. Kérlek, jelentkezz be ismét! @@ -344,13 +356,13 @@ Nem sikerült visszaállítani a mentési adatot. Kérlek, jelentkezz be ismét! - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Nem sikerült beállítani a titkosítási kulcsokat. Válasz a szervertől: %1 %2. Kérlek, próbáld újra később! - + Please try to login again: %1 Kérlek, próbálj meg bejelentkezni újra: %1 @@ -411,6 +423,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -457,7 +768,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -646,7 +957,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Titkos tároló feloldása @@ -890,7 +1201,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1105,7 +1416,7 @@ You may optionally provide a reason for others to accept your knock: Minden fájl (*) - + Upload of '%1' failed @@ -1165,7 +1476,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Szoba elhagyása @@ -1244,7 +1555,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Érvénytelen Matrixazonosítót adtál meg. Példa: @janos:matrix.org @@ -1350,7 +1661,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1415,27 +1726,48 @@ Example: https://server.my:8787 %1 hívást kezdeményezett. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. %1 fogadta a hívást. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 befejezte a hívást. @@ -1453,7 +1785,12 @@ Example: https://server.my:8787 Hívás kezdeményezése - + + Already on a call + + + + Send a file Fájl küldése @@ -1463,7 +1800,7 @@ Example: https://server.my:8787 Írj egy üzenetet… - + Stickers @@ -1486,7 +1823,7 @@ Example: https://server.my:8787 MessageView - + Edit Szerkesztés @@ -1516,7 +1853,7 @@ Example: https://server.my:8787 Műveletek - + Reason for removal @@ -1692,8 +2029,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 küldött egy titkosított üzenetet @@ -1709,7 +2046,7 @@ Example: https://server.my:8787 %1 egy titkosított üzenettel válaszolt - + %1 replied to a message %1 válaszolt egy üzenetre @@ -1892,7 +2229,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1908,7 +2245,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2077,6 +2414,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2094,7 +2436,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2136,6 +2478,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Küldés + + + + Write a message... + Írj egy üzenetet… + ReadReceipts @@ -2148,7 +2505,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2222,7 +2579,7 @@ Example: https://server.my:8787 REGISZTRÁCIÓ - + Autodiscovery failed. Received malformed response. Az automatikus felderítés nem sikerült. Helytelen válasz érkezett. @@ -2316,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nincs tárolva verzió @@ -2340,6 +2697,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Szoba elhagyása @@ -2747,7 +3109,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Nem sikerült a titkosítás aktiválása: %1 @@ -2881,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2977,7 +3339,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3090,19 +3452,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Az üzenet visszavonása nem sikerült: %1 - + Failed to encrypt event, sending aborted! Nem sikerült titkosítani az eseményt, küldés megszakítva! - + Save image Kép mentése @@ -3122,7 +3484,7 @@ If you choose verify, you need to have the other device available. If you choose Fájl mentése - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3385,7 +3747,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3445,17 +3807,17 @@ Reason: %4 %1 visszavonta a kopogását. - + You joined this room. Csatlakoztál ehhez a szobához. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3489,7 +3851,7 @@ Reason: %4 TimelineRow - + Edited Szerkesztve @@ -3502,12 +3864,12 @@ Reason: %4 TimelineView - + No room open Nincs nyitott szoba - + No preview available @@ -3544,7 +3906,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Vissza a szobák listájára @@ -3552,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list Vissza a szobák listájára - + No room selected Nincs kiválasztva szoba - + In %1 - + Show room members. @@ -3587,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options Szoba beállításai @@ -3621,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3663,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3797,8 +4179,8 @@ Reason: %4 UserSettings - - + + Default Alapértelmezett @@ -3806,7 +4188,7 @@ Reason: %4 UserSettingsModel - + Theme Téma @@ -3840,6 +4222,11 @@ Reason: %4 Send messages as Markdown Üzenetek küldése Markdownként + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3915,8 +4302,18 @@ Reason: %4 Decrypt messages in sidebar Titkosított üzenetek mutatása az oldalsávban + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Idővonal automatikus kitakarása @@ -4106,7 +4503,7 @@ Reason: %4 - + Default Alapértelmezett @@ -4152,6 +4549,11 @@ When disabled, all messages are sent as a plain text. A Markdown használatának engedélyezése az üzenetekben. Ha ki van kapcsolva, az összes üzenet sima szövegként lesz elküldve. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4192,9 +4594,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4206,24 +4618,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Riasztás megjelenítése, ha üzenet érkezett. Ettől általában animálttá válik az alkalmazásablakok listáján szereplő ikon. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4233,7 +4645,7 @@ Ettől általában animálttá válik az alkalmazásablakok listáján szereplő - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4271,7 +4683,7 @@ Only affects messages in encrypted chats. Csak a titkosított csevegések üzeneteire vonatkozik. - + When the window loses focus, the timeline will be blurred. Amikor az ablak elveszíti a fókuszt, @@ -4325,7 +4737,7 @@ This setting will take effect upon restart. - + Select a file Fájl kiválasztása @@ -4477,7 +4889,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Tegnap @@ -4531,7 +4943,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Küldtél egy hangfájlt @@ -4592,16 +5004,28 @@ This setting will take effect upon restart. + You: %1 Te: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Küldtél egy titkosított üzenetet @@ -4640,6 +5064,16 @@ This setting will take effect upon restart. %1 ended a call %1 befejezett egy hívást + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_id.ts b/resources/langs/nheko_id.ts index bef83d1d..aead48d9 100644 --- a/resources/langs/nheko_id.ts +++ b/resources/langs/nheko_id.ts @@ -89,12 +89,12 @@ Hapus alias ini - + #new-alias:server.tld #alias-baru:server.tld - + Add Tambahkan @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 dan %n lainnya @@ -207,7 +207,7 @@ CallManager - + Entire screen Semua layar @@ -221,22 +221,27 @@ - + Invited user: %1 Pengguna yang diundang: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Tembolok pada diskmu lebih baru daripada versi yang didukung Nheko ini. Harap perbarui Nheko atau bersihkan tembolokmu. - + Failed to open database, logging out! Gagal untuk membuka basisdata, kamu telah dikeluarkan! - + Knock on room Ketuk pada ruangan @@ -262,12 +267,12 @@ - + Confirm invite Konfirmasi undangan - + Do you really want to invite %1 (%2)? Apakah kamu ingin mengundang %1 (%2)? @@ -312,17 +317,24 @@ Menghilangkan cekalan pengguna: %1 - + Do you really want to start a private chat with %1? Apakah kamu ingin memulai chat privat dengan %1? - + Cache migration failed! Migrasi tembolok gagal! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. Migrasi tembolok ke versi saat ini gagal. Ini dapat memiliki alasan yang berbeda. Silakan buka sebuah masalah di https://github.com/Nheko-Reborn/nheko dan coba menggunakan versi yang lama untuk saat ini. Secara alternatif kamu bisa menghapus tembolok secara manual. @@ -332,7 +344,7 @@ Versi tembolok tidak kompatibel - + Failed to restore OLM account. Please login again. Gagal memulihkan akun OLM. Mohon masuk lagi. @@ -344,13 +356,13 @@ Gagal memulihkan data yang tersimpan. Mohon masuk lagi. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Gagal menyiapkan kunci enkripsi. Respons server: %1 %2. Silakan coba lagi nanti. - + Please try to login again: %1 Mohon mencoba masuk lagi: %1 @@ -412,6 +424,305 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:Tidak ada koneksi jaringan + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:Tampilkan pesan langsung. - + Favourites Favorit @@ -647,7 +958,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu: CrossSigningSecrets - + Decrypt secrets Dekripsi rahasia @@ -891,7 +1202,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu: HiddenEvents - + Failed to set hidden events: %1 Gagal menetapkan peristiwa tersembunyi: %1 @@ -1106,7 +1417,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:Semua File (*) - + Upload of '%1' failed Pengunggahan '%1' gagal @@ -1166,7 +1477,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu: LeaveRoomDialog - + Leave room Tinggalkan ruangan @@ -1249,7 +1560,7 @@ Contoh: https://server.saya:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Kamu telah memasukkan ID Matrix yang tidak valid mis. @joe:matrix.org @@ -1355,7 +1666,7 @@ Contoh: https://server.saya:8787 MessageDelegate - + %1 removed a message %1 menghapus sebuah pesan @@ -1420,27 +1731,48 @@ Contoh: https://server.saya:8787 %1 melakukan panggilan. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... %1 sedang melakukan panggilan... - + Allow them in Izinkan mereka untuk masuk - + %1 answered the call. %1 menjawab panggilan. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. %1 mengubah komunitas induk untuk ruangan. - + %1 ended the call. %1 mengakhir panggilan. @@ -1458,7 +1790,12 @@ Contoh: https://server.saya:8787 Lakukan panggilan - + + Already on a call + + + + Send a file Kirim sebuah file @@ -1468,7 +1805,7 @@ Contoh: https://server.saya:8787 Ketik pesan… - + Stickers Stiker @@ -1491,7 +1828,7 @@ Contoh: https://server.saya:8787 MessageView - + Edit Edit @@ -1521,7 +1858,7 @@ Contoh: https://server.saya:8787 Opsi - + Reason for removal Alasan untuk menghapus @@ -1697,8 +2034,8 @@ Contoh: https://server.saya:8787 NotificationsManager - - + + %1 sent an encrypted message %1 mengirim pesan terenkripsi @@ -1714,7 +2051,7 @@ Contoh: https://server.saya:8787 %1 membalas dengan pesan terenkripsi - + %1 replied to a message %1 membalas pesan @@ -1897,7 +2234,7 @@ Contoh: https://server.saya:8787 PowerLevels - + Failed to update powerlevel: %1 Gagal memperbarui tingkat daya: %1 @@ -1913,7 +2250,7 @@ Contoh: https://server.saya:8787 PowerlevelsTypeListModel - + Other events Peristiwa lainnya @@ -2082,6 +2419,11 @@ Contoh: https://server.saya:8787 Hang up a call Mengakhiri sebuah panggilan + + + Reject a call + + Change the room emotes @@ -2099,7 +2441,7 @@ Contoh: https://server.saya:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. Buat sebuah profil unik yang memungkinkan kamu untuk masuk ke beberapa akun secara bersamaan dan mulai beberapa instansi Nheko. @@ -2141,6 +2483,21 @@ Contoh: https://server.saya:8787 type jenis + + + Respond + + + + + Send + Kirim + + + + Write a message... + Ketik pesan… + ReadReceipts @@ -2153,7 +2510,7 @@ Contoh: https://server.saya:8787 ReadReceiptsModel - + Yesterday, %1 Kemarin, %1 @@ -2227,7 +2584,7 @@ Contoh: https://server.saya:8787 DAFTAR - + Autodiscovery failed. Received malformed response. Penemuan otomatis gagal. Menerima respons cacat. @@ -2321,7 +2678,7 @@ Contoh: https://server.saya:8787 RoomInfo - + no version stored tidak ada versi yang disimpan @@ -2345,6 +2702,11 @@ Contoh: https://server.saya:8787 + Room settings + + + + Leave room Tinggalkan ruangan @@ -2753,7 +3115,7 @@ Dicatat bahwa ini tidak dapat dinonaktifkan setelah ini. tampilkan - + Failed to enable encryption: %1 Gagal mengaktifkan enkripsi: %1 @@ -2887,7 +3249,7 @@ Dicatat bahwa ini tidak dapat dinonaktifkan setelah ini. SecretStorage - + Failed to connect to secret storage Gagal menghubungkan ke penyimpanan rahasia @@ -2985,7 +3347,7 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia. SingleImagePackModel - + Failed to update image pack: %1 Gagal memperbarui paket gambar: %1 @@ -3098,19 +3460,19 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia. TimelineModel - + Message redaction failed: %1 Reaksi pesan gagal: %1 - + Failed to encrypt event, sending aborted! Gagal mendekripsikan peristiwa, pengiriman dihentikan! - + Save image Simpan gambar @@ -3130,7 +3492,7 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia. Simpan file - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 Alasan: %4 - + %2 revoked the invite to %1. %2 membatalkan undangan ke %1. @@ -3454,17 +3816,17 @@ Alasan: %4 %1 menolak ketukannya. - + You joined this room. Kamu bergabung ruangan ini. - + %1 made this room require an invitation to join. %1 membuat ruangan ini membutuhkan undangan untuk bergabung. - + %1 invited %2. %1 mengundang %2. @@ -3498,7 +3860,7 @@ Alasan: %4 TimelineRow - + Edited Diedit @@ -3511,12 +3873,12 @@ Alasan: %4 TimelineView - + No room open Tidak ada ruangan yang dibuka - + No preview available Tidak ada tampilan yang tersedia @@ -3553,7 +3915,17 @@ Alasan: %4 tolak undangan - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Kembali ke daftar ruangan @@ -3561,22 +3933,22 @@ Alasan: %4 TopBar - + Back to room list Kembali ke daftar ruangan - + No room selected Tidak ada ruangan yang dipilih - + In %1 Dalam %1 - + Show room members. Tampilkan anggota ruangan. @@ -3596,12 +3968,17 @@ Alasan: %4 Ruangan ini berisi perangkat yang belum diverifikasi! - + Show or hide pinned messages Tampilkan atau sembunyikan pesan yang dipasangi pin - + + Search this room + + + + Room options Opsi ruangan @@ -3630,6 +4007,11 @@ Alasan: %4 Unpin Lepaskan pin + + + Enter search query + + TrayIcon @@ -3672,7 +4054,7 @@ Alasan: %4 UploadBox - + Upload %n file(s) Unggah %n file @@ -3806,8 +4188,8 @@ Alasan: %4 UserSettings - - + + Default Default @@ -3815,7 +4197,7 @@ Alasan: %4 UserSettingsModel - + Theme Tema @@ -3849,6 +4231,11 @@ Alasan: %4 Send messages as Markdown Kirim pesan sebagai Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3924,8 +4311,18 @@ Alasan: %4 Decrypt messages in sidebar Dekripsikan pesan di bilah samping + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Layar Privasi @@ -4115,7 +4512,7 @@ Alasan: %4 Ekspos informasi ruangan via D-Bus - + Default Default @@ -4160,6 +4557,11 @@ When disabled, all messages are sent as a plain text. Memperbolehkan menggunakan Markdown di pesan. Ketika dinonaktifkan, semua pesan akan dikirim sebagai teks biasa. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4201,9 +4603,19 @@ MATI - kotak, NYALA - bulat. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. Pilih di mana untuk menampilkan jumlah notifikasi di dalam sebuah komunitas atau tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4215,24 +4627,24 @@ MATI - kotak, NYALA - bulat. Kunci untuk memverifikasi perangkatmu. Jika disimpan, memverifikasi salah satu perangkatmu akan menandainya sebagai terverifikasi untuk perangkatmu yang lain dan untuk pengguna yang telah memverifikasimu. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Menampilkan pemberitahuan saat sebuah pesan diterima. Ini biasanya menyebabkan ikon aplikasi di bilah tugas untuk beranimasi. - + Communities sidebar Bilah samping komunitas - + Show message counts for communities and tags Tampilkan hitungan pesan untuk komunitas dan tag - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized Tetapkan lebar pesan di linimasa (dalam pixel). Ini dapat membantu keterbacaan di layar lebar ketika Nheko dimaksimalkan @@ -4242,7 +4654,7 @@ Ini biasanya menyebabkan ikon aplikasi di bilah tugas untuk beranimasi.Tampilkan sebuah kolom berisi komunitas dan tag di samping daftar ruangan. - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4286,7 +4698,7 @@ Only affects messages in encrypted chats. Hanya mempengaruhi pesan di chat terenkripsi. - + When the window loses focus, the timeline will be blurred. Ketika jendela kehilangan fokus, linimasanya @@ -4342,7 +4754,7 @@ This setting will take effect upon restart. Pengaturan ini akan ditetapkan saat dimulai ulang. - + Select a file Pilih sebuah file @@ -4494,7 +4906,7 @@ Pengaturan ini akan ditetapkan saat dimulai ulang. descriptiveTime - + Yesterday Kemarin @@ -4548,7 +4960,7 @@ Pengaturan ini akan ditetapkan saat dimulai ulang. message-description sent: - + You sent an audio clip Kamu mengirim klip audio @@ -4609,16 +5021,28 @@ Pengaturan ini akan ditetapkan saat dimulai ulang. + You: %1 Kamu: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Kamu mengirim sebuah pesan terenkripsi @@ -4657,6 +5081,16 @@ Pengaturan ini akan ditetapkan saat dimulai ulang. %1 ended a call %1 mengakhiri panggilan + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ie.ts b/resources/langs/nheko_ie.ts index bc1aceec..1a92e70e 100644 --- a/resources/langs/nheko_ie.ts +++ b/resources/langs/nheko_ie.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,27 @@ - + Invited user: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -313,17 +318,24 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3554,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3562,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4190,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4199,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4233,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4313,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4514,7 @@ Reason: %4 - + Default @@ -4159,6 +4556,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4600,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4624,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4650,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4275,7 +4687,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4740,7 @@ This setting will take effect upon restart. - + Select a file @@ -4480,7 +4892,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4946,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +5007,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5067,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts index ad3c7793..81f0d0e8 100644 --- a/resources/langs/nheko_it.ts +++ b/resources/langs/nheko_it.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen Schermo completo @@ -222,22 +222,27 @@ - + Invited user: %1 Invitato utente: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite Conferma Invito - + Do you really want to invite %1 (%2)? Vuoi davvero inviare %1 (%2)? @@ -313,17 +318,24 @@ Rimosso il ban dall'utente: %1 - + Do you really want to start a private chat with %1? Sei sicuro di voler avviare una chat privata con %1? - + Cache migration failed! Migrazione della cache fallita! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ Versione della cache incompatibile - + Failed to restore OLM account. Please login again. Impossibile ripristinare l'account OLM. Per favore accedi nuovamente. @@ -345,13 +357,13 @@ Impossibile ripristinare i dati salvati. Per favore accedi nuovamente. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Impossibile configurare le chiavi crittografiche. Risposta del server: %1 %2. Per favore riprova in seguito. - + Please try to login again: %1 Per favore prova ad accedere nuovamente: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Decifra i segreti @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Tutti i File (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Lascia la stanza @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Hai inserito un ID Matrix non valido, es @joe:matrix.org @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. %1 ha risposto alla chiamata. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 ha terminato la chiamata. + %1 is negotiating the call... - + Allow them in @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Avvia una chiamata - + + Already on a call + + + + Send a file Invia un file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Scrivi un messaggio… - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Modifica @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Opzioni - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 ha inviato un messaggio criptato @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 ha risposto con un messaggio criptato - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Invia + + + + Write a message... + Scrivi un messaggio… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTRATI - + Autodiscovery failed. Received malformed response. Ricerca automatica fallita. Ricevuta risposta malformata. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nessuna versione memorizzata @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Lascia la stanza @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Impossibile abilitare la crittografia: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Oscuramento del messaggio fallito: %1 - + Failed to encrypt event, sending aborted! - + Save image Salva immagine @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose Salva file - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 %1 ha oscurato la sua bussata. - + You joined this room. Sei entrato in questa stanza. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open Nessuna stanza aperta - + No preview available @@ -3554,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3562,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options Opzioni della stanza @@ -3631,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4190,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4199,7 @@ Reason: %4 UserSettingsModel - + Theme Tema @@ -3851,6 +4233,11 @@ Reason: %4 Send messages as Markdown Invia messaggi come Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4313,18 @@ Reason: %4 Decrypt messages in sidebar Decripta messaggi nella barra laterale + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4514,7 @@ Reason: %4 - + Default @@ -4159,6 +4556,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4600,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4624,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4650,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4275,7 +4687,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4740,7 @@ This setting will take effect upon restart. - + Select a file Seleziona un file @@ -4480,7 +4892,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Ieri @@ -4534,7 +4946,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Hai inviato una clip audio @@ -4595,16 +5007,28 @@ This setting will take effect upon restart. + You: %1 Tu: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Hai inviato un messaggio criptato @@ -4643,6 +5067,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index 103273b8..c8c3491f 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -22,7 +22,7 @@ Hide/Show Picture-in-Picture - + 非表示/表示 ピクチャー・イン・ピクチャー @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -207,7 +207,7 @@ CallManager - + Entire screen @@ -221,22 +221,27 @@ - + Invited user: %1 招待されたユーザー: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -262,12 +267,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -312,17 +317,24 @@ 永久追放を解除されたユーザー: %1 - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -332,7 +344,7 @@ - + Failed to restore OLM account. Please login again. OLMアカウントを復元できませんでした。もう一度ログインして下さい。 @@ -344,13 +356,13 @@ セーブデータを復元できませんでした。もう一度ログインして下さい。 - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. 暗号化鍵を設定できませんでした。サーバーの応答: %1 %2. 後でやり直して下さい。 - + Please try to login again: %1 もう一度ログインしてみて下さい: %1 @@ -411,6 +423,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -457,7 +768,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -646,7 +957,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -890,7 +1201,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1105,7 +1416,7 @@ You may optionally provide a reason for others to accept your knock: 全てのファイル (*) - + Upload of '%1' failed @@ -1165,7 +1476,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room 部屋を出る @@ -1244,7 +1555,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1350,7 +1661,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1424,18 +1745,29 @@ Example: https://server.my:8787 %1 answered the call. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. + %1 is negotiating the call... - + Allow them in @@ -1453,7 +1785,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file ファイルを送信 @@ -1463,7 +1800,7 @@ Example: https://server.my:8787 メッセージを書く... - + Stickers @@ -1486,7 +1823,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1516,7 +1853,7 @@ Example: https://server.my:8787 オプション - + Reason for removal @@ -1692,8 +2029,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1が暗号化されたメッセージを送信しました @@ -1709,7 +2046,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1892,7 +2229,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1908,7 +2245,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2077,6 +2414,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2094,7 +2436,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2136,6 +2478,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + メッセージを書く... + ReadReceipts @@ -2148,7 +2505,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2222,7 +2579,7 @@ Example: https://server.my:8787 登録 - + Autodiscovery failed. Received malformed response. 自動検出できませんでした。不正な形式の応答を受信しました。 @@ -2316,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored バージョンが保存されていません @@ -2340,6 +2697,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room 部屋を出る @@ -2747,7 +3109,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 暗号化を有効にできませんでした: %1 @@ -2881,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2977,7 +3339,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3090,19 +3452,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 メッセージを編集できませんでした: %1 - + Failed to encrypt event, sending aborted! - + Save image 画像を保存 @@ -3122,7 +3484,7 @@ If you choose verify, you need to have the other device available. If you choose ファイルを保存 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3385,7 +3747,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3445,17 +3807,17 @@ Reason: %4 %1がノックを編集しました。 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3489,7 +3851,7 @@ Reason: %4 TimelineRow - + Edited @@ -3502,12 +3864,12 @@ Reason: %4 TimelineView - + No room open 部屋が開いていません - + No preview available @@ -3544,7 +3906,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3552,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3587,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options 部屋のオプション @@ -3621,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3663,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3797,8 +4179,8 @@ Reason: %4 UserSettings - - + + Default @@ -3806,7 +4188,7 @@ Reason: %4 UserSettingsModel - + Theme テーマ @@ -3840,6 +4222,11 @@ Reason: %4 Send messages as Markdown メッセージをMarkdownとして送信 + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3915,8 +4302,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4106,7 +4503,7 @@ Reason: %4 - + Default @@ -4148,6 +4545,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4187,9 +4589,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4201,23 +4613,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4227,7 +4639,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4264,7 +4676,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4317,7 +4729,7 @@ This setting will take effect upon restart. - + Select a file ファイルを選択 @@ -4469,7 +4881,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday 昨日 @@ -4523,7 +4935,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip 音声データを送信しました @@ -4584,16 +4996,28 @@ This setting will take effect upon restart. + You: %1 あなた: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message 暗号化されたメッセージを送信しました @@ -4632,6 +5056,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts index fc4478ee..4ccb4749 100644 --- a/resources/langs/nheko_ml.ts +++ b/resources/langs/nheko_ml.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add ചേർക്കുക @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen മുഴുവൻ സ്ക്രീൻ @@ -222,22 +222,27 @@ - + Invited user: %1 ക്ഷണിച്ച ഉപയോക്താവ്:% 1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite ക്ഷണം ഉറപ്പാക്കു - + Do you really want to invite %1 (%2)? @@ -313,17 +318,24 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 ദയവായി വീണ്ടും ലോഗിൻ ചെയ്യാൻ നോക്കുക: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites പ്രിയപ്പെട്ടവ @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: എല്ലാ ഫയലുകളും (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in ഇവരെ അനുവദിക്കുക - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file ഒരു ഫയൽ അയയ്ക്കുക @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 ഒരു സന്ദേശം എഴുതുക…. - + Stickers സ്റ്റിക്കറുകൾ @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit തിരുത്തുക @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + അയക്കുക + + + + Write a message... + ഒരു സന്ദേശം എഴുതുക…. + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. നിങ്ങൾ ഈ മുറിയിൽ ചേർന്നു. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3554,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3562,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4190,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4199,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4233,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4313,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4514,7 @@ Reason: %4 - + Default @@ -4159,6 +4556,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4600,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4624,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4650,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4275,7 +4687,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4740,7 @@ This setting will take effect upon restart. - + Select a file ഒരു ഫയൽ തിരഞ്ഞെടുക്കുക @@ -4480,7 +4892,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4946,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +5007,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5067,16 @@ This setting will take effect upon restart. %1 ended a call %1 ഒരു കോൾ അവസാനിപ്പിച്ചു + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index 19a58166..6148b0f2 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -89,12 +89,12 @@ Verwijder deze alias - + #new-alias:server.tld #nieuwe-alias:server.domein - + Add Toevoegen @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 en %n ander @@ -208,7 +208,7 @@ CallManager - + Entire screen Gehele scherm @@ -222,22 +222,27 @@ - + Invited user: %1 Gebruiker uitgenodigd: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. De opgeslagen gegevens van Nheko zijn nieuwer dan de versie die je nu draait. Update Nheko of verwijder de gegevens. - + Failed to open database, logging out! Kon database niet openen, je wordt uitgelogd! - + Knock on room Aankloppen @@ -263,12 +268,12 @@ - + Confirm invite Bevestig uitnodiging - + Do you really want to invite %1 (%2)? Weet je zeker dat je %1 (%2) wil uitnodigen? @@ -313,17 +318,24 @@ Toegelaten gebruiker: %1 - + Do you really want to start a private chat with %1? Weet je zeker dat je een privé chat wil beginnen met %1? - + Cache migration failed! Migreren van de cache is mislukt! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ Incompatibele cacheversie - + Failed to restore OLM account. Please login again. Herstellen van OLM account mislukt. Log a.u.b. opnieuw in. @@ -345,13 +357,13 @@ Opgeslagen gegevens herstellen mislukt. Log a.u.b. opnieuw in. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Instellen van de versleuteling is mislukt. Bericht van server: %1 %2. Probeer het a.u.b. later nog eens. - + Please try to login again: %1 Probeer a.u.b. opnieuw in te loggen: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: Geen netwerkverbinding + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Laat één op één gesprekken zien. - + Favourites Favorieten @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Ontsleutel geheimen @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Kon verborgen gebeurtenissen niet instellen: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Alle bestanden (*) - + Upload of '%1' failed Versturen van '%1' misluk @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Kamer verlaten @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Je hebt een ongeldige Matrix ID ingevuld. Correct voorbeeld: @jan:matrix.org @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 heeft een bericht verwijderd @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. %1 beantwoordde de oproep. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 beëindigde de oproep. + %1 is negotiating the call... %1 is het gesprek aan het opzetten... - + Allow them in Binnenlaten @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Plaats een oproep - + + Already on a call + + + + Send a file Verstuur een bestand @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Typ een bericht… - + Stickers Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Bewerken @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Opties - + Reason for removal Reden voor verwijdering @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 stuurde een versleuteld bericht @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 antwoordde met een versleuteld bericht - + %1 replied to a message %1 antwoordde op een bericht @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 Kon machtsniveau niet bewerken: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Andere evenementen @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call Een beeld- of geluidsgesprek ophangen + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Verstuur + + + + Write a message... + Typ een bericht… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Gisteren, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTREREN - + Autodiscovery failed. Received malformed response. Automatische herkenning mislukt. Onjuist gevormd antwoord ontvangen. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored geen versie opgeslagen @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Kamer verlaten @@ -2752,7 +3114,7 @@ Wees ervan bewust dat het achteraf niet meer uitgeschakeld kan worden.meer tonen - + Failed to enable encryption: %1 Versleuteling kon niet worden ingeschakeld: %1 @@ -2886,7 +3248,7 @@ Wees ervan bewust dat het achteraf niet meer uitgeschakeld kan worden. SecretStorage - + Failed to connect to secret storage Verbinden met geheimopslag mislukt @@ -2984,7 +3346,7 @@ Als je "verifieer" kiest, moet je het andere apparaat bij de hand hebb SingleImagePackModel - + Failed to update image pack: %1 Kon afbeeldingspakket niet updaten: %1 @@ -3097,19 +3459,19 @@ Als je "verifieer" kiest, moet je het andere apparaat bij de hand hebb TimelineModel - + Message redaction failed: %1 Bericht intrekken mislukt: %1 - + Failed to encrypt event, sending aborted! Kon evenement niet versleutelen, versturen geannuleerd! - + Save image Afbeelding opslaan @@ -3129,7 +3491,7 @@ Als je "verifieer" kiest, moet je het andere apparaat bij de hand hebb Bestand opslaan - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3398,7 +3760,7 @@ Reason: %4 Reden: %4 - + %2 revoked the invite to %1. %2 heeft de uitnodiging voor %1 ingetrokken. @@ -3458,17 +3820,17 @@ Reden: %4 %1 heeft het aankloppen ingetrokken. - + You joined this room. Je neemt nu deel aan deze kamer. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 heeft %2 uitgenodigd. @@ -3502,7 +3864,7 @@ Reden: %4 TimelineRow - + Edited Bewerkt @@ -3515,12 +3877,12 @@ Reden: %4 TimelineView - + No room open Geen kamer open - + No preview available Geen voorbeeld beschikbaar @@ -3558,7 +3920,17 @@ Reden: %4 wijs uitnodiging af - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Terug naar kamerlijst @@ -3566,22 +3938,22 @@ Reden: %4 TopBar - + Back to room list Terug naar kamerlijst - + No room selected Geen kamer geselecteerd - + In %1 - + Show room members. Laat kamerdeelnemers zien. @@ -3601,12 +3973,17 @@ Reden: %4 Deze kamer bevat ongeverifieerde apparaten! - + Show or hide pinned messages Toon of verberg vastgeprikte berichten - + + Search this room + + + + Room options Kameropties @@ -3635,6 +4012,11 @@ Reden: %4 Unpin Vastprikken ongedaan maken + + + Enter search query + + TrayIcon @@ -3677,7 +4059,7 @@ Reden: %4 UploadBox - + Upload %n file(s) Bestand versturen @@ -3812,8 +4194,8 @@ Reden: %4 UserSettings - - + + Default Standaard @@ -3821,7 +4203,7 @@ Reden: %4 UserSettingsModel - + Theme Thema @@ -3855,6 +4237,11 @@ Reden: %4 Send messages as Markdown Verstuur berichten in Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3930,8 +4317,18 @@ Reden: %4 Decrypt messages in sidebar Ontsleutel berichten in de zijbalk + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privacy scherm @@ -4121,7 +4518,7 @@ Reden: %4 Maak kamerinformatie beschikbaar over D-Bus - + Default Standaard @@ -4166,6 +4563,11 @@ When disabled, all messages are sent as a plain text. Sta het gebruik van Markdown in berichten toe. Indien uitgeschakeld worden alle berichten als platte tekst verstuurd. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4207,9 +4609,19 @@ UIT - vierkant, AAN - cirkel. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4221,24 +4633,24 @@ UIT - vierkant, AAN - cirkel. De sleutel om je eigen apparaten te verifiëren. Indien gecached zal het verifiëren van één van je apparaten die ook als geverifieerd markeren voor je anderen apparaten en gebruikers die jou geverifieerd hebben. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Activeer een melding als een bericht binnen komt. Meestal zorgt dit dat het icoon in de taakbalk op een manier animeert of iets dergelijks. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4248,7 +4660,7 @@ Meestal zorgt dit dat het icoon in de taakbalk op een manier animeert of iets de - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4290,7 +4702,7 @@ Only affects messages in encrypted chats. Heeft alleen effect op versleutelde chats. - + When the window loses focus, the timeline will be blurred. Als het scherm focus verliest, zal de tijdlijn @@ -4346,7 +4758,7 @@ This setting will take effect upon restart. Deze instelling wordt toegepast na opnieuw starten van de applicatie. - + Select a file Selecteer een bestand @@ -4498,7 +4910,7 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie. descriptiveTime - + Yesterday Gisteren @@ -4552,7 +4964,7 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie. message-description sent: - + You sent an audio clip Je verstuurde een audio clip @@ -4613,16 +5025,28 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie. + You: %1 Jij: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Je hebt een versleuteld bericht verstuurd @@ -4661,6 +5085,16 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.%1 ended a call %1 hing op + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 1d0208f4..6f96a768 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -89,12 +89,12 @@ Usuń ten alias - + #new-alias:server.tld #nowy-alias:serwer.tld - + Add Dodaj @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 i jeszcze %n inny @@ -209,7 +209,7 @@ CallManager - + Entire screen Cały ekran @@ -223,22 +223,27 @@ - + Invited user: %1 Zaproszono użytkownika: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Pamięć podręczna na twoim dysku jest nowsza niż wspierana przez tę wersję Nheko. Zaktualizuj Nheko lub wyczyść pamięć podręczną. - + Failed to open database, logging out! Nie udało się otworzyć bazy danych, następuje wylogowanie! - + Knock on room Zapukaj do pokoju @@ -264,12 +269,12 @@ - + Confirm invite Potwierdź zaproszenie - + Do you really want to invite %1 (%2)? Czy na pewno chcesz zaprosić %1 (%2)? @@ -314,17 +319,24 @@ Odblokowano użytkownika: %1 - + Do you really want to start a private chat with %1? Czy na pewno chcesz rozpocząć prywatny czat z %1? - + Cache migration failed! Nie udało się przenieść pamięci podręcznej! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -334,7 +346,7 @@ Niekompatybilna wersja pamięci podręcznej - + Failed to restore OLM account. Please login again. Nie udało się przywrócić konta OLM. Spróbuj zalogować się ponownie. @@ -346,13 +358,13 @@ Nie udało się przywrócić zapisanych danych. Spróbuj zalogować się ponownie. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Nie udało się ustawić kluczy szyfrujących. Odpowiedź serwera: %1 %2. Spróbuj ponownie później. - + Please try to login again: %1 Spróbuj zalogować się ponownie: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: Brak połączenia z siecią + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: Pokaż czaty bezpośrednie. - + Favourites Ulubione @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Odszyfruj sekrety @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Nie udało się ustawić ukrytych zdarzeń: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: Wszystkie pliki (*) - + Upload of '%1' failed Wysyłanie '%1' nie powiodło się @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Opuść pokój @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Wprowadzono nieprawidłowe Matrix ID. Przykład prawidłowego ID: @ania:matrix.org @@ -1354,7 +1665,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 usunął/ęła wiadomość @@ -1428,18 +1749,29 @@ Example: https://server.my:8787 %1 answered the call. %1 odebrał(a) połączenie. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 zakończył(a) połączenie. + %1 is negotiating the call... %1 negocjuje połączenie... - + Allow them in Wpuść @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 Zadzwoń - + + Already on a call + + + + Send a file Wyślij plik @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 Napisz wiadomość… - + Stickers Naklejki @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit Edytuj @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Opcje - + Reason for removal Powód usunięcia @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 wysłał(a) zaszyfrowaną wiadomość @@ -1714,7 +2051,7 @@ Example: https://server.my:8787 %1 odpisał(a) zaszyfrowaną wiadomością - + %1 replied to a message %1 odpisał(a) na wiadomość @@ -1897,7 +2234,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 Nie udało się zaktualizować poziomu mocy: %1 @@ -1913,7 +2250,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Inne zdarzenia @@ -2082,6 +2419,11 @@ Example: https://server.my:8787 Hang up a call Kończenie rozmowy + + + Reject a call + + Change the room emotes @@ -2099,7 +2441,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2141,6 +2483,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Wyślij + + + + Write a message... + Napisz wiadomość… + ReadReceipts @@ -2153,7 +2510,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Wczoraj, %1 @@ -2227,7 +2584,7 @@ Example: https://server.my:8787 ZAREJESTRUJ - + Autodiscovery failed. Received malformed response. Automatyczne wykrywanie zakończone niepowodzeniem. Otrzymano nieprawidłową odpowiedź. @@ -2321,7 +2678,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored brak zapisanej wersji @@ -2345,6 +2702,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Opuść pokój @@ -2757,7 +3119,7 @@ Zwróć uwagę, iż nie będzie ono mogło zostać wyłączone. pokaż więcej - + Failed to enable encryption: %1 Nie udało się włączyć szyfrowania: %1 @@ -2891,7 +3253,7 @@ Zwróć uwagę, iż nie będzie ono mogło zostać wyłączone. SecretStorage - + Failed to connect to secret storage Błąd połączenia do menadżera sekretów @@ -2989,7 +3351,7 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego SingleImagePackModel - + Failed to update image pack: %1 Nie udało się uaktualnić paczki obrazów: %1 @@ -3102,19 +3464,19 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego TimelineModel - + Message redaction failed: %1 Cenzurowanie wiadomości nie powiodło się: %1 - + Failed to encrypt event, sending aborted! Szyfrowanie event-u nie powiodło się, wysyłanie anulowane! - + Save image Zapisz obraz @@ -3134,7 +3496,7 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego Zapisz plik - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3408,7 +3770,7 @@ Reason: %4 Powód: %4 - + %2 revoked the invite to %1. %2 anulował(a) zaproszenie do %1. @@ -3468,17 +3830,17 @@ Powód: %4 Użytkownik %1 ocenzurował własne pukanie. - + You joined this room. Dołączyłeś(-aś) do tego pokoju. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 zaprosił(a) %2. @@ -3512,7 +3874,7 @@ Powód: %4 TimelineRow - + Edited Edytowane @@ -3525,12 +3887,12 @@ Powód: %4 TimelineView - + No room open Brak otwartych pokojów - + No preview available Podgląd niedostępny @@ -3569,7 +3931,17 @@ Powód: %4 odrzuć zaproszenie - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Wróc do listy pokoi @@ -3577,22 +3949,22 @@ Powód: %4 TopBar - + Back to room list Wróć do listy pokoi - + No room selected Nie wybrano pokoju - + In %1 - + Show room members. Pokaż członków pokoju. @@ -3612,12 +3984,17 @@ Powód: %4 Ten pokój zawiera niezweryfikowane urządzenia! - + Show or hide pinned messages Pokaż lub ukryj przypięte wiadomości - + + Search this room + + + + Room options Ustawienia pokoju @@ -3646,6 +4023,11 @@ Powód: %4 Unpin Odepnij + + + Enter search query + + TrayIcon @@ -3688,7 +4070,7 @@ Powód: %4 UploadBox - + Upload %n file(s) Wyślij plik @@ -3824,8 +4206,8 @@ Powód: %4 UserSettings - - + + Default Domyślne @@ -3833,7 +4215,7 @@ Powód: %4 UserSettingsModel - + Theme Motyw @@ -3867,6 +4249,11 @@ Powód: %4 Send messages as Markdown Wysyłaj wiadomości używając Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3942,8 +4329,18 @@ Powód: %4 Decrypt messages in sidebar Pokaż odszyfrowane wiadomości na pasku bocznym + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Ochrona prywatności @@ -4133,7 +4530,7 @@ Powód: %4 Udostępnij informacje o pokojach poprzez D-Bus - + Default Domyślne @@ -4177,6 +4574,11 @@ When disabled, all messages are sent as a plain text. Pozwól na używanie Markdown w wiadomościach. Gdy ta opcja jest wyłączona, wszystkie wiadomości będą wysyłane jako zwykły tekst. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4218,9 +4620,19 @@ Wyłączone - kwadratowe, włączone - okrągłe. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4232,24 +4644,24 @@ Wyłączone - kwadratowe, włączone - okrągłe. Klucz używany do weryfikacji twoich własnych urządzeń. Jeśli jest on w pamięci podręcznej, zweryfikowanie jednego z twoich urządzeń oznaczy je w ten sam sposób dla wszystkich pozostałych twoich urządzeń oraz dla użytkowników którzy uprzednio ciebie zweryfikowali. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Pokazuj alert po otrzymaniu wiadomości. To zwykle sprawia, że ikona aplikacji na pasku zadań jest animowana. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4259,7 +4671,7 @@ To zwykle sprawia, że ikona aplikacji na pasku zadań jest animowana. - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4301,7 +4713,7 @@ Only affects messages in encrypted chats. Dotyczy wyłącznie czatów z włączonym szyfrowaniem. - + When the window loses focus, the timeline will be blurred. Kiedy okno przejdzie na drugi plan, oś czasu zostanie rozmyta. @@ -4356,7 +4768,7 @@ This setting will take effect upon restart. To ustawienie wejdzie w życie po restarcie aplikacji. - + Select a file Wybierz plik @@ -4508,7 +4920,7 @@ To ustawienie wejdzie w życie po restarcie aplikacji. descriptiveTime - + Yesterday Wczoraj @@ -4562,7 +4974,7 @@ To ustawienie wejdzie w życie po restarcie aplikacji. message-description sent: - + You sent an audio clip Wysłałeś(aś) klip audio @@ -4623,16 +5035,28 @@ To ustawienie wejdzie w życie po restarcie aplikacji. + You: %1 Ty: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Wysłałeś(aś) zaszyfrowaną wiadomość @@ -4671,6 +5095,16 @@ To ustawienie wejdzie w życie po restarcie aplikacji. %1 ended a call %1 zakończył(a) połączenie + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_pt_BR.ts b/resources/langs/nheko_pt_BR.ts index 7ac98016..a1f25fdc 100644 --- a/resources/langs/nheko_pt_BR.ts +++ b/resources/langs/nheko_pt_BR.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen Tela Inteira @@ -222,22 +222,27 @@ - + Invited user: %1 Usuário convidado: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite Confirmar convite - + Do you really want to invite %1 (%2)? Deseja realmente convidar %1 (%2)? @@ -313,17 +318,24 @@ Usuário desbanido: %1 - + Do you really want to start a private chat with %1? Deseja realmente iniciar uma conversa privada com %1? - + Cache migration failed! Migração do cache falhou! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ Versão de cache incompatível - + Failed to restore OLM account. Please login again. Falha ao restaurar conta OLM. Por favor faça login novamente. @@ -345,13 +357,13 @@ Falha ao restaurar dados salvos. Por favor faça login novamente. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Falha ao configurar chaves de criptografia. Resposta do servidor: %1 %2. Por favor tente novamente mais tarde. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. Você entrou nessa sala. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3554,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3562,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4190,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4199,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4233,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4313,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4514,7 @@ Reason: %4 - + Default @@ -4159,6 +4556,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4600,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4624,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4650,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4275,7 +4687,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4740,7 @@ This setting will take effect upon restart. - + Select a file @@ -4480,7 +4892,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4946,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +5007,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5067,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts index 9e2e44be..c3e9434c 100644 --- a/resources/langs/nheko_pt_PT.ts +++ b/resources/langs/nheko_pt_PT.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add Adicionar @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 e outro %n @@ -208,7 +208,7 @@ CallManager - + Entire screen Ecrã inteiro @@ -222,22 +222,27 @@ - + Invited user: %1 Utilizador convidado: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. A cache no seu disco é mais recente do que aquela que esta versão do Nheko suporta. Por favor atualize o Nheko ou limpe a sua cache. - + Failed to open database, logging out! Falha ao abrir base de dados. A terminar sessão! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite Confirmar convite - + Do you really want to invite %1 (%2)? Tem a certeza que quer convidar %1 (%2)? @@ -313,17 +318,24 @@ Utilizador perdoado: %1 - + Do you really want to start a private chat with %1? Tem a certeza que quer começar uma conversa privada com %1? - + Cache migration failed! Falha ao migrar a cache! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ Versão da cache incompatível - + Failed to restore OLM account. Please login again. Falha ao restaurar a sua conta OLM. Por favor autentique-se novamente. @@ -345,13 +357,13 @@ Falha ao restaurar dados guardados. Por favor, autentique-se novamente. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Falha ao estabelecer chaves encriptadas. Resposta do servidor: %1 %2. Tente novamente mais tarde. - + Please try to login again: %1 Por favor, tente autenticar-se novamente: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites Favoritos @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Desencriptar segredos @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Todos os ficheiros (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Sair da sala @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Inseriu um ID Matrix inválido p. ex. @ze:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 %1 iniciou uma chamada. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in Permitir a entrada - + %1 answered the call. %1 atendeu a chamada. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 terminou a chamada. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Iniciar chamada - + + Already on a call + + + + Send a file Enviar um ficheiro @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Escreva uma mensagem… - + Stickers Autocolantes @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Editar @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Opções - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 enviou uma mensagem encriptada @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 respondeu com uma mensagem encriptada - + %1 replied to a message %1 respondeu a uma mensagem @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Enviar + + + + Write a message... + Escreva uma mensagem… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Ontem, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTAR - + Autodiscovery failed. Received malformed response. Falha na descoberta automática. Resposta mal formada recebida. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nenhuma versão guardada @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Sair da sala @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Falha ao ativar encriptação: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Falha ao ligar ao armazenamento secreto @@ -2983,7 +3345,7 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e SingleImagePackModel - + Failed to update image pack: %1 Falha ao atualizar pacote de imagem: %1 @@ -3096,19 +3458,19 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e TimelineModel - + Message redaction failed: %1 Falha ao eliminar mensagem: %1 - + Failed to encrypt event, sending aborted! Falha ao encriptar evento, envio abortado! - + Save image Guardar imagem @@ -3128,7 +3490,7 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e Guardar ficheiro - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3396,7 +3758,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3456,17 +3818,17 @@ Reason: %4 %1 eliminou a sua "batida à porta". - + You joined this room. Entrou na sala. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3500,7 +3862,7 @@ Reason: %4 TimelineRow - + Edited Editada @@ -3513,12 +3875,12 @@ Reason: %4 TimelineView - + No room open Nenhuma sala aberta - + No preview available Pré-visualização não disponível @@ -3556,7 +3918,17 @@ Reason: %4 recusar convite - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Voltar à lista de salas @@ -3564,22 +3936,22 @@ Reason: %4 TopBar - + Back to room list Voltar à lista de salas - + No room selected Nenhuma sala selecionada - + In %1 - + Show room members. @@ -3599,12 +3971,17 @@ Reason: %4 Esta sala contém dispositivos não verificados! - + Show or hide pinned messages - + + Search this room + + + + Room options Opções da sala @@ -3633,6 +4010,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3675,7 +4057,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3810,8 +4192,8 @@ Reason: %4 UserSettings - - + + Default Predefinido @@ -3819,7 +4201,7 @@ Reason: %4 UserSettingsModel - + Theme Tema @@ -3853,6 +4235,11 @@ Reason: %4 Send messages as Markdown Enviar mensagens como Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3928,8 +4315,18 @@ Reason: %4 Decrypt messages in sidebar Desencriptar mensagens na barra lateral + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Ecrã de privacidade @@ -4119,7 +4516,7 @@ Reason: %4 - + Default Predefinido @@ -4164,6 +4561,11 @@ When disabled, all messages are sent as a plain text. Permitir Markdown em mensagens. Quando desativada, todas as mensagens serão enviadas em texto simples. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4204,9 +4606,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4218,23 +4630,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Mostrar alerta quando é recebida uma mensagem. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4244,7 +4656,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4282,7 +4694,7 @@ Only affects messages in encrypted chats. Apenas afeta mensagens em conversas encriptadas. - + When the window loses focus, the timeline will be blurred. Quando a janela perde a atenção, a cronologia @@ -4336,7 +4748,7 @@ This setting will take effect upon restart. - + Select a file Selecionar um ficheiro @@ -4488,7 +4900,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Ontem @@ -4542,7 +4954,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Enviou uma mensagem áudio @@ -4603,16 +5015,28 @@ This setting will take effect upon restart. + You: %1 Você: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Enviou uma mensagem encriptada @@ -4651,6 +5075,16 @@ This setting will take effect upon restart. %1 ended a call %1 terminou uma chamada + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts index a973a071..b8664564 100644 --- a/resources/langs/nheko_ro.ts +++ b/resources/langs/nheko_ro.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -209,7 +209,7 @@ CallManager - + Entire screen @@ -223,22 +223,27 @@ - + Invited user: %1 Utilizator invitat: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -264,12 +269,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -314,17 +319,24 @@ Utilizator dezinterzis: %1 - + Do you really want to start a private chat with %1? - + Cache migration failed! Nu s-a putut migra cache-ul! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -334,7 +346,7 @@ Versiune cache incompatibilă - + Failed to restore OLM account. Please login again. Nu s-a putut restabili contul OLM. Vă rugăm să vă reconectați. @@ -346,13 +358,13 @@ Nu s-au putut restabili datele salvate. Vă rugăm să vă reconectați. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Nu s-au putut stabili cheile. Răspunsul serverului: %1 %2. Vă rugăm încercați mai târziu. - + Please try to login again: %1 Vă rugăm să vă reconectați: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: Toate fișierele (*) - + Upload of '%1' failed @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Părăsește camera @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1354,7 +1665,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1428,18 +1749,29 @@ Example: https://server.my:8787 %1 answered the call. %1 a răspuns apelului. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 a închis apelul. + %1 is negotiating the call... - + Allow them in @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 - + Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Opțiuni - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 a trimis un mesaj criptat @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 ÎNREGISTRARE - + Autodiscovery failed. Received malformed response. Autodescoperirea a eșuat. Răspunsul primit este defectuos. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nicio versiune stocată @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Părăsește camera @@ -2755,7 +3117,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Nu s-a putut activa criptarea: %1 @@ -2889,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2985,7 +3347,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3098,19 +3460,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Redactare mesaj eșuată: %1 - + Failed to encrypt event, sending aborted! - + Save image Salvați imaginea @@ -3130,7 +3492,7 @@ If you choose verify, you need to have the other device available. If you choose Salvați fișier - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3403,7 +3765,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 %1 și-a redactat ciocănitul. - + You joined this room. Te-ai alăturat camerei. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open Nicio cameră deschisă - + No preview available @@ -3564,7 +3926,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3572,22 +3944,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3607,12 +3979,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3641,6 +4018,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3683,7 +4065,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3819,8 +4201,8 @@ Reason: %4 UserSettings - - + + Default @@ -3828,7 +4210,7 @@ Reason: %4 UserSettingsModel - + Theme Temă @@ -3862,6 +4244,11 @@ Reason: %4 Send messages as Markdown Trimite mesaje ca Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3937,8 +4324,18 @@ Reason: %4 Decrypt messages in sidebar Decriptează mesajele din bara laterală + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4128,7 +4525,7 @@ Reason: %4 - + Default @@ -4170,6 +4567,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. Permite folosirea markdown în mesaje. Când este dezactivată, mesajele sunt trimise ca text simplu. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4209,9 +4611,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4223,23 +4635,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Arată o alertă când primiți un mesaj. Deobicei pictograma aplicației se animează în taskbar. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4249,7 +4661,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4286,7 +4698,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4339,7 +4751,7 @@ This setting will take effect upon restart. - + Select a file @@ -4491,7 +4903,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Ieri @@ -4545,7 +4957,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Ai trimis un clip audio @@ -4606,16 +5018,28 @@ This setting will take effect upon restart. + You: %1 Tu: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Ai trimis un mesaj criptat @@ -4654,6 +5078,16 @@ This setting will take effect upon restart. %1 ended a call %1 a încheiat un apel + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index e069a2b3..ef982473 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -61,12 +61,12 @@ List of aliases to this room. Usually you can only add aliases on your server. You can have one canonical alias and many alternate aliases. - + Список псевдонимов (альтернативных имён) данной комнаты. Обычно, Вы можете задать псевдонимы лишь на своём домашнем сервере. Комнаты могут иметь лишь одно каноническое имя и множество псевдонимов. Primary alias - + Основное имя @@ -76,27 +76,27 @@ Advertise as an alias in this room - + Представиться в данной комнате под псевдонимом Publish in room directory - + Опубликовать в списке комнат Remove this alias - + Удалить псевдоним - + #new-alias:server.tld - + Add - + Добавить @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 и ещё %n @@ -209,7 +209,7 @@ CallManager - + Entire screen Весь экран @@ -223,39 +223,44 @@ - + Invited user: %1 Приглашенный пользователь: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Версия кэша на вашем диске новее той, что поддерживается текущей версией Nheko. Пожалуйста, обновите Nheko или очистите кэш. - + Failed to open database, logging out! Ошибка при попытке открыть базу данных, выходим из аккаунта! - + Knock on room - + Попросить приглашение Do you really want to knock on %1? You may optionally provide a reason for others to accept your knock: - + Вы действительно хотите попросить приглашение войти? Вы можете добавить причину Вашего визита (необязательно): Failed to knock room: %1 - + Не удалось попросить приглашение в комнату: %1 Room creation failed: Bad Alias - + Не удалось создать комнату: недопустимый псевдоним @@ -264,12 +269,12 @@ - + Confirm invite Подтвердите приглашение - + Do you really want to invite %1 (%2)? Вы точно хотите пригласить %1 (%2)? @@ -314,17 +319,24 @@ Разблокированный пользователь: %1 - + Do you really want to start a private chat with %1? Вы действительно хотите начать личную переписку с %1? - + Cache migration failed! Миграция кэша не удалась! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -334,7 +346,7 @@ Несовместимая версия кэша - + Failed to restore OLM account. Please login again. Не удалось восстановить учетную запись OLM. Пожалуйста, войдите снова. @@ -346,13 +358,13 @@ Не удалось восстановить сохраненные данные. Пожалуйста, войдите снова. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Не удалось настроить ключи шифрования. Ответ сервера:%1 %2. Пожалуйста, попробуйте позже. - + Please try to login again: %1 Повторите попытку входа: %1 @@ -385,7 +397,7 @@ You may optionally provide a reason for others to accept your knock: Reason for the kick - + Причина исключения @@ -400,7 +412,7 @@ You may optionally provide a reason for others to accept your knock: Reason for the ban - + Причина блокировки @@ -410,6 +422,305 @@ You may optionally provide a reason for others to accept your knock: No network connection + Отсутствует подключение к сети + + + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. @@ -428,12 +739,12 @@ You may optionally provide a reason for others to accept your knock: Expand - + Развернуть Collapse - + Свернуть @@ -451,22 +762,22 @@ You may optionally provide a reason for others to accept your knock: Direct Chats - + Личные чаты Show direct chats. - + Показать личные чаты. - + Favourites Избранное Rooms you have favourited. - + Комнаты, которые Вы отметили как «Избранные». @@ -486,7 +797,7 @@ You may optionally provide a reason for others to accept your knock: Messages from your server or administrator. - + Сообщения от вашего сервера или администратора. @@ -524,10 +835,10 @@ You may optionally provide a reason for others to accept your knock: %n member(s) - - - - + + %n участник + %n участника + %n участников @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Расшифровать ключи @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: Все файлы (*) - + Upload of '%1' failed @@ -1135,7 +1446,7 @@ You may optionally provide a reason for others to accept your knock: Add - + Добавить @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Покинуть комнату @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Вы ввели не правильный Matrix ID, @joe:matrix.org @@ -1354,7 +1665,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1428,18 +1749,29 @@ Example: https://server.my:8787 %1 answered the call. %1 ответил на звонок. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 завершил вызов. + %1 is negotiating the call... - + Allow them in @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 Позвонить - + + Already on a call + + + + Send a file Отправить файл @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 Написать сообщение… - + Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit Редактировать @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Опции - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 отправил зашифрованное сообщение @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 %1 ответил зашифрованным сообщением - + %1 replied to a message %1 ответил на сообщение @@ -1832,7 +2169,7 @@ Example: https://server.my:8787 Add - + Добавить @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Отправить + + + + Write a message... + Написать сообщение… + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 РЕГИСТРАЦИЯ - + Autodiscovery failed. Received malformed response. Автообноружение не удалось. Получен поврежденный ответ. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored нет сохраненной версии @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Покинуть комнату @@ -2575,9 +2937,9 @@ Example: https://server.my:8787 %n member(s) - - - + %n участник + %n участника + %n участников @@ -2755,7 +3117,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Не удалось включить шифрование: %1 @@ -2889,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2985,7 +3347,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3098,19 +3460,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Ошибка редактирования сообщения: %1 - + Failed to encrypt event, sending aborted! Не удалось зашифровать сообщение, отправка отменена! - + Save image Сохранить изображение @@ -3130,7 +3492,7 @@ If you choose verify, you need to have the other device available. If you choose Сохранить файл - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3403,7 +3765,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 %1 отредактировал его "стук". - + You joined this room. Вы присоединились к комнате. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited Изменено @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open Комната не выбрана - + No preview available @@ -3538,9 +3900,9 @@ Reason: %4 %n member(s) - - - + %n участник + %n участника + %n участников @@ -3564,7 +3926,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Вернуться к списку комнат @@ -3572,22 +3944,22 @@ Reason: %4 TopBar - + Back to room list Вернуться к списку комнат - + No room selected Комнаты не выбраны - + In %1 - + Show room members. @@ -3607,12 +3979,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options Настройки комнаты @@ -3641,6 +4018,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3683,7 +4065,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3819,8 +4201,8 @@ Reason: %4 UserSettings - - + + Default По умолчанию @@ -3828,7 +4210,7 @@ Reason: %4 UserSettingsModel - + Theme Тема @@ -3862,6 +4244,11 @@ Reason: %4 Send messages as Markdown Посылать сообщение в формате Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3937,8 +4324,18 @@ Reason: %4 Decrypt messages in sidebar Дешифровывать сообщение в сайдбаре + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Приватное Окно @@ -4128,7 +4525,7 @@ Reason: %4 - + Default По умолчанию @@ -4171,6 +4568,11 @@ When disabled, all messages are sent as a plain text. Разрешить использовать markdown в сообщениях. Когда выключено, все сообщения посылаются как обычный текст. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4211,9 +4613,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4225,24 +4637,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Показывать предупреждение, когда получено сообщеение. На это обычно реагирует иконка приложения в таскбаре. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4252,7 +4664,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4286,10 +4698,11 @@ Note that when this option is ON, opened files are left unencrypted on disk and Decrypt the messages shown in the sidebar. Only affects messages in encrypted chats. - Дешифровывать сообщение отображающиеся в сайдбаре. Действует только на шифрованные чаты. + Отображать расшифрованные сообщения в боковой панели (списке комнат). +Актуально только для комнат, в которых включено шифрование. - + When the window loses focus, the timeline will be blurred. @@ -4342,7 +4755,7 @@ This setting will take effect upon restart. - + Select a file Выберите файл @@ -4473,7 +4886,7 @@ This setting will take effect upon restart. Welcome to nheko! The desktop client for the Matrix protocol. - Добро пожаловать в Nheko, клиент для протокола Matrix! + Добро пожаловать в Nheko, клиент для протокола Matrix. @@ -4494,7 +4907,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Вчера @@ -4548,7 +4961,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Вы отправили аудиозапись @@ -4609,16 +5022,28 @@ This setting will take effect upon restart. + You: %1 Вы: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Вы отправили зашифрованное сообщение @@ -4657,6 +5082,16 @@ This setting will take effect upon restart. %1 ended a call %1 Закончил разговор + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts index 9718a9aa..7c843d94 100644 --- a/resources/langs/nheko_si.ts +++ b/resources/langs/nheko_si.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,27 @@ - + Invited user: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -313,17 +318,24 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. + %1 is negotiating the call... - + Allow them in @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3554,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3562,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4190,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4199,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4233,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4313,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4514,7 @@ Reason: %4 - + Default @@ -4159,6 +4556,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4600,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4624,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4650,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4275,7 +4687,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4740,7 @@ This setting will take effect upon restart. - + Select a file @@ -4480,7 +4892,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4946,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +5007,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5067,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_sr_Latn.ts b/resources/langs/nheko_sr_Latn.ts index 16701bb6..1072b96a 100644 --- a/resources/langs/nheko_sr_Latn.ts +++ b/resources/langs/nheko_sr_Latn.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -209,7 +209,7 @@ CallManager - + Entire screen @@ -223,22 +223,27 @@ - + Invited user: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -264,12 +269,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -314,17 +319,24 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -334,7 +346,7 @@ - + Failed to restore OLM account. Please login again. @@ -346,13 +358,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1354,7 +1665,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1419,27 +1730,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 - + Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2755,7 +3117,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2889,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2985,7 +3347,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3098,19 +3460,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3130,7 +3492,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3403,7 +3765,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3564,7 +3926,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3572,22 +3944,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3607,12 +3979,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3641,6 +4018,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3683,7 +4065,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3819,8 +4201,8 @@ Reason: %4 UserSettings - - + + Default @@ -3828,7 +4210,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3862,6 +4244,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3937,8 +4324,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4128,7 +4525,7 @@ Reason: %4 - + Default @@ -4170,6 +4567,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4209,9 +4611,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4223,23 +4635,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4249,7 +4661,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4286,7 +4698,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4339,7 +4751,7 @@ This setting will take effect upon restart. - + Select a file @@ -4491,7 +4903,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4545,7 +4957,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4606,16 +5018,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4654,6 +5078,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts index b86aae9e..00a6a731 100644 --- a/resources/langs/nheko_sv.ts +++ b/resources/langs/nheko_sv.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,27 @@ - + Invited user: %1 Bjöd in användare: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +268,12 @@ - + Confirm invite Bekräfta inbjudan - + Do you really want to invite %1 (%2)? Är du säker på att du vill bjuda in %1 (%2)? @@ -313,17 +318,24 @@ Hävde bannlysningen av användare: %1 - + Do you really want to start a private chat with %1? - + Cache migration failed! Cache-migration misslyckades! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -333,7 +345,7 @@ Inkompatibel cache-version - + Failed to restore OLM account. Please login again. Kunde inte återställa OLM-konto. Vänligen logga in på nytt. @@ -345,13 +357,13 @@ Kunde inte återställa sparad data. Vänligen logga in på nytt. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Kunde inte sätta upp krypteringsnycklar. Svar från servern: %1 %2. Vänligen försök igen senare. - + Please try to login again: %1 Vänligen försök logga in på nytt: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Dekryptera hemliga nycklar @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Alla Filer (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Lämna rum @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 %1 påbörjade ett samtal. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. %1 besvarade samtalet. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 avslutade samtalet. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Ring upp - + + Already on a call + + + + Send a file Skicka en fil @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Skriv ett meddelande… - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Alternativ - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 skickade ett krypterat meddelande @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Skicka + + + + Write a message... + Skriv ett meddelande… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTRERA - + Autodiscovery failed. Received malformed response. Autouppslag misslyckades. Mottog felkonstruerat svar. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored ingen version lagrad @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Lämna rum @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Kunde inte aktivera kryptering: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Kunde inte maskera meddelande: %1 - + Failed to encrypt event, sending aborted! Kunde inte kryptera event, sändning avbruten! - + Save image Spara bild @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose Spara fil - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 %1 maskerade sin knackning. - + You joined this room. Du gick med i detta rum. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open Inget rum öppet - + No preview available @@ -3554,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Tillbaka till rumlista @@ -3562,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list Tillbaka till rumlista - + No room selected Inget rum markerat - + In %1 - + Show room members. @@ -3597,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options Alternativ för rum @@ -3631,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4190,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4199,7 @@ Reason: %4 UserSettingsModel - + Theme Tema @@ -3851,6 +4233,11 @@ Reason: %4 Send messages as Markdown Skicka meddelanden som Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4313,18 @@ Reason: %4 Decrypt messages in sidebar Dekryptera meddelanden i sidofält + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4514,7 @@ Reason: %4 - + Default @@ -4160,6 +4557,11 @@ When disabled, all messages are sent as a plain text. Tillåt användning av Markdown i meddelanden. Om denna inställning är av kommer alla meddelanden skickas som oformatterad text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4200,9 +4602,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4214,24 +4626,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Visar en notis när ett meddelande mottags. Detta gör vanligtvis att ikonen i aktivitetsfältet animeras på något sätt. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4241,7 +4653,7 @@ Detta gör vanligtvis att ikonen i aktivitetsfältet animeras på något sätt.< - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4279,7 +4691,7 @@ Only affects messages in encrypted chats. Påverkar endast krypterade chattar. - + When the window loses focus, the timeline will be blurred. @@ -4332,7 +4744,7 @@ This setting will take effect upon restart. - + Select a file Välj en fil @@ -4484,7 +4896,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Igår @@ -4538,7 +4950,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Du skickade ett ljudklipp @@ -4599,16 +5011,28 @@ This setting will take effect upon restart. + You: %1 Du: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Du skickade ett krypterat meddelande @@ -4647,6 +5071,16 @@ This setting will take effect upon restart. %1 ended a call %1 lade på + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_uk.ts b/resources/langs/nheko_uk.ts new file mode 100644 index 00000000..0e4be6ec --- /dev/null +++ b/resources/langs/nheko_uk.ts @@ -0,0 +1,5100 @@ + + + + + ActiveCallBar + + + Calling... + + + + + + Connecting... + + + + + You are screen sharing + + + + + Hide/Show Picture-in-Picture + + + + + Unmute Mic + + + + + Mute Mic + + + + + AliasEditingModel + + + + + + Failed to unpublish alias %1: %2 + + + + + Failed to update aliases: %1 + + + + + AliasEditor + + + Aliases to %1 + + + + + List of aliases to this room. Usually you can only add aliases on your server. You can have one canonical alias and many alternate aliases. + + + + + Primary alias + + + + + Make primary alias + + + + + Advertise as an alias in this room + + + + + Publish in room directory + + + + + Remove this alias + + + + + #new-alias:server.tld + + + + + Add + + + + + AllowedRoomsSettingsDialog + + + Allowed rooms settings + + + + + List of rooms that allow access to this room. Anyone who is in any of those rooms can join this room. + + + + + Parent community + + + + + Other room + + + + + Enter additional rooms not in the list yet... + + + + + Cache + + + %1 and %n other(s) + + + + + + + + + + Empty Room + + + + + CallInvite + + + Video Call + + + + + Voice Call + + + + + No microphone found. + + + + + CallInviteBar + + + Video Call + + + + + Voice Call + + + + + Devices + + + + + Accept + + + + + Unknown microphone: %1 + + + + + Unknown camera: %1 + + + + + Decline + + + + + No microphone found. + + + + + CallManager + + + Entire screen + + + + + ChatPage + + + Failed to invite user: %1 + + + + + + Invited user: %1 + + + + + Confirm logout + + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. + + + + + Failed to open database, logging out! + + + + + Knock on room + + + + + Do you really want to knock on %1? You may optionally provide a reason for others to accept your knock: + + + + + Failed to knock room: %1 + + + + + Room creation failed: Bad Alias + + + + + Room %1 created. + + + + + + Confirm invite + + + + + Do you really want to invite %1 (%2)? + + + + + Failed to invite %1 to %2: %3 + + + + + Kicked user: %1 + + + + + Failed to ban %1 in %2: %3 + + + + + Banned user: %1 + + + + + Confirm unban + + + + + Do you really want to unban %1 (%2)? + + + + + Failed to unban %1 in %2: %3 + + + + + Unbanned user: %1 + + + + + Do you really want to start a private chat with %1? + + + + + Cache migration failed! + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. + + + + + Incompatible cache version + + + + + Failed to restore OLM account. Please login again. + + + + + + + Failed to restore save data. Please login again. + + + + + Failed to setup encryption keys. Server response: %1 %2. Please try again later. + + + + + + Please try to login again: %1 + + + + + You failed to join %1. You can try to knock so that others can invite you in. Do you want to do so? +You may optionally provide a reason for others to accept your knock: + + + + + Failed to join room: %1 + + + + + Failed to remove invite: %1 + + + + + Room creation failed: %1 + + + + + Failed to leave room: %1 + + + + + Reason for the kick + + + + + Enter reason for kicking %1 (%2) or hit enter for no reason: + + + + + Failed to kick %1 from %2: %3 + + + + + Reason for the ban + + + + + Enter reason for banning %1 (%2) or hit enter for no reason: + + + + + No network connection + + + + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + + + CommunitiesList + + + Do not show notification counts for this community or tag. + + + + + Hide rooms with this tag or from this community by default. + + + + + Expand + + + + + Collapse + + + + + CommunitiesModel + + + All rooms + + + + + Shows all rooms without filtering. + + + + + Direct Chats + + + + + Show direct chats. + + + + + Favourites + + + + + Rooms you have favourited. + + + + + Low Priority + + + + + Rooms with low priority. + + + + + Server Notices + + + + + Messages from your server or administrator. + + + + + Failed to update community: %1 + + + + + Failed to delete room from community: %1 + + + + + Failed to update community for room: %1 + + + + + Failed to remove community from room: %1 + + + + + ConfirmJoinRoomDialog + + + Confirm community join + + + + + Confirm room join + + + + + %n member(s) + + + + + + + + + Do you want to join this room? You can optionally add a reason below: + + + + + This room can't be joined directly. You can, however, knock on the room and room members can accept or decline this join request. You can additionally provide a reason for them to let you in below: + + + + + Knock + + + + + Join + + + + + CreateDirect + + + Create Direct Chat + + + + + User to invite + + + + + @user:server.tld + + + + + Encryption + + + + + CreateRoom + + + Create Room + + + + + Name + + + + + New community + + + + + New Room + + + + + No name + + + + + Topic + + + + + No topic + + + + + Alias + + + + + Public + + + + + Public rooms can be joined by anyone; private rooms need explicit invites. + + + + + Trusted + + + + + All invitees are given the same power level as the creator + + + + + Encryption + + + + + Caution: Encryption cannot be disabled + + + + + CrossSigningSecrets + + + Decrypt secrets + + + + + Enter your recovery key or passphrase to decrypt your secrets: + + + + + Enter your recovery key or passphrase called %1 to decrypt your secrets: + + + + + Decryption failed + + + + + Failed to decrypt secrets with the provided recovery key or passphrase + + + + + DigitVerification + + + Verification Code + + + + + Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification! + + + + + They do not match! + + + + + They match! + + + + + EmojiPicker + + + Search + + + + + People + + + + + Nature + + + + + Food + + + + + Activity + + + + + Travel + + + + + Objects + + + + + Symbols + + + + + Flags + + + + + EmojiVerification + + + Verification Code + + + + + Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification! + + + + + The displayed emoji might look different in different clients if a different font is used. Similarly they might be translated into different languages. Nonetheless they should depict one of 64 different objects or animals. For example a lion and a cat are different, but a cat is the same even if one client just shows a cat face, while another client shows a full cat body. + + + + + They do not match! + + + + + They match! + + + + + Encrypted + + + There is no key to unlock this message. We requested the key automatically, but you can try requesting it again if you are impatient. + + + + + This message couldn't be decrypted, because we only have a key for newer messages. You can try requesting access to this message. + + + + + There was an internal error reading the decryption key from the database. + + + + + There was an error decrypting this message. + + + + + The message couldn't be parsed. + + + + + The encryption key was reused! Someone is possibly trying to insert false messages into this chat! + + + + + Unknown decryption error + + + + + Request key + + + + + EncryptionIndicator + + + This message is not encrypted! + + + + + Encrypted by a verified device + + + + + Encrypted by an unverified device, but you have trusted that user so far. + + + + + Encrypted by an unverified device or the key is from an untrusted source like the key backup. + + + + + Failed + + + Verification failed + + + + + Other client does not support our verification protocol. + + + + + Key mismatch detected! + + + + + Device verification timed out. + + + + + Other party canceled the verification. + + + + + Verification messages received out of order! + + + + + Unknown verification error. + + + + + Close + + + + + ForwardCompleter + + + Forward Message + + + + + HiddenEvents + + + + Failed to set hidden events: %1 + + + + + HiddenEventsDialog + + + Hidden events for %1 + + + + + Hidden events + + + + + These events will be <b>shown</b> in %1: + + + + + These events will be <b>shown</b> in all rooms: + + + + + User events + + + + + Joins, leaves, avatar and name changes, bans, … + + + + + Power level changes + + + + + Sent when a moderator is added/removed or the permissions of a room are changed. + + + + + Stickers + + + + + ImagePackEditorDialog + + + Editing image pack + + + + + Add images + + + + + Images (*.png *.webp *.gif *.jpg *.jpeg) + + + + + Select images for pack + + + + + Add to pack + + + + + Change the overview image for this pack + + + + + Overview Image (*.png *.webp *.jpg *.jpeg) + + + + + Select overview image for pack + + + + + State key + + + + + Packname + + + + + Attribution + + + + + + Use as Emoji + + + + + + Use as Sticker + + + + + Shortcode + + + + + Body + + + + + Remove from pack + + + + + Remove + + + + + ImagePackSettingsDialog + + + Image pack settings + + + + + Create account pack + + + + + New room pack + + + + + Private pack + + + + + Pack from this room + + + + + Pack from parent community + + + + + Globally enabled pack + + + + + Enable globally + + + + + Enables this pack to be used in all rooms + + + + + Edit + + + + + Close + + + + + InputBar + + + Select a file + + + + + All Files (*) + + + + + Upload of '%1' failed + + + + + InviteDialog + + + Invite users to %1 + + + + + User ID to invite + + + + + @joe:matrix.org + Example user id. The name 'joe' can be localized however you want. + + + + + Add + + + + + Invite + + + + + Cancel + + + + + JoinRoomDialog + + + Join room + + + + + Room ID or alias + + + + + Join + + + + + LeaveRoomDialog + + + Leave room + + + + + Are you sure you want to leave? + + + + + LoginPage + + + Matrix ID + + + + + e.g @joe:matrix.org + + + + + Your login name. A mxid should start with @ followed by the user ID. After the user ID you need to include your server name after a :. +You can also put your homeserver address there if your server doesn't support .well-known lookup. +Example: @user:server.my +If Nheko fails to discover your homeserver, it will show you a field to enter the server manually. + + + + + Password + + + + + Your password. + + + + + Device name + + + + + A name for this device which will be shown to others when verifying your devices. If nothing is provided, a default is used. + + + + + The address that can be used to contact you homeserver's client API. +Example: https://server.my:8787 + + + + + Homeserver address + + + + + server.my:8787 + + + + + LOGIN + + + + + Back + + + + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + + Autodiscovery failed. Received malformed response. + + + + + Autodiscovery failed. Unknown error when requesting .well-known. + + + + + The required endpoints were not found. Possibly not a Matrix server. + + + + + Received malformed response. Make sure the homeserver domain is valid. + + + + + An unknown error occured. Make sure the homeserver domain is valid. + + + + + The selected server does not support a version of the Matrix protocol, that this client understands (v1.1 to v1.4). You can't sign in. + + + + + Sign in with Apple + + + + + Continue with Facebook + + + + + Sign in with Google + + + + + Sign in with Twitter + + + + + Login using %1 + + + + + SSO LOGIN + + + + + Empty password + + + + + SSO login failed + + + + + LogoutDialog + + + Log out + + + + + A call is in progress. Log out? + + + + + Are you sure you want to log out? + + + + + MediaUpload + + + + Failed to upload media. Please try again. + + + + + MessageDelegate + + + %1 removed a message + + + + + %1 enabled encryption + + + + + %2 changed the room name to: %1 + + + + + %1 removed the room name + + + + + %2 changed the topic to: %1 + + + + + %1 removed the topic + + + + + %1 changed the room avatar + + + + + %1 changed the pinned messages. + + + + + %1 changed the addresses for this room. + + + + + %1 created and configured room: %2 + + + + + %1 placed a voice call. + + + + + %1 placed a video call. + + + + + %1 placed a call. + + + + + %1 rejected the call. + + + + + %1 select answer + + + + + + %1 is negotiating the call... + + + + + Allow them in + + + + + %1 answered the call. + + + + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + + %1 changed the parent communities for this room. + + + + + %1 ended the call. + + + + + MessageInput + + + Hang up + + + + + Place a call + + + + + Already on a call + + + + + Send a file + + + + + Write a message... + + + + + Stickers + + + + + Emoji + + + + + Send + + + + + You don't have permission to send messages in this room + + + + + MessageView + + + Edit + + + + + React + + + + + Reply in thread + + + + + New thread + + + + + Reply + + + + + Options + + + + + Reason for removal + + + + + Enter reason for removal or hit enter for no reason: + + + + + + &Copy + + + + + + Copy &link location + + + + + Re&act + + + + + Repl&y + + + + + &Edit + + + + + &Thread + + + + + Un&pin + + + + + &Pin + + + + + &Read receipts + + + + + &Forward + + + + + &Mark as read + + + + + View raw message + + + + + View decrypted raw message + + + + + Remo&ve message + + + + + &Save as + + + + + &Open in external program + + + + + Copy link to eve&nt + + + + + &Go to quoted message + + + + + NewVerificationRequest + + + Send Verification Request + + + + + Received Verification Request + + + + + To allow other users to see which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify an unverified device now? (Please make sure you have one of those devices available.) + + + + + To allow other users to see which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify %1 now? + + + + + To ensure that no malicious user can eavesdrop on your encrypted communications you can verify the other party. + + + + + %1 has requested to verify their device %2. + + + + + %1 using the device %2 has requested to be verified. + + + + + Your device (%1) has requested to be verified. + + + + + Cancel + + + + + Deny + + + + + Start verification + + + + + Accept + + + + + NotificationWarning + + + You are about to notify the whole room + + + + + NotificationsManager + + + + %1 sent an encrypted message + + + + + %1 replied: %2 + Format a reply in a notification. %1 is the sender, %2 the message + + + + + %1 replied with an encrypted message + + + + + %1 replied to a message + + + + + %1 sent a message + + + + + PlaceCall + + + Place a call to %1? + + + + + No microphone found. + + + + + Voice + + + + + Video + + + + + Screen + + + + + Cancel + + + + + Placeholder + + + unimplemented event: + + + + + PowerLevelEditor + + + Permissions in %1 + + + + + Be careful when editing permissions. You can't lower the permissions of people with a same or higher level than you. Be careful when promoting others. + + + + + Roles + + + + + Users + + + + + Move permissions between roles to change them + + + + + + Administrator (%1) + + + + + + Moderator (%1) + + + + + User (%1) + + + + + + Custom (%1) + + + + + Remove event type + + + + + Add event type + + + + + Add new role + + + + + Add + + + + + Move users up or down to change their permissions + + + + + Remove user + + + + + Add user + + + + + PowerLevelSpacesApplyDialog + + + Apply permission changes + + + + + Which of the subcommunities and rooms should these permissions be applied to? + + + + + Apply permissions recursively + + + + + Overwrite exisiting modifications in rooms + + + + + No permissions to apply the new permissions here + + + + + No changes needed + + + + + Existing modifications to the permissions in this room will be overwritten + + + + + Permissions synchronized with community + + + + + PowerLevels + + + Failed to update powerlevel: %1 + + + + + PowerlevelEditingModels + + + Failed to update powerlevel: %1 + + + + + PowerlevelsTypeListModel + + + Other events + + + + + Other state events + + + + + Remove other users + + + + + Ban other users + + + + + Invite other users + + + + + Redact events sent by others + + + + + Reactions + + + + + Deprecated aliases events + + + + + Change the room avatar + + + + + Change the room addresses + + + + + Send encrypted messages + + + + + Enable encryption + + + + + Change guest access + + + + + Change history visibility + + + + + Change who can join + + + + + Send messages + + + + + Change the room name + + + + + Change the room permissions + + + + + Change the rooms topic + + + + + Change the widgets + + + + + Change the widgets (experimental) + + + + + Redact own events + + + + + Change the pinned events + + + + + Upgrade the room + + + + + Send stickers + + + + + Ban users using policy rules + + + + + Ban rooms using policy rules + + + + + Ban servers using policy rules + + + + + Edit child communities and rooms + + + + + Change parent communities + + + + + Start a call + + + + + Negotiate a call + + + + + Answer a call + + + + + Hang up a call + + + + + Reject a call + + + + + Change the room emotes + + + + + PowerlevelsUserListModel + + + Other users + + + + + QCoreApplication + + + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. + + + + + profile + + + + + profile name + + + + + QObject + + + Alias for '--log-level trace'. + + + + + Set the global log level, or a comma-separated list of <component>=<level> pairs, or both. For example, to set the default log level to 'warn' but disable logging for the 'ui' component, pass 'warn,ui=off'. levels:{trace,debug,info,warning,error,critical,off} components:{crypto,db,mtx,net,qml,ui} + + + + + level + + + + + Set the log output type. A comma-separated list is allowed. The default is 'file,stderr'. types:{file,stderr,none} + + + + + type + + + + + Respond + + + + + Send + + + + + Write a message... + + + + + ReadReceipts + + + Read receipts + + + + + ReadReceiptsModel + + + Yesterday, %1 + + + + + RegisterPage + + + Username + + + + + The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /. + + + + + + Back + + + + + Password + + + + + Please choose a secure password. The exact requirements for password strength may depend on your server. + + + + + Password confirmation + + + + + A name for this device which will be shown to others when verifying your devices. If nothing is provided a default is used. + + + + + Homeserver + + + + + your.server + + + + + A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own. + + + + + Your passwords do not match! + + + + + Device name + + + + + REGISTER + + + + + Autodiscovery failed. Received malformed response. + + + + + Autodiscovery failed. Unknown error when requesting .well-known. + + + + + The required endpoints were not found. Possibly not a Matrix server. + + + + + Received malformed response. Make sure the homeserver domain is valid. + + + + + An unknown error occured. Make sure the homeserver domain is valid. + + + + + The selected server does not support a version of the Matrix protocol that this client understands (v1.1 to v1.4). You can't register. + + + + + Server does not support querying registration flows! + + + + + Server does not support registration. + + + + + Invalid username. + + + + + Name already in use. + + + + + Part of the reserved namespace. + + + + + ReplyPopup + + + Close + + + + + Cancel Edit + + + + + Cancel Thread + + + + + RoomDirectory + + + Explore Public Rooms + + + + + Search for public rooms + + + + + Choose custom homeserver + + + + + RoomInfo + + + no version stored + + + + + RoomList + + + New tag + + + + + Enter the tag you want to use: + + + + + Open separately + + + + + Room settings + + + + + Leave room + + + + + Copy room link + + + + + Tag room as: + + + + + Favourite + + + + + Low priority + + + + + Server notice + + + + + Create new tag... + + + + + Add or remove from community... + + + + + Status Message + + + + + Enter your status message: + + + + + Profile settings + + + + + Set status message + + + + + Logout + + + + + Encryption not set up + Cross-signing setup has not run yet. + + + + + Unverified login + The user just signed in with this device and hasn't verified their master key. + + + + + Please verify your other devices + There are unverified devices signed in to this account. + + + + + Close + + + + + Start a new chat + + + + + Join a room + + + + + Create a new room + + + + + Start a direct chat + + + + + Create a new community + + + + + Room directory + + + + + Search rooms (Ctrl+K) + + + + + User settings + + + + + RoomMembers + + + Members of %1 + + + + + %n people in %1 + Summary above list of members + + + + + + + + + Invite more people + + + + + Search... + + + + + Sort by: + + + + + User ID + + + + + Display name + + + + + Power level + + + + + Administrator: %1 + + + + + Moderator: %1 + + + + + User: %1 + + + + + This room is not encrypted! + + + + + This user is verified. + + + + + This user isn't verified, but is still using the same master key from the first time you met. + + + + + This user has unverified devices! + + + + + RoomSettings + + + Room Settings + + + + + Change room avatar. + + + + + Change name of this room + + + + + %n member(s) + + + + + + + + + View members of %1 + + + + + No topic set + + + + + Change topic of this room + + + + + SETTINGS + + + + + Notifications + + + + + Muted + + + + + Mentions only + + + + + All messages + + + + + Encryption + + + + + End-to-End Encryption + + + + + Encryption is currently experimental and things might break unexpectedly. <br> + Please take note that it can't be disabled afterwards. + + + + + Permission + + + + + View and change the permissions in this room + + + + + View and change the addresses/aliases of this room + + + + + Sticker & Emote Settings + + + + + + Change + + + + + Hidden events + + + + + + + Configure + + + + + Anyone can join + + + + + Allow knocking + + + + + Allow joining via other rooms + + + + + Rooms to join via + + + + + Change the list of rooms users can join this room via. Usually this is the official community of this room. + + + + + Allow guests to join + + + + + Apply access rules + + + + + Aliases + + + + + Change what packs are enabled, remove packs, or create new ones + + + + + Select events to hide in this room + + + + + INFO + + + + + Internal ID + + + + + Copied to clipboard + + + + + Room Version + + + + + show less + + + + + show more + + + + + Failed to enable encryption: %1 + + + + + Select an avatar + + + + + All Files (*) + + + + + The selected file is not an image + + + + + Error while reading file: %1 + + + + + + Failed to upload image: %s + + + + + RoomlistModel + + + Pending invite. + + + + + Previewing this room + + + + + No preview available + + + + + Root + + + Please enter your login password to continue: + + + + + Please enter a valid email address to continue: + + + + + Please enter a valid phone number to continue: + + + + + Please enter the token which has been sent to you: + + + + + Wait for the confirmation link to arrive, then continue. + + + + + ScreenShare + + + Share desktop with %1? + + + + + Window: + + + + + Frame rate: + + + + + Include your camera picture-in-picture + + + + + Request remote camera + + + + + + View your callee's camera like a regular video call + + + + + Hide mouse cursor + + + + + Share + + + + + Preview + + + + + Cancel + + + + + SecretStorage + + + Failed to connect to secret storage + + + + + Nheko could not connect to the secure storage to save encryption secrets to. This can have multiple reasons. Check if your D-Bus service is running and you have configured a service like KWallet, Gnome Keyring, KeePassXC or the equivalent for your platform. If you are having trouble, feel free to open an issue here: https://github.com/Nheko-Reborn/nheko/issues + + + + + SelfVerificationCheck + + + This is your recovery key. You will need it to restore access to your encrypted messages and verification keys. Keep this safe. Don't share it with anyone and don't lose it! Do not pass go! Do not collect $200! + + + + + Encryption setup successfully + + + + + Failed to setup encryption: %1 + + + + + Setup Encryption + + + + + Hello and welcome to Matrix! +It seems like you are new. Before you can securely encrypt your messages, we need to setup a few small things. You can either press accept immediately or adjust a few basic options. We also try to explain a few of the basics. You can skip those parts, but they might prove to be helpful! + + + + + Activate Encryption + + + + + It seems like you have encryption already configured for this account. To be able to access your encrypted messages and make this device appear as trusted, you can either verify an existing device or (if you have one) enter your recovery passphrase. Please select one of the options below. +If you choose verify, you need to have the other device available. If you choose "enter passphrase", you will need your recovery key or passphrase. If you click cancel, you can choose to verify yourself at a later point. + + + + + verify + + + + + enter passphrase + + + + + SelfVerificationStatus + + + Failed to create keys for cross-signing! + + + + + Failed to create keys for online key backup! + + + + + Failed to create keys for secure server side secret storage! + + + + + Encryption Setup + + + + + Encryption setup failed: %1 + + + + + Identity key changed. This breaks E2EE, so logging out. + + + + + SingleImagePackModel + + + + Failed to update image pack: %1 + + + + + Failed to delete old image pack: %1 + + + + + + Failed to open image: %1 + + + + + + Failed to upload image: %1 + + + + + SpaceMenuLevel + + + Add or remove from community + + + + + Official community for this room + + + + + Affiliated community for this room + + + + + Listed only for community members + + + + + Listed only for room members + + + + + Not related + + + + + Subcommunities + + + + + StatusIndicator + + + Failed + + + + + Sent + + + + + Received + + + + + Read + + + + + StickerPicker + + + Search + + + + + Success + + + Successful Verification + + + + + Verification successful! Both sides verified their devices! + + + + + Close + + + + + TimelineModel + + + + Message redaction failed: %1 + + + + + + Failed to encrypt event, sending aborted! + + + + + Save image + + + + + Save video + + + + + Save audio + + + + + Save file + + + + + %1 and %2 are typing. + Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) + + + + + + + + + %1 opened the room to the public. + + + + + %1 allowed to join this room by knocking. + + + + + %1 allowed members of the following rooms to automatically join this room: %2 + + + + + %1 made the room open to guests. + + + + + %1 has closed the room to guest access. + + + + + %1 made the room history world readable. Events may be now read by non-joined people. + + + + + %1 set the room history visible to members from this point on. + + + + + %1 set the room history visible to members since they were invited. + + + + + %1 set the room history visible to members since they joined the room. + + + + + + %1 has changed the room's permissions. + + + + + %1 has changed the room's kick powerlevel from %2 to %3. + + + + + %n member(s) can now kick room members. + + + + + + + + + %1 can now kick room members. + + + + + %1 has changed the room's redact powerlevel from %2 to %3. + + + + + %n member(s) can now redact room messages. + + + + + + + + + %1 can now redact room messages. + + + + + %1 has changed the room's ban powerlevel from %2 to %3. + + + + + %n member(s) can now ban room members. + + + + + + + + + %1 can now ban room members. + + + + + %1 has changed the room's state_default powerlevel from %2 to %3. + + + + + %n member(s) can now send state events. + + + + + + + + + %1 can now send state events. + + + + + %1 has changed the room's invite powerlevel from %2 to %3. + + + + + %1 has changed the room's events_default powerlevel from %2 to %3. New users can now not send any events. + + + + + %1 has changed the room's events_default powerlevel from %2 to %3. New users can now send events that are not otherwise restricted. + + + + + %1 has changed the room's events_default powerlevel from %2 to %3. + + + + + %1 has made %2 an administrator of this room. + + + + + %1 has made %2 a moderator of this room. + + + + + %1 has downgraded %2 to moderator of this room. + + + + + %1 has changed the powerlevel of %2 from %3 to %4. + + + + + %1 allowed only administrators to send "%2". + + + + + %1 allowed only moderators to send "%2". + + + + + %1 allowed everyone to send "%2". + + + + + %1 has changed the powerlevel of event type "%2" from the default to %3. + + + + + %1 has changed the powerlevel of event type "%2" from %3 to %4. + + + + + (empty) + + + + + %1 removed the following images from the pack %2:<br>%3 + + + + + %1 added the following images to the pack %2:<br>%3 + + + + + %1 changed the sticker and emotes in this room. + + + + + %1 disabled the rule to ban users matching %2. + + + + + %1 added a rule to ban users matching %2 for '%3'. + + + + + %1 disabled the rule to ban rooms matching %2. + + + + + %1 added a rule to ban rooms matching %2 for '%3'. + + + + + %1 disabled the rule to ban servers matching %2. + + + + + %1 added a rule to ban servers matching %2 for '%3'. + + + + + Removed by %1 + + + + + %1 (%2) removed this message at %3 + + + + + Removed by %1 because: %2 + + + + + %1 (%2) removed this message at %3 +Reason: %4 + + + + + %2 revoked the invite to %1. + + + + + %2 kicked %1. + + + + + %2 unbanned %1. + + + + + %2 rejected the knock from %1. + + + + + %1 changed their avatar. + + + + + %1 changed some profile info. + + + + + %1 joined. + + + + + %1 joined via authorisation from %2's server. + + + + + %1 rejected their invite. + + + + + %1 left the room. + + + + + Reason: %1 + + + + + %1 redacted their knock. + + + + + You joined this room. + + + + + %1 made this room require an invitation to join. + + + + + %1 invited %2. + + + + + %1 has changed their avatar and changed their display name to %2. + + + + + %1 has changed their display name to %2. + + + + + %1 left after having already left! + This is a leave event after the user already left and shouldn't happen apart from state resets + + + + + %1 banned %2 + + + + + %1 knocked. + + + + + TimelineRow + + + Edited + + + + + Part of a thread + + + + + TimelineView + + + No room open + + + + + No preview available + + + + + Settings + + + + + %n member(s) + + + + + + + + + View members of %1 + + + + + join the conversation + + + + + accept invite + + + + + decline invite + + + + + Hide invite reason + + + + + Show invite reason + + + + + Back to room list + + + + + TopBar + + + Back to room list + + + + + No room selected + + + + + In %1 + + + + + Show room members. + + + + + This room contains only verified devices. + + + + + This room contains verified devices and devices which have never changed their master key. + + + + + This room contains unverified devices! + + + + + Show or hide pinned messages + + + + + Search this room + + + + + Room options + + + + + Invite users + + + + + Members + + + + + Leave room + + + + + Settings + + + + + Unpin + + + + + Enter search query + + + + + TrayIcon + + + Show + + + + + Quit + + + + + UIA + + + No available registration flows! + + + + + + + Registration aborted + + + + + Please enter a valid registration token. + + + + + Invalid token + + + + + UploadBox + + + Upload %n file(s) + + + + + + + + + UserProfile + + + Global User Profile + + + + + Room User Profile + + + + + Change avatar globally. + + + + + Change avatar. Will only apply to this room. + + + + + Change display name globally. + + + + + Change display name. Will only apply to this room. + + + + + Room: %1 + + + + + This is a room-specific profile. The user's name and avatar may be different from their global versions. + + + + + Open the global profile for this user. + + + + + + Verify + + + + + Start a private chat. + + + + + Kick the user. + + + + + Ban the user. + + + + + Refresh device list. + + + + + Sign out this device. + + + + + Change device name. + + + + + Last seen %1 from %2 + + + + + Unverify + + + + + Sign out device %1 + + + + + You signed out this device. + + + + + Select an avatar + + + + + All Files (*) + + + + + The selected file is not an image + + + + + Error while reading file: %1 + + + + + UserSettings + + + + Default + + + + + UserSettingsModel + + + Theme + + + + + Scale factor + + + + + Highlight message on hover + + + + + Large Emoji in timeline + + + + + Minimize to tray + + + + + Start in tray + + + + + Send messages as Markdown + + + + + Use shift+enter to send and enter to start a new line + + + + + Enable message bubbles + + + + + Enable small Avatars + + + + + Play animated images only on hover + + + + + Typing notifications + + + + + Sort rooms by unreads + + + + + Show buttons in timeline + + + + + Limit width of timeline + + + + + Read receipts + + + + + Desktop notifications + + + + + Alert on notification + + + + + Circular Avatars + + + + + Use identicons + + + + + Open images with external program + + + + + Open videos with external program + + + + + Decrypt messages in sidebar + + + + + Decrypt notifications + + + + + Display fancy effects such as confetti + + + + + Privacy Screen + + + + + Privacy screen timeout (in seconds [0 - 3600]) + + + + + Touchscreen mode + + + + + Font size + + + + + Font Family + + + + + Emoji Font Family + + + + + Ringtone + + + + + Microphone + + + + + Camera + + + + + Camera resolution + + + + + Camera frame rate + + + + + Allow fallback call assist server + + + + + Send encrypted messages to verified users only + + + + + Share keys with verified users and devices + + + + + Online Key Backup + + + + + Profile + + + + + User ID + + + + + Accesstoken + + + + + Device ID + + + + + Device Fingerprint + + + + + Homeserver + + + + + Version + + + + + Platform + + + + + GENERAL + + + + + TIMELINE + + + + + SIDEBAR + + + + + TRAY + + + + + NOTIFICATIONS + + + + + CALLS + + + + + ENCRYPTION + + + + + INFO + + + + + Session Keys + + + + + Cross Signing Secrets + + + + + Online backup key + + + + + Self signing key + + + + + User signing key + + + + + Master signing key + + + + + Expose room information via D-Bus + + + + + Default + + + + + Set the notification sound to play when a call invite arrives + + + + + Set timeout (in seconds) for how long after window loses +focus before the screen will be blurred. +Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds) + + + + + Change the background color of messages when you hover over them. + + + + + Make font size larger if messages with only a few emojis are displayed. + + + + + Keep the application running in the background after closing the client window. + + + + + Start the application in the background without showing the client window. + + + + + Allow using markdown in messages. +When disabled, all messages are sent as a plain text. + + + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + + + + Messages get a bubble background. This also triggers some layout changes (WIP). + + + + + Avatars are resized to fit above the message. + + + + + Plays media like GIFs or WEBPs only when explicitly hovering over them. + + + + + Show who is typing in a room. +This will also enable or disable sending typing notifications to others. + + + + + Show buttons to quickly reply, react or access additional options next to each message. + + + + + Notify about received messages when the client is not currently focused. + + + + + Change the appearance of user avatars in chats. +OFF - square, ON - circle. + + + + + Decrypt messages shown in notifications for encrypted chats. + + + + + Choose where to show the total number of notifications contained within a community or tag. + + + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + + + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. + + + + + The key to verify your own devices. If it is cached, verifying one of your devices will mark it verified for all your other devices and for users that have verified you. + + + + + Show an alert when a message is received. +This usually causes the application icon in the task bar to animate in some fashion. + + + + + Communities sidebar + + + + + Show message counts for communities and tags + + + + + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized + + + + + Show a column containing communities and tags next to the room list. + + + + + Display rooms with new messages first. +If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. +If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. + + + + + Show if your message was read. +Status is displayed next to timestamps. +Warning: If your homeserver does not support this, your rooms will never be marked as read! + + + + + Display an identicon instead of a letter when no avatar is set. + + + + + Opens images with an external program when tapping the image. +Note that when this option is ON, opened files are left unencrypted on disk and must be manually deleted. + + + + + Opens videos with an external program when tapping the video. +Note that when this option is ON, opened files are left unencrypted on disk and must be manually deleted. + + + + + Decrypt the messages shown in the sidebar. +Only affects messages in encrypted chats. + + + + + When the window loses focus, the timeline will +be blurred. + + + + + Will prevent text selection in the timeline to make touch scrolling easier. + + + + + Change the scale factor of the whole user interface. + + + + + Will use turn.matrix.org as assist when your home server does not offer one. + + + + + Requires a user to be verified to send encrypted messages to them. This improves safety but makes E2EE more tedious. + + + + + Download message encryption keys from and upload to the encrypted online key backup. + + + + + The key to decrypt online key backups. If it is cached, you can enable online key backup to store encryption keys securely encrypted on the server. + + + + + The key to verify other users. If it is cached, verifying a user will verify all their devices. + + + + + Your most important key. You don't need to have it cached, since not caching it makes it less likely it can be stolen and it is only needed to rotate your other signing keys. + + + + + Allow third-party plugins and applications to load information about rooms you are in via D-Bus. This can have useful applications, but it also could be used for nefarious purposes. Enable at your own risk. + +This setting will take effect upon restart. + + + + + Select a file + + + + + All Files (*) + + + + + Open Sessions File + + + + + + + + + + Error + + + + + + File Password + + + + + Enter the passphrase to decrypt the file: + + + + + + The password cannot be empty + + + + + Enter passphrase to encrypt your session keys: + + + + + File to save the exported session keys + + + + + UserSettingsPage + + + REQUEST + + + + + DOWNLOAD + + + + + CACHED + + + + + NOT CACHED + + + + + Back + + + + + IMPORT + + + + + EXPORT + + + + + VerificationManager + + + No encrypted private chat found with this user. Create an encrypted private chat with this user and try again. + + + + + Waiting + + + Waiting for other party… + + + + + Waiting for other side to accept the verification request. + + + + + Waiting for other side to continue the verification process. + + + + + Waiting for other side to complete the verification process. + + + + + Cancel + + + + + WelcomePage + + + Welcome to nheko! The desktop client for the Matrix protocol. + + + + + Enjoy your stay! + + + + + REGISTER + + + + + LOGIN + + + + + descriptiveTime + + + Yesterday + + + + + dialogs::FallbackAuth + + + Open Fallback in Browser + + + + + Cancel + + + + + Confirm + + + + + Open the fallback, follow the steps, and confirm after completing them. + + + + + dialogs::ReCaptcha + + + Open reCAPTCHA + + + + + Cancel + + + + + Confirm + + + + + Solve the reCAPTCHA and press the confirm button + + + + + message-description sent: + + + You sent an audio clip + + + + + %1 sent an audio clip + + + + + You sent an image + + + + + %1 sent an image + + + + + You sent a file + + + + + %1 sent a file + + + + + You sent a video + + + + + %1 sent a video + + + + + You sent a sticker + + + + + %1 sent a sticker + + + + + You sent a notification + + + + + %1 sent a notification + + + + + + You: %1 + + + + + + %1: %2 + + + + + You sent some confetti + + + + + %1 sent some confetti + + + + + You sent an encrypted message + + + + + %1 sent an encrypted message + + + + + You placed a call + + + + + %1 placed a call + + + + + You answered a call + + + + + %1 answered a call + + + + + You ended a call + + + + + %1 ended a call + + + + + You rejected a call + + + + + %1 rejected a call + + + + + utils + + + Unknown Message Type + + + + diff --git a/resources/langs/nheko_vi.ts b/resources/langs/nheko_vi.ts index a0cc6b59..efa4d060 100644 --- a/resources/langs/nheko_vi.ts +++ b/resources/langs/nheko_vi.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -207,7 +207,7 @@ CallManager - + Entire screen @@ -221,22 +221,27 @@ - + Invited user: %1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -262,12 +267,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -312,17 +317,24 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -332,7 +344,7 @@ - + Failed to restore OLM account. Please login again. @@ -344,13 +356,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -411,6 +423,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -457,7 +768,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -646,7 +957,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -890,7 +1201,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1105,7 +1416,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1165,7 +1476,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1244,7 +1555,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1350,7 +1661,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1415,27 +1726,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1453,7 +1785,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1463,7 +1800,7 @@ Example: https://server.my:8787 - + Stickers @@ -1486,7 +1823,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1516,7 +1853,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1692,8 +2029,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1709,7 +2046,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1892,7 +2229,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1908,7 +2245,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2077,6 +2414,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2094,7 +2436,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2136,6 +2478,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2148,7 +2505,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2222,7 +2579,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2316,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2340,6 +2697,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2747,7 +3109,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2881,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2977,7 +3339,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3090,19 +3452,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3122,7 +3484,7 @@ If you choose verify, you need to have the other device available. If you choose - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3385,7 +3747,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3445,17 +3807,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3489,7 +3851,7 @@ Reason: %4 TimelineRow - + Edited @@ -3502,12 +3864,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3544,7 +3906,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list @@ -3552,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3587,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3621,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3663,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3797,8 +4179,8 @@ Reason: %4 UserSettings - - + + Default @@ -3806,7 +4188,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3840,6 +4222,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3915,8 +4302,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4106,7 +4503,7 @@ Reason: %4 - + Default @@ -4148,6 +4545,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4187,9 +4589,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4201,23 +4613,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4227,7 +4639,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4264,7 +4676,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4317,7 +4729,7 @@ This setting will take effect upon restart. - + Select a file @@ -4469,7 +4881,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4523,7 +4935,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4584,16 +4996,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4632,6 +5056,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index 6ac2b84e..c7e1b205 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -89,12 +89,12 @@ 移除此别名 - + #new-alias:server.tld #new-alias:server.tld - + Add 添加 @@ -119,7 +119,7 @@ Other room - + 其他房间 @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 和另外 %n 人 @@ -207,7 +207,7 @@ CallManager - + Entire screen 整个屏幕 @@ -221,22 +221,27 @@ - + Invited user: %1 邀请已发送:%1 - + + Confirm logout + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. 当前设备中的缓存比Nheko支持的版本更新,请更新Nheko或清理缓存。 - + Failed to open database, logging out! 无法打开数据库,账户将登出! - + Knock on room 请求加入聊天室 @@ -262,12 +267,12 @@ - + Confirm invite 确认邀请 - + Do you really want to invite %1 (%2)? 你真的想要邀请 %1 (%2) 吗? @@ -312,17 +317,24 @@ 解封用户:%1 - + Do you really want to start a private chat with %1? 是否确认与 %1 开始私密聊天? - + Cache migration failed! 缓存迁移失败! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. @@ -332,7 +344,7 @@ 无法兼容缓存版本 - + Failed to restore OLM account. Please login again. 恢复 OLM 账户失败。请重新登录。 @@ -344,13 +356,13 @@ 恢复保存的数据失败。请重新登录。 - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. 未能设置加密密钥。服务器响应:%1 %2。请稍后再试。 - + Please try to login again: %1 请尝试再次登录:%1 @@ -411,6 +423,305 @@ You may optionally provide a reason for others to accept your knock: 网络未连接 + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -421,7 +732,7 @@ You may optionally provide a reason for others to accept your knock: Hide rooms with this tag or from this community by default. - + 默认隐藏带有此标签或来自此社区的房间。 @@ -457,7 +768,7 @@ You may optionally provide a reason for others to accept your knock: 显示直接聊天。 - + Favourites 收藏 @@ -489,12 +800,12 @@ You may optionally provide a reason for others to accept your knock: Failed to update community: %1 - + 无法更新社区: %1 Failed to delete room from community: %1 - + 无法从社区中删除房间: %1 @@ -512,18 +823,18 @@ You may optionally provide a reason for others to accept your knock: Confirm community join - + 确认加入社区 Confirm room join - + 确认加入房间 %n member(s) - - %n 个成员 + + %n 名成员 @@ -534,7 +845,7 @@ You may optionally provide a reason for others to accept your knock: This room can't be joined directly. You can, however, knock on the room and room members can accept or decline this join request. You can additionally provide a reason for them to let you in below: - + 无法直接加入此房间。但是,您可以敲门,房间成员可以接受或拒绝此加入请求。您还可以在下面提供他们让您进入的理由: @@ -544,7 +855,7 @@ You may optionally provide a reason for others to accept your knock: Join - + 加入 @@ -585,12 +896,12 @@ You may optionally provide a reason for others to accept your knock: New community - + 新社区 New Room - + 新房间 @@ -620,7 +931,7 @@ You may optionally provide a reason for others to accept your knock: Public rooms can be joined by anyone; private rooms need explicit invites. - + 任何人都可以加入公共房间;私人房间需要明确的邀请。 @@ -646,7 +957,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets 解密密钥 @@ -890,7 +1201,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 未能设置隐藏事件:%1 @@ -1105,7 +1416,7 @@ You may optionally provide a reason for others to accept your knock: 所有文件 (*) - + Upload of '%1' failed 上传 “%1” 失败 @@ -1159,13 +1470,13 @@ You may optionally provide a reason for others to accept your knock: Join - + 加入 LeaveRoomDialog - + Leave room 离开聊天室 @@ -1213,13 +1524,14 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th A name for this device which will be shown to others when verifying your devices. If nothing is provided, a default is used. - + 此设备的名称,将在验证您的设备时向其他人显示。如果未提供任何内容,则使用默认值。 The address that can be used to contact you homeserver's client API. Example: https://server.my:8787 - + 可联系到您的主服务器客户端 API 的地址。 +示例:https://server.my:8787 @@ -1244,7 +1556,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org 你输入了无效的Matrix ID 例如 @joe:matrix.org @@ -1277,7 +1589,7 @@ Example: https://server.my:8787 The selected server does not support a version of the Matrix protocol, that this client understands (v1.1 to v1.4). You can't sign in. - + 所选服务器不支持此客户端兼容的 Matrix 协议版本(v1.1 到 v1.4)。您无法登录。 @@ -1350,7 +1662,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 移除了一条消息 @@ -1424,18 +1746,29 @@ Example: https://server.my:8787 %1 answered the call. %1 接听了通话。 + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 已结束通话。 + %1 is negotiating the call... %1 正在接通中... - + Allow them in 允许加入 @@ -1453,7 +1786,12 @@ Example: https://server.my:8787 开始通话 - + + Already on a call + + + + Send a file 发送文件 @@ -1463,7 +1801,7 @@ Example: https://server.my:8787 写一条消息… - + Stickers 贴纸 @@ -1486,7 +1824,7 @@ Example: https://server.my:8787 MessageView - + Edit 编辑 @@ -1516,7 +1854,7 @@ Example: https://server.my:8787 选项 - + Reason for removal 移除原因 @@ -1692,8 +2030,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 发送了一条加密消息 @@ -1709,7 +2047,7 @@ Example: https://server.my:8787 %1 回复了一条加密消息 - + %1 replied to a message %1 回复了一条消息 @@ -1851,7 +2189,7 @@ Example: https://server.my:8787 Apply permission changes - + 应用权限更改 @@ -1861,7 +2199,7 @@ Example: https://server.my:8787 Apply permissions recursively - + 递归应用权限 @@ -1876,7 +2214,7 @@ Example: https://server.my:8787 No changes needed - + 无需更改 @@ -1892,9 +2230,9 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 - 未能更新权限等级:%1 + 未能更新权限等级:%1 @@ -1908,7 +2246,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events 其他事件 @@ -2077,6 +2415,11 @@ Example: https://server.my:8787 Hang up a call 挂断通话 + + + Reject a call + + Change the room emotes @@ -2094,7 +2437,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -2124,7 +2467,7 @@ Example: https://server.my:8787 level - + 级别 @@ -2134,8 +2477,23 @@ Example: https://server.my:8787 type + 类型 + + + + Respond + + + Send + 发送 + + + + Write a message... + 写一条消息… + ReadReceipts @@ -2148,7 +2506,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 昨天,%1 @@ -2222,7 +2580,7 @@ Example: https://server.my:8787 注册 - + Autodiscovery failed. Received malformed response. 自动发现失败。收到格式错误的回复。 @@ -2316,7 +2674,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored 没有存储版本 @@ -2340,6 +2698,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room 离开聊天室 @@ -2748,7 +3111,7 @@ Example: https://server.my:8787 显示更多 - + Failed to enable encryption: %1 未能启用加密:%1 @@ -2882,7 +3245,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage 未能连接秘密存储 @@ -2980,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 未能更新表情包:%1 @@ -3093,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 删除消息失败:%1 - + Failed to encrypt event, sending aborted! 未能加密事件,发送中止! - + Save image 保存图像 @@ -3125,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose 保存文件 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -3389,7 +3752,7 @@ Reason: %4 原因:%4 - + %2 revoked the invite to %1. %2 撤销了对 %1 的邀请。 @@ -3449,17 +3812,17 @@ Reason: %4 %1 删除了其加入请求。 - + You joined this room. 你已加入此聊天室。 - + %1 made this room require an invitation to join. - + %1 invited %2. %1 邀请了 %2。 @@ -3493,7 +3856,7 @@ Reason: %4 TimelineRow - + Edited 已编辑 @@ -3506,12 +3869,12 @@ Reason: %4 TimelineView - + No room open 未打开聊天室 - + No preview available 预览不可用 @@ -3548,7 +3911,17 @@ Reason: %4 拒绝邀请 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list 返回聊天室列表 @@ -3556,22 +3929,22 @@ Reason: %4 TopBar - + Back to room list 返回聊天室列表 - + No room selected 未选择聊天室 - + In %1 - + Show room members. 显示聊天室成员。 @@ -3591,12 +3964,17 @@ Reason: %4 此聊天室包含未经验证的设备! - + Show or hide pinned messages 显示或隐藏置顶消息 - + + Search this room + + + + Room options 聊天室选项 @@ -3625,6 +4003,11 @@ Reason: %4 Unpin 取消置顶 + + + Enter search query + + TrayIcon @@ -3667,7 +4050,7 @@ Reason: %4 UploadBox - + Upload %n file(s) 上传文件 @@ -3801,8 +4184,8 @@ Reason: %4 UserSettings - - + + Default 默认 @@ -3810,7 +4193,7 @@ Reason: %4 UserSettingsModel - + Theme 主题 @@ -3844,6 +4227,11 @@ Reason: %4 Send messages as Markdown 以 Markdown 格式发送消息 + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3919,8 +4307,18 @@ Reason: %4 Decrypt messages in sidebar 解密侧边栏中的消息 + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen 隐私屏幕 @@ -4110,7 +4508,7 @@ Reason: %4 通过 D-Bus 公开聊天室信息 - + Default 默认 @@ -4155,6 +4553,11 @@ When disabled, all messages are sent as a plain text. 允许在消息中使用 Markdown。 禁用时,所有消息都以纯文本形式发送。 + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4196,9 +4599,19 @@ OFF - 方形,ON - 圆形。 + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4210,24 +4623,24 @@ OFF - 方形,ON - 圆形。 验证你自己的设备的密钥。如果它已被缓存,验证你的设备之一将为你的所有其他设备和已验证你的用户标记它为已验证。 - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. 收到消息时显示通知。 这通常会导致任务栏中的应用程序图标以某种方式呈现动画效果。 - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4237,7 +4650,7 @@ This usually causes the application icon in the task bar to animate in some fash - + Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms that you have muted will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. @@ -4279,7 +4692,7 @@ Only affects messages in encrypted chats. 仅影响加密聊天中的消息。 - + When the window loses focus, the timeline will be blurred. 当窗口失去焦点时,时间线将 @@ -4335,7 +4748,7 @@ This setting will take effect upon restart. 这个设置将在重新启动时生效。 - + Select a file 选择一个文件 @@ -4487,7 +4900,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday 昨天 @@ -4541,7 +4954,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip 你发送了一个音频片段 @@ -4602,16 +5015,28 @@ This setting will take effect upon restart. + You: %1 你:%1 - + + %1: %2 %1:%2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message 你发送了一条加密消息 @@ -4650,6 +5075,16 @@ This setting will take effect upon restart. %1 ended a call %1 结束了通话 + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/qml/Avatar.qml b/resources/qml/Avatar.qml index 2da59370..549b8d17 100644 --- a/resources/qml/Avatar.qml +++ b/resources/qml/Avatar.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ChatPage.qml b/resources/qml/ChatPage.qml index cc62d501..3d76616a 100644 --- a/resources/qml/ChatPage.qml +++ b/resources/qml/ChatPage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/CommunitiesList.qml b/resources/qml/CommunitiesList.qml index 853302a5..1722cc85 100644 --- a/resources/qml/CommunitiesList.qml +++ b/resources/qml/CommunitiesList.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index c0435dff..04ff1495 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -209,6 +210,30 @@ Control { } + DelegateChoice { + roleValue: "command" + + RowLayout { + id: del + + anchors.centerIn: parent + spacing: rowSpacing + + Label { + text: model.name + color: model.index == popup.currentIndex ? Nheko.colors.highlightedText : Nheko.colors.text + font.bold: true + } + + Label { + text: model.description + color: model.index == popup.currentIndex ? Nheko.colors.highlightedText : Nheko.colors.buttonText + } + + } + + } + DelegateChoice { roleValue: "customEmoji" diff --git a/resources/qml/ElidedLabel.qml b/resources/qml/ElidedLabel.qml index 11df479a..4c734cc5 100644 --- a/resources/qml/ElidedLabel.qml +++ b/resources/qml/ElidedLabel.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/EncryptionIndicator.qml b/resources/qml/EncryptionIndicator.qml index 0bbdffc6..a75bd976 100644 --- a/resources/qml/EncryptionIndicator.qml +++ b/resources/qml/EncryptionIndicator.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -34,8 +35,8 @@ Image { width: 16 height: 16 - sourceSize.height: height * Screen.devicePixelRatio - sourceSize.width: width * Screen.devicePixelRatio + sourceSize.height: height + sourceSize.width: width source: { if (encrypted) { switch (trust) { diff --git a/resources/qml/ForwardCompleter.qml b/resources/qml/ForwardCompleter.qml index 76d77bfd..765c3a34 100644 --- a/resources/qml/ForwardCompleter.qml +++ b/resources/qml/ForwardCompleter.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ImageButton.qml b/resources/qml/ImageButton.qml index 080bea23..6a5c0782 100644 --- a/resources/qml/ImageButton.qml +++ b/resources/qml/ImageButton.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/MatrixText.qml b/resources/qml/MatrixText.qml index 69eb7cdb..9ce61435 100644 --- a/resources/qml/MatrixText.qml +++ b/resources/qml/MatrixText.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/MatrixTextField.qml b/resources/qml/MatrixTextField.qml index 3f0f77ed..5ebc9728 100644 --- a/resources/qml/MatrixTextField.qml +++ b/resources/qml/MatrixTextField.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -20,6 +21,7 @@ ColumnLayout { property alias font: input.font property alias echoMode: input.echoMode property alias selectByMouse: input.selectByMouse + property var hasClear: false Timer { id: timer @@ -129,6 +131,39 @@ ColumnLayout { color: labelC.text ? "transparent" : backgroundColor } + ToolButton { + id: clearText + Layout.fillWidth: true + visible: c.hasClear && searchField.text !== '' + icon.source: "image://colorimage/:/icons/icons/ui/round-remove-button.svg?" + (clearText.hovered ? Nheko.colors.highlight : Nheko.colors.buttonText) + focusPolicy: Qt.NoFocus + onClicked: { + searchField.clear() + topBar.searchString = ""; + } + hoverEnabled: true + background: null + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + } + // clear the default hover effects. + + Image { + height: parent.height - 2 * Nheko.paddingSmall + width: height + source: "image://colorimage/:/icons/icons/ui/round-remove-button.svg?" + (clearText.hovered ? Nheko.colors.highlight : Nheko.colors.buttonText) + + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + margins: Nheko.paddingSmall + } + + } + + } + } Rectangle { diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 37d9614a..59b19d4d 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -168,6 +169,8 @@ Rectangle { messageInput.openCompleter(selectionStart-1, "roomAliases"); } else if (lastChar == "~") { messageInput.openCompleter(selectionStart-1, "customEmoji"); + } else if (lastChar == "/" && cursorPosition == 1) { + messageInput.openCompleter(selectionStart-1, "command"); } } onCursorPositionChanged: { @@ -216,6 +219,11 @@ Rectangle { popup.close(); } else if (event.matches(StandardKey.InsertLineSeparator)) { if (popup.opened) popup.close(); + + if (Settings.invertEnterKey && (!Qt.inputMethod.visible || Qt.platform.os === "windows")) { + room.input.send(); + event.accepted = true; + } } else if (event.matches(StandardKey.InsertParagraphSeparator)) { if (popup.opened) { var currentCompletion = completer.currentCompletion(); @@ -227,7 +235,7 @@ Rectangle { return; } } - if (!Qt.inputMethod.visible || Qt.platform.os === "windows") { + if (!Settings.invertEnterKey && (!Qt.inputMethod.visible || Qt.platform.os === "windows")) { room.input.send(); event.accepted = true; } diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml index f94fc4a9..ae8eee56 100644 --- a/resources/qml/MessageView.qml +++ b/resources/qml/MessageView.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -38,6 +39,8 @@ Item { property int delegateMaxWidth: ((Settings.timelineMaxWidth > 100 && Settings.timelineMaxWidth < chatRoot.availableWidth) ? Settings.timelineMaxWidth : chatRoot.availableWidth) - chatRoot.padding * 2 - (scrollbar.interactive? scrollbar.width : 0) + readonly property alias filteringInProgress: filteredTimeline.filteringInProgress + displayMarginBeginning: height / 2 displayMarginEnd: height / 2 @@ -59,7 +62,6 @@ Item { onCountChanged: { // Mark timeline as read if (atYEnd && room) model.currentIndex = 0; - } ScrollBar.vertical: scrollbar @@ -415,6 +417,7 @@ Item { required property string callType required property var reactions required property int trustlevel + required property int notificationlevel required property int encryptionError required property var timestamp required property int status @@ -482,6 +485,7 @@ Item { callType: wrapper.callType reactions: wrapper.reactions trustlevel: wrapper.trustlevel + notificationlevel: wrapper.notificationlevel encryptionError: wrapper.encryptionError timestamp: wrapper.timestamp status: wrapper.status @@ -560,7 +564,7 @@ Item { footer: Item { anchors.horizontalCenter: parent.horizontalCenter anchors.margins: Nheko.paddingLarge - visible: room && room.paginationInProgress + visible: (room && room.paginationInProgress) || chat.filteringInProgress // hacky, but works height: loadingSpinner.height + 2 * Nheko.paddingLarge @@ -569,7 +573,7 @@ Item { anchors.centerIn: parent anchors.margins: Nheko.paddingLarge - running: room && room.paginationInProgress + running: (room && room.paginationInProgress) || chat.filteringInProgress foreground: Nheko.colors.mid z: 3 } diff --git a/resources/qml/NhekoBusyIndicator.qml b/resources/qml/NhekoBusyIndicator.qml index aafe8900..6f6869f4 100644 --- a/resources/qml/NhekoBusyIndicator.qml +++ b/resources/qml/NhekoBusyIndicator.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/NotificationWarning.qml b/resources/qml/NotificationWarning.qml index 285e5a5c..2d0a0975 100644 --- a/resources/qml/NotificationWarning.qml +++ b/resources/qml/NotificationWarning.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index f91e4a73..bc128302 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/QuickSwitcher.qml b/resources/qml/QuickSwitcher.qml index ac5d3aea..77992e69 100644 --- a/resources/qml/QuickSwitcher.qml +++ b/resources/qml/QuickSwitcher.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/Reactions.qml b/resources/qml/Reactions.qml index aae42cb1..94a8408d 100644 --- a/resources/qml/Reactions.qml +++ b/resources/qml/Reactions.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ReplyPopup.qml b/resources/qml/ReplyPopup.qml index 05464e33..3c4922b2 100644 --- a/resources/qml/ReplyPopup.qml +++ b/resources/qml/ReplyPopup.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index cfc0e215..2cfd71f9 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -159,6 +160,11 @@ Page { } } + Platform.MenuItem { + text: qsTr("Room settings") + onTriggered: TimelineManager.openRoomSettings(roomContextMenu.roomid) + } + Platform.MenuItem { text: qsTr("Leave room") onTriggered: TimelineManager.openLeaveRoomDialog(roomContextMenu.roomid) @@ -775,9 +781,9 @@ Page { ToolTip.text: qsTr("Search rooms (Ctrl+K)") Layout.margins: Nheko.paddingMedium onClicked: { - var quickSwitch = quickSwitcherComponent.createObject(timelineRoot); + var quickSwitch = Qt.createComponent("qrc:/qml/QuickSwitcher.qml").createObject(timelineRoot); quickSwitch.open(); - timelineRoot.destroyOnClose(quickSwitch); + destroyOnClosed(quickSwitch); } } diff --git a/resources/qml/Root.qml b/resources/qml/Root.qml index 1f079213..5f7d7229 100644 --- a/resources/qml/Root.qml +++ b/resources/qml/Root.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ScrollHelper.qml b/resources/qml/ScrollHelper.qml index c87b730e..afbc116f 100644 --- a/resources/qml/ScrollHelper.qml +++ b/resources/qml/ScrollHelper.qml @@ -2,6 +2,7 @@ // Copyright (C) 2017 Christian Mollekopf, // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/SelfVerificationCheck.qml b/resources/qml/SelfVerificationCheck.qml index 336b966d..f6954d3b 100644 --- a/resources/qml/SelfVerificationCheck.qml +++ b/resources/qml/SelfVerificationCheck.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/StatusIndicator.qml b/resources/qml/StatusIndicator.qml index e1ed3b29..2276de11 100644 --- a/resources/qml/StatusIndicator.qml +++ b/resources/qml/StatusIndicator.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index 181b64ff..2ee9ee77 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -41,6 +42,7 @@ AbstractButton { required property string callType required property var reactions required property int trustlevel + required property int notificationlevel required property int encryptionError required property int duration required property var timestamp @@ -117,6 +119,8 @@ AbstractButton { property color bgColor: Nheko.colors.base color: (Settings.bubbles && !isStateEvent) ? Qt.tint(bgColor, Qt.hsla(userColor.hslHue, 0.5, userColor.hslLightness, 0.2)) : "#00000000" radius: 4 + border.width: r.notificationlevel == MtxEvent.Highlight ? 1 : 0 + border.color: Nheko.theme.red GridLayout { anchors { @@ -125,6 +129,7 @@ AbstractButton { right: parent.right margins: (Settings.bubbles && ! isStateEvent)? 4 : 2 leftMargin: 4 + rightMargin: 4 } id: msg rowSpacing: 0 @@ -297,7 +302,7 @@ AbstractButton { Reactions { anchors { top: row.bottom - topMargin: -2 + topMargin: -4 left: row.bubbleOnRight? undefined : row.left right: row.bubbleOnRight? row.right : undefined } @@ -315,9 +320,11 @@ AbstractButton { anchors { top: reactionRow.bottom topMargin: 5 + left: parent.left + right: parent.right } color: Nheko.colors.highlight - width: row.maxWidth + visible: (r.index > 0 && (room.fullyReadEventId == r.eventId)) height: visible ? 3 : 0 diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index ab1bbc28..b82cba65 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -13,6 +14,7 @@ import Qt.labs.platform 1.1 as Platform import QtQuick 2.15 import QtQuick.Controls 2.5 import QtQuick.Layouts 1.3 +import QtQuick.Particles 2.15 import QtQuick.Window 2.13 import im.nheko 1.0 import im.nheko.EmojiModel 1.0 @@ -25,6 +27,11 @@ Item { property bool showBackButton: false clip: true + onRoomChanged: if (room != null) room.triggerSpecialEffects() + + // focus message input on key press, but not on Ctrl-C and such. + Keys.onPressed: if (event.text && !topBar.searchHasFocus) TimelineManager.focusMessageInput(); + Shortcut { sequence: StandardKey.Close onActivated: Rooms.resetCurrentRoom() @@ -164,6 +171,7 @@ Item { property string roomName: room ? room.roomName : (roomPreview ? roomPreview.roomName : "") property string roomTopic: room ? room.roomTopic : (roomPreview ? roomPreview.roomTopic : "") property string avatarUrl: room ? room.roomAvatarUrl : (roomPreview ? roomPreview.roomAvatarUrl : "") + property string reason: roomPreview ? roomPreview.reason : "" visible: room != null && room.isSpace || roomPreview != null enabled: visible @@ -271,6 +279,44 @@ Item { onClicked: Rooms.declineInvite(roomPreview.roomid) } + ScrollView { + id: reasonField + property bool showReason: false + + Layout.alignment: Qt.AlignHCenter + Layout.fillWidth: true + Layout.leftMargin: Nheko.paddingLarge + Layout.rightMargin: Nheko.paddingLarge + visible: preview.reason !== "" && showReason + + TextArea { + text: TimelineManager.escapeEmoji(preview.reason) + wrapMode: TextEdit.WordWrap + textFormat: TextEdit.RichText + readOnly: true + background: null + selectByMouse: true + color: Nheko.colors.text + horizontalAlignment: TextEdit.AlignHCenter + } + + } + + Button { + id: showReasonButton + + Layout.alignment: Qt.AlignHCenter + //Layout.fillWidth: true + Layout.leftMargin: Nheko.paddingLarge + Layout.rightMargin: Nheko.paddingLarge + + visible: preview.reason !== "" + text: reasonField.showReason ? qsTr("Hide invite reason") : qsTr("Show invite reason") + onClicked: { + reasonField.showReason = !reasonField.showReason; + } + } + Item { visible: room != null Layout.preferredHeight: Math.ceil(fontMetrics.lineSpacing * 2) @@ -298,6 +344,58 @@ Item { onClicked: Rooms.resetCurrentRoom() } + ParticleSystem { id: confettiParticleSystem } + + Emitter { + id: confettiEmitter + + width: parent.width * 3/4 + enabled: false + anchors.horizontalCenter: parent.horizontalCenter + y: parent.height + emitRate: Math.min(400 * Math.sqrt(parent.width * parent.height) / 870, 1000) + lifeSpan: 15000 + system: confettiParticleSystem + velocityFromMovement: 8 + size: 16 + sizeVariation: 4 + velocity: PointDirection { + x: 0 + y: -Math.min(450 * parent.height / 700, 1000) + xVariation: Math.min(4 * parent.width / 7, 450) + yVariation: 250 + } + + ImageParticle { + system: confettiParticleSystem + source: "qrc:/confettiparticle.svg" + rotationVelocity: 0 + rotationVelocityVariation: 360 + colorVariation: 1 + color: "white" + entryEffect: ImageParticle.None + xVector: PointDirection { + x: 1 + y: 0 + xVariation: 0.2 + yVariation: 0.2 + } + yVector: PointDirection { + x: 0 + y: 0.5 + xVariation: 0.2 + yVariation: 0.2 + } + } + } + + Gravity { + system: confettiParticleSystem + anchors.fill: parent + magnitude: 350 + angle: 90 + } + NhekoDropArea { anchors.fill: parent roomid: room ? room.roomId : "" @@ -321,6 +419,15 @@ Item { timelineRoot.destroyOnClose(dialog); } + function onConfetti() + { + if (!Settings.fancyEffects) + return + + confettiEmitter.pulse(parent.height * 2) + room.markSpecialEffectsDone() + } + target: room } diff --git a/resources/qml/ToggleButton.qml b/resources/qml/ToggleButton.qml index 98950b8a..b24458c6 100644 --- a/resources/qml/ToggleButton.qml +++ b/resources/qml/ToggleButton.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml index 4608da4d..4a52d234 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -25,6 +26,8 @@ Pane { property bool isDirect: room ? room.isDirect : false property string directChatOtherUserId: room ? room.directChatOtherUserId : "" + property bool searchHasFocus: searchField.focus && searchField.enabled + property string searchString: "" onRoomIdChanged: { @@ -225,11 +228,9 @@ Pane { Layout.row: 1 Layout.rowSpan: 2 Layout.preferredHeight: Nheko.avatarSize - Nheko.paddingMedium - Layout.maximumWidth: Nheko.avatarSize - Nheko.paddingMedium + Layout.preferredWidth: Nheko.avatarSize - Nheko.paddingMedium contentItem: EncryptionIndicator { - sourceSize.height: parent.Layout.preferredHeight * Screen.devicePixelRatio - sourceSize.width: parent.Layout.preferredWidth * Screen.devicePixelRatio encrypted: isEncrypted trust: trustlevel enabled: false @@ -449,6 +450,8 @@ Pane { MatrixTextField { id: searchField visible: searchButton.searchActive + enabled: visible + hasClear: true Layout.row: 5 Layout.column: 2 diff --git a/resources/qml/TypingIndicator.qml b/resources/qml/TypingIndicator.qml index 0b92b2d2..ac995e3c 100644 --- a/resources/qml/TypingIndicator.qml +++ b/resources/qml/TypingIndicator.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/UploadBox.qml b/resources/qml/UploadBox.qml index ba00f205..2b20c837 100644 --- a/resources/qml/UploadBox.qml +++ b/resources/qml/UploadBox.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -48,8 +49,8 @@ Page { Layout.fillHeight: true Layout.fillWidth: true - sourceSize.height: height - sourceSize.width: width + sourceSize.height: parent.availableHeight - namefield.height + sourceSize.width: parent.availableWidth fillMode: Image.PreserveAspectFit smooth: true mipmap: true @@ -63,6 +64,7 @@ Page { source: (modelData.thumbnail != "") ? modelData.thumbnail : ("image://colorimage/:/icons/icons/ui/"+typeStr+".svg?" + Nheko.colors.buttonText) } MatrixTextField { + id: namefield Layout.fillWidth: true text: modelData.filename onTextEdited: modelData.filename = text diff --git a/resources/qml/components/AdaptiveLayout.qml b/resources/qml/components/AdaptiveLayout.qml index 8e3c0e3d..a2148c06 100644 --- a/resources/qml/components/AdaptiveLayout.qml +++ b/resources/qml/components/AdaptiveLayout.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/AdaptiveLayoutElement.qml b/resources/qml/components/AdaptiveLayoutElement.qml index 666a47cc..68793f07 100644 --- a/resources/qml/components/AdaptiveLayoutElement.qml +++ b/resources/qml/components/AdaptiveLayoutElement.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/AvatarListTile.qml b/resources/qml/components/AvatarListTile.qml index 910e0e47..498dc045 100644 --- a/resources/qml/components/AvatarListTile.qml +++ b/resources/qml/components/AvatarListTile.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/FlatButton.qml b/resources/qml/components/FlatButton.qml index 2c9ea061..bcc4697f 100644 --- a/resources/qml/components/FlatButton.qml +++ b/resources/qml/components/FlatButton.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/MainWindowDialog.qml b/resources/qml/components/MainWindowDialog.qml index def4f96b..76c95038 100644 --- a/resources/qml/components/MainWindowDialog.qml +++ b/resources/qml/components/MainWindowDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/NotificationBubble.qml b/resources/qml/components/NotificationBubble.qml index ca0ae6cb..f1315626 100644 --- a/resources/qml/components/NotificationBubble.qml +++ b/resources/qml/components/NotificationBubble.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/ReorderableListview.qml b/resources/qml/components/ReorderableListview.qml index 7e9ae05d..853ea5f6 100644 --- a/resources/qml/components/ReorderableListview.qml +++ b/resources/qml/components/ReorderableListview.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/SpaceMenuLevel.qml b/resources/qml/components/SpaceMenuLevel.qml index f552978d..1641e727 100644 --- a/resources/qml/components/SpaceMenuLevel.qml +++ b/resources/qml/components/SpaceMenuLevel.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/TextButton.qml b/resources/qml/components/TextButton.qml index a37f3aee..f34cbb0e 100644 --- a/resources/qml/components/TextButton.qml +++ b/resources/qml/components/TextButton.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Encrypted.qml b/resources/qml/delegates/Encrypted.qml index ecc771f5..679f7b49 100644 --- a/resources/qml/delegates/Encrypted.qml +++ b/resources/qml/delegates/Encrypted.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/FileMessage.qml b/resources/qml/delegates/FileMessage.qml index daae8635..5e496db5 100644 --- a/resources/qml/delegates/FileMessage.qml +++ b/resources/qml/delegates/FileMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/ImageMessage.qml b/resources/qml/delegates/ImageMessage.qml index 12e8a465..af69b983 100644 --- a/resources/qml/delegates/ImageMessage.qml +++ b/resources/qml/delegates/ImageMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml index a2a44cb2..d0569c5a 100644 --- a/resources/qml/delegates/MessageDelegate.qml +++ b/resources/qml/delegates/MessageDelegate.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -61,6 +62,33 @@ Item { } + DelegateChoice { + roleValue: MtxEvent.Tombstone + + + ColumnLayout { + width: parent.width + + NoticeMessage { + body: formatted + isOnlyEmoji: false + isReply: d.isReply + keepFullText: d.keepFullText + isStateEvent: d.isStateEvent + Layout.fillWidth: true + formatted: qsTr("This room was replaced for the following reason: %1").arg(d.body) + } + + Button { + palette: Nheko.colors + Layout.alignment: Qt.AlignHCenter + text: qsTr("Go to replacement room") + onClicked: room.joinReplacementRoom(eventId) + } + + } + } + DelegateChoice { roleValue: MtxEvent.TextMessage @@ -75,6 +103,20 @@ Item { } + DelegateChoice { + roleValue: MtxEvent.ConfettiMessage + + TextMessage { + formatted: d.formattedBody + body: d.body + isOnlyEmoji: d.isOnlyEmoji + isReply: d.isReply + keepFullText: d.keepFullText + metadataWidth: d.metadataWidth + } + + } + DelegateChoice { roleValue: MtxEvent.NoticeMessage @@ -565,6 +607,7 @@ Item { Button { visible: d.relatedEventCacheBuster, room.showAcceptKnockButton(d.eventId) palette: Nheko.colors + Layout.alignment: Qt.AlignHCenter text: qsTr("Allow them in") onClicked: room.acceptKnock(eventId) } diff --git a/resources/qml/delegates/NoticeMessage.qml b/resources/qml/delegates/NoticeMessage.qml index 342469db..a1de0465 100644 --- a/resources/qml/delegates/NoticeMessage.qml +++ b/resources/qml/delegates/NoticeMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Pill.qml b/resources/qml/delegates/Pill.qml index 8b67c346..fd24fb51 100644 --- a/resources/qml/delegates/Pill.qml +++ b/resources/qml/delegates/Pill.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Placeholder.qml b/resources/qml/delegates/Placeholder.qml index f63e62f5..62fb2d9f 100644 --- a/resources/qml/delegates/Placeholder.qml +++ b/resources/qml/delegates/Placeholder.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/PlayableMediaMessage.qml b/resources/qml/delegates/PlayableMediaMessage.qml index 4828843c..c4c143cc 100644 --- a/resources/qml/delegates/PlayableMediaMessage.qml +++ b/resources/qml/delegates/PlayableMediaMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Redacted.qml b/resources/qml/delegates/Redacted.qml index dcdb7248..0b208fb9 100644 --- a/resources/qml/delegates/Redacted.qml +++ b/resources/qml/delegates/Redacted.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Reply.qml b/resources/qml/delegates/Reply.qml index 8962fa52..4b98b78b 100644 --- a/resources/qml/delegates/Reply.qml +++ b/resources/qml/delegates/Reply.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/TextMessage.qml b/resources/qml/delegates/TextMessage.qml index da1c66da..bbb58736 100644 --- a/resources/qml/delegates/TextMessage.qml +++ b/resources/qml/delegates/TextMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/DeviceVerification.qml b/resources/qml/device-verification/DeviceVerification.qml index ead293d2..845516e0 100644 --- a/resources/qml/device-verification/DeviceVerification.qml +++ b/resources/qml/device-verification/DeviceVerification.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/DigitVerification.qml b/resources/qml/device-verification/DigitVerification.qml index e1f8f6cf..1e25fa9b 100644 --- a/resources/qml/device-verification/DigitVerification.qml +++ b/resources/qml/device-verification/DigitVerification.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/EmojiElement.qml b/resources/qml/device-verification/EmojiElement.qml index d02ede48..20b23e12 100644 --- a/resources/qml/device-verification/EmojiElement.qml +++ b/resources/qml/device-verification/EmojiElement.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/EmojiVerification.qml b/resources/qml/device-verification/EmojiVerification.qml index 4b88ef7b..1948f19c 100644 --- a/resources/qml/device-verification/EmojiVerification.qml +++ b/resources/qml/device-verification/EmojiVerification.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/Failed.qml b/resources/qml/device-verification/Failed.qml index 77327a75..33d46042 100644 --- a/resources/qml/device-verification/Failed.qml +++ b/resources/qml/device-verification/Failed.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/NewVerificationRequest.qml b/resources/qml/device-verification/NewVerificationRequest.qml index 187c3246..98b3fdf3 100644 --- a/resources/qml/device-verification/NewVerificationRequest.qml +++ b/resources/qml/device-verification/NewVerificationRequest.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/Success.qml b/resources/qml/device-verification/Success.qml index d9365194..1608e36a 100644 --- a/resources/qml/device-verification/Success.qml +++ b/resources/qml/device-verification/Success.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/Waiting.qml b/resources/qml/device-verification/Waiting.qml index 3054b9c3..b5b43a9e 100644 --- a/resources/qml/device-verification/Waiting.qml +++ b/resources/qml/device-verification/Waiting.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/AliasEditor.qml b/resources/qml/dialogs/AliasEditor.qml index 0d7b73fd..d1437d68 100644 --- a/resources/qml/dialogs/AliasEditor.qml +++ b/resources/qml/dialogs/AliasEditor.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -132,13 +133,17 @@ ApplicationWindow { spacing: Nheko.paddingMedium Layout.fillWidth: true - TextField { + MatrixTextField { id: newAliasVal + focus: true Layout.fillWidth: true - + selectByMouse: true + font.pixelSize: fontMetrics.font.pixelSize + color: Nheko.colors.text placeholderText: qsTr("#new-alias:server.tld") + Component.onCompleted: forceActiveFocus() Keys.onPressed: { if (event.matches(StandardKey.InsertParagraphSeparator)) { editingModel.addAlias(newAliasVal.text); diff --git a/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml b/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml index 80905039..970d8d0f 100644 --- a/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml +++ b/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ConfirmJoinRoomDialog.qml b/resources/qml/dialogs/ConfirmJoinRoomDialog.qml index a07aadd2..d61a75f7 100644 --- a/resources/qml/dialogs/ConfirmJoinRoomDialog.qml +++ b/resources/qml/dialogs/ConfirmJoinRoomDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/CreateDirect.qml b/resources/qml/dialogs/CreateDirect.qml index 85768cad..69eb38d0 100644 --- a/resources/qml/dialogs/CreateDirect.qml +++ b/resources/qml/dialogs/CreateDirect.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/CreateRoom.qml b/resources/qml/dialogs/CreateRoom.qml index bfc6d797..569886f2 100644 --- a/resources/qml/dialogs/CreateRoom.qml +++ b/resources/qml/dialogs/CreateRoom.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/HiddenEventsDialog.qml b/resources/qml/dialogs/HiddenEventsDialog.qml index 444ce6a1..7e7a9c05 100644 --- a/resources/qml/dialogs/HiddenEventsDialog.qml +++ b/resources/qml/dialogs/HiddenEventsDialog.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ImageOverlay.qml b/resources/qml/dialogs/ImageOverlay.qml index 70aa3e87..7437a04b 100644 --- a/resources/qml/dialogs/ImageOverlay.qml +++ b/resources/qml/dialogs/ImageOverlay.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ImagePackEditorDialog.qml b/resources/qml/dialogs/ImagePackEditorDialog.qml index 891d9c3d..c7325b2f 100644 --- a/resources/qml/dialogs/ImagePackEditorDialog.qml +++ b/resources/qml/dialogs/ImagePackEditorDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ImagePackSettingsDialog.qml b/resources/qml/dialogs/ImagePackSettingsDialog.qml index 2bbcfe54..ce4d554a 100644 --- a/resources/qml/dialogs/ImagePackSettingsDialog.qml +++ b/resources/qml/dialogs/ImagePackSettingsDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/InputDialog.qml b/resources/qml/dialogs/InputDialog.qml index a674c3fb..de079797 100644 --- a/resources/qml/dialogs/InputDialog.qml +++ b/resources/qml/dialogs/InputDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/InviteDialog.qml b/resources/qml/dialogs/InviteDialog.qml index e7dd4e3a..33fd32c4 100644 --- a/resources/qml/dialogs/InviteDialog.qml +++ b/resources/qml/dialogs/InviteDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/JoinRoomDialog.qml b/resources/qml/dialogs/JoinRoomDialog.qml index 0098370d..b6b1af24 100644 --- a/resources/qml/dialogs/JoinRoomDialog.qml +++ b/resources/qml/dialogs/JoinRoomDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/LeaveRoomDialog.qml b/resources/qml/dialogs/LeaveRoomDialog.qml index cb15a74d..969073f7 100644 --- a/resources/qml/dialogs/LeaveRoomDialog.qml +++ b/resources/qml/dialogs/LeaveRoomDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/LogoutDialog.qml b/resources/qml/dialogs/LogoutDialog.qml index fb5b39f6..3e2a20c2 100644 --- a/resources/qml/dialogs/LogoutDialog.qml +++ b/resources/qml/dialogs/LogoutDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/PhoneNumberInputDialog.qml b/resources/qml/dialogs/PhoneNumberInputDialog.qml index 9c36c98f..1fc5e061 100644 --- a/resources/qml/dialogs/PhoneNumberInputDialog.qml +++ b/resources/qml/dialogs/PhoneNumberInputDialog.qml @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2021 Mirian Margiani // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/PowerLevelEditor.qml b/resources/qml/dialogs/PowerLevelEditor.qml index 4c23d9af..a6124102 100644 --- a/resources/qml/dialogs/PowerLevelEditor.qml +++ b/resources/qml/dialogs/PowerLevelEditor.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml b/resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml index 83af00f7..19a9654a 100644 --- a/resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml +++ b/resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/RawMessageDialog.qml b/resources/qml/dialogs/RawMessageDialog.qml index 774b078b..4801c179 100644 --- a/resources/qml/dialogs/RawMessageDialog.qml +++ b/resources/qml/dialogs/RawMessageDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ReadReceipts.qml b/resources/qml/dialogs/ReadReceipts.qml index da87996e..27b03e6a 100644 --- a/resources/qml/dialogs/ReadReceipts.qml +++ b/resources/qml/dialogs/ReadReceipts.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/RoomDirectory.qml b/resources/qml/dialogs/RoomDirectory.qml index d143ed43..9f7f6f8f 100644 --- a/resources/qml/dialogs/RoomDirectory.qml +++ b/resources/qml/dialogs/RoomDirectory.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/RoomMembers.qml b/resources/qml/dialogs/RoomMembers.qml index b44eeab3..d1584555 100644 --- a/resources/qml/dialogs/RoomMembers.qml +++ b/resources/qml/dialogs/RoomMembers.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/RoomSettings.qml b/resources/qml/dialogs/RoomSettings.qml index f6c296f8..7b04f55b 100644 --- a/resources/qml/dialogs/RoomSettings.qml +++ b/resources/qml/dialogs/RoomSettings.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/UserProfile.qml b/resources/qml/dialogs/UserProfile.qml index e57d4de5..684ada8f 100644 --- a/resources/qml/dialogs/UserProfile.qml +++ b/resources/qml/dialogs/UserProfile.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/emoji/EmojiPicker.qml b/resources/qml/emoji/EmojiPicker.qml index 174ea6ae..fee746f6 100644 --- a/resources/qml/emoji/EmojiPicker.qml +++ b/resources/qml/emoji/EmojiPicker.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/emoji/StickerPicker.qml b/resources/qml/emoji/StickerPicker.qml index d38461a1..db39f791 100644 --- a/resources/qml/emoji/StickerPicker.qml +++ b/resources/qml/emoji/StickerPicker.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/pages/LoginPage.qml b/resources/qml/pages/LoginPage.qml index 8261ca60..cda1d0d0 100644 --- a/resources/qml/pages/LoginPage.qml +++ b/resources/qml/pages/LoginPage.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/pages/RegisterPage.qml b/resources/qml/pages/RegisterPage.qml index 4cdd98c1..69172bd7 100644 --- a/resources/qml/pages/RegisterPage.qml +++ b/resources/qml/pages/RegisterPage.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/pages/UserSettingsPage.qml b/resources/qml/pages/UserSettingsPage.qml index becfc612..f49ed396 100644 --- a/resources/qml/pages/UserSettingsPage.qml +++ b/resources/qml/pages/UserSettingsPage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/pages/WelcomePage.qml b/resources/qml/pages/WelcomePage.qml index e1ecc31d..914de763 100644 --- a/resources/qml/pages/WelcomePage.qml +++ b/resources/qml/pages/WelcomePage.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/NhekoSlider.qml b/resources/qml/ui/NhekoSlider.qml index 623eeb71..a3df54e2 100644 --- a/resources/qml/ui/NhekoSlider.qml +++ b/resources/qml/ui/NhekoSlider.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/Ripple.qml b/resources/qml/ui/Ripple.qml index 0619d924..d6803173 100644 --- a/resources/qml/ui/Ripple.qml +++ b/resources/qml/ui/Ripple.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/Snackbar.qml b/resources/qml/ui/Snackbar.qml index 80c0d888..256933d9 100644 --- a/resources/qml/ui/Snackbar.qml +++ b/resources/qml/ui/Snackbar.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/Spinner.qml b/resources/qml/ui/Spinner.qml index 3681a36b..c386f95c 100644 --- a/resources/qml/ui/Spinner.qml +++ b/resources/qml/ui/Spinner.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/animations/BlinkAnimation.qml b/resources/qml/ui/animations/BlinkAnimation.qml index 87e3b135..d8090db8 100644 --- a/resources/qml/ui/animations/BlinkAnimation.qml +++ b/resources/qml/ui/animations/BlinkAnimation.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/media/MediaControls.qml b/resources/qml/ui/media/MediaControls.qml index d73957ee..b4283e9b 100644 --- a/resources/qml/ui/media/MediaControls.qml +++ b/resources/qml/ui/media/MediaControls.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/ActiveCallBar.qml b/resources/qml/voip/ActiveCallBar.qml index a8a65421..6251b939 100644 --- a/resources/qml/voip/ActiveCallBar.qml +++ b/resources/qml/voip/ActiveCallBar.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/CallDevices.qml b/resources/qml/voip/CallDevices.qml index 60db762a..2e2dd5cf 100644 --- a/resources/qml/voip/CallDevices.qml +++ b/resources/qml/voip/CallDevices.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/CallInvite.qml b/resources/qml/voip/CallInvite.qml index beed2e51..84cfdfef 100644 --- a/resources/qml/voip/CallInvite.qml +++ b/resources/qml/voip/CallInvite.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/CallInviteBar.qml b/resources/qml/voip/CallInviteBar.qml index a622ca27..02034305 100644 --- a/resources/qml/voip/CallInviteBar.qml +++ b/resources/qml/voip/CallInviteBar.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/DeviceError.qml b/resources/qml/voip/DeviceError.qml index 3f37612c..9f0c50d8 100644 --- a/resources/qml/voip/DeviceError.qml +++ b/resources/qml/voip/DeviceError.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/PlaceCall.qml b/resources/qml/voip/PlaceCall.qml index 33ad4cfa..c6efbe9e 100644 --- a/resources/qml/voip/PlaceCall.qml +++ b/resources/qml/voip/PlaceCall.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/ScreenShare.qml b/resources/qml/voip/ScreenShare.qml index f27c4485..d08e72de 100644 --- a/resources/qml/voip/ScreenShare.qml +++ b/resources/qml/voip/ScreenShare.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/VideoCall.qml b/resources/qml/voip/VideoCall.qml index 20bb0535..08a94f20 100644 --- a/resources/qml/voip/VideoCall.qml +++ b/resources/qml/voip/VideoCall.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/res.qrc b/resources/res.qrc index 595dd5a7..e9320a1b 100644 --- a/resources/res.qrc +++ b/resources/res.qrc @@ -193,6 +193,7 @@ qml/voip/PlaceCall.qml qml/voip/ScreenShare.qml qml/voip/VideoCall.qml + confettiparticle.svg media/ring.ogg diff --git a/scripts/flat-manager-client b/scripts/flat-manager-client index 99f23b70..d50b5ec1 100755 --- a/scripts/flat-manager-client +++ b/scripts/flat-manager-client @@ -31,7 +31,8 @@ from functools import reduce from urllib.parse import urljoin, urlparse, urlsplit, urlunparse, urlunsplit import aiohttp -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed +import aiohttp.client_exceptions +from tenacity import retry, retry_if_exception_type, stop_after_delay, wait_random_exponential import gi gi.require_version('OSTree', '1.0') @@ -55,7 +56,7 @@ class ApiError(Exception): self.status = response.status try: - self.body = json.loads(response); + self.body = json.loads(body) except: self.body = {"status": self.status, "error-type": "no-error", "message": "No json error details from server"} @@ -71,6 +72,10 @@ class ApiError(Exception): return "Api call to %s failed with status %d, details: %s" % (self.url, self.status, self.body) +TENACITY_RETRY_EXCEPTIONS = (retry_if_exception_type(aiohttp.client_exceptions.ServerDisconnectedError) | retry_if_exception_type(ApiError) | retry_if_exception_type(aiohttp.client_exceptions.ServerConnectionError)) +TENACITY_STOP_AFTER = stop_after_delay(300) +TENACITY_WAIT_BETWEEN = wait_random_exponential(multiplier=1, max=60) + # This is similar to the regular payload, but opens the file lazily class AsyncNamedFilePart(aiohttp.payload.Payload): def __init__(self, @@ -181,6 +186,13 @@ def chunks(l, n): for i in range(0, len(l), n): yield l[i:i + n] + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def missing_objects(session, build_url, token, wanted): missing=[] for chunk in chunks(wanted, 2000): @@ -199,6 +211,12 @@ async def missing_objects(session, build_url, token, wanted): missing.extend(data["missing"]) return missing +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=(retry_if_exception_type(ApiError) | retry_if_exception_type(aiohttp.client_exceptions.ServerDisconnectedError)), + reraise=True, +) async def upload_files(session, build_url, token, files): if len(files) == 0: return @@ -212,6 +230,7 @@ async def upload_files(session, build_url, token, files): if resp.status != 200: raise ApiError(resp, await resp.text()) + async def upload_deltas(session, repo_path, build_url, token, deltas, refs, ignore_delta): if not len(deltas): return @@ -258,6 +277,13 @@ async def upload_objects(session, repo_path, build_url, token, objects): # Upload any remainder await upload_files(session, build_url, token, req) + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def create_ref(session, build_url, token, ref, commit): print("Creating ref %s with commit %s" % (ref, commit)) resp = await session.post(build_url + "/build_ref", headers={'Authorization': 'Bearer ' + token}, json= { "ref": ref, "commit": commit} ) @@ -268,6 +294,13 @@ async def create_ref(session, build_url, token, ref, commit): data = await resp.json() return data + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def add_extra_ids(session, build_url, token, extra_ids): print("Adding extra ids %s" % (extra_ids)) resp = await session.post(build_url + "/add_extra_ids", headers={'Authorization': 'Bearer ' + token}, json= { "ids": extra_ids} ) @@ -278,6 +311,13 @@ async def add_extra_ids(session, build_url, token, extra_ids): data = await resp.json() return data + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def get_build(session, build_url, token): resp = await session.get(build_url, headers={'Authorization': 'Bearer ' + token}) if resp.status != 200: @@ -290,6 +330,13 @@ def reparse_job_results(job): job["results"] = json.loads(job.get("results", "{}")) return job + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def get_job(session, job_url, token): resp = await session.get(job_url, headers={'Authorization': 'Bearer ' + token}, json={}) async with resp: @@ -298,6 +345,13 @@ async def get_job(session, job_url, token): data = await resp.json() return data + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def wait_for_job(session, job_url, token): reported_delay = False old_job_status = 0 @@ -366,6 +420,13 @@ async def wait_for_job(session, job_url, token): sleep_time=60 time.sleep(sleep_time) + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def commit_build(session, build_url, eol, eol_rebase, token_type, wait, token): print("Committing build %s" % (build_url)) json = { @@ -390,15 +451,24 @@ async def commit_build(session, build_url, eol, eol_rebase, token_type, wait, to job["location"] = job_url return job + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def publish_build(session, build_url, wait, token): print("Publishing build %s" % (build_url)) resp = await session.post(build_url + "/publish", headers={'Authorization': 'Bearer ' + token}, json= { } ) async with resp: if resp.status == 400: - body = await resp.text() + body = await resp.json() try: - msg = json.loads(body) - if msg.get("current-state", "") == "published": + if isinstance(body, str): + body = json.loads(body) + + if body.get("current-state") == "published": print("the build has been already published") return {} except: @@ -418,6 +488,13 @@ async def publish_build(session, build_url, wait, token): job["location"] = job_url return job + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def purge_build(session, build_url, token): print("Purging build %s" % (build_url)) resp = await session.post(build_url + "/purge", headers={'Authorization': 'Bearer ' + token}, json= {} ) @@ -426,6 +503,13 @@ async def purge_build(session, build_url, token): raise ApiError(resp, await resp.text()) return await resp.json() + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def create_token(session, manager_url, token, name, subject, scope, duration): token_url = urljoin(manager_url, "api/v1/token_subset") resp = await session.post(token_url, headers={'Authorization': 'Bearer ' + token}, json = { @@ -442,11 +526,23 @@ async def create_token(session, manager_url, token, name, subject, scope, durati def get_object_multipart(repo_path, object): return AsyncNamedFilePart(repo_path + "/objects/" + object[:2] + "/" + object[2:], filename=object) + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def create_command(session, args): build_url = urljoin(args.manager_url, "api/v1/build") - resp = await session.post(build_url, headers={'Authorization': 'Bearer ' + args.token}, json={ + json = { "repo": args.repo - }) + } + if args.app_id is not None: + json["app-id"] = args.app_id + if args.public_download is not None: + json["public-download"] = args.public_download + resp = await session.post(build_url, headers={'Authorization': 'Bearer ' + args.token}, json=json) async with resp: if resp.status != 200: raise ApiError(resp, await resp.text()) @@ -475,9 +571,9 @@ def build_url_to_api(build_url): return urlunparse((parts.scheme, parts.netloc, path, None, None, None)) @retry( - stop=stop_after_attempt(6), - wait=wait_fixed(10), - retry=retry_if_exception_type(ApiError), + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, reraise=True, ) async def push_command(session, args): @@ -630,6 +726,9 @@ if __name__ == '__main__': create_parser = subparsers.add_parser('create', help='Create new build') create_parser.add_argument('manager_url', help='remote repo manager url') create_parser.add_argument('repo', help='repo name') + create_parser.add_argument('app_id', nargs='?', help='app ID') + create_parser.add_argument('--public_download', action='store_true', default=None, help='allow public read access to the build repo') + create_parser.add_argument('--no_public_download', action='store_false', dest='public_download', default=None, help='allow public read access to the build repo') create_parser.set_defaults(func=create_command) push_parser = subparsers.add_parser('push', help='Push to repo manager') @@ -717,8 +816,7 @@ if __name__ == '__main__': res = 1 output = None try: - loop = asyncio.get_event_loop() - result = loop.run_until_complete(run_with_session(args)) + result = asyncio.run(run_with_session(args)) output = { "command": args.subparser_name, @@ -770,3 +868,4 @@ if __name__ == '__main__': f.write("\n") f.close() exit(res) + diff --git a/src/AliasEditModel.cpp b/src/AliasEditModel.cpp index aee42dd1..bb5b9bfe 100644 --- a/src/AliasEditModel.cpp +++ b/src/AliasEditModel.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -191,7 +192,7 @@ AliasEditingModel::makeCanonical(int row) auto moveAlias = aliases.at(row).alias; if (!aliasEvent.alias.empty()) { - for (qsizetype i = 0; i < aliases.size(); i++) { + for (int i = 0; i < aliases.size(); i++) { if (moveAlias == aliases[i].alias) { if (aliases[i].canonical) { aliases[i].canonical = false; @@ -286,7 +287,7 @@ AliasEditingModel::toggleAdvertize(int row) void AliasEditingModel::updateAlias(std::string alias, std::string target) { - for (qsizetype i = 0; i < aliases.size(); i++) { + for (int i = 0; i < aliases.size(); i++) { auto &e = aliases[i]; if (e.alias == alias) { e.published = (target == room_id); @@ -300,7 +301,7 @@ AliasEditingModel::updatePublishedAliases(std::vector advAliases) { for (const auto &advAlias : advAliases) { bool found = false; - for (qsizetype i = 0; i < aliases.size(); i++) { + for (int i = 0; i < aliases.size(); i++) { auto &alias = aliases[i]; if (alias.alias == advAlias) { alias.published = true; diff --git a/src/AliasEditModel.h b/src/AliasEditModel.h index 8709e945..6cfc34bc 100644 --- a/src/AliasEditModel.h +++ b/src/AliasEditModel.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/AvatarProvider.cpp b/src/AvatarProvider.cpp index cfa536fe..eb1e7e2a 100644 --- a/src/AvatarProvider.cpp +++ b/src/AvatarProvider.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/AvatarProvider.h b/src/AvatarProvider.h index 0bdb8b7c..e0cf6e52 100644 --- a/src/AvatarProvider.h +++ b/src/AvatarProvider.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/BlurhashProvider.cpp b/src/BlurhashProvider.cpp index 0b06b2d0..f8edc791 100644 --- a/src/BlurhashProvider.cpp +++ b/src/BlurhashProvider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/BlurhashProvider.h b/src/BlurhashProvider.h index c0826e72..aec6ab7c 100644 --- a/src/BlurhashProvider.h +++ b/src/BlurhashProvider.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Cache.cpp b/src/Cache.cpp index a83b73f7..d018665a 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -39,7 +40,7 @@ //! Should be changed when a breaking change occurs in the cache format. //! This will reset client's data. -static const std::string CURRENT_CACHE_FORMAT_VERSION{"2022.04.08"}; +static const std::string CURRENT_CACHE_FORMAT_VERSION{"2022.11.06"}; //! Keys used for the DB static const std::string_view NEXT_BATCH_KEY("next_batch"); @@ -293,7 +294,10 @@ Cache::setup() // NOTE(Nico): We may want to use (MDB_MAPASYNC | MDB_WRITEMAP) in the future, but // it can really mess up our database, so we shouldn't. For now, hopefully // NOMETASYNC is fast enough. - env_.open(cacheDirectory_.toStdString().c_str(), MDB_NOMETASYNC | MDB_NOSYNC); + // + // 2022-10-28: Disable the nosync flags again in the hope to crack down on some database + // corruption. + env_.open(cacheDirectory_.toStdString().c_str()); //, MDB_NOMETASYNC | MDB_NOSYNC); } catch (const lmdb::error &e) { if (e.code() != MDB_VERSION_MISMATCH && e.code() != MDB_INVALID) { throw std::runtime_error("LMDB initialization failed" + std::string(e.what())); @@ -337,13 +341,13 @@ Cache::setup() txn.commit(); - loadSecrets({ - {mtx::secret_storage::secrets::cross_signing_master, false}, - {mtx::secret_storage::secrets::cross_signing_self_signing, false}, - {mtx::secret_storage::secrets::cross_signing_user_signing, false}, - {mtx::secret_storage::secrets::megolm_backup_v1, false}, - {"pickle_secret", true}, - }); + loadSecretsFromStore( + { + {"pickle_secret", true}, + }, + [this](const std::string &, bool, const std::string &value) { + this->pickle_secret_ = value; + }); } static void @@ -358,7 +362,8 @@ fatalSecretError() "have multiple reasons. Check if your D-Bus service is running and you have configured a " "service like KWallet, Gnome Keyring, KeePassXC or the equivalent for your platform. If " "you are having trouble, feel free to open an issue here: " - "https://github.com/Nheko-Reborn/nheko/issues")); + "https://github.com/Nheko-Reborn/nheko/issues"), + QMessageBox::StandardButton::Close); QCoreApplication::exit(1); exit(1); @@ -376,7 +381,9 @@ secretName(std::string name, bool internal) } void -Cache::loadSecrets(std::vector> toLoad) +Cache::loadSecretsFromStore( + std::vector> toLoad, + std::function callback) { auto settings = UserSettings::instance()->qsettings(); @@ -394,12 +401,11 @@ Cache::loadSecrets(std::vector> toLoad) if (value.isEmpty()) { nhlog::db()->info("Restored empty secret '{}'.", name.toStdString()); } else { - std::unique_lock lock(secret_storage.mtx); - secret_storage.secrets[name.toStdString()] = value.toStdString(); + callback(name_, internal, value.toStdString()); } } // if we emit the databaseReady signal directly it won't be received - QTimer::singleShot(0, this, [this] { loadSecrets({}); }); + QTimer::singleShot(0, this, [this, callback] { loadSecretsFromStore({}, callback); }); return; } @@ -415,7 +421,8 @@ Cache::loadSecrets(std::vector> toLoad) connect(job, &QKeychain::ReadPasswordJob::finished, this, - [this, name, toLoad, job](QKeychain::Job *) mutable { + [this, name, toLoad, job, name_ = name_, internal = internal, callback]( + QKeychain::Job *) mutable { nhlog::db()->debug("Finished reading '{}'", toLoad.begin()->first); const QString secret = job->textData(); if (job->error() && job->error() != QKeychain::Error::EntryNotFound) { @@ -429,40 +436,72 @@ Cache::loadSecrets(std::vector> toLoad) if (secret.isEmpty()) { nhlog::db()->debug("Restored empty secret '{}'.", name.toStdString()); } else { - std::unique_lock lock(secret_storage.mtx); - secret_storage.secrets[name.toStdString()] = secret.toStdString(); + callback(name_, internal, secret.toStdString()); } // load next secret toLoad.erase(toLoad.begin()); // You can't start a job from the finish signal of a job. - QTimer::singleShot(0, this, [this, toLoad] { loadSecrets(toLoad); }); + QTimer::singleShot( + 0, this, [this, toLoad, callback] { loadSecretsFromStore(toLoad, callback); }); }); nhlog::db()->debug("Reading '{}'", name_); job->start(); } std::optional -Cache::secret(const std::string name_, bool internal) +Cache::secret(const std::string &name_, bool internal) { auto name = secretName(name_, internal); - std::unique_lock lock(secret_storage.mtx); - if (auto secret = secret_storage.secrets.find(name.toStdString()); - secret != secret_storage.secrets.end()) - return secret->second; - else + + auto txn = ro_txn(env_); + std::string_view value; + auto db_name = "secret." + name.toStdString(); + if (!syncStateDb_.get(txn, db_name, value)) return std::nullopt; + + mtx::secret_storage::AesHmacSha2EncryptedData data = nlohmann::json::parse(value); + + auto decrypted = mtx::crypto::decrypt(data, mtx::crypto::to_binary_buf(pickle_secret_), name_); + if (decrypted.empty()) + return std::nullopt; + else + return decrypted; } void -Cache::storeSecret(const std::string name_, const std::string secret, bool internal) +Cache::storeSecret(const std::string &name_, const std::string &secret, bool internal) { auto name = secretName(name_, internal); - { - std::unique_lock lock(secret_storage.mtx); - secret_storage.secrets[name.toStdString()] = secret; - } + + auto txn = lmdb::txn::begin(env_); + + auto encrypted = + mtx::crypto::encrypt(secret, mtx::crypto::to_binary_buf(pickle_secret_), name_); + + auto db_name = "secret." + name.toStdString(); + syncStateDb_.put(txn, db_name, nlohmann::json(encrypted).dump()); + txn.commit(); + emit secretChanged(name_); +} + +void +Cache::deleteSecret(const std::string &name_, bool internal) +{ + auto name = secretName(name_, internal); + + auto txn = lmdb::txn::begin(env_); + std::string_view value; + auto db_name = "secret." + name.toStdString(); + syncStateDb_.del(txn, db_name, value); + txn.commit(); +} + +void +Cache::storeSecretInStore(const std::string name_, const std::string secret) +{ + auto name = secretName(name_, true); auto settings = UserSettings::instance()->qsettings(); if (settings->value(QStringLiteral("run_without_secure_secrets_service"), false).toBool()) { @@ -503,13 +542,9 @@ Cache::storeSecret(const std::string name_, const std::string secret, bool inter } void -Cache::deleteSecret(const std::string name, bool internal) +Cache::deleteSecretFromStore(const std::string name, bool internal) { auto name_ = secretName(name, internal); - { - std::unique_lock lock(secret_storage.mtx); - secret_storage.secrets.erase(name_.toStdString()); - } auto settings = UserSettings::instance()->qsettings(); if (settings->value(QStringLiteral("run_without_secure_secrets_service"), false).toBool()) { @@ -535,13 +570,8 @@ std::string Cache::pickleSecret() { if (pickle_secret_.empty()) { - auto s = secret("pickle_secret", true); - if (!s) { - this->pickle_secret_ = mtx::client::utils::random_token(64, true); - storeSecret("pickle_secret", pickle_secret_, true); - } else { - this->pickle_secret_ = *s; - } + this->pickle_secret_ = mtx::client::utils::random_token(64, true); + storeSecretInStore("pickle_secret", pickle_secret_); } return pickle_secret_; @@ -909,6 +939,29 @@ Cache::getMegolmSessionData(const MegolmSessionIndex &index) // OLM sessions. // +void +Cache::saveOlmSessions(std::vector> sessions, + uint64_t timestamp) +{ + using namespace mtx::crypto; + + auto txn = lmdb::txn::begin(env_); + for (const auto &[curve25519, session] : sessions) { + auto db = getOlmSessionsDb(txn, curve25519); + + const auto pickled = pickle(session.get(), pickle_secret_); + const auto session_id = mtx::crypto::session_id(session.get()); + + StoredOlmSession stored_session; + stored_session.pickled_session = pickled; + stored_session.last_message_ts = timestamp; + + db.put(txn, session_id, nlohmann::json(stored_session).dump()); + } + + txn.commit(); +} + void Cache::saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session, @@ -936,19 +989,20 @@ Cache::getOlmSession(const std::string &curve25519, const std::string &session_i { using namespace mtx::crypto; - auto txn = lmdb::txn::begin(env_); - auto db = getOlmSessionsDb(txn, curve25519); + try { + auto txn = ro_txn(env_); + auto db = getOlmSessionsDb(txn, curve25519); - std::string_view pickled; - bool found = db.get(txn, session_id, pickled); + std::string_view pickled; + bool found = db.get(txn, session_id, pickled); - txn.commit(); + if (found) { + auto data = nlohmann::json::parse(pickled).get(); + return unpickle(data.pickled_session, pickle_secret_); + } - if (found) { - auto data = nlohmann::json::parse(pickled).get(); - return unpickle(data.pickled_session, pickle_secret_); + } catch (...) { } - return std::nullopt; } @@ -957,26 +1011,28 @@ Cache::getLatestOlmSession(const std::string &curve25519) { using namespace mtx::crypto; - auto txn = lmdb::txn::begin(env_); - auto db = getOlmSessionsDb(txn, curve25519); + try { + auto txn = ro_txn(env_); + auto db = getOlmSessionsDb(txn, curve25519); - std::string_view session_id, pickled_session; + std::string_view session_id, pickled_session; - std::optional currentNewest; + std::optional currentNewest; - auto cursor = lmdb::cursor::open(txn, db); - while (cursor.get(session_id, pickled_session, MDB_NEXT)) { - auto data = nlohmann::json::parse(pickled_session).get(); - if (!currentNewest || currentNewest->last_message_ts < data.last_message_ts) - currentNewest = data; + auto cursor = lmdb::cursor::open(txn, db); + while (cursor.get(session_id, pickled_session, MDB_NEXT)) { + auto data = nlohmann::json::parse(pickled_session).get(); + if (!currentNewest || currentNewest->last_message_ts < data.last_message_ts) + currentNewest = data; + } + cursor.close(); + + return currentNewest ? std::optional(unpickle(currentNewest->pickled_session, + pickle_secret_)) + : std::nullopt; + } catch (...) { + return std::nullopt; } - cursor.close(); - - txn.commit(); - - return currentNewest ? std::optional(unpickle(currentNewest->pickled_session, - pickle_secret_)) - : std::nullopt; } std::vector @@ -984,20 +1040,22 @@ Cache::getOlmSessions(const std::string &curve25519) { using namespace mtx::crypto; - auto txn = lmdb::txn::begin(env_); - auto db = getOlmSessionsDb(txn, curve25519); + try { + auto txn = ro_txn(env_); + auto db = getOlmSessionsDb(txn, curve25519); - std::string_view session_id, unused; - std::vector res; + std::string_view session_id, unused; + std::vector res; - auto cursor = lmdb::cursor::open(txn, db); - while (cursor.get(session_id, unused, MDB_NEXT)) - res.emplace_back(session_id); - cursor.close(); + auto cursor = lmdb::cursor::open(txn, db); + while (cursor.get(session_id, unused, MDB_NEXT)) + res.emplace_back(session_id); + cursor.close(); - txn.commit(); - - return res; + return res; + } catch (...) { + return {}; + } } void @@ -1147,11 +1205,7 @@ Cache::deleteData() nhlog::db()->info("deleted cache files from disk"); } - deleteSecret(mtx::secret_storage::secrets::megolm_backup_v1); - deleteSecret(mtx::secret_storage::secrets::cross_signing_master); - deleteSecret(mtx::secret_storage::secrets::cross_signing_user_signing); - deleteSecret(mtx::secret_storage::secrets::cross_signing_self_signing); - deleteSecret("pickle_secret", true); + deleteSecretFromStore("pickle_secret", true); } } @@ -1360,7 +1414,8 @@ Cache::runMigrations() }}, {"2021.08.31", [this]() { - storeSecret("pickle_secret", "secret", true); + storeSecretInStore("pickle_secret", "secret"); + this->pickle_secret_ = "secret"; return true; }}, {"2022.04.08", @@ -1416,6 +1471,22 @@ Cache::runMigrations() return false; } }}, + {"2022.11.06", + [this]() { + loadSecretsFromStore( + { + {mtx::secret_storage::secrets::cross_signing_master, false}, + {mtx::secret_storage::secrets::cross_signing_self_signing, false}, + {mtx::secret_storage::secrets::cross_signing_user_signing, false}, + {mtx::secret_storage::secrets::megolm_backup_v1, false}, + }, + [this](const std::string &name, bool internal, const std::string &value) { + this->storeSecret(name, value, internal); + QTimer::singleShot( + 0, this, [this, name, internal] { deleteSecretFromStore(name, internal); }); + }); + return true; + }}, }; nhlog::db()->info("Running migrations, this may take a while!"); @@ -1599,7 +1670,7 @@ Cache::calculateRoomReadStatus(const std::string &room_id) } void -Cache::updateState(const std::string &room, const mtx::responses::StateEvents &state) +Cache::updateState(const std::string &room, const mtx::responses::StateEvents &state, bool wipe) { auto txn = lmdb::txn::begin(env_); auto statesdb = getStatesDb(txn, room); @@ -1607,6 +1678,12 @@ Cache::updateState(const std::string &room, const mtx::responses::StateEvents &s auto membersdb = getMembersDb(txn, room); auto eventsDb = getEventsDb(txn, room); + if (wipe) { + membersdb.drop(txn); + statesdb.drop(txn); + stateskeydb.drop(txn); + } + saveStateEvents(txn, statesdb, stateskeydb, membersdb, eventsDb, room, state.events); RoomInfo updatedInfo; @@ -1948,7 +2025,8 @@ Cache::saveInvite(lmdb::txn &txn, auto display_name = msg->content.display_name.empty() ? msg->state_key : msg->content.display_name; - MemberInfo tmp{display_name, msg->content.avatar_url, msg->content.is_direct}; + MemberInfo tmp{ + display_name, msg->content.avatar_url, msg->content.reason, msg->content.is_direct}; membersdb.put(txn, msg->state_key, nlohmann::json(tmp).dump()); } else { @@ -2144,18 +2222,22 @@ Cache::roomIds() std::string Cache::previousBatchToken(const std::string &room_id) { - auto txn = lmdb::txn::begin(env_, nullptr); - auto orderDb = getEventOrderDb(txn, room_id); + auto txn = ro_txn(env_); + try { + auto orderDb = getEventOrderDb(txn, room_id); - auto cursor = lmdb::cursor::open(txn, orderDb); - std::string_view indexVal, val; - if (!cursor.get(indexVal, val, MDB_FIRST)) { + auto cursor = lmdb::cursor::open(txn, orderDb); + std::string_view indexVal, val; + if (!cursor.get(indexVal, val, MDB_FIRST)) { + return ""; + } + + auto j = nlohmann::json::parse(val); + + return j.value("prev_batch", ""); + } catch (...) { return ""; } - - auto j = nlohmann::json::parse(val); - - return j.value("prev_batch", ""); } Cache::Messages @@ -3070,6 +3152,29 @@ Cache::getMembers(const std::string &room_id, std::size_t startIndex, std::size_ } } +std::optional +Cache::getInviteMember(const std::string &room_id, const std::string &user_id) +{ + if (user_id.empty() || !env_.handle()) + return std::nullopt; + + try { + auto txn = ro_txn(env_); + + auto membersdb = getInviteMembersDb(txn, room_id); + + std::string_view info; + if (membersdb.get(txn, user_id, info)) { + MemberInfo m = nlohmann::json::parse(info).get(); + return m; + } + } catch (std::exception &e) { + nhlog::db()->warn( + "Failed to read member ({}) in invite room ({}): {}", user_id, room_id, e.what()); + } + return std::nullopt; +} + std::vector Cache::getMembersFromInvite(const std::string &room_id, std::size_t startIndex, std::size_t len) { @@ -3180,7 +3285,7 @@ Cache::firstPendingMessage(const std::string &room_id) auto txn = lmdb::txn::begin(env_); auto pending = getPendingMessagesDb(txn, room_id); - { + try { auto pendingCursor = lmdb::cursor::open(txn, pending); std::string_view tsIgnored, pendingTxn; while (pendingCursor.get(tsIgnored, pendingTxn, MDB_NEXT)) { @@ -3196,7 +3301,6 @@ Cache::firstPendingMessage(const std::string &room_id) from_json(nlohmann::json::parse(event), te); pendingCursor.close(); - txn.commit(); return te; } catch (std::exception &e) { nhlog::db()->error("Failed to parse message from cache {}", e.what()); @@ -3204,10 +3308,8 @@ Cache::firstPendingMessage(const std::string &room_id) continue; } } + } catch (const lmdb::error &e) { } - - txn.commit(); - return std::nullopt; } @@ -3777,9 +3879,9 @@ Cache::spaces() std::string_view room_data; if (roomsDb_.get(txn, space_id, room_data)) { RoomInfo tmp = nlohmann::json::parse(std::move(room_data)).get(); - ret.insert(QString::fromUtf8(space_id.data(), (qsizetype)space_id.size()), tmp); + ret.insert(QString::fromUtf8(space_id.data(), (int)space_id.size()), tmp); } else { - ret.insert(QString::fromUtf8(space_id.data(), (qsizetype)space_id.size()), + ret.insert(QString::fromUtf8(space_id.data(), (int)space_id.size()), std::nullopt); } } @@ -3969,33 +4071,36 @@ Cache::hasEnoughPowerLevel(const std::vector &eventTypes using namespace mtx::events; using namespace mtx::events::state; - auto txn = lmdb::txn::begin(env_); - auto db = getStatesDb(txn, room_id); + auto txn = ro_txn(env_); + try { + auto db = getStatesDb(txn, room_id); - int64_t min_event_level = std::numeric_limits::max(); - int64_t user_level = std::numeric_limits::min(); + int64_t min_event_level = std::numeric_limits::max(); + int64_t user_level = std::numeric_limits::min(); - std::string_view event; - bool res = db.get(txn, to_string(EventType::RoomPowerLevels), event); + std::string_view event; + bool res = db.get(txn, to_string(EventType::RoomPowerLevels), event); - if (res) { - try { - StateEvent msg = - nlohmann::json::parse(std::string_view(event.data(), event.size())) - .get>(); + if (res) { + try { + StateEvent msg = + nlohmann::json::parse(std::string_view(event.data(), event.size())) + .get>(); - user_level = msg.content.user_level(user_id); + user_level = msg.content.user_level(user_id); - for (const auto &ty : eventTypes) - min_event_level = std::min(min_event_level, msg.content.state_level(to_string(ty))); - } catch (const nlohmann::json::exception &e) { - nhlog::db()->warn("failed to parse m.room.power_levels event: {}", e.what()); + for (const auto &ty : eventTypes) + min_event_level = + std::min(min_event_level, msg.content.state_level(to_string(ty))); + } catch (const nlohmann::json::exception &e) { + nhlog::db()->warn("failed to parse m.room.power_levels event: {}", e.what()); + } } + + return user_level >= min_event_level; + } catch (...) { + return false; } - - txn.commit(); - - return user_level >= min_event_level; } std::vector @@ -4885,6 +4990,8 @@ to_json(nlohmann::json &j, const MemberInfo &info) j["avatar_url"] = info.avatar_url; if (info.is_direct) j["is_direct"] = info.is_direct; + if (!info.reason.empty()) + j["reason"] = info.reason; } void @@ -4893,6 +5000,7 @@ from_json(const nlohmann::json &j, MemberInfo &info) info.name = j.at("name").get(); info.avatar_url = j.at("avatar_url").get(); info.is_direct = j.value("is_direct", false); + info.reason = j.value("reason", ""); } void @@ -4938,7 +5046,7 @@ to_json(nlohmann::json &obj, const GroupSessionData &msg) void from_json(const nlohmann::json &obj, GroupSessionData &msg) { - msg.message_index = obj.at("message_index").get(); + msg.message_index = obj.at("message_index").get(); msg.timestamp = obj.value("ts", 0ULL); msg.trusted = obj.value("trust", true); diff --git a/src/Cache.h b/src/Cache.h index bb779866..c6a61b8f 100644 --- a/src/Cache.h +++ b/src/Cache.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CacheCryptoStructs.h b/src/CacheCryptoStructs.h index 04e852b4..f1d6184a 100644 --- a/src/CacheCryptoStructs.h +++ b/src/CacheCryptoStructs.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -33,7 +34,7 @@ struct DeviceKeysToMsgIndex // map from device key to message_index // Using the device id is safe because we check for reuse on device list updates // Using the device id makes our logic much easier to read. - std::map deviceids; + std::map deviceids; }; struct SharedWithUsers @@ -45,8 +46,8 @@ struct SharedWithUsers // Extra information associated with an outbound megolm session. struct GroupSessionData { - uint64_t message_index = 0; uint64_t timestamp = 0; + uint32_t message_index = 0; // If we got the session via key sharing or forwarding, we can usually trust it. // If it came from asymmetric key backup, it is not trusted. diff --git a/src/CacheStructs.h b/src/CacheStructs.h index 459ced5a..bf8741ea 100644 --- a/src/CacheStructs.h +++ b/src/CacheStructs.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -93,8 +94,8 @@ struct RoomInfo //! Use the TimelineModel::lastMessage for an accurate timestamp. uint64_t approximate_last_modification_ts = 0; - uint16_t highlight_count = 0; - uint16_t notification_count = 0; + uint64_t highlight_count = 0; + uint64_t notification_count = 0; }; void @@ -107,6 +108,7 @@ struct MemberInfo { std::string name; std::string avatar_url; + std::string reason; bool is_direct = false; }; diff --git a/src/Cache_p.h b/src/Cache_p.h index 1694adb7..69d0240e 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -2,6 +2,7 @@ // SPDX-FileCopyrightText: 2019 The nheko authors // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -118,7 +119,9 @@ public: std::size_t len = 30); size_t memberCount(const std::string &room_id); - void updateState(const std::string &room, const mtx::responses::StateEvents &state); + void updateState(const std::string &room, + const mtx::responses::StateEvents &state, + bool wipe = false); void saveState(const mtx::responses::Sync &res); bool isInitialized(); bool isDatabaseReady() { return databaseReady_ && isInitialized(); } @@ -244,6 +247,8 @@ public: //! Check if a user is a member of the room. bool isRoomMember(const std::string &user_id, const std::string &room_id); + std::optional + getInviteMember(const std::string &room_id, const std::string &user_id); // // Outbound Megolm Sessions @@ -277,6 +282,8 @@ public: void saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session, uint64_t timestamp); + void saveOlmSessions(std::vector> sessions, + uint64_t timestamp); std::vector getOlmSessions(const std::string &curve25519); std::optional getOlmSession(const std::string &curve25519, const std::string &session_id); @@ -289,9 +296,9 @@ public: void deleteBackupVersion(); std::optional backupVersion(); - void storeSecret(const std::string name, const std::string secret, bool internal = false); - void deleteSecret(const std::string name, bool internal = false); - std::optional secret(const std::string name, bool internal = false); + void storeSecret(const std::string &name, const std::string &secret, bool internal = false); + void deleteSecret(const std::string &name, bool internal = false); + std::optional secret(const std::string &name, bool internal = false); std::string pickleSecret(); @@ -322,7 +329,12 @@ signals: void databaseReady(); private: - void loadSecrets(std::vector> toLoad); + void loadSecretsFromStore( + std::vector> toLoad, + std::function + callback); + void storeSecretInStore(const std::string name, const std::string secret); + void deleteSecretFromStore(const std::string name, bool internal); //! Save an invited room. void saveInvite(lmdb::txn &txn, @@ -389,7 +401,7 @@ private: e->content.display_name.empty() ? e->state_key : e->content.display_name; // Lightweight representation of a member. - MemberInfo tmp{display_name, e->content.avatar_url}; + MemberInfo tmp{display_name, e->content.avatar_url, e->content.reason}; membersdb.put(txn, e->state_key, nlohmann::json(tmp).dump()); break; @@ -400,6 +412,8 @@ private: } } + // BUG(Nico): Ideally we would fall through and store this in the database, but it seems + // to currently corrupt the db sometimes, so... let's find that bug first! return; } else if (std::holds_alternative>(event)) { setEncryptedRoom(txn, room_id); @@ -683,7 +697,6 @@ private: std::string pickle_secret_; VerificationStorage verification_storage; - SecretsStorage secret_storage; bool databaseReady_ = false; }; diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 756ef425..c5d3d012 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -152,16 +153,7 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) connect(notificationsManager, &NotificationsManager::sendNotificationReply, this, - [this](const QString &roomid, const QString &eventid, const QString &body) { - view_manager_->queueReply(roomid, eventid, body); - auto exWin = MainWindow::instance()->windowForRoom(roomid); - if (exWin) { - exWin->requestActivate(); - } else { - view_manager_->rooms()->setCurrentRoom(roomid); - MainWindow::instance()->requestActivate(); - } - }); + &ChatPage::sendNotificationReply); connect( this, @@ -179,7 +171,8 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) static unsigned int prevNotificationCount = 0; unsigned int notificationCount = 0; for (const auto &room : sync.rooms.join) { - notificationCount += room.second.unread_notifications.notification_count; + notificationCount += + static_cast(room.second.unread_notifications.notification_count); } // HACK: If we had less notifications last time we checked, send an alert if the @@ -269,7 +262,23 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) cache::getEventIndex(room_id, cache::client()->getFullyReadEventId(room_id)); auto ctx = roomModel->pushrulesRoomContext(); + std::vector< + std::pair> + relatedEvents; + for (const auto &event : room.timeline.events) { + auto event_id = mtx::accessors::event_id(event); + + // skip already read events + if (currentReadMarker && + currentReadMarker > cache::getEventIndex(room_id, event_id)) + continue; + + // skip our messages + auto sender = mtx::accessors::sender(event); + if (sender == http::client()->user_id().to_string()) + continue; + mtx::events::collections::TimelineEvent te{event}; std::visit([room_id = room_id](auto &event_) { event_.room_id = room_id; }, te.data); @@ -285,18 +294,29 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) te.data = result.event.value(); } - auto actions = pushrules->evaluate(te, ctx); + relatedEvents.clear(); + for (const auto &r : mtx::accessors::relations(te.data).relations) { + auto related = cache::client()->getEvent(room_id, r.event_id); + if (related) { + relatedEvents.emplace_back(r, *related); + if (auto encryptedEvent = std::get_if< + mtx::events::EncryptedEvent>( + &related->data); + encryptedEvent && userSettings_->decryptNotifications()) { + MegolmSessionIndex index(room_id, encryptedEvent->content); + + auto result = olm::decryptEvent(index, *encryptedEvent); + if (result.event) + relatedEvents.back().second.data = result.event.value(); + } + } + } + + auto actions = pushrules->evaluate(te, ctx, relatedEvents); if (std::find(actions.begin(), actions.end(), mtx::pushrules::actions::Action{ mtx::pushrules::actions::notify{}}) != actions.end()) { - auto event_id = mtx::accessors::event_id(event); - - // skip already read events - if (currentReadMarker && - currentReadMarker > cache::getEventIndex(room_id, event_id)) - continue; - if (!cache::isNotificationSent(event_id)) { // We should only send one notification per event. cache::markSentNotification(event_id); @@ -386,6 +406,21 @@ ChatPage::dropToLoginPage(const QString &msg) http::client()->shutdown(); connectivityTimer_.stop(); + auto btn = QMessageBox::warning( + nullptr, + tr("Confirm logout"), + tr("Because of the following reason Nheko wants to drop you to the login page:\n%1\nIf you " + "think this is a mistake, you can close Nheko instead to possibly recover your encryption " + "keys. After you have been dropped to the login page, you can sign in again using your " + "usual methods.") + .arg(msg), + QMessageBox::StandardButton::Close | QMessageBox::StandardButton::Ok, + QMessageBox::StandardButton::Ok); + if (btn == QMessageBox::StandardButton::Close) { + QCoreApplication::exit(1); + exit(1); + } + resetUI(); deleteConfigs(); @@ -1064,13 +1099,16 @@ ChatPage::verifyOneTimeKeyCountAfterStartup() } std::map key_counts; - auto count = 0; + std::uint64_t count = 0; if (auto c = res.one_time_key_counts.find(mtx::crypto::SIGNED_CURVE25519); c == res.one_time_key_counts.end()) { key_counts[mtx::crypto::SIGNED_CURVE25519] = 0; } else { - key_counts[mtx::crypto::SIGNED_CURVE25519] = c->second; - count = c->second; + key_counts[mtx::crypto::SIGNED_CURVE25519] = + c->second > std::numeric_limits::max() + ? std::numeric_limits::max() + : static_cast(c->second); + count = c->second; } nhlog::crypto()->info( @@ -1579,6 +1617,19 @@ ChatPage::handleMatrixUri(QString uri) return false; } +void +ChatPage::sendNotificationReply(const QString &roomid, const QString &eventid, const QString &body) +{ + view_manager_->queueReply(roomid, eventid, body); + auto exWin = MainWindow::instance()->windowForRoom(roomid); + if (exWin) { + exWin->requestActivate(); + } else { + view_manager_->rooms()->setCurrentRoom(roomid); + MainWindow::instance()->requestActivate(); + } +} + bool ChatPage::handleMatrixUri(const QUrl &uri) { diff --git a/src/ChatPage.h b/src/ChatPage.h index 1bb25dc2..0ac39faa 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -78,6 +79,11 @@ public: //! Check if the given room is currently open. bool isRoomActive(const QString &room_id); + const std::unique_ptr &pushruleEvaluator() const + { + return pushrules; + } + public slots: bool handleMatrixUri(QString uri); bool handleMatrixUri(const QUrl &uri); @@ -105,6 +111,7 @@ public slots: void receivedSessionKey(const std::string &room_id, const std::string &session_id); void decryptDownloadedSecrets(mtx::secret_storage::AesHmacSha2KeyDescription keyDesc, const SecretsToDecrypt &secrets); + void sendNotificationReply(const QString &roomid, const QString &eventid, const QString &body); signals: void connectionLost(); void connectionRestored(); diff --git a/src/Clipboard.cpp b/src/Clipboard.cpp index 72a954ce..51f9b225 100644 --- a/src/Clipboard.cpp +++ b/src/Clipboard.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Clipboard.h b/src/Clipboard.h index 568604b0..213a19fa 100644 --- a/src/Clipboard.h +++ b/src/Clipboard.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ColorImageProvider.cpp b/src/ColorImageProvider.cpp index 6a38c46c..70cc334c 100644 --- a/src/ColorImageProvider.cpp +++ b/src/ColorImageProvider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ColorImageProvider.h b/src/ColorImageProvider.h index c416d7ec..e8812928 100644 --- a/src/ColorImageProvider.h +++ b/src/ColorImageProvider.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CombinedImagePackModel.cpp b/src/CombinedImagePackModel.cpp index 8847fe65..0841ff7d 100644 --- a/src/CombinedImagePackModel.cpp +++ b/src/CombinedImagePackModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CombinedImagePackModel.h b/src/CombinedImagePackModel.h index 49979fca..2ab82857 100644 --- a/src/CombinedImagePackModel.h +++ b/src/CombinedImagePackModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CommandCompleter.cpp b/src/CommandCompleter.cpp new file mode 100644 index 00000000..4cc61291 --- /dev/null +++ b/src/CommandCompleter.cpp @@ -0,0 +1,235 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "CommandCompleter.h" + +#include "CompletionModelRoles.h" + +CommandCompleter::CommandCompleter(QObject *parent) + : QAbstractListModel(parent) +{ +} + +QHash +CommandCompleter::roleNames() const +{ + return { + {CompletionModel::CompletionRole, "completionRole"}, + {CompletionModel::SearchRole, "searchRole"}, + {CompletionModel::SearchRole2, "searchRole2"}, + {Roles::Name, "name"}, + {Roles::Description, "description"}, + }; +} + +QVariant +CommandCompleter::data(const QModelIndex &index, int role) const +{ + if (hasIndex(index.row(), index.column(), index.parent())) { + switch (role) { + case CompletionModel::CompletionRole: + // append space where applicable in a completion + switch (index.row()) { + case Me: + return QString("/me "); + case React: + return QString("/react "); + case Join: + return QString("/join "); + case Knock: + return QString("/knock "); + case Part: + return QString("/part "); + case Leave: + return QString("/leave "); + case Invite: + return QString("/invite @"); + case Kick: + return QString("/kick @"); + case Ban: + return QString("/ban @"); + case Unban: + return QString("/unban @"); + case Redact: + return QString("/redact "); + case Roomnick: + return QString("/roomnick "); + case Shrug: + return QString("/shrug"); + case Fliptable: + return QString("/fliptable"); + case Unfliptable: + return QString("/unfliptable"); + case Sovietflip: + return QString("/sovietflip"); + case ClearTimeline: + return QString("/clear-timeline"); + case ResetState: + return QString("/reset-state"); + case RotateMegolmSession: + return QString("/rotate-megolm-session"); + case Md: + return QString("/md "); + case Plain: + return QString("/plain "); + case Rainbow: + return QString("/rainbow "); + case RainbowMe: + return QString("/rainbowme "); + case Notice: + return QString("/notice "); + case RainbowNotice: + return QString("/rainbownotice "); + case Confetti: + return QString("/confetti "); + case RainbowConfetti: + return QString("/rainbowconfetti "); + case Goto: + return QString("/goto "); + case ConvertToDm: + return QString("/converttodm"); + case ConvertToRoom: + return QString("/converttoroom"); + default: + return {}; + } + case CompletionModel::SearchRole: + case Qt::DisplayRole: + case Roles::Name: + switch (index.row()) { + case Me: + return tr("/me "); + case React: + return tr("/react "); + case Join: + return tr("/join (!roomid|#alias) [reason]"); + case Knock: + return tr("/knock (!roomid|#alias) [reason]"); + case Part: + return tr("/part [reason]"); + case Leave: + return tr("/leave [reason]"); + case Invite: + return tr("/invite @userid [reason]"); + case Kick: + return tr("/kick @userid [reason]"); + case Ban: + return tr("/ban @userid [reason]"); + case Unban: + return tr("/unban @userid [reason]"); + case Redact: + return tr("/redact ($eventid|@userid)"); + case Roomnick: + return tr("/roomnick "); + case Shrug: + return tr("/shrug [message]"); + case Fliptable: + return tr("/fliptable"); + case Unfliptable: + return tr("/unfliptable"); + case Sovietflip: + return tr("/sovietflip"); + case ClearTimeline: + return tr("/clear-timeline"); + case ResetState: + return tr("/reset-state"); + case RotateMegolmSession: + return tr("/rotate-megolm-session"); + case Md: + return tr("/md [message]"); + case Plain: + return tr("/plain [message]"); + case Rainbow: + return tr("/rainbow [message]"); + case RainbowMe: + return tr("/rainbowme [message]"); + case Notice: + return tr("/notice [message]"); + case RainbowNotice: + return tr("/rainbownotice [message]"); + case Confetti: + return tr("/confetti [message]"); + case RainbowConfetti: + return tr("/rainbowconfetti [message]"); + case Goto: + return tr("/goto ($eventid|message index|matrix:r/room/e/event)"); + case ConvertToDm: + return tr("/converttodm"); + case ConvertToRoom: + return tr("/converttoroom"); + default: + return {}; + } + case CompletionModel::SearchRole2: + case Roles::Description: + switch (index.row()) { + case Me: + return tr("Send a message expressing an action."); + case React: + return tr("Send as a reaction when you’re replying to a message."); + case Join: + return tr("Join a room. Reason is optional."); + case Knock: + return tr("Ask to join a room. Reason is optional."); + case Part: + return tr("Leave a room. Reason is optional."); + case Leave: + return tr("Leave a room. Reason is optional."); + case Invite: + return tr("Invite a user into the current room. Reason is optional."); + case Kick: + return tr("Kick a user from the current room. Reason is optional."); + case Ban: + return tr("Ban a user from the current room. Reason is optional."); + case Unban: + return tr("Unban a user in the current room. Reason is optional."); + case Redact: + return tr("Redact an event or all locally cached messages of a user."); + case Roomnick: + return tr("Change your displayname in this room."); + case Shrug: + return tr("¯\\_(ツ)_/¯ with an optional message."); + case Fliptable: + return tr("(╯°□°)╯︵ ┻━┻"); + case Unfliptable: + return tr("┯━┯╭( º _ º╭)"); + case Sovietflip: + return tr("ノ┬─┬ノ ︵ ( \\o°o)\\"); + case ClearTimeline: + return tr("Clear the currently cached messages in this room."); + case ResetState: + return tr("Refetch the state in this room."); + case RotateMegolmSession: + return tr("Rotate the current symmetric encryption key."); + case Md: + return tr("Send a markdown formatted message (ignoring the global setting)."); + case Plain: + return tr("Send an unformatted message (ignoring the global setting)."); + case Rainbow: + return tr("Send a message in rainbow colors."); + case RainbowMe: + return tr("Send /me in rainbow colors."); + case Notice: + return tr("Send a bot message."); + case RainbowNotice: + return tr("Send a bot message in rainbow colors."); + case Confetti: + return tr("Send a message with confetti."); + case RainbowConfetti: + return tr("Send a message in rainbow colors with confetti."); + case Goto: + return tr("Go to this event or link."); + case ConvertToDm: + return tr("Convert this room to a direct chat."); + case ConvertToRoom: + return tr("Convert this direct chat into a room."); + default: + return {}; + } + } + } + return {}; +} diff --git a/src/CommandCompleter.h b/src/CommandCompleter.h new file mode 100644 index 00000000..24242209 --- /dev/null +++ b/src/CommandCompleter.h @@ -0,0 +1,64 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include +#include + +class CommandCompleter final : public QAbstractListModel +{ +public: + enum Roles + { + Name = Qt::UserRole, + Description, + }; + + enum Commands + { + Me, + React, + Join, + Knock, + Part, + Leave, + Invite, + Kick, + Ban, + Unban, + Redact, + Roomnick, + Shrug, + Fliptable, + Unfliptable, + Sovietflip, + ClearTimeline, + ResetState, + RotateMegolmSession, + Md, + Plain, + Rainbow, + RainbowMe, + Notice, + RainbowNotice, + Confetti, + RainbowConfetti, + Goto, + ConvertToDm, + ConvertToRoom, + COUNT, + }; + + CommandCompleter(QObject *parent = nullptr); + QHash roleNames() const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override + { + (void)parent; + return (int)Commands::COUNT; + } + QVariant data(const QModelIndex &index, int role) const override; +}; diff --git a/src/CompletionModelRoles.h b/src/CompletionModelRoles.h index 96eb1ade..7fd96599 100644 --- a/src/CompletionModelRoles.h +++ b/src/CompletionModelRoles.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CompletionProxyModel.cpp b/src/CompletionProxyModel.cpp index f46a6367..c7018841 100644 --- a/src/CompletionProxyModel.cpp +++ b/src/CompletionProxyModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CompletionProxyModel.h b/src/CompletionProxyModel.h index 6bf2eb35..4d9c9f0e 100644 --- a/src/CompletionProxyModel.h +++ b/src/CompletionProxyModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Config.h b/src/Config.h index 5a742337..ba9564f0 100644 --- a/src/Config.h +++ b/src/Config.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/EventAccessors.cpp b/src/EventAccessors.cpp index da0eeff2..86ffc8b3 100644 --- a/src/EventAccessors.cpp +++ b/src/EventAccessors.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/EventAccessors.h b/src/EventAccessors.h index 8e130c29..ce262960 100644 --- a/src/EventAccessors.h +++ b/src/EventAccessors.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ImagePackListModel.cpp b/src/ImagePackListModel.cpp index fac8f10f..1360ed3e 100644 --- a/src/ImagePackListModel.cpp +++ b/src/ImagePackListModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ImagePackListModel.h b/src/ImagePackListModel.h index 9190eb8c..5e1985a7 100644 --- a/src/ImagePackListModel.h +++ b/src/ImagePackListModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/InviteesModel.cpp b/src/InviteesModel.cpp index 8e30847c..52dd4e43 100644 --- a/src/InviteesModel.cpp +++ b/src/InviteesModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/InviteesModel.h b/src/InviteesModel.h index 004f37ca..91b89a21 100644 --- a/src/InviteesModel.h +++ b/src/InviteesModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/JdenticonProvider.cpp b/src/JdenticonProvider.cpp index 22d2b887..fada4c3a 100644 --- a/src/JdenticonProvider.cpp +++ b/src/JdenticonProvider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -104,7 +105,8 @@ JdenticonRunnable::run() painter.setRenderHint(QPainter::SmoothPixmapTransform, true); try { - QSvgRenderer renderer{jdenticon->generate(m_key, m_requestedSize.width()).toUtf8()}; + QSvgRenderer renderer{ + jdenticon->generate(m_key, static_cast(m_requestedSize.width())).toUtf8()}; renderer.render(&painter); } catch (std::exception &e) { nhlog::ui()->error( diff --git a/src/JdenticonProvider.h b/src/JdenticonProvider.h index d8fdbb42..b89126fe 100644 --- a/src/JdenticonProvider.h +++ b/src/JdenticonProvider.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Logging.cpp b/src/Logging.cpp index cd72e395..c41d3f82 100644 --- a/src/Logging.cpp +++ b/src/Logging.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Logging.h b/src/Logging.h index 23ff8236..3d52f2d9 100644 --- a/src/Logging.h +++ b/src/Logging.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 567e8c82..d243691c 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/LoginPage.h b/src/LoginPage.h index 7e9b601c..bca7f9ca 100644 --- a/src/LoginPage.h +++ b/src/LoginPage.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 1d743844..dcb4be49 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MainWindow.h b/src/MainWindow.h index f567c93e..1664f849 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MatrixClient.cpp b/src/MatrixClient.cpp index e1c890ed..945a5a73 100644 --- a/src/MatrixClient.cpp +++ b/src/MatrixClient.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -10,6 +11,7 @@ #include #include +#include #include #include "nlohmann/json.hpp" @@ -33,7 +35,13 @@ namespace http { mtx::http::Client * client() { - static auto client_ = std::make_shared(); + static auto client_ = [] { + auto c = std::make_shared(); + c->alt_svc_cache_path((QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + + "/curl_alt_svc_cache.txt") + .toStdString()); + return c; + }(); return client_.get(); } diff --git a/src/MatrixClient.h b/src/MatrixClient.h index 2de19e2d..4d313e45 100644 --- a/src/MatrixClient.h +++ b/src/MatrixClient.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MemberList.cpp b/src/MemberList.cpp index 916192c0..e4a3580e 100644 --- a/src/MemberList.cpp +++ b/src/MemberList.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MemberList.h b/src/MemberList.h index f7d2cac6..6a5091db 100644 --- a/src/MemberList.h +++ b/src/MemberList.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index 3022ca3d..33f691da 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -16,6 +17,8 @@ #include #include #include +#include +#include #include "Logging.h" #include "MatrixClient.h" @@ -23,6 +26,40 @@ QHash infos; +MxcImageProvider::MxcImageProvider(QObject *parent) +#if QT_VERSION < 0x60000 + : QObject(parent) +#else + : QQuickAsyncImageProvider(parent) +#endif +{ + auto timer = new QTimer(this); + timer->setInterval(std::chrono::hours(1)); + connect(timer, &QTimer::timeout, this, [] { + QThreadPool::globalInstance()->start([] { + QDir dir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + + "/media_cache", + "", + QDir::SortFlags(QDir::Name | QDir::IgnoreCase), + QDir::Filter::Writable | QDir::Filter::NoDotAndDotDot | QDir::Filter::Files); + + auto files = dir.entryInfoList(); + for (const auto &fileInfo : qAsConst(files)) { + if (fileInfo.fileTime(QFile::FileTime::FileAccessTime) + .daysTo(QDateTime::currentDateTime()) > 30) { + if (QFile::remove(fileInfo.absoluteFilePath())) + nhlog::net()->debug("Deleted stale media '{}'", + fileInfo.absoluteFilePath().toStdString()); + else + nhlog::net()->warn("Failed to delete stale media '{}'", + fileInfo.absoluteFilePath().toStdString()); + } + } + }); + }); + timer->start(); +} + QQuickImageResponse * MxcImageProvider::requestImageResponse(const QString &id, const QSize &requestedSize) { @@ -97,6 +134,24 @@ clipRadius(QImage img, double radius) return out; } +static void +possiblyUpdateAccessTime(const QFileInfo &fileInfo) +{ + if (fileInfo.fileTime(QFile::FileTime::FileAccessTime).daysTo(QDateTime::currentDateTime()) > + 7) { + nhlog::net()->debug("Updating file time for '{}'", + fileInfo.absoluteFilePath().toStdString()); + + QFile f(fileInfo.absoluteFilePath()); + + if (!f.open(QIODevice::ReadWrite) || + !f.setFileTime(QDateTime::currentDateTime(), QFile::FileTime::FileAccessTime)) { + nhlog::net()->warn("Failed to update filetime for '{}'", + fileInfo.absoluteFilePath().toStdString()); + } + } +} + void MxcImageProvider::download(const QString &id, const QSize &requestedSize, @@ -141,6 +196,8 @@ MxcImageProvider::download(const QString &id, if (fileInfo.exists()) { QImage image = utils::readImageFromFile(fileInfo.absoluteFilePath()); if (!image.isNull()) { + possiblyUpdateAccessTime(fileInfo); + if (requestedSize.width() <= 0) { image = image.scaledToHeight(requestedSize.height(), Qt::SmoothTransformation); } else { @@ -169,9 +226,10 @@ MxcImageProvider::download(const QString &id, mtx::http::ThumbOpts opts; opts.mxc_url = "mxc://" + id.toStdString(); - opts.width = requestedSize.width() > 0 ? requestedSize.width() : -1; - opts.height = requestedSize.height() > 0 ? requestedSize.height() : -1; - opts.method = crop ? "crop" : "scale"; + opts.width = static_cast(requestedSize.width() > 0 ? requestedSize.width() : -1); + opts.height = + static_cast(requestedSize.height() > 0 ? requestedSize.height() : -1); + opts.method = crop ? "crop" : "scale"; http::client()->get_thumbnail( opts, [fileInfo, requestedSize, radius, then, id, crop, cropLocally]( @@ -184,6 +242,8 @@ MxcImageProvider::download(const QString &id, auto data = QByteArray(res.data(), (int)res.size()); QImage image = utils::readImage(data); if (!image.isNull()) { + possiblyUpdateAccessTime(fileInfo); + if (requestedSize.width() <= 0) { image = image.scaledToHeight(requestedSize.height(), Qt::SmoothTransformation); @@ -237,6 +297,7 @@ MxcImageProvider::download(const QString &id, QImage image = utils::readImage(data); image.setText(QStringLiteral("mxc url"), "mxc://" + id); if (!image.isNull()) { + possiblyUpdateAccessTime(fileInfo); if (radius != 0) { image = clipRadius(std::move(image), radius); } @@ -247,6 +308,7 @@ MxcImageProvider::download(const QString &id, } else { QImage image = utils::readImageFromFile(fileInfo.absoluteFilePath()); if (!image.isNull()) { + possiblyUpdateAccessTime(fileInfo); if (radius != 0) { image = clipRadius(std::move(image), radius); } diff --git a/src/MxcImageProvider.h b/src/MxcImageProvider.h index 9d5aaabc..097a3657 100644 --- a/src/MxcImageProvider.h +++ b/src/MxcImageProvider.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -80,6 +81,10 @@ class MxcImageProvider public QQuickAsyncImageProvider { Q_OBJECT + +public: + MxcImageProvider(QObject *parent = nullptr); + public slots: QQuickImageResponse * requestImageResponse(const QString &id, const QSize &requestedSize) override; diff --git a/src/PowerlevelsEditModels.cpp b/src/PowerlevelsEditModels.cpp index 2c2d4a7f..9a8e12dc 100644 --- a/src/PowerlevelsEditModels.cpp +++ b/src/PowerlevelsEditModels.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/PowerlevelsEditModels.h b/src/PowerlevelsEditModels.h index d0593f09..bafedabc 100644 --- a/src/PowerlevelsEditModels.h +++ b/src/PowerlevelsEditModels.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ReadReceiptsModel.cpp b/src/ReadReceiptsModel.cpp index 2b1cdc74..7a81690c 100644 --- a/src/ReadReceiptsModel.cpp +++ b/src/ReadReceiptsModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -85,8 +86,9 @@ ReadReceiptsModel::addUsers( auto newReceipts = users.size() - readReceipts_.size(); if (newReceipts > 0) { - beginInsertRows( - QModelIndex{}, readReceipts_.size(), readReceipts_.size() + newReceipts - 1); + beginInsertRows(QModelIndex{}, + static_cast(readReceipts_.size()), + static_cast(readReceipts_.size() + newReceipts - 1)); for (const auto &user : users) { QPair item = {QString::fromStdString(user.second), diff --git a/src/ReadReceiptsModel.h b/src/ReadReceiptsModel.h index 48b1a598..e072b635 100644 --- a/src/ReadReceiptsModel.h +++ b/src/ReadReceiptsModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RegisterPage.cpp b/src/RegisterPage.cpp index 82302858..0db0427c 100644 --- a/src/RegisterPage.cpp +++ b/src/RegisterPage.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RegisterPage.h b/src/RegisterPage.h index 9a4e052b..9d81f477 100644 --- a/src/RegisterPage.h +++ b/src/RegisterPage.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RoomDirectoryModel.cpp b/src/RoomDirectoryModel.cpp index 428b0040..c6d45995 100644 --- a/src/RoomDirectoryModel.cpp +++ b/src/RoomDirectoryModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RoomDirectoryModel.h b/src/RoomDirectoryModel.h index b0768997..54938561 100644 --- a/src/RoomDirectoryModel.h +++ b/src/RoomDirectoryModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RoomsModel.cpp b/src/RoomsModel.cpp index 8abcb32e..476a2d8b 100644 --- a/src/RoomsModel.cpp +++ b/src/RoomsModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -7,6 +8,7 @@ #include +#include "Cache.h" #include "Cache_p.h" #include "CompletionModelRoles.h" #include "UserSettingsPage.h" diff --git a/src/RoomsModel.h b/src/RoomsModel.h index 8571e4bb..b2f4e44e 100644 --- a/src/RoomsModel.h +++ b/src/RoomsModel.h @@ -1,11 +1,12 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once -#include "Cache.h" +#include "CacheStructs.h" #include #include diff --git a/src/SSOHandler.cpp b/src/SSOHandler.cpp index 36580ae2..4fed776d 100644 --- a/src/SSOHandler.cpp +++ b/src/SSOHandler.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/SSOHandler.h b/src/SSOHandler.h index 3fd4effd..ab7887ad 100644 --- a/src/SSOHandler.h +++ b/src/SSOHandler.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/SingleImagePackModel.cpp b/src/SingleImagePackModel.cpp index 9d8c3409..40f44fb2 100644 --- a/src/SingleImagePackModel.cpp +++ b/src/SingleImagePackModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/SingleImagePackModel.h b/src/SingleImagePackModel.h index 3040f53e..2f558ece 100644 --- a/src/SingleImagePackModel.h +++ b/src/SingleImagePackModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/TrayIcon.cpp b/src/TrayIcon.cpp index 336da129..1e33ac8d 100644 --- a/src/TrayIcon.cpp +++ b/src/TrayIcon.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/TrayIcon.h b/src/TrayIcon.h index 519f9d14..18bbf9b5 100644 --- a/src/TrayIcon.h +++ b/src/TrayIcon.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index b91b5a29..2bb8a118 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -70,9 +71,10 @@ UserSettings::load(std::optional profile) settings.value(QStringLiteral("user/timeline/message_hover_highlight"), false).toBool(); enlargeEmojiOnlyMessages_ = settings.value(QStringLiteral("user/timeline/enlarge_emoji_only_msg"), false).toBool(); - markdown_ = settings.value(QStringLiteral("user/markdown_enabled"), true).toBool(); - bubbles_ = settings.value(QStringLiteral("user/bubbles_enabled"), false).toBool(); - smallAvatars_ = settings.value(QStringLiteral("user/small_avatars_enabled"), false).toBool(); + markdown_ = settings.value(QStringLiteral("user/markdown_enabled"), true).toBool(); + invertEnterKey_ = settings.value(QStringLiteral("user/invert_enter_key"), false).toBool(); + bubbles_ = settings.value(QStringLiteral("user/bubbles_enabled"), false).toBool(); + smallAvatars_ = settings.value(QStringLiteral("user/small_avatars_enabled"), false).toBool(); animateImagesOnHover_ = settings.value(QStringLiteral("user/animate_images_on_hover"), false).toBool(); typingNotifications_ = @@ -91,6 +93,7 @@ UserSettings::load(std::optional profile) decryptNotifications_ = settings.value(QStringLiteral("user/decrypt_notifications"), true).toBool(); spaceNotifications_ = settings.value(QStringLiteral("user/space_notifications"), true).toBool(); + fancyEffects_ = settings.value(QStringLiteral("user/fancy_effects"), true).toBool(); privacyScreen_ = settings.value(QStringLiteral("user/privacy_screen"), false).toBool(); privacyScreenTimeout_ = settings.value(QStringLiteral("user/privacy_screen_timeout"), 0).toInt(); @@ -289,6 +292,17 @@ UserSettings::setMarkdown(bool state) save(); } +void +UserSettings::setInvertEnterKey(bool state) +{ + if (state == invertEnterKey_) + return; + + invertEnterKey_ = state; + emit invertEnterKeyChanged(state); + save(); +} + void UserSettings::setBubbles(bool state) { @@ -447,6 +461,16 @@ UserSettings::setSpaceNotifications(bool state) save(); } +void +UserSettings::setFancyEffects(bool state) +{ + if (state == fancyEffects_) + return; + fancyEffects_ = state; + emit fancyEffectsChanged(state); + save(); +} + void UserSettings::setPrivacyScreen(bool state) { @@ -810,6 +834,7 @@ UserSettings::save() settings.setValue(QStringLiteral("decrypt_sidebar"), decryptSidebar_); settings.setValue(QStringLiteral("decrypt_notificatons"), decryptNotifications_); settings.setValue(QStringLiteral("space_notifications"), spaceNotifications_); + settings.setValue(QStringLiteral("fancy_effects"), fancyEffects_); settings.setValue(QStringLiteral("privacy_screen"), privacyScreen_); settings.setValue(QStringLiteral("privacy_screen_timeout"), privacyScreenTimeout_); settings.setValue(QStringLiteral("mobile_mode"), mobileMode_); @@ -820,6 +845,7 @@ UserSettings::save() settings.setValue(QStringLiteral("read_receipts"), readReceipts_); settings.setValue(QStringLiteral("group_view"), groupView_); settings.setValue(QStringLiteral("markdown_enabled"), markdown_); + settings.setValue(QStringLiteral("invert_enter_key"), invertEnterKey_); settings.setValue(QStringLiteral("bubbles_enabled"), bubbles_); settings.setValue(QStringLiteral("small_avatars_enabled"), smallAvatars_); settings.setValue(QStringLiteral("animate_images_on_hover"), animateImagesOnHover_); @@ -927,6 +953,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr("Communities sidebar"); case Markdown: return tr("Send messages as Markdown"); + case InvertEnterKey: + return tr("Use shift+enter to send and enter to start a new line"); case Bubbles: return tr("Enable message bubbles"); case SmallAvatars: @@ -961,6 +989,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr("Decrypt notifications"); case SpaceNotifications: return tr("Show message counts for communities and tags"); + case FancyEffects: + return tr("Display fancy effects such as confetti"); case PrivacyScreen: return tr("Privacy Screen"); case PrivacyScreenTimeout: @@ -1061,6 +1091,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return i->groupView(); case Markdown: return i->markdown(); + case InvertEnterKey: + return i->invertEnterKey(); case Bubbles: return i->bubbles(); case SmallAvatars: @@ -1095,6 +1127,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return i->decryptNotifications(); case SpaceNotifications: return i->spaceNotifications(); + case FancyEffects: + return i->fancyEffects(); case PrivacyScreen: return i->privacyScreen(); case PrivacyScreenTimeout: @@ -1201,6 +1235,10 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr( "Allow using markdown in messages.\nWhen disabled, all messages are sent as a plain " "text."); + case InvertEnterKey: + return tr( + "Invert the behavior of the enter key in the text input, making it send the message " + "when shift+enter is pressed and starting a new line when enter is pressed."); case Bubbles: return tr( "Messages get a bubble background. This also triggers some layout changes (WIP)."); @@ -1255,6 +1293,9 @@ UserSettingsModel::data(const QModelIndex &index, int role) const case SpaceNotifications: return tr("Choose where to show the total number of notifications contained within a " "community or tag."); + case FancyEffects: + return tr("Some messages can be sent with fancy effects. For example, messages sent " + "with '/confetti' will show confetti on screen."); case PrivacyScreen: return tr("When the window loses focus, the timeline will\nbe blurred."); case MobileMode: @@ -1343,6 +1384,7 @@ UserSettingsModel::data(const QModelIndex &index, int role) const case StartInTray: case GroupView: case Markdown: + case InvertEnterKey: case Bubbles: case SmallAvatars: case AnimateImagesOnHover: @@ -1366,6 +1408,7 @@ UserSettingsModel::data(const QModelIndex &index, int role) const case UseOnlineKeyBackup: case ExposeDBusApi: case SpaceNotifications: + case FancyEffects: return Toggle; case Profile: case UserId: @@ -1568,6 +1611,13 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int } else return false; } + case InvertEnterKey: { + if (value.userType() == QMetaType::Bool) { + i->setInvertEnterKey(value.toBool()); + return true; + } else + return false; + } case Bubbles: { if (value.userType() == QMetaType::Bool) { i->setBubbles(value.toBool()); @@ -1687,6 +1737,13 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int } else return false; } + case FancyEffects: { + if (value.userType() == QMetaType::Bool) { + i->setFancyEffects(value.toBool()); + return true; + } else + return false; + } case PrivacyScreen: { if (value.userType() == QMetaType::Bool) { i->setPrivacyScreen(value.toBool()); @@ -1984,6 +2041,9 @@ UserSettingsModel::UserSettingsModel(QObject *p) connect(s.get(), &UserSettings::markdownChanged, this, [this]() { emit dataChanged(index(Markdown), index(Markdown), {Value}); }); + connect(s.get(), &UserSettings::invertEnterKeyChanged, this, [this]() { + emit dataChanged(index(InvertEnterKey), index(InvertEnterKey), {Value}); + }); connect(s.get(), &UserSettings::bubblesChanged, this, [this]() { emit dataChanged(index(Bubbles), index(Bubbles), {Value}); }); @@ -2002,9 +2062,12 @@ UserSettingsModel::UserSettingsModel(QObject *p) connect(s.get(), &UserSettings::decryptNotificationsChanged, this, [this]() { emit dataChanged(index(DecryptNotifications), index(DecryptNotifications), {Value}); }); - connect(s.get(), &UserSettings::spaceNotificationsChanged, this, [this] { + connect(s.get(), &UserSettings::spaceNotificationsChanged, this, [this]() { emit dataChanged(index(SpaceNotifications), index(SpaceNotifications), {Value}); }); + connect(s.get(), &UserSettings::fancyEffectsChanged, this, [this]() { + emit dataChanged(index(FancyEffects), index(FancyEffects), {Value}); + }); connect(s.get(), &UserSettings::trayChanged, this, [this]() { emit dataChanged(index(Tray), index(Tray), {Value}); emit dataChanged(index(StartInTray), index(StartInTray), {Enabled}); diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 5371bfab..37a53ab2 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -39,6 +40,8 @@ class UserSettings final : public QObject Q_PROPERTY(bool startInTray READ startInTray WRITE setStartInTray NOTIFY startInTrayChanged) Q_PROPERTY(bool groupView READ groupView WRITE setGroupView NOTIFY groupViewStateChanged) Q_PROPERTY(bool markdown READ markdown WRITE setMarkdown NOTIFY markdownChanged) + Q_PROPERTY( + bool invertEnterKey READ invertEnterKey WRITE setInvertEnterKey NOTIFY invertEnterKeyChanged) Q_PROPERTY(bool bubbles READ bubbles WRITE setBubbles NOTIFY bubblesChanged) Q_PROPERTY(bool smallAvatars READ smallAvatars WRITE setSmallAvatars NOTIFY smallAvatarsChanged) Q_PROPERTY(bool animateImagesOnHover READ animateImagesOnHover WRITE setAnimateImagesOnHover @@ -62,6 +65,7 @@ class UserSettings final : public QObject NOTIFY decryptNotificationsChanged) Q_PROPERTY(bool spaceNotifications READ spaceNotifications WRITE setSpaceNotifications NOTIFY spaceNotificationsChanged) + Q_PROPERTY(bool fancyEffects READ fancyEffects WRITE setFancyEffects NOTIFY fancyEffectsChanged) Q_PROPERTY( bool privacyScreen READ privacyScreen WRITE setPrivacyScreen NOTIFY privacyScreenChanged) Q_PROPERTY(int privacyScreenTimeout READ privacyScreenTimeout WRITE setPrivacyScreenTimeout @@ -152,6 +156,7 @@ public: void setEmojiFontFamily(QString family); void setGroupView(bool state); void setMarkdown(bool state); + void setInvertEnterKey(bool state); void setBubbles(bool state); void setSmallAvatars(bool state); void setAnimateImagesOnHover(bool state); @@ -168,6 +173,7 @@ public: void setDecryptSidebar(bool state); void setDecryptNotifications(bool state); void setSpaceNotifications(bool state); + void setFancyEffects(bool state); void setPrivacyScreen(bool state); void setPrivacyScreenTimeout(int state); void setPresence(Presence state); @@ -211,9 +217,11 @@ public: bool decryptSidebar() const { return decryptSidebar_; } bool decryptNotifications() const { return decryptNotifications_; } bool spaceNotifications() const { return spaceNotifications_; } + bool fancyEffects() const { return fancyEffects_; } bool privacyScreen() const { return privacyScreen_; } int privacyScreenTimeout() const { return privacyScreenTimeout_; } bool markdown() const { return markdown_; } + bool invertEnterKey() const { return invertEnterKey_; } bool bubbles() const { return bubbles_; } bool smallAvatars() const { return smallAvatars_; } bool animateImagesOnHover() const { return animateImagesOnHover_; } @@ -278,6 +286,7 @@ signals: void trayChanged(bool state); void startInTrayChanged(bool state); void markdownChanged(bool state); + void invertEnterKeyChanged(bool state); void bubblesChanged(bool state); void smallAvatarsChanged(bool state); void animateImagesOnHoverChanged(bool state); @@ -290,6 +299,7 @@ signals: void decryptSidebarChanged(bool state); void decryptNotificationsChanged(bool state); void spaceNotificationsChanged(bool state); + void fancyEffectsChanged(bool state); void privacyScreenChanged(bool state); void privacyScreenTimeoutChanged(int state); void timelineMaxWidthChanged(int state); @@ -341,6 +351,7 @@ private: bool startInTray_; bool groupView_; bool markdown_; + bool invertEnterKey_; bool bubbles_; bool smallAvatars_; bool animateImagesOnHover_; @@ -354,6 +365,7 @@ private: bool decryptSidebar_; bool decryptNotifications_; bool spaceNotifications_; + bool fancyEffects_; bool privacyScreen_; int privacyScreenTimeout_; bool shareKeysWithTrustedUsers_; @@ -433,8 +445,11 @@ class UserSettingsModel final : public QAbstractListModel TypingNotifications, ReadReceipts, Markdown, + InvertEnterKey, Bubbles, SmallAvatars, + FancyEffects, + SidebarSection, GroupView, SortByImportance, diff --git a/src/UsersModel.cpp b/src/UsersModel.cpp index 5d7dd5b7..0399bde6 100644 --- a/src/UsersModel.cpp +++ b/src/UsersModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/UsersModel.h b/src/UsersModel.h index e6d21845..aa71990c 100644 --- a/src/UsersModel.h +++ b/src/UsersModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Utils.cpp b/src/Utils.cpp index b92c6cce..8ad84e85 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later @@ -45,16 +46,17 @@ createDescriptionInfo(const Event &event, const QString &localUser, const QStrin const auto username = displayName; const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); - auto body = utils::event_body(event).trimmed(); + auto body = mtx::accessors::body(event); if (mtx::accessors::relations(event).reply_to()) - body = QString::fromStdString(utils::stripReplyFromBody(body.toStdString())); + body = utils::stripReplyFromBody(body); - return DescInfo{QString::fromStdString(msg.event_id), - sender, - utils::messageDescription(username, body, sender == localUser), - utils::descriptiveTime(ts), - msg.origin_server_ts, - ts}; + return DescInfo{ + QString::fromStdString(msg.event_id), + sender, + utils::messageDescription(username, QString::fromStdString(body), sender == localUser), + utils::descriptiveTime(ts), + msg.origin_server_ts, + ts}; } std::string @@ -216,6 +218,7 @@ utils::getMessageDescription(const TimelineEvent &event, using Notice = mtx::events::RoomEvent; using Text = mtx::events::RoomEvent; using Video = mtx::events::RoomEvent; + using Confetti = mtx::events::RoomEvent; using CallInvite = mtx::events::RoomEvent; using CallAnswer = mtx::events::RoomEvent; using CallHangUp = mtx::events::RoomEvent; @@ -236,6 +239,8 @@ utils::getMessageDescription(const TimelineEvent &event, return createDescriptionInfo(event, localUser, displayName); } else if (std::holds_alternative