diff --git a/Brewfile.lock.json b/Brewfile.lock.json index f9c67a6..d4b09da 100644 --- a/Brewfile.lock.json +++ b/Brewfile.lock.json @@ -2,91 +2,77 @@ "entries": { "brew": { "xcodegen": { - "version": "2.35.0", + "version": "2.28.0", "bottle": { "rebuild": 0, - "root_url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles", + "root_url": "https://ghcr.io/v2/homebrew/core", "files": { - "arm64_ventura": { - "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/xcodegen-2.35.0.arm64_ventura.bottle.tar.gz", - "sha256": "ca9aa5cf7c7a4573bd3ff2c1afbe871566e57478c09967abca7585fc1c237470" - }, "arm64_monterey": { "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/xcodegen-2.35.0.arm64_monterey.bottle.tar.gz", - "sha256": "dadb3716295017a392da394eb0bb52360d95e9142e21ac5532e1d29def593ad6" + "url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:fa493f26e65f0bb0c6be559a395efb84009d842d55035c8fcfd7bcc35096fd17", + "sha256": "fa493f26e65f0bb0c6be559a395efb84009d842d55035c8fcfd7bcc35096fd17" }, "arm64_big_sur": { "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/xcodegen-2.35.0.arm64_big_sur.bottle.tar.gz", - "sha256": "6026a0e84873586f7e65584bd3e9a9456f4b590c2498ebf986e563d66bccb3a7" - }, - "ventura": { - "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/xcodegen-2.35.0.ventura.bottle.tar.gz", - "sha256": "bb982470aad36dececfab94449696b1a327ea931b61475832fd41c5fa59ebb60" + "url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:54ce7cba17293f6eabd644af8c8855ca5ac46f4e8475e5a1a961053d31061210", + "sha256": "54ce7cba17293f6eabd644af8c8855ca5ac46f4e8475e5a1a961053d31061210" }, "monterey": { "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/xcodegen-2.35.0.monterey.bottle.tar.gz", - "sha256": "366403595292790a4a84e2db6f0f32c14fa907c77ac424a5e24d431d372e7a17" + "url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:261df12ea22b281c6683113755a95887213aec51a345851d3671eec6a82dd169", + "sha256": "261df12ea22b281c6683113755a95887213aec51a345851d3671eec6a82dd169" }, "big_sur": { "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/xcodegen-2.35.0.big_sur.bottle.tar.gz", - "sha256": "6db46a3673d4cd395cabd22bbe28e701eef7eaa4f198829fd8a4df072eb9a6ff" + "url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:24936b2f648842c026cc0da57ac4d2a04669a1bd459af06d20acfbfa3a1c33da", + "sha256": "24936b2f648842c026cc0da57ac4d2a04669a1bd459af06d20acfbfa3a1c33da" + }, + "catalina": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/xcodegen/blobs/sha256:d7b4298a5833f5c2abaa8f19cd60f1da2f13379b9534d67746ac5a37b754e1bd", + "sha256": "d7b4298a5833f5c2abaa8f19cd60f1da2f13379b9534d67746ac5a37b754e1bd" } } } }, "mint": { - "version": "0.17.5", + "version": "0.17.1", "bottle": { "rebuild": 0, - "root_url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles", + "root_url": "https://ghcr.io/v2/homebrew/core", "files": { - "arm64_ventura": { - "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mint-0.17.5.arm64_ventura.bottle.tar.gz", - "sha256": "250948fe6fc14179d7c381d084a90d6796861ba9a8456617cadda9ac62cbc2b8" - }, "arm64_monterey": { "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mint-0.17.5.arm64_monterey.bottle.tar.gz", - "sha256": "6546b80b980a45036415162189dd340b1f8d3f4e82a80d40a24e7b5dd672eb04" + "url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:1c0ec84137dd50cf949a68e1b8d3729956e2843e1cc48c6827d26e6d7dbc74fc", + "sha256": "1c0ec84137dd50cf949a68e1b8d3729956e2843e1cc48c6827d26e6d7dbc74fc" }, "arm64_big_sur": { "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mint-0.17.5.arm64_big_sur.bottle.tar.gz", - "sha256": "39f9d254b248a44bb44e399081b7e50a6c598834e2bf86bb7de3ebc349f11e0d" - }, - "ventura": { - "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mint-0.17.5.ventura.bottle.tar.gz", - "sha256": "068f9984e81b578f2ed6cef4cc9659835a689bdecf121651ea24ebcfefd49339" + "url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:c57aaea4b6eb863ef946bafe3a77f3d32ad4e10e05876b7c6b2df8f8b9656f4e", + "sha256": "c57aaea4b6eb863ef946bafe3a77f3d32ad4e10e05876b7c6b2df8f8b9656f4e" }, "monterey": { "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mint-0.17.5.monterey.bottle.tar.gz", - "sha256": "f8b09a640942548a151c7450c85f33d40162c7540049666131740d49c68e61e6" + "url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:5faf98e60b6d18332bcac4ab076f6ba861ee7daea4c23a85f97e6c8fa3d1f463", + "sha256": "5faf98e60b6d18332bcac4ab076f6ba861ee7daea4c23a85f97e6c8fa3d1f463" }, "big_sur": { "cellar": ":any_skip_relocation", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mint-0.17.5.big_sur.bottle.tar.gz", - "sha256": "528ea907912e8002cd3a769e8ddda4556cf2482122c3f848a7d923146df37101" + "url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:3ccf422821dd5fc82488f8e0ab2a11efb645901527b8cf9c42979cc152a9ce02", + "sha256": "3ccf422821dd5fc82488f8e0ab2a11efb645901527b8cf9c42979cc152a9ce02" + }, + "catalina": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:d09ea36619994628564fb3d7e8e71b8c368c59f68e29174fb84b9b127bd9290e", + "sha256": "d09ea36619994628564fb3d7e8e71b8c368c59f68e29174fb84b9b127bd9290e" }, "x86_64_linux": { "cellar": "/home/linuxbrew/.linuxbrew/Cellar", - "url": "https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mint-0.17.5.x86_64_linux.bottle.tar.gz", - "sha256": "7c8dd63f0310a46f67550f92ee48a370fadfc1a4d884b8a3904a36b7b610b3f2" + "url": "https://ghcr.io/v2/homebrew/core/mint/blobs/sha256:1d73dd0102396a53abac4721557dc7d7c2897bdb0e95551e04869c48d11df764", + "sha256": "1d73dd0102396a53abac4721557dc7d7c2897bdb0e95551e04869c48d11df764" } } } - }, - "getsentry/tools/sentry-cli": { - "version": "2.20.0", - "bottle": false } } }, @@ -99,14 +85,6 @@ "CLT": "", "Xcode": "13.3", "macOS": "12.3.1" - }, - "ventura": { - "HOMEBREW_VERSION": "4.0.21", - "HOMEBREW_PREFIX": "/opt/homebrew", - "Homebrew/homebrew-core": "api", - "CLT": "", - "Xcode": "14.3.1", - "macOS": "13.4.1" } } } diff --git a/BroadcastUploadExtension/target.yml b/BroadcastUploadExtension/target.yml index 1ef21b6..b119b43 100644 --- a/BroadcastUploadExtension/target.yml +++ b/BroadcastUploadExtension/target.yml @@ -38,5 +38,6 @@ targets: sources: - path: . - path: ../Config/BuildSettings.swift + - path: ../Config/MDMSettings.swift - path: ../Riot/Categories/Bundle.swift - path: ../Riot/Modules/Room/TimelineCells/Styles/RoomTimelineStyleIdentifier.swift diff --git a/CHANGES.md b/CHANGES.md index 47f4655..4758b42 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,74 @@ +## Changes in 1.11.4 (2023-10-04) + +🙌 Improvements + +- Upgrade MatrixSDK version ([v0.27.3](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.27.3)). +- Allow the use of Jitsi for 1:1 calls via a well-known configuration flag. ([#7684](https://github.com/vector-im/element-ios/issues/7684)) + + +## Changes in 1.11.3 (2023-09-13) + +🐛 Bugfixes + +- Show OIDC account management UI using embedded browser instead of system browser. ([#7671](https://github.com/vector-im/element-ios/issues/7671)) +- Hide Sign Out X/All Sessions buttons in the Device Manager when using OIDC. ([#7672](https://github.com/vector-im/element-ios/issues/7672)) + + +## Changes in 1.11.2 (2023-09-12) + +🙌 Improvements + +- Upgrade MatrixSDK version ([v0.27.2](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.27.2)). + +🐛 Bugfixes + +- Fix an issue where rooms were not correctly sorted after forwarding a message. ([#7641](https://github.com/vector-im/element-ios/issues/7641)) +- Add phone number UI and explanatory text is hidden if the 3 pid changes capability is disabled. ([#7670](https://github.com/vector-im/element-ios/issues/7670)) + + +## Changes in 1.11.1 (2023-08-29) + +✨ Features + +- New settings cell to manage your account through MAS if the home server allows it. ([#7653](https://github.com/vector-im/element-ios/issues/7653)) + +🙌 Improvements + +- Upgrade MatrixSDK version ([v0.27.1](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.27.1)). + +🐛 Bugfixes + +- Prevent mention crashes when room members are missing display names (objc interop) ([#7649](https://github.com/vector-im/element-ios/pull/7649)) +- Add email UI is hidden if the 3 pid changes capability is disabled. ([#7645](https://github.com/vector-im/element-ios/issues/7645)) +- You can now log out from other sessions using MAS on supported OIDC home servers. ([#7646](https://github.com/vector-im/element-ios/issues/7646)) +- Deactivate account is hidden for servers with OIDC auth. ([#7648](https://github.com/vector-im/element-ios/issues/7648)) +- Prevent pill crashes when room members are missing display names (objc interop) ([#7651](https://github.com/vector-im/element-ios/issues/7651)) + + +## Changes in 1.11.0 (2023-08-15) + +✨ Features + +- Integrate Device Dehydration v2 through the Crypto SDK ([#7630](https://github.com/vector-im/element-ios/pull/7630)) + +🙌 Improvements + +- Upgrade MatrixSDK version ([v0.27.0](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.27.0)). +- Disable Siri, Share and Reply (from NSE) Extensions. ([#7618](https://github.com/vector-im/element-ios/issues/7618)) + +🐛 Bugfixes + +- Fix bug in SSO URL generation that was non-compliant with the spec. ([#7639](https://github.com/vector-im/element-ios/pull/7639)) +- Fix a crash when opening v11 rooms. ([#7633](https://github.com/vector-im/element-ios/issues/7633)) + + +## Changes in 1.10.14 (2023-06-21) + +🙌 Improvements + +- Upgrade MatrixSDK version ([v0.26.12](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.26.12)). + + ## Changes in 1.10.13 (2023-06-13) ✨ Features diff --git a/Config/AppVersion.xcconfig b/Config/AppVersion.xcconfig index d8ead04..8c9f9c0 100644 --- a/Config/AppVersion.xcconfig +++ b/Config/AppVersion.xcconfig @@ -15,5 +15,5 @@ // // Version -MARKETING_VERSION = 3.0.1 -CURRENT_PROJECT_VERSION = 3.0.1 +MARKETING_VERSION = 3.0.4 +CURRENT_PROJECT_VERSION = 3.0.4 diff --git a/Config/BuildSettings.swift b/Config/BuildSettings.swift index bc04f43..78eb6a5 100644 --- a/Config/BuildSettings.swift +++ b/Config/BuildSettings.swift @@ -102,21 +102,24 @@ final class BuildSettings: NSObject { static let forceHomeserverSelection = false /// Default server proposed on the authentication screen - static let serverConfigDefaultHomeserverUrlString = "https://chat.yunify.com" + static var serverConfigDefaultHomeserverUrlString: String { + MDMSettings.serverConfigDefaultHomeserverUrlString ?? "https://chat.yunify.com" + } /// Default identity server static let serverConfigDefaultIdentityServerUrlString = "https://ids.yunify.com" - static let serverConfigSygnalAPIUrlString = "https://push.yunify.com/_matrix/push/v1/notify" + static var serverConfigSygnalAPIUrlString: String { + MDMSettings.serverConfigSygnalAPIUrlString ?? "https://push.yunify.com/_matrix/push/v1/notify" + } // MARK: - Legal URLs // Note: Set empty strings to hide the related entry in application settings static let applicationCopyrightUrlString = "" - static let applicationPrivacyPolicyUrlString = "" + static let applicationPrivacyPolicyUrlString = "https://yunify.com/policy/privacy-policy.html" static let applicationAcceptableUsePolicyUrlString = "https://element.io/acceptable-use-policy-terms" - static let applicationHelpUrlString = - "https://element.io/help" + static let applicationHelpUrlString = "https://element.io/help" // MARK: - Permalinks @@ -149,7 +152,9 @@ final class BuildSettings: NSObject { // This baseURL is used to generate permalinks within the app (E.g. timeline message permalinks). // Optional String that when set is used as permalink base, when nil matrix.to format is used. // Example value would be "https://www.example.com", note there is no trailing '/'. - static let clientPermalinkBaseUrl: String? = nil + static var clientPermalinkBaseUrl: String? { + MDMSettings.clientPermalinkBaseUrl + } // MARK: - VoIP static var allowVoIPUsage: Bool { @@ -197,7 +202,7 @@ final class BuildSettings: NSObject { #else /// The configuration to use for analytics. Set `isEnabled` to false to disable analytics. static let analyticsConfiguration = AnalyticsConfiguration(isEnabled: BuildSettings.baseBundleIdentifier.starts(with: "im.vector.app"), - host: "https://posthog.hss.element.io", + host: "https://posthog.element.io", apiKey: "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO", termsURL: URL(string: "https://element.io/cookie-policy")!) #endif @@ -318,7 +323,7 @@ final class BuildSettings: NSObject { // MARK: - Room Creation Screen static let roomCreationScreenAllowEncryptionConfiguration: Bool = true - static let roomCreationScreenRoomIsEncrypted: Bool = false + static let roomCreationScreenRoomIsEncrypted: Bool = true static let roomCreationScreenAllowRoomTypeConfiguration: Bool = true static let roomCreationScreenRoomIsPublic: Bool = false diff --git a/Config/MDMSettings.swift b/Config/MDMSettings.swift new file mode 100644 index 0000000..a6699a6 --- /dev/null +++ b/Config/MDMSettings.swift @@ -0,0 +1,52 @@ +// +// Copyright 2023 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +enum MDMSettings { + private static let appleManagedConfigurationKey = "com.apple.configuration.managed" + + private enum Key: String { + case serverConfigDefaultHomeserverUrlString = "im.vector.app.serverConfigDefaultHomeserverUrlString" + case serverConfigSygnalAPIUrlString = "im.vector.app.serverConfigSygnalAPIUrlString" + case clientPermalinkBaseUrl = "im.vector.app.clientPermalinkBaseUrl" + } + + static var serverConfigDefaultHomeserverUrlString: String? { + valueForKey(.serverConfigDefaultHomeserverUrlString) as? String + } + + static var serverConfigSygnalAPIUrlString: String? { + valueForKey(.serverConfigSygnalAPIUrlString) as? String + } + + static var clientPermalinkBaseUrl: String? { + valueForKey(.clientPermalinkBaseUrl) as? String + } + + // MARK: - Private + + static private func valueForKey(_ key: Key) -> Any? { + guard let managedConfiguration = UserDefaults.standard.dictionary(forKey: appleManagedConfigurationKey) else { + print("MDM configuration missing") + return nil + } + + print("Retrieved MDM configuration: \(managedConfiguration)") + + return managedConfiguration[key.rawValue] + } +} diff --git a/Gemfile b/Gemfile index 6ae4945..a341783 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" gem "xcode-install" gem "fastlane" -gem "cocoapods", '~>1.11.2' +gem "cocoapods", '~>1.13.0' gem "slather" plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') diff --git a/Gemfile.lock b/Gemfile.lock index 5bbce98..851230f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,13 +9,12 @@ GEM specs: CFPropertyList (3.0.6) rexml - activesupport (6.1.7.3) + activesupport (7.0.8) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - zeitwerk (~> 2.3) - addressable (2.8.4) + addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) @@ -23,33 +22,33 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.770.0) - aws-sdk-core (3.173.1) + aws-partitions (1.828.0) + aws-sdk-core (3.183.1) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.5) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.64.0) - aws-sdk-core (~> 3, >= 3.165.0) + aws-sdk-kms (1.71.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.122.0) - aws-sdk-core (~> 3, >= 3.165.0) + aws-sdk-s3 (1.136.0) + aws-sdk-core (~> 3, >= 3.181.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.4) - aws-sigv4 (1.5.2) + aws-sigv4 (~> 1.6) + aws-sigv4 (1.6.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) claide (1.1.0) clamp (1.3.2) - cocoapods (1.11.3) + cocoapods (1.13.0) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.11.3) + cocoapods-core (= 1.13.0) cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.4.0, < 2.0) + cocoapods-downloader (>= 1.6.0, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) cocoapods-try (>= 1.1.0, < 2.0) colored2 (~> 3.1) escape (~> 0.0.4) @@ -57,10 +56,10 @@ GEM gh_inspector (~> 1.0) molinillo (~> 0.8.0) nap (~> 1.0) - ruby-macho (>= 1.0, < 3.0) - xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.11.3) - activesupport (>= 5.0, < 7) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.13.0) + activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) concurrent-ruby (~> 1.1) @@ -84,7 +83,7 @@ GEM highline (~> 2.0.0) concurrent-ruby (1.2.2) declarative (0.0.20) - digest-crc (0.6.4) + digest-crc (0.6.5) rake (>= 12.0.0, < 14.0.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) @@ -93,7 +92,7 @@ GEM escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) - excon (0.99.0) + excon (0.103.0) faraday (1.10.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -123,7 +122,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.2.7) - fastlane (2.213.0) + fastlane (2.216.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -144,6 +143,7 @@ GEM google-apis-playcustomapp_v1 (~> 0.1) google-cloud-storage (~> 1.31) highline (~> 2.0) + http-cookie (~> 1.0.5) json (< 3.0.0) jwt (>= 2.1.0, < 3) mini_magick (>= 4.9.4, < 5.0.0) @@ -155,7 +155,7 @@ GEM security (= 0.1.3) simctl (~> 1.6.3) terminal-notifier (>= 2.0.0, < 3.0.0) - terminal-table (>= 1.4.5, < 2.0.0) + terminal-table (~> 3) tty-screen (>= 0.6.3, < 1.0.0) tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) @@ -165,16 +165,16 @@ GEM fastlane-plugin-brew (0.1.1) fastlane-plugin-sentry (1.15.0) os (~> 1.1, >= 1.1.4) - fastlane-plugin-versioning (0.5.1) + fastlane-plugin-versioning (0.5.2) fastlane-plugin-xcodegen (1.1.0) fastlane-plugin-brew (~> 0.1.1) - ffi (1.15.5) + ffi (1.16.2) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.42.0) + google-apis-androidpublisher_v3 (0.50.0) google-apis-core (>= 0.11.0, < 2.a) - google-apis-core (0.11.0) + google-apis-core (0.11.1) addressable (~> 2.5, >= 2.5.1) googleauth (>= 0.16.2, < 2.a) httpclient (>= 2.8.1, < 3.a) @@ -203,10 +203,9 @@ GEM google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (1.5.2) + googleauth (1.8.1) faraday (>= 0.17.3, < 3.a) jwt (>= 1.4, < 3.0) - memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) @@ -214,16 +213,15 @@ GEM http-cookie (1.0.5) domain_name (~> 0.5) httpclient (2.8.3) - i18n (1.13.0) + i18n (1.14.1) concurrent-ruby (~> 1.0) jmespath (1.6.2) json (2.6.3) - jwt (2.7.0) - memoist (0.16.2) + jwt (2.7.1) mini_magick (4.12.0) - mini_mime (1.1.2) - mini_portile2 (2.8.2) - minitest (5.18.0) + mini_mime (1.1.5) + mini_portile2 (2.8.4) + minitest (5.20.0) molinillo (0.8.0) multi_json (1.15.0) multipart-post (2.3.0) @@ -231,27 +229,27 @@ GEM nap (1.1.0) naturally (2.2.1) netrc (0.11.0) - nokogiri (1.15.2) + nokogiri (1.15.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) optparse (0.1.1) os (1.1.4) plist (3.7.0) public_suffix (4.0.7) - racc (1.6.2) + racc (1.7.1) rake (13.0.6) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.2.5) + rexml (3.2.6) rouge (2.0.7) ruby-macho (2.5.1) ruby2_keywords (0.0.5) rubyzip (2.3.2) security (0.1.3) - signet (0.17.0) + signet (0.18.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) jwt (>= 1.5, < 3.0) @@ -266,8 +264,8 @@ GEM nokogiri (>= 1.13.9) xcodeproj (~> 1.21) terminal-notifier (2.0.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) trailblazer-option (0.1.2) tty-cursor (0.7.1) tty-screen (0.8.1) @@ -281,13 +279,13 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) - unicode-display_width (1.8.0) + unicode-display_width (2.4.2) webrick (1.8.1) word_wrap (1.0.0) xcode-install (2.8.1) claide (>= 0.9.1) fastlane (>= 2.1.0, < 3.0.0) - xcodeproj (1.22.0) + xcodeproj (1.23.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -298,13 +296,12 @@ GEM rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) - zeitwerk (2.6.8) PLATFORMS ruby DEPENDENCIES - cocoapods (~> 1.11.2) + cocoapods (~> 1.13.0) fastlane fastlane-plugin-diawi! fastlane-plugin-sentry diff --git a/INSTALL.md b/INSTALL.md index 792ae4f..c740b11 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -71,6 +71,25 @@ Be sure to use compatible branches for Element iOS and MatrixSDK. For example, i **Important**: By working with [XcodeGen](https://github.com/yonaskolb/XcodeGen) you will need to use the _New Build System_ in Xcode, to have your some of the xcconfig variables taken into account. It should be enabled by default on the latest Xcode versions, but if you need to enable it go to Xcode menu and select `File > Workspace Settings… > Build System` and then choose `New Build System`. +- **Running a local rust MatrixCryptoSDK locally** + +If you want to debug locally or test local changes of the rust `MatrixSDKCrypto` with a local `MatrixSDK`, you must checkout [matrix-rust-sdk](https://github.com/matrix-org/matrix-rust-sdk), and follow the [instructions in the repository](https://github.com/matrix-org/matrix-rust-sdk/tree/main/bindings/apple). + +Once the framework is built using `./build_crypto_xcframework.sh` you will have to move `bindings/apple/MatrixSDKCrypto-Local.podspec` to the root of the `matrix-rust-sdk` folder and rename it to `MatrixSDKCrypto.podspec` then update `s.version` with the current pod version: + +``` + s.version = "0.3.12" +``` + +Then in the element-ios `Podfile`, add the following line under the existing `pod 'MatrixSDK' [..]`: + +``` +pod 'MatrixSDKCrypto', :path => '../matrix-rust-sdk/MatrixSDKCrypto.podspec' +``` + +Run `pod install` to refresh all. + + ### `$matrixSDKVersion` Modification Every time you change the `$matrixSDKVersion` variable in the `Podfile`, you have to run the `pod install` command again. diff --git a/Podfile b/Podfile index 530656a..d408e4f 100644 --- a/Podfile +++ b/Podfile @@ -16,7 +16,7 @@ use_frameworks! # - `{ :specHash => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for MatrixSDK repo. Used by Fastfile during CI # # Warning: our internal tooling depends on the name of this variable name, so be sure not to change it -$matrixSDKVersion = '= 0.26.11' +$matrixSDKVersion = '= 0.27.3' # $matrixSDKVersion = :local # $matrixSDKVersion = { :branch => 'develop'} # $matrixSDKVersion = { :specHash => { git: 'https://git.io/fork123', branch: 'fix' } } @@ -104,22 +104,12 @@ abstract_target 'RiotPods' do end end - target "RiotShareExtension" do - import_MatrixSDK - import_MatrixKit_pods - end - target "RiotSwiftUI" do import_SwiftUI_pods - end + end target "RiotSwiftUITests" do import_SwiftUI_pods - end - - target "SiriIntents" do - import_MatrixSDK - import_MatrixKit_pods end target "RiotNSE" do @@ -131,6 +121,18 @@ abstract_target 'RiotPods' do import_MatrixSDK end + # Disabled due to crypto corruption issues. + # https://github.com/vector-im/element-ios/issues/7618 + # target "RiotShareExtension" do + # import_MatrixSDK + # import_MatrixKit_pods + # end + # + # target "SiriIntents" do + # import_MatrixSDK + # import_MatrixKit_pods + # end + end post_install do |installer| diff --git a/Podfile.lock b/Podfile.lock index 4461d86..4fae9eb 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -25,8 +25,8 @@ PODS: - GBDeviceInfo (7.1.0): - GBDeviceInfo/Core (= 7.1.0) - GBDeviceInfo/Core (7.1.0) - - GZIP (1.3.0) - - Introspect (0.1.4) + - GZIP (1.3.1) + - Introspect (0.11.0) - JitsiMeetSDKLite (8.1.2-lite): - JitsiWebRTC (~> 111.0) - JitsiWebRTC (111.0.2) @@ -39,20 +39,20 @@ PODS: - LoggerAPI (1.9.200): - Logging (~> 1.1) - Logging (1.4.0) - - MatrixSDK (0.26.11): - - MatrixSDK/Core (= 0.26.11) - - MatrixSDK/Core (0.26.11): + - MatrixSDK (0.27.3): + - MatrixSDK/Core (= 0.27.3) + - MatrixSDK/Core (0.27.3): - AFNetworking (~> 4.0.0) - GZIP (~> 1.3.0) - libbase58 (~> 0.1.4) - - MatrixSDKCrypto (= 0.3.4) + - MatrixSDKCrypto (= 0.3.13) - OLMKit (~> 3.2.5) - Realm (= 10.27.0) - SwiftyBeaver (= 1.9.5) - - MatrixSDK/JingleCallStack (0.26.11): + - MatrixSDK/JingleCallStack (0.27.3): - JitsiMeetSDKLite (= 8.1.2-lite) - MatrixSDK/Core - - MatrixSDKCrypto (0.3.4) + - MatrixSDKCrypto (0.3.13) - OLMKit (3.2.12): - OLMKit/olmc (= 3.2.12) - OLMKit/olmcpp (= 3.2.12) @@ -102,8 +102,8 @@ DEPENDENCIES: - KeychainAccess (~> 4.2.2) - KTCenterFlowLayout (~> 1.3.1) - libPhoneNumber-iOS (~> 0.9.13) - - MatrixSDK (= 0.26.11) - - MatrixSDK/JingleCallStack (= 0.26.11) + - MatrixSDK (= 0.27.3) + - MatrixSDK/JingleCallStack (= 0.27.3) - OLMKit - PostHog (~> 2.0.0) - ReadMoreTextView (~> 3.0.1) @@ -176,8 +176,8 @@ SPEC CHECKSUMS: FLEX: e51461dd6f0bfb00643c262acdfea5d5d12c596b FlowCommoniOS: ca92071ab526dc89905495a37844fd7e78d1a7f2 GBDeviceInfo: 5d62fa85bdcce3ed288d83c28789adf1173e4376 - GZIP: 416858efbe66b41b206895ac6dfd5493200d95b3 - Introspect: b62c4dd2063072327c21d618ef2bedc3c87bc366 + GZIP: e6922ed5bdd1d77d84589d50821ac34ea0c38d4b + Introspect: 4cc1e4c34dd016540c8d86a591c231c09dafbee3 JitsiMeetSDKLite: 895213158cf62342069a10634a41d2f1c00057f7 JitsiWebRTC: 80f62908fcf2a1160e0d14b584323fb6e6be630b KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51 @@ -187,8 +187,8 @@ SPEC CHECKSUMS: libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75 LoggerAPI: ad9c4a6f1e32f518fdb43a1347ac14d765ab5e3d Logging: beeb016c9c80cf77042d62e83495816847ef108b - MatrixSDK: 00cd40bc66890156236dbaedbfaaab2e15eb6d62 - MatrixSDKCrypto: ac805c22c24f79f349cdbfa065855c73a4c81b51 + MatrixSDK: 83fd36133b8e9147aa2f770953dc7921dda4e8b5 + MatrixSDKCrypto: bf08b72f2cd015d8749420a2b8b92fc0536bedf4 OLMKit: da115f16582e47626616874e20f7bb92222c7a51 PostHog: 660ec6c9d80cec17b685e148f17f6785a88b597d ReadMoreTextView: 19147adf93abce6d7271e14031a00303fe28720d @@ -208,6 +208,6 @@ SPEC CHECKSUMS: zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: 5639fbf527ef85ae1a41886c4bc4191d664b6547 +PODFILE CHECKSUM: 20f5e721c3f48c117b9610409e79661637454aa1 -COCOAPODS: 1.11.3 +COCOAPODS: 1.13.0 diff --git a/Riot/Assets/Base.lproj/Main.storyboard b/Riot/Assets/Base.lproj/Main.storyboard index 415ea24..36efc71 100644 --- a/Riot/Assets/Base.lproj/Main.storyboard +++ b/Riot/Assets/Base.lproj/Main.storyboard @@ -1,10 +1,9 @@ - + - - + @@ -13,7 +12,7 @@ - + @@ -172,7 +171,7 @@ - + @@ -357,7 +356,7 @@ - + @@ -380,9 +379,8 @@ - + - @@ -534,10 +532,10 @@ - + - + @@ -547,8 +545,5 @@ - - - diff --git a/Riot/Assets/de.lproj/Vector.strings b/Riot/Assets/de.lproj/Vector.strings index 077d731..c01639f 100644 --- a/Riot/Assets/de.lproj/Vector.strings +++ b/Riot/Assets/de.lproj/Vector.strings @@ -406,8 +406,8 @@ "settings_ui_language" = "Sprache"; // Events formatter "event_formatter_member_updates" = "%tu Änderungen der Mitgliedschaft"; -"contacts_user_directory_section" = "NUTZER VERZEICHNIS"; -"contacts_user_directory_offline_section" = "NUTZER VERZEICHNIS (offline)"; +"contacts_user_directory_section" = "NUTZERVERZEICHNIS"; +"contacts_user_directory_offline_section" = "NUTZERVERZEICHNIS (offline)"; "auth_home_server_placeholder" = "URL (z.B. https://matrix.org)"; "auth_identity_server_placeholder" = "URL (z. B. https://vector.im)"; "room_ongoing_conference_call_close" = "Schließen"; @@ -2396,12 +2396,12 @@ "room_suggestion_settings_screen_nav_title" = "Raum vorschlagen"; "room_access_space_chooser_other_spaces_section_info" = "Diese sind vermutlich Dinge, zu denen andere Admins von %@ gehören."; "room_access_space_chooser_other_spaces_section" = "Andere Spaces oder Räume"; -"room_access_settings_screen_setting_room_access" = "Lege Raumzugriff fest"; -"room_access_settings_screen_upgrade_alert_upgrading" = "Raum upgraden"; +"room_access_settings_screen_setting_room_access" = "Raumzutritt festlegen"; +"room_access_settings_screen_upgrade_alert_upgrading" = "Raum aktualisieren"; "room_access_settings_screen_upgrade_alert_upgrade_button" = "Aktualisieren"; "room_access_settings_screen_upgrade_alert_auto_invite_switch" = "Mitglieder automatisch zu neuem Raum einladen"; -"room_access_settings_screen_upgrade_alert_message" = "Jeder in %@ kann diesen Raum finden und ihm beitreten - jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern."; -"room_access_settings_screen_upgrade_alert_title" = "Raum upgraden"; +"room_access_settings_screen_upgrade_alert_message" = "Jeder in %@ kann diesen Raum finden und ihm beitreten – jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern."; +"room_access_settings_screen_upgrade_alert_title" = "Raum aktualisieren"; "room_access_settings_screen_edit_spaces" = "Spaces bearbeiten"; "room_access_settings_screen_upgrade_required" = "Upgrade erforderlich"; "room_access_settings_screen_message" = "Lege fest, wer %@ finden und beitreten kann."; @@ -2461,13 +2461,13 @@ "threads_discourage_information_1" = "Dein Heimserver unterstützt aktuell keine Threads, weshalb diese Funktion unzuverlässig sein könnte. Manche Thread-Nachrichten könnten nicht zuverlässig verfügbar sein. "; "all_chats_nothing_found_placeholder_title" = "Nichts gefunden."; "spaces_create_subspace_title" = "Sub-Space erstellen"; -"room_access_settings_screen_upgrade_alert_note" = "Bitte beachte, dass das Upgrade eine neue Version dieses Raums erstellt. Alle aktuellen Nachrichten bleiben in diesem archivierten Raum."; +"room_access_settings_screen_upgrade_alert_note" = "Bitte beachte, dass die Aktualisierung eine neue Version dieses Raums erstellt. Alle aktuellen Nachrichten bleiben in diesem archivierten Raum."; "invite_to" = "Zu %@ einladen"; "all_chats_empty_unreads_placeholder_message" = "Hier werden deine ungelesenen Nachrichten erscheinen, wenn du welche hast."; "all_chats_edit_layout_show_recents" = "Historie anzeigen"; "all_chats_empty_list_placeholder_title" = "Du bist auf dem neuesten Stand."; "spaces_explore_rooms_format" = "%@ erkunden"; -"room_access_settings_screen_upgrade_alert_message_no_param" = "Jeder in einem übergeordneten Space kann diesen Raum finden und ihm beitreten - jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern."; +"room_access_settings_screen_upgrade_alert_message_no_param" = "Jeder in einem übergeordneten Space kann diesen Raum finden und ihm beitreten – jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern."; "room_access_settings_screen_public_message" = "Sichtbar und zugänglich für jeden."; "room_access_settings_screen_restricted_message" = "Sichtbar und betretbar für jeden Nutzer in einem Space.\nDu wählst, für welche Spaces dies gilt."; "room_access_settings_screen_private_message" = "Nur sichtbar und betretbar für eingeladene Personen."; @@ -2771,3 +2771,13 @@ "notice_display_name_changed_to" = "%@ hat den Anzeigenamen zu %@ geändert"; "poll_timeline_loading" = "Lade …"; "room_command_discard_session_description" = "Erzwingt das Verferfen der aktuell ausgehende Gruppensitzung in einem verschlüsseltem Raum"; +"room_creation_user_not_found_prompt_title" = "Bestätigung"; +"room_creation_user_not_found_prompt_message" = "Wir konnten kein Profil für diese Matrix-ID finden. Möchtest du dennoch eine Direktnachricht beginnen?"; +"room_creation_user_not_found_prompt_invite_action" = "Dennoch DM beginnen"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "Wir konnten kein Profil für diese Matrix-ID finden. Möchtest du wirklich %@ nach %@ einladen?"; +"room_participants_invite_anyway" = "Dennoch einladen"; +"settings_manage_account_title" = "Konto"; +"settings_manage_account_description" = "Verwalte dein Konto bei %@"; +"settings_manage_account_action" = "Konto verwalten"; +"manage_session_redirect" = "Du wirst zum Authentifizierungsdienst deines Servers weitergeleitet, um das Abmelden abzuschließen."; +"manage_session_redirect_error" = "Funktion aktuell nicht verfügbar. Bitte kontaktiere deine Home-Server-Administration"; diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index f63d6c7..1230f1d 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -100,8 +100,7 @@ // MARK: Onboarding "onboarding_splash_register_button_title" = "Create account"; -//"onboarding_splash_login_button_title" = "I already have an account"; -"onboarding_splash_login_button_title" = "Start"; +"onboarding_splash_login_button_title" = "I already have an account"; "onboarding_splash_page_1_title" = "Own your conversations."; "onboarding_splash_page_1_message" = "Secure and independent communication that gives you the same level of privacy as a face-to-face conversation in your own home."; "onboarding_splash_page_2_title" = "You’re in control."; @@ -749,6 +748,9 @@ Tap the + to start adding people."; "settings_three_pids_management_information_part1" = "Manage which email addresses or phone numbers you can use to log in or recover your account here. Control who can find you in "; "settings_three_pids_management_information_part2" = "Discovery"; "settings_three_pids_management_information_part3" = "."; +"settings_manage_account_title" = "Account"; +"settings_manage_account_action" = "Manage account"; +"settings_manage_account_description" = "Manage your account at %@"; "settings_confirm_media_size" = "Confirm size when sending"; "settings_confirm_media_size_description" = "When this is on, you’ll be asked to confirm what size images and videos will be sent as."; @@ -965,6 +967,8 @@ Tap the + to start adding people."; "manage_session_trusted" = "Trusted by you"; "manage_session_not_trusted" = "Not trusted"; "manage_session_sign_out" = "Sign out of this session"; +"manage_session_redirect" = "You will be redirected to your server's authentication provider to complete sign out."; +"manage_session_redirect_error" = "Functionality currently unavailable. Please contact your homeserver admin"; "manage_session_rename" = "Rename session"; "manage_session_sign_out_other_sessions" = "Sign out of all other sessions"; // User sessions management diff --git a/Riot/Assets/eo.lproj/Vector.strings b/Riot/Assets/eo.lproj/Vector.strings index 51745bc..36a3cf5 100644 --- a/Riot/Assets/eo.lproj/Vector.strings +++ b/Riot/Assets/eo.lproj/Vector.strings @@ -1968,7 +1968,7 @@ "notice_encrypted_message" = "Ĉifrita mesaĝo"; "notice_room_related_groups" = "Grupoj rilataj al ĉi tiu ĉambro estas: %@"; "notice_room_aliases_for_dm" = "La kromnomoj estas: %@"; -"notice_room_aliases" = "Kromnomoj de la ĉamrbo estas: %@"; +"notice_room_aliases" = "Kromnomoj de la ĉambro estas: %@"; "notice_room_power_level_event_requirement" = "La minimumaj povniveloj rilataj al okazoj estas:"; "notice_room_power_level_acting_requirement" = "La minimuma povnivelo, kiun uzanto bezonas antaŭ agi, estas:"; "notice_room_power_level_intro_for_dm" = "La povniveloj de ĉambranoj estas:"; diff --git a/Riot/Assets/et.lproj/Vector.strings b/Riot/Assets/et.lproj/Vector.strings index 81dee09..7f1799b 100644 --- a/Riot/Assets/et.lproj/Vector.strings +++ b/Riot/Assets/et.lproj/Vector.strings @@ -2709,3 +2709,13 @@ "room_command_change_display_name_description" = "Muudab sinu kuvatavat nime"; "notice_display_name_changed_to" = "%@ muutis oma kuvatavaks nimeks %@"; "poll_timeline_loading" = "Laadin..."; +"room_creation_user_not_found_prompt_title" = "Kinnitus"; +"room_creation_user_not_found_prompt_invite_action" = "Ikkagi alusta vestlust"; +"room_creation_user_not_found_prompt_message" = "Sellele Matrix'i kasutajatunnuse profiili ei leidu. Kas sa ikkagi tahaksid temaga vestlust alustada?"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "Sellele Matrix'i kasutajatunnuse profiili ei leidu. Kas sa ikkagi tahaksid saata kutset kasutajale %@ jututuppa %@?"; +"room_participants_invite_anyway" = "Kutsu siiski"; +"settings_manage_account_title" = "Kasutajakonto"; +"settings_manage_account_action" = "Halda kasutajakontot"; +"settings_manage_account_description" = "Halda kasutajakontot koduserveris %@"; +"manage_session_redirect" = "Järgmiseks suuname sind sinu serveriteenuse autentijale ning seal saad sa väljalogimise lõpuni viia."; +"manage_session_redirect_error" = "See funktsionaalsus pole hetkel saadaval. Lisateavet saad oma koduserveri haldajalt"; diff --git a/Riot/Assets/id.lproj/Vector.strings b/Riot/Assets/id.lproj/Vector.strings index 080187d..9e108d7 100644 --- a/Riot/Assets/id.lproj/Vector.strings +++ b/Riot/Assets/id.lproj/Vector.strings @@ -2964,3 +2964,13 @@ "room_command_change_display_name_description" = "Mengubah nama tampilan Anda"; "notice_display_name_changed_to" = "%@ mengubah nama tampilannya menjadi %@"; "poll_timeline_loading" = "Memuat..."; +"room_creation_user_not_found_prompt_message" = "Tidak dapat mencari profil untuk ID Matrix ini. Apakah Anda masih ingin membuat percakapan langsung?"; +"room_creation_user_not_found_prompt_title" = "Konfirmasi"; +"room_creation_user_not_found_prompt_invite_action" = "Tetap buat percakapan langsung"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "Tidak dapat mencari profil untuk ID Matrix ini. Apakah Anda masih ingin mengundang %@ ke %@?"; +"room_participants_invite_anyway" = "Tetap undang"; +"settings_manage_account_title" = "Akun"; +"settings_manage_account_action" = "Kelola akun"; +"settings_manage_account_description" = "Kelola akun Anda di %@"; +"manage_session_redirect" = "Anda akan dialihkan ke penyedia autentikasi server Anda untuk menyelesaikan proses keluar."; +"manage_session_redirect_error" = "Fungsi saat ini tidak tersedia. Silakan hubungi admin homeserver Anda"; diff --git a/Riot/Assets/it.lproj/Vector.strings b/Riot/Assets/it.lproj/Vector.strings index 9fc84d1..5433a5a 100644 --- a/Riot/Assets/it.lproj/Vector.strings +++ b/Riot/Assets/it.lproj/Vector.strings @@ -274,7 +274,7 @@ "room_title_members" = "%@ membri"; "room_title_one_member" = "1 membro"; // Room Preview -"room_preview_invitation_format" = "Sei stato invitato ad entrare in questa stanza da %@"; +"room_preview_invitation_format" = "Sei stato/a invitato/a ad entrare in questa stanza da %@"; "room_preview_subtitle" = "Questa è l'anteprima della stanza. Le interazioni sono disabilitate."; "room_preview_unlinked_email_warning" = "Questo invito è stato spedito a %@, che non è associato a questo account. Puoi aggiungere questa email al tuo account o provare ad accedere con un account differente."; "room_preview_try_join_an_unknown_room" = "Stai provando ad accedere a %@. Desideri entrare per partecipare alla discussione?"; @@ -457,7 +457,7 @@ "group_home_multi_members_format" = "%tu membri"; "group_home_one_room_format" = "1 stanza"; "group_home_multi_rooms_format" = "%tu stanze"; -"group_invitation_format" = "%@ ti ha invitato ad unirti a questa comunità"; +"group_invitation_format" = "%@ ti ha invitato/a ad unirti a questa comunità"; // Group participants "group_participants_add_participant" = "Aggiungi membri"; "group_participants_leave_prompt_title" = "Lascia la stanza"; @@ -649,7 +649,7 @@ "sign_out_key_backup_in_progress_alert_cancel_action" = "Attendo"; "close" = "Chiudi"; "auth_forgot_password_error_no_configured_identity_server" = "Non è stato configurato alcun server d'identità: aggiungine uno per ripristinare la password dell'account Matrix."; -"auth_softlogout_signed_out" = "Sei uscito"; +"auth_softlogout_signed_out" = "Sei disconnesso/a"; "auth_softlogout_sign_in" = "Accedi"; "auth_softlogout_reason" = "L'amministratore dell'Home Server (%1$@) ti ha disconnesso dal tuo account %2$@ (%3$@)."; "auth_softlogout_recover_encryption_keys" = "Accedi per recuperare le chiavi crittografiche archiviate su questo dispositivo. Le chiavi ti servono per poter leggere i tuoi messaggi cifrati su altri dispositivi."; @@ -1164,7 +1164,7 @@ "biometrics_cant_unlocked_alert_message_login" = "Riaccedi"; "biometrics_cant_unlocked_alert_message_retry" = "Riprova"; "device_verification_self_verify_wait_recover_secrets_checking_availability" = "Controllo di altre possibilità di verifica..."; -"joined" = "Entrato"; +"joined" = "Entrato/a"; "switch" = "Cambia"; "more" = "Altro"; "pin_protection_choose_pin_welcome_after_login" = "Bentornato/a."; @@ -1832,7 +1832,7 @@ "room_error_cannot_load_timeline" = "Caricamento storico dei messaggi fallito"; "room_error_timeline_event_not_found_title" = "Caricamento della posizione nello storico fallito"; "room_error_timeline_event_not_found" = "L'applicazione ha cercato di caricare un punto specifico dello storico dei messaggi in questo canale, ma non è riuscita a trovarlo"; -"room_left" = "Sei uscito dalla stanza"; +"room_left" = "Sei uscito/a dalla stanza"; "room_no_power_to_create_conference_call" = "Hai bisogno del permesso per invitare a iniziare una conferenza in questo canale"; "room_no_conference_call_in_encrypted_rooms" = "Le chiamate in conferenza non sono supportate nei canali criptati"; // Reply to message @@ -1906,7 +1906,7 @@ // Language picker "language_picker_title" = "Scegli una lingua"; "language_picker_default_language" = "Predefinito (%@)"; -"notice_room_invite" = "%@ invitato %@"; +"notice_room_invite" = "%@ ha invitato %@"; "notice_room_third_party_invite" = "%@ ha invitato %@ a unirsi al canale"; "notice_room_third_party_registered_invite" = "%@ ha accettato l'invito per %@"; "notice_room_third_party_revoked_invite" = "%@ ha ritirato l'invito per %@ a unirsi al canale"; @@ -1944,7 +1944,7 @@ "login" = "Entra"; "create_account" = "Crea utente"; "membership_invite" = "Invitati"; -"membership_leave" = "Uscito"; +"membership_leave" = "Uscito/a"; "membership_ban" = "Espulso"; "num_members_one" = "%@ utente"; "num_members_other" = "%@ utenti"; @@ -1979,7 +1979,7 @@ "notification_settings_contain_my_user_name" = "Notifica con un suono i messaggi che contengono il mio nome utente"; "notification_settings_contain_my_display_name" = "Notifica con un suono i messaggi che contengono il mio nome completo"; "notification_settings_just_sent_to_me" = "Notifica con un suono i messaggi inviati solo a me"; -"notification_settings_invite_to_a_new_room" = "Notifica quando sono invitato in un nuovo canale"; +"notification_settings_invite_to_a_new_room" = "Avvisami quando sono invitato/a in una nuova stanza"; "notification_settings_people_join_leave_rooms" = "Notifica quando gli utenti entrano o escono dai canali"; "notification_settings_receive_a_call" = "Notifica quando ricevo una chiamata"; "notification_settings_suppress_from_bots" = "Sopprimi le notifiche dai bot"; @@ -2009,12 +2009,12 @@ "notice_encryption_enabled_unknown_algorithm" = "%1$@ ha attivato la crittografia end-to-end (algoritmo %2$@ non riconosciuto)."; // Notice Events with "You" "notice_room_invite_by_you" = "Hai invitato %@"; -"notice_room_invite_you" = "%@ ti ha invitato"; +"notice_room_invite_you" = "%@ ti ha invitato/a"; "notice_room_third_party_invite_by_you" = "Hai mandato un invito a %@ a unirsi alla stanza"; "notice_room_third_party_registered_invite_by_you" = "Hai accettato l'invito per %@"; "notice_room_third_party_revoked_invite_by_you" = "Hai revocato l'invito per %@ a unirsi alla stanza"; -"notice_room_join_by_you" = "Sei entrato"; -"notice_room_leave_by_you" = "Sei uscito"; +"notice_room_join_by_you" = "Sei entrato/a"; +"notice_room_leave_by_you" = "Sei uscito/a"; "notice_room_reject_by_you" = "Hai rifiutato l'invito"; "notice_room_kick_by_you" = "Hai rimosso %@"; "notice_room_unban_by_you" = "Hai riammesso %@"; @@ -2049,7 +2049,7 @@ "notice_room_join_rule_public" = "%@ ha reso la stanza pubblica."; "notice_room_join_rule_public_by_you" = "Hai reso la stanza pubblica."; "notice_room_name_removed_for_dm" = "%@ ha rimosso il nome"; -"notice_room_created_for_dm" = "%@ è entrato."; +"notice_room_created_for_dm" = "%@ è entrato/a."; "notice_room_join_rule_invite_for_dm" = "%@ l'ha resa solo su invito."; "notice_room_join_rule_invite_by_you_for_dm" = "L'hai resa solo su invito."; "notice_room_join_rule_public_for_dm" = "%@ l'ha resa pubblica."; @@ -2059,7 +2059,7 @@ "notice_room_history_visible_to_members_for_dm" = "%@ ha reso visibili i messaggi futuri a tutti i membri della stanza."; "notice_room_history_visible_to_members_from_invited_point_for_dm" = "%@ ha reso visibili i messaggi futuri a chiunque, dal momento dell'invito."; "notice_room_history_visible_to_members_from_joined_point_for_dm" = "%@ ha reso visibili i messaggi futuri a chiunque, dal momento dell'entrata."; -"room_left_for_dm" = "Sei uscito"; +"room_left_for_dm" = "Sei uscito/a"; "notice_room_third_party_invite_for_dm" = "%@ ha invitato %@"; "notice_room_third_party_revoked_invite_for_dm" = "%@ ha revocato l'invito per %@"; "notice_room_name_changed_for_dm" = "%@ ha cambiato il nome in %@."; @@ -2067,7 +2067,7 @@ "notice_room_third_party_revoked_invite_by_you_for_dm" = "Hai revocato l'invito per %@"; "notice_room_name_changed_by_you_for_dm" = "Hai cambiato il nome in %@."; "notice_room_name_removed_by_you_for_dm" = "Hai rimosso il nome"; -"notice_room_created_by_you_for_dm" = "Sei entrato."; +"notice_room_created_by_you_for_dm" = "Sei entrato/a."; "notice_room_history_visible_to_members_by_you_for_dm" = "Hai reso visibili i messaggi futuri a tutti i membri della stanza."; "notice_room_history_visible_to_members_from_invited_point_by_you_for_dm" = "Hai reso visibili i messaggi futuri a chiunque, dal momento dell'invito."; "notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "Hai reso visibili i messaggi futuri a chiunque, dal momento dell'entrata."; @@ -2096,7 +2096,7 @@ "attachment_small_with_resolution" = "Piccolo %@ (~%@)"; "attachment_size_prompt_message" = "Puoi disattivarlo nelle impostazioni."; "attachment_size_prompt_title" = "Conferma dimensione da inviare"; -"room_displayname_all_other_members_left" = "%@ (Uscito)"; +"room_displayname_all_other_members_left" = "%@ (Uscito/a)"; "attachment_unsupported_preview_message" = "Questo tipo di file non è supportato."; "attachment_unsupported_preview_title" = "Anteprima non disponibile"; "message_reply_to_sender_sent_their_location" = "ha condiviso la sua posizione."; @@ -2273,7 +2273,7 @@ "location_sharing_live_list_item_last_update_invalid" = "Ultimo aggiornamento sconosciuto"; "location_sharing_live_list_item_last_update" = "Aggiornato %@ fa"; "location_sharing_live_list_item_sharing_expired" = "Condivisione scaduta"; -"location_sharing_live_list_item_time_left" = "%@ è uscito"; +"location_sharing_live_list_item_time_left" = "%@ è uscito/a"; "location_sharing_live_viewer_title" = "Posizione"; "location_sharing_live_map_callout_title" = "Condividi posizione"; "bug_report_logs_description" = "Per diagnosticare i problemi, i registri di questo client verranno inviati con questo rapporto di errore. Se preferisci inviare solo il testo soprastante, deseleziona:"; @@ -2737,3 +2737,13 @@ "room_command_change_display_name_description" = "Cambia il tuo nome visualizzato"; "notice_display_name_changed_to" = "%@ ha cambiato il suo nome visualizzato in %@"; "poll_timeline_loading" = "Caricamento..."; +"room_creation_user_not_found_prompt_title" = "Conferma"; +"room_creation_user_not_found_prompt_invite_action" = "Inizia il messaggio lo stesso"; +"room_participants_invite_anyway" = "Invita lo stesso"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "Impossibile trovare profili con questo ID Matrix. Vuoi davvero invitare %@ in %@?"; +"room_creation_user_not_found_prompt_message" = "Impossibile trovare profili con questo ID Matrix. Vuoi comunque iniziare un messaggio diretto?"; +"settings_manage_account_title" = "Account"; +"settings_manage_account_action" = "Gestisci account"; +"settings_manage_account_description" = "Gestisci il tuo account su %@"; +"manage_session_redirect" = "Verrai reindirizzato al fornitore di autenticazione del tuo server per completare la disconnessione."; +"manage_session_redirect_error" = "Funzionalità attualmente non disponibile. Contatta l'amministratore del tuo homeserver"; diff --git a/Riot/Assets/pl.lproj/Vector.strings b/Riot/Assets/pl.lproj/Vector.strings index 48216c0..21be89f 100644 --- a/Riot/Assets/pl.lproj/Vector.strings +++ b/Riot/Assets/pl.lproj/Vector.strings @@ -2851,3 +2851,13 @@ "user_session_verified_session_description" = "Sesje zweryfikowane są wszędzie, gdzie korzystasz z Element po wprowadzeniu swojego hasła lub zweryfikowaniu swojej tożsamości za pomocą innej sesji zweryfikowanej.\n\nTo oznacza, że posiadasz wszystkie niezbędne klucze wymagane do odblokowania swoich zaszyfrowanych wiadomości i oznajmiasz innym użytkownikom, że ufasz tej sesji."; "space_invite_nav_title" = "Zaproszenie do przestrzeni"; "user_other_session_unverified_sessions_header_subtitle" = "Dla wzmocnienia bezpiecznych wiadomości, zweryfikuj swoje sesje i wyloguj się ze wszystkich sesji, których nie rozpoznajesz lub nie używasz."; +"manage_session_redirect" = "Zostaniesz przekierowany do swojego dostawcy uwierzytelniania, aby zakończyć logowanie."; +"manage_session_redirect_error" = "Funkcja obecnie niedostępna. Skontaktuj się ze swoim administratorem serwera domowego"; +"room_creation_user_not_found_prompt_title" = "Potwierdzenie"; +"room_creation_user_not_found_prompt_message" = "Nie można znaleźć profili dla poniższych ID Matrix. Czy chcesz rozpocząć wiadomość prywatną mimo to?"; +"room_creation_user_not_found_prompt_invite_action" = "Rozpocznij wiadomość prywatną mimo to"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "Nie można znaleźć profili dla poniższych ID Matrix. Czy na pewno chcesz zaprosić %@ do %@?"; +"room_participants_invite_anyway" = "Zaproś mimo to"; +"settings_manage_account_title" = "Konto"; +"settings_manage_account_action" = "Zarządzaj kontem"; +"settings_manage_account_description" = "Zarządzaj swoim kontem w %@"; diff --git a/Riot/Assets/ru.lproj/Vector.strings b/Riot/Assets/ru.lproj/Vector.strings index 72ce088..94715c9 100644 --- a/Riot/Assets/ru.lproj/Vector.strings +++ b/Riot/Assets/ru.lproj/Vector.strings @@ -2265,3 +2265,91 @@ // Room Access Settings "room_access_settings_screen_nav_title" = "Доступ к комнате"; "spaces_coming_soon_detail" = "Эта функция еще не реализована здесь, но она в разработке. На данный момент вы можете сделать это с помощью %@ на своем компьютере."; + +// Unverified sessions +"key_verification_alert_title" = "У вас есть не подтвержденные сессии"; +"key_verification_scan_qr_code_title" = "Сканируйте QR-код"; +"home_context_menu_favourite" = "Любимые"; +"spaces_add_space_title" = "Создать пространство"; +"room_details_promote_room_title" = "Продвигать комнату"; +"room_suggestion_settings_screen_title" = "Сделать комнату предлагаемой в пространстве"; +"analytics_prompt_terms_link_new_user" = "здесь"; +"create_room_suggest_room" = "Предложения для пользователей пространства"; +"room_info_back_button_title" = "Информация о комнате"; +"home_context_menu_make_dm" = "Перейти к людям"; +"create_room_processing" = "Создание комнаты"; +"home_context_menu_unmute" = "Снять заглушку"; + +// MARK: - Room invite + +"room_invite_to_space_option_title" = "К %@"; +"analytics_prompt_yes" = "Да, все классно"; +"create_room_section_footer_type_private" = "Только приглашенные люди могут искать и вступать."; +"home_context_menu_make_room" = "Перейти к комнатам"; +"create_room_suggest_room_footer" = "Предлагаемые комнаты выдвинуты для участников как лучший выбор для вступления."; +"home_context_menu_notifications" = "Уведомления"; +"analytics_prompt_terms_link_upgrade" = "здесь"; +"device_verification_self_verify_open_on_other_device_title" = "Откройте %@ на другом вашем устройстве"; +"create_room_section_footer_type_public" = "Только приглашенные люди могут искать и вступать, не только люди из пространства."; +"home_context_menu_unfavourite" = "Удалить из любимых"; +"home_context_menu_normal_priority" = "Нормальный приоритет"; +"home_context_menu_mute" = "Заглушить"; +"room_access_settings_screen_upgrade_alert_upgrading" = "Улучшение комнаты"; +"room_access_settings_screen_upgrade_alert_upgrade_button" = "Улучшить"; +"key_backup_recover_from_private_key_progress" = "%@%% закончено"; +"room_access_settings_screen_upgrade_alert_title" = "Улучшить комнату"; +"share_extension_low_quality_video_message" = "Отправьте в %@ для лучшего качества или отправьте в пониженном качестве."; +"settings_acceptable_use" = "Принимаемые политики пользования"; +"room_suggestion_settings_screen_message" = "Предлагаемые комнаты рекламируются среди участников пространства как подходящие для присоединения."; +/* Note: The placeholder is for the contents of analytics_prompt_terms_link_new_user */ +"analytics_prompt_terms_new_user" = "Вы можете прочитать все наши условия %@."; +"key_verification_alert_body" = "Перепроверьте надежность сохранности аккаунта."; + +// MARK: - Launch loading + +"launch_loading_generic" = "Синхронизация ваших разговоров"; +"home_context_menu_mark_as_unread" = "Пометить как непрочитанное"; + +// MARK: Sign out warning + +"sign_out" = "Выйти"; +"room_command_unban_user_description" = "Разблокирует пользователя с указанным ID"; +"device_verification_self_verify_open_on_other_device_information" = "Вам нужно подтвердить эту сессию для того, чтобы прочитать защищенную историю сообщений\n\nОткройте Element на одном из ваших прочих устройств и действуйте по инструкции."; +"room_command_change_room_topic_description" = "Указывает тему комнаты"; +"room_access_settings_screen_upgrade_required" = "Требуется улучшение"; +"key_verification_scan_qr_code_information_other_user" = "Наведите камеру на QR-код, отображенном на вашем устройстве для подтверждения ваших сессий"; + +// Room suggestion Settings +"room_suggestion_settings_screen_nav_title" = "Предложить комнату"; +/* Note: The placeholder is for the contents of analytics_prompt_terms_link_upgrade */ +"analytics_prompt_terms_upgrade" = "Прочитать все наши условия %@. Они подходят?"; +"key_verification_scan_qr_code_information_other_session" = "Наведите камеру на QR-код, отображенном на другом вашем устройстве для подтверждения вашей сессии"; +"key_verification_scan_qr_code_information_other_device" = "Наведите камеру на QR-код, отображенном на другом вашем устройстве для подтверждения этой сессии"; +"create_room_type_restricted" = "Участники пространства"; +"home_context_menu_low_priority" = "Низкий приоритет"; +"share_invite_link_space_text" = "Хэй, вступай в это пространство на %@"; +"create_room_promotion_header" = "ПРОДВИЖЕНИЕ"; +"create_room_show_in_directory_footer" = "Это может помочь людям искать и вступать."; +"space_invite_not_enough_permission" = "У вас нет разрешения для приглашения людей в это пространство"; + +// Room commands descriptions +"room_command_change_display_name_description" = "Изменяет отображаемое имя пользователя"; +"room_command_emote_description" = "Отображает действие"; +"room_command_join_room_description" = "Присоединяться к комнате с указанным адресом"; +"room_command_part_room_description" = "Покинуть комнату"; +"room_command_invite_user_description" = "Добавляет пользователя с указанным ID в текущую комнату"; +"room_command_kick_user_description" = "Удаляет пользователя с указанным ID из этой комнаты"; +"room_command_ban_user_description" = "Блокирует пользователя с указанным ID"; +"room_command_set_user_power_level_description" = "Назначает уровень силы пользователя"; +"room_command_reset_user_power_level_description" = "Разжалует пользователя с указанным ID"; +"room_command_discard_session_description" = "Принудительно отбрасывает текущий исходящий групповой сеанс в зашифрованной комнате"; +"room_command_error_unknown_command" = "Некорректная или необработанная команда"; + +// Legacy to Rust security upgrade + +"key_verification_self_verify_security_upgrade_alert_title" = "Приложение обновлено"; +"key_verification_self_verify_security_upgrade_alert_message" = "Безопасное общение может быть улучшено с новым обновлением. Пожалуйста, проверьте ваше устройство."; +"device_verification_self_verify_wait_recover_secrets_additional_help" = "Нет доступа к существующей %@ сессии?"; +"key_verification_scan_qr_code_information_new_session" = "Наведите камеру на QR-код, отображенном на другом вашем устройстве для подтверждения вашей новой сессии"; +"create_room_section_footer_type_restricted" = "Все в пространстве могут искать и вступать."; +"launch_loading_delay_warning" = "Это может занимать больше времени.\nСпасибо за терпение."; diff --git a/Riot/Assets/sk.lproj/Vector.strings b/Riot/Assets/sk.lproj/Vector.strings index 8c08ac5..d4c67cb 100644 --- a/Riot/Assets/sk.lproj/Vector.strings +++ b/Riot/Assets/sk.lproj/Vector.strings @@ -2960,3 +2960,13 @@ "room_command_change_display_name_description" = "Mení vaše zobrazované meno / prezývku"; "notice_display_name_changed_to" = "%@ zmenil/a svoje zobrazované meno na %@"; "poll_timeline_loading" = "Načítavanie…"; +"room_creation_user_not_found_prompt_title" = "Potvrdenie"; +"room_creation_user_not_found_prompt_invite_action" = "Spustiť konverzáciu aj tak"; +"room_participants_invite_anyway" = "Napriek tomu pozvať"; +"room_creation_user_not_found_prompt_message" = "Nie je možné nájsť používateľské profily pre toto Matrix ID. Chcete aj tak poslať priamu správu?"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "Nie je možné nájsť profily pre toto Matrix ID. Ste si istí, že chcete pozvať %@ do %@?"; +"settings_manage_account_title" = "Účet"; +"settings_manage_account_action" = "Spravovať účet"; +"settings_manage_account_description" = "Spravujte svoj účet na %@"; +"manage_session_redirect" = "Budete presmerovaní na poskytovateľa overovania vášho servera, aby ste dokončili odhlásenie."; +"manage_session_redirect_error" = "Funkcia aktuálne nie je dostupná. Obráťte sa na správcu vášho domovského servera"; diff --git a/Riot/Assets/sq.lproj/Vector.strings b/Riot/Assets/sq.lproj/Vector.strings index 69a5f65..9643549 100644 --- a/Riot/Assets/sq.lproj/Vector.strings +++ b/Riot/Assets/sq.lproj/Vector.strings @@ -2746,3 +2746,14 @@ // Room commands descriptions "room_command_change_display_name_description" = "Kjo ndryshon nofkën tuaj në ekran"; +"room_creation_user_not_found_prompt_title" = "Ripohim"; +"room_creation_user_not_found_prompt_message" = "S’arrihet të gjenden profile për këtë ID Matrix. Doni të niset një MD, sido që të jetë?"; +"room_creation_user_not_found_prompt_invite_action" = "Nis MD, sido qoftë"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "S’arrihet të gjenden profile për këtë ID Matrix. Jeni i sigurt se doni të ftohet %@ te %@?"; +"room_participants_invite_anyway" = "Ftoje, sido qoftë"; +"poll_timeline_loading" = "Po ngarkohet…"; +"settings_manage_account_description" = "Administroni llogarinë tuaj në %@"; +"manage_session_redirect_error" = "Funksion që s’mund të kihet aktualisht. Ju lutemi, lidhuni me përgjegjësin e shërbyesit tuaj Home"; +"settings_manage_account_title" = "Llogari"; +"settings_manage_account_action" = "Administroni llogari"; +"manage_session_redirect" = "Do të ridrejtoheni te shërbimi i mirëfilltësimit të shërbyesit tuaj, për të plotësuar daljen nga llogaria."; diff --git a/Riot/Assets/sv.lproj/Vector.strings b/Riot/Assets/sv.lproj/Vector.strings index 6ac27ea..e44b13b 100644 --- a/Riot/Assets/sv.lproj/Vector.strings +++ b/Riot/Assets/sv.lproj/Vector.strings @@ -2676,3 +2676,41 @@ "room_command_change_room_topic_description" = "Sätter rummets ämne"; "room_command_discard_session_description" = "Tvingar den aktuella utgående gruppsessionen i ett krypterat rum att kasseras"; "room_command_error_unknown_command" = "Ogiltigt eller obehandlat kommando"; + +// Legacy to Rust security upgrade + +"key_verification_self_verify_security_upgrade_alert_title" = "App uppdaterad"; +"key_verification_self_verify_security_upgrade_alert_message" = "Säker meddelandehantering har förbättrats med den senaste uppdateringen. Vänligen verifiera din enhet igen."; +"device_verification_self_verify_open_on_other_device_title" = "Öppna %@ på din andra enhet"; +"device_verification_self_verify_wait_recover_secrets_additional_help" = "Kan du inte komma åt en befintlig %@-session?"; +"key_verification_scan_qr_code_title" = "Skanna QR-kod"; +"device_verification_self_verify_open_on_other_device_information" = "Du behöver verifiera den här sessionen för att kunna läsa din säkra meddelandehistorik.\n\nÖppna Element på en av dina andra enheter och följ instruktionerna."; +"key_verification_scan_qr_code_information_other_user" = "Rikta kameran mot QR-koden som visas på deras enhet för att verifiera deras session"; +"room_waiting_other_participants_title" = "Väntar på att användare ska gå med i %@"; +"pill_message_from" = "Meddelande från %@"; +"pill_message_in" = "Meddelande i %@"; +"notice_display_name_changed_to" = "%@ bytte sitt visningsnamn till %@"; + +// MARK: - Launch loading + +"launch_loading_generic" = "Synkar dina konversationer"; +"launch_loading_delay_warning" = "Detta kan ta lite längre tid.\nTack för ditt tålamod."; +"key_verification_scan_qr_code_information_other_device" = "Rikta kameran mot QR-koden som visas på din andra enhet för att verifiera den här sessionen"; +"room_waiting_other_participants_message" = "När inbjudna användare har gått med i %@ kommer du att kunna chatta och rummet kommer att totalsträckskrypteras"; +"poll_timeline_loading" = "Laddar …"; + +// Pills +"pill_room_fallback_display_name" = "Utrymme/rum"; +"pill_message" = "Meddelande"; +"key_verification_scan_qr_code_information_new_session" = "Rikta kameran mot QR-koden som visas på din andra enhet för att verifiera din nya session"; +"key_verification_scan_qr_code_information_other_session" = "Rikta kameran mot QR-koden som visas på din andra enhet för att verifiera din session"; +"room_creation_user_not_found_prompt_title" = "Bekräftelse"; +"room_creation_user_not_found_prompt_message" = "Kunde inte hitta profiler för det här Matrix-ID:t. Vill du starta en DM ändå?"; +"room_creation_user_not_found_prompt_invite_action" = "Starta en DM ändå"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "Kunde inte hitta profiler för det här Matrix-ID:t. Är du säker på att du vill bjuda in %@ till %@?"; +"room_participants_invite_anyway" = "Bjud in ändå"; +"settings_manage_account_title" = "Konto"; +"settings_manage_account_action" = "Hantera konto"; +"settings_manage_account_description" = "Hantera ditt konto på %@"; +"manage_session_redirect" = "Du kommer att omdirigeras till din servers autentiseringsleverantör för att fortsätta utloggning."; +"manage_session_redirect_error" = "Funktion för närvarande otillgänglig. Vänligen kontakta din hemserveradministratör"; diff --git a/Riot/Assets/uk.lproj/Vector.strings b/Riot/Assets/uk.lproj/Vector.strings index 169ecf4..69881f8 100644 --- a/Riot/Assets/uk.lproj/Vector.strings +++ b/Riot/Assets/uk.lproj/Vector.strings @@ -184,7 +184,7 @@ "settings_remove_prompt_title" = "Підтвердження"; "settings_surname" = "Прізвище"; "settings_first_name" = "Ім’я"; -"settings_display_name" = "Показуване ім’я"; +"settings_display_name" = "Псевдонім"; "settings_profile_picture" = "Зображення профілю"; "settings_sign_out_e2e_warn" = "Ви втратите всі ваші ключі наскрізного шифрування. Це означає що ви більше не будете мати змогу читати старі повідомлення у зашифрованих кімнатах на цьому пристрої."; "settings_sign_out_confirmation" = "Ви впевнені?"; @@ -433,7 +433,7 @@ "room_widget_permission_theme_permission" = "Ваша тема"; "room_widget_permission_user_id_permission" = "Ваш ID користувача"; "room_widget_permission_avatar_url_permission" = "URL-адреса вашого аватара"; -"room_widget_permission_display_name_permission" = "Ваше показуване імʼя"; +"room_widget_permission_display_name_permission" = "Ваш псевдонім"; "room_widget_permission_creator_info_title" = "Цей віджет додано:"; // Room widget permissions @@ -801,7 +801,7 @@ "directory_server_all_native_rooms" = "Усі кімнати сервера Matrix"; "group_participants_invite_malformed_id_title" = "Помилка запрошення"; "group_participants_remove_prompt_msg" = "Ви справді хочете вилучити %@ з цієї групи?"; -"room_notifs_settings_encrypted_room_notice" = "Зверніть увагу, що сповіщення про згадки та ключові слова недоступні в зашифрованих кімнатах на мобільних пристроях."; +"room_notifs_settings_encrypted_room_notice" = "Зауважте, що сповіщення про згадки та ключові слова недоступні в зашифрованих кімнатах на мобільних пристроях."; "room_notifs_settings_account_settings" = "Налаштування облікового запису"; "room_notifs_settings_manage_notifications" = "Ви можете керувати сповіщеннями у %@"; "room_notifs_settings_cancel_action" = "Скасувати"; @@ -1129,7 +1129,7 @@ "settings_show_url_previews" = "Попередній перегляд вебсайтів"; "settings_ui_theme_picker_message_match_system_theme" = "«Авто» застосовує тему вашого пристрою"; "settings_ui_theme_picker_message_invert_colours" = "«Авто» застосовує налаштування вашого пристрою «Інвертувати кольори»"; -"settings_messages_containing_display_name" = "Моє показуване імʼя"; +"settings_messages_containing_display_name" = "Мій псевдонім"; "settings_discovery_three_pid_details_title_phone_number" = "Керувати номером телефону"; "settings_discovery_three_pid_details_title_email" = "Керувати е-поштою"; "settings_discovery_error_message" = "Сталася помилка. Повторіть спробу."; @@ -1866,7 +1866,7 @@ "login_prompt_email_token" = "Введіть ключ підтвердження електронної пошти:"; "login_email_placeholder" = "Адреса е-пошти"; "login_email_info" = "Вкажіть адресу електронної пошти, щоб інші користувачі могли легше знаходити вас на Matrix і надання вам можливості відновити пароль у майбутньому."; -"login_display_name_placeholder" = "Видиме ім'я (наприклад Bob Obson)"; +"login_display_name_placeholder" = "Псевдонім (наприклад Bob Obson)"; "login_optional_field" = "необов'язково"; "login_password_placeholder" = "Пароль"; "login_user_id_placeholder" = "Ідентифікатор Matrix (наприклад @bob:matrix.org або bob)"; @@ -2113,10 +2113,10 @@ "notice_room_history_visible_to_members_from_joined_point_for_dm" = "%@ робить майбутню історію повідомлень видимою всім від часу їхнього приєднання."; "notice_room_history_visible_to_members_from_joined_point" = "%@ робить майбутню історію кімнати видимою всім учасникам кімнати від часу їхнього приєднання."; "notice_room_history_visible_to_members_from_invited_point_for_dm" = "%@ робить майбутню історію повідомлень видимою всім від часу їхнього запрошення."; -"notice_room_history_visible_to_members_from_invited_point" = "%@ робить майбутню історію кімнати видимою усім учасникам кімнати від часу їхнього запрошення."; -"notice_room_history_visible_to_members_for_dm" = "%@ робить майбутню історію повідомлень видимою усім учасникам кімнати."; -"notice_room_history_visible_to_members" = "%@ робить майбутню історію кімнати видимою усім учасникам кімнати."; -"notice_room_history_visible_to_anyone" = "%@ робить майбутню історію кімнати видимою усім."; +"notice_room_history_visible_to_members_from_invited_point" = "%@ робить майбутню історію кімнати видимою всім учасникам кімнати від часу їхнього запрошення."; +"notice_room_history_visible_to_members_for_dm" = "%@ робить майбутню історію повідомлень видимою всім учасникам кімнати."; +"notice_room_history_visible_to_members" = "%@ робить майбутню історію кімнати видимою всім учасникам кімнати."; +"notice_room_history_visible_to_anyone" = "%@ робить майбутню історію кімнати видимою всім."; "notice_redaction" = "%@ редагує подію (id: %@)"; "notice_feedback" = "Подія відгуку (id: %@): %@"; "notice_room_related_groups" = "Групи пов'язані з цією кімнатою: %@"; @@ -2136,9 +2136,9 @@ "notice_room_name_changed_for_dm" = "%@ змінює назву на %@."; "notice_room_name_changed" = "%@ змінює назву кімнати на %@."; "notice_topic_changed" = "%@ змінює тему на «%@»."; -"notice_display_name_removed" = "%@ вилучає своє показуване ім'я"; -"notice_display_name_changed_from" = "%@ змінює своє показуване ім'я з %@ на %@"; -"notice_display_name_set" = "%@ встановлює своїм показуваним іменем %@"; +"notice_display_name_removed" = "%@ вилучає свій псевдонім"; +"notice_display_name_changed_from" = "%@ змінює свій псевдонім з %@ на %@"; +"notice_display_name_set" = "%@ встановлює своїм псевдонімом %@"; "notice_room_withdraw" = "%@ анульовує запрошення для %@"; "notice_room_kick" = "%@ вилучає %@"; "notice_room_reject" = "%@ відхиляє запрошення"; @@ -2194,7 +2194,7 @@ "notification_settings_per_room_notifications" = "Сповіщення від кожної кімнати"; "notification_settings_per_sender_notifications" = "Сповіщення про кожного відправника"; "notification_settings_contain_my_user_name" = "Сповіщати звуком про повідомлення, що містять моє ім'я користиувача"; -"notification_settings_contain_my_display_name" = "Сповіщати звуком про повідомлення, що містять моє показуване ім'я"; +"notification_settings_contain_my_display_name" = "Сповіщати звуком про повідомлення з моїм псевдонімом"; "notification_settings_just_sent_to_me" = "Сповіщати звуком про надіслані лише мені повідомлення"; "notification_settings_invite_to_a_new_room" = "Сповіщати про запрошення до нових кімнат"; "notification_settings_people_join_leave_rooms" = "Сповіщати, коли люди приєднуються чи виходять з кімнат"; @@ -2209,7 +2209,7 @@ "account_error_email_wrong_title" = "Неправильна адреса е-пошти"; "account_error_matrix_session_is_not_opened" = "Сеанс Matrix не відкрито"; "account_error_picture_change_failed" = "Не вдалося змінити зображення"; -"account_error_display_name_change_failed" = "Не вдалося змінити показуване ім'я"; +"account_error_display_name_change_failed" = "Не вдалося змінити псевдонім"; "account_msisdn_validation_error" = "Не вдалося перевірити номер телефону."; "account_email_validation_title" = "Очікування перевірки"; "account_msisdn_validation_title" = "Очікування перевірки"; @@ -2241,12 +2241,12 @@ "e2e_passphrase_enter" = "Введіть парольну фразу"; "e2e_passphrase_empty" = "Парольна фраза не повинна бути порожньою"; "e2e_passphrase_confirm" = "Підтвердити парольну фразу"; -"notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими будь-кому від часу їхнього приєднання."; -"notice_room_history_visible_to_members_from_joined_point_by_you" = "Ви зробили майбутню історію кімнати видимою усім учасникам кімнати від часу їхнього приєднання."; +"notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими всім від часу їхнього приєднання."; +"notice_room_history_visible_to_members_from_joined_point_by_you" = "Ви зробили майбутню історію кімнати видимою всім учасникам кімнати від часу їхнього приєднання."; "notice_room_history_visible_to_members_from_invited_point_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими будь-кому від часу запрошення їх."; -"notice_room_history_visible_to_members_from_invited_point_by_you" = "Ви зробили майбутню історію кімнати видимою усім учасникам кімнати від часу запрошення їх."; -"notice_room_history_visible_to_members_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими усім учасникам кімнати."; -"notice_room_history_visible_to_members_by_you" = "Ви зробили майбутню історію кімнати видимою усім учасникам кімнати."; +"notice_room_history_visible_to_members_from_invited_point_by_you" = "Ви зробили майбутню історію кімнати видимою всім учасникам кімнати від часу запрошення їх."; +"notice_room_history_visible_to_members_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими всім учасникам кімнати."; +"notice_room_history_visible_to_members_by_you" = "Ви зробили майбутню історію кімнати видимою всім учасникам кімнати."; "notice_room_history_visible_to_anyone_by_you" = "Ви зробили майбутню історію кімнати видимою будь-кому."; "notice_room_created_by_you" = "Ви створили й сконфігурували кімнату."; "notice_profile_change_redacted_by_you" = "Ви оновили свій профіль %@"; @@ -2261,9 +2261,9 @@ "notice_room_name_changed_by_you_for_dm" = "Ви змінили назву на %@."; "notice_room_name_changed_by_you" = "Ви змінили назву кімнати на %@."; "notice_topic_changed_by_you" = "Ви змінили тему на «%@»."; -"notice_display_name_removed_by_you" = "Ви вилучили показуване ім'я"; -"notice_display_name_changed_from_by_you" = "Ви змінили показуване ім'я з %@ на %@"; -"notice_display_name_set_by_you" = "Ви вказали показуваним іменем %@"; +"notice_display_name_removed_by_you" = "Ви вилучили псевдонім"; +"notice_display_name_changed_from_by_you" = "Ви змінили псевдонім з %@ на %@"; +"notice_display_name_set_by_you" = "Ви налаштували псевдонімом %@"; "notice_conference_call_finished" = "Голосовий груповий виклик завершено"; "notice_conference_call_started" = "Груповий голосовий виклик розпочато"; "notice_conference_call_request" = "%@ запрошує до групового голосового виклику"; @@ -2467,11 +2467,11 @@ "onboarding_avatar_accessibility_label" = "Зображення профілю"; "onboarding_avatar_message" = "Час додати обличчя до імені"; "onboarding_avatar_title" = "Додати зображення профілю"; -"onboarding_display_name_max_length" = "Ваше показуване ім'я повинно складатися з менш ніж 256 символів"; +"onboarding_display_name_max_length" = "Ваш псевдонім повинен складатися з менш ніж 256 символів"; "onboarding_display_name_hint" = "Ви можете змінити його пізніше"; -"onboarding_display_name_placeholder" = "Показуване ім'я"; +"onboarding_display_name_placeholder" = "Псевдонім"; "onboarding_display_name_message" = "Його буде показано у надісланих повідомленнях."; -"onboarding_display_name_title" = "Виберіть показуване ім'я"; +"onboarding_display_name_title" = "Оберіть псевдонім"; "onboarding_personalization_skip" = "Пропустити цей крок"; "onboarding_personalization_save" = "Зберегти й продовжити"; "onboarding_congratulations_home_button" = "На головну"; @@ -2525,7 +2525,7 @@ "confirm" = "Підтвердити"; "location_sharing_allow_background_location_cancel_action" = "Не зараз"; "location_sharing_allow_background_location_validate_action" = "Налаштування"; -"location_sharing_allow_background_location_message" = "Якщо ви хочете ділитися своїм місцеперебуванням наживо, EachChat потребує доступу до розташування, коли застосунок перебуваю у фоновому режимі. Щоб увімкнути доступ, торкніться Налаштування> Геодані та виберіть завжди"; +"location_sharing_allow_background_location_message" = "Якщо ви хочете ділитися своїм місцеперебуванням наживо, Element потребує доступу до розташування, коли застосунок перебуваю у фоновому режимі. Щоб увімкнути доступ, торкніться Налаштування> Геодані та виберіть завжди"; "location_sharing_allow_background_location_title" = "Дозволити доступ"; "settings_labs_enable_live_location_sharing" = "Поширення місцеперебування наживо - діліться поточним розташуванням (в активній розробці, місця тимчасово зберігаються в історії кімнат)"; "settings_ui_show_redactions_in_room_history" = "Показувати заповнювач для вилучених повідомлень"; @@ -2548,7 +2548,7 @@ "room_accessibility_record_voice_message_hint" = "Двічі торкніться й утримуйте для запису."; "room_accessibility_record_voice_message" = "Записати голосове повідомлення"; "location_sharing_live_lab_promotion_activation" = "Увімкнути надсилання геоданих наживо"; -"location_sharing_live_lab_promotion_text" = "Зверніть увагу: це експериментальна функція, яка використовує тимчасову реалізацію, яка дозволяє іншим людям у кімнаті постійно бачити історію поширеного вами місця перебування."; +"location_sharing_live_lab_promotion_text" = "Зауважте: це експериментальна функція, яка використовує тимчасову реалізацію, що дозволяє іншим людям у кімнаті постійно бачити історію поширеного вами місця перебування."; "location_sharing_live_lab_promotion_title" = "Надсилання місця перебування наживо"; "location_sharing_map_credits_title" = "© Авторське право"; "room_info_back_button_title" = "Відомості кімнати"; @@ -2960,5 +2960,15 @@ // Room commands descriptions "room_command_change_display_name_description" = "Змінює ваш нік"; -"notice_display_name_changed_to" = "%@ змінили своє показуване ім'я на %@"; +"notice_display_name_changed_to" = "%@ змінили свій псевдонім на %@"; "poll_timeline_loading" = "Завантаження..."; +"room_creation_user_not_found_prompt_invite_action" = "Усе одно розпочати приватну бесіду"; +"room_participants_invite_anyway" = "Усе одно запросити"; +"room_creation_user_not_found_prompt_title" = "Підтвердження"; +"room_creation_user_not_found_prompt_message" = "Не вдалося знайти профілі для цього Matrix ID. Усе одно хочете розпочати приватну бесіду?"; +"room_participants_invite_unknown_participant_prompt_to_msg" = "Не вдалося знайти профілі для цього Matrix ID. Ви впевнені, що хочете запросити %@ до %@?"; +"settings_manage_account_title" = "Обліковий запис"; +"settings_manage_account_action" = "Керувати обліковим записом"; +"settings_manage_account_description" = "Керувати обліковим записом у %@"; +"manage_session_redirect" = "Вас буде перенаправлено до постачальника автентифікації вашого сервера для завершення виходу."; +"manage_session_redirect_error" = "Функціональність наразі недоступна. Зверніться до адміністратора вашого домашнього сервера"; diff --git a/Riot/Assets/vi.lproj/Vector.strings b/Riot/Assets/vi.lproj/Vector.strings index 2f116e7..8411863 100644 --- a/Riot/Assets/vi.lproj/Vector.strings +++ b/Riot/Assets/vi.lproj/Vector.strings @@ -210,7 +210,7 @@ "room_delete_unsent_messages" = "Xoá các tin nhắn chưa được gửi"; "room_event_action_copy" = "Sao chép"; "room_event_action_quote" = "Trích dẫn"; -"room_event_action_redact" = "Biên tập lại"; +"room_event_action_redact" = "Xóa"; "room_event_action_more" = "Thêm"; "room_event_action_share" = "Chia sẻ"; "room_event_action_permalink" = "Liên kết"; @@ -1898,7 +1898,7 @@ "send" = "Gửi"; "copy_button_name" = "Sao chép"; "resend" = "Gửi lại"; -"redact" = "Biên tập lại"; +"redact" = "Xóa"; "share" = "Chia sẻ"; "set_power_level" = "Độ nhiệt huyết"; "delete" = "Xoá"; diff --git a/Riot/Assets/zh_Hans.lproj/Vector.strings b/Riot/Assets/zh_Hans.lproj/Vector.strings index 696c152..1c6c33e 100644 --- a/Riot/Assets/zh_Hans.lproj/Vector.strings +++ b/Riot/Assets/zh_Hans.lproj/Vector.strings @@ -522,7 +522,7 @@ "room_resource_usage_limit_reached_message_contact_3" = " 以提高限制。"; // String for App Store "store_short_description" = "安全、去中心化的聊天/VoIP"; -"store_full_description" = "亿洽 是一种新型的通讯与协作应用:\n\n1. 使您可以掌控您的隐私\n2. 使您与 Matrix 网络中的任何人交流,甚至可以通过集成功能与如 Slack 之类的其他应用通讯\n3. 保护您免受广告,大数据挖掘和封闭服务的侵害\n4. 通过端到端加密保证安全,通过交叉签名验证其他人\n\nElement 与其他通讯与协作应用完全不同,因为它是去中心化且开源的。\n\nElement 允许您自托管——或者选择托管商——因此,您能拥有数据和会话的隐私权,所有权和控制权。它允许您访问开放网络;因此,您可以与 Element 用户以外的人交流。并且它非常安全。\n\nElement 之所以可以做到这些,是因为它在 Matrix 上运行——开放,去中心化通讯的标准。\n\n通过让您选择由谁来托管您的会话,Element 让您掌控一切。在 Element 应用中,您可以选择不同的托管方式:\n\n1. 在由 Matrix 开发者托管的 matrix.org 公共服务器上获取免费账户,或从志愿者托管的上千个公共服务器中选择\n2. 在您自己的硬件上运行服务器,自托管您的会话\n3. 通过订阅 Element Matrix Services 托管平台,简单地在自定义服务器上注册账户\n\n为什么选择 Element?\n\n掌控您的数据:您来决定存放您的数据和消息的位置。拥有并控制它的是您,而不是挖掘您的数据或与第三方分享的巨型企业。\n\n开放通讯与协作:您可以与 Matrix 网络中的任何人聊天,不论他们使用 Element 还是其他 Matrix 应用,甚至/即使他们在使用不同的通讯系统,例如 Slack、IRC 或 XMPP。\n\n超级安全:支持真正的端到端加密(仅有会话中的人可以解密消息),还有能够验证会话参与方的设备的交叉签名。\n\n完善的通讯方式:消息,语音和视频通话,文件共享,屏幕共享和大量集成功能,机器人和挂件。建立房间与社区,保持联系并完成工作。\n\n随时随地:消息历史可在您的全部设备和 https://app.element.io 网页端之间完全同步,无论您在哪里,都可以保持联系。"; +"store_full_description" = "Element 是一种新型的通讯与协作应用:\n\n1. 使您可以掌控您的隐私\n2. 使您与 Matrix 网络中的任何人交流,甚至可以通过集成功能与如 Slack 之类的其他应用通讯\n3. 保护您免受广告,大数据挖掘和封闭服务的侵害\n4. 通过端到端加密保证安全,通过交叉签名验证其他人\n\nElement 与其他通讯与协作应用完全不同,因为它是去中心化且开源的。\n\nElement 允许您自托管——或者选择托管商——因此,您能拥有数据和会话的隐私权,所有权和控制权。它允许您访问开放网络;因此,您可以与 Element 用户以外的人交流。并且它非常安全。\n\nElement 之所以可以做到这些,是因为它在 Matrix 上运行——开放,去中心化通讯的标准。\n\n通过让您选择由谁来托管您的会话,Element 让您掌控一切。在 Element 应用中,您可以选择不同的托管方式:\n\n1. 在由 Matrix 开发者托管的 matrix.org 公共服务器上获取免费账户,或从志愿者托管的上千个公共服务器中选择\n2. 在您自己的硬件上运行服务器,自托管您的会话\n3. 通过订阅 Element Matrix Services 托管平台,简单地在自定义服务器上注册账户\n\n为什么选择 Element?\n\n掌控您的数据:您来决定存放您的数据和消息的位置。拥有并控制它的是您,而不是挖掘您的数据或与第三方分享的巨型企业。\n\n开放通讯与协作:您可以与 Matrix 网络中的任何人聊天,不论他们使用 Element 还是其他 Matrix 应用,甚至/即使他们在使用不同的通讯系统,例如 Slack、IRC 或 XMPP。\n\n超级安全:支持真正的端到端加密(仅有会话中的人可以解密消息),还有能够验证会话参与方的设备的交叉签名。\n\n完善的通讯方式:消息,语音和视频通话,文件共享,屏幕共享和大量集成功能,机器人和挂件。建立房间与社区,保持联系并完成工作。\n\n随时随地:消息历史可在您的全部设备和 https://app.element.io 网页端之间完全同步,无论您在哪里,都可以保持联系。"; "auth_accept_policies" = "请查看并接受此主页服务器的服务条款:"; "room_replacement_information" = "这个房间已被替换,不再有效。"; "settings_flair" = "在允许的地方显示个性徽章"; @@ -2068,8 +2068,7 @@ "attachment_unsupported_preview_title" = "无法预览"; "onboarding_use_case_personal_messaging" = "朋友和家人"; "onboarding_splash_page_3_title" = "安全的信息传输。"; -//"onboarding_splash_login_button_title" = "我已拥有一个账户"; -"onboarding_splash_login_button_title" = "开始"; +"onboarding_splash_login_button_title" = "我已拥有一个账户"; "saving" = "保存中"; // Activities @@ -2350,3 +2349,21 @@ // User sessions management "user_sessions_settings" = "管理登陆会话"; "settings_presence_offline_mode_description" = "如果开启此选项,对其他用户来说,你看起来就会像下线了一样,即使你正在使用此软件。"; +"room_creation_user_not_found_prompt_title" = "确认"; +"room_creation_user_not_found_prompt_message" = "无法找到此Matrix ID的profiles。你仍然想开始私信吗?"; +"room_creation_user_not_found_prompt_invite_action" = "无论如何都要开始私信"; +"room_participants_invite_anyway" = "无论如何,邀请"; +"threads_discourage_information_1" = "你的家服务器目前不支持消息列,所以此功能可能不可靠。有的消息列消息不一定可用。 "; +"room_command_emote_description" = "显示动作"; +"threads_discourage_information_2" = "\n\n无论如何,启用消息列吗?"; +"settings_timeline" = "时间线"; +"settings_labs_enable_threads" = "消息列消息"; +"settings_labs_use_only_latest_user_avatar_and_name" = "在消息历史中显示用户的最新头像和名称"; +"manage_session_name_hint" = "自定义会话名称能帮你更轻松地识别设备。"; +"manage_session_rename" = "重命名会话"; +/* The placeholder will be replaces with manage_session_name_info_link */ +"manage_session_name_info" = "请注意,与你通信的人也可以看到会话名称。%@"; +"manage_session_sign_out_other_sessions" = "登出全部其他会话"; +"settings_presence_offline_mode" = "离线模式"; +"room_details_polls" = "投票历史"; +"settings_labs_enable_new_app_layout" = "新版应用布局"; diff --git a/Riot/Assets/zh_Hant.lproj/Vector.strings b/Riot/Assets/zh_Hant.lproj/Vector.strings index 9c014d5..f92adb7 100644 --- a/Riot/Assets/zh_Hant.lproj/Vector.strings +++ b/Riot/Assets/zh_Hant.lproj/Vector.strings @@ -619,7 +619,7 @@ "skip" = "略過"; "close" = "關閉"; "store_promotional_text" = "開放網路上的隱私保護聊天和協作應用程式。去中心化機制讓您可自行管控。沒有資料探勘、沒有後門,也不會被第三方存取。"; -"store_full_description" = "億洽 是一套新型的通訊和協作應用程式,它提供下列功能:\n\n1. 您可以自行掌控隱私\n2. 可以與 Matrix 網路中的任何人進行通訊,甚至可以與 Slack 等應用程式整合\n3. 保護您免受廣告、資料探勘、後門和封閉平台的侵害\n4. 透過端到端加密和交叉簽署來驗證彼此,互相確保安全\n\n億洽 是去中心化的開源軟體,因此與其他通訊和協作應用程式完全不同。\n\n億洽 允許您自行架設(或選擇託管)伺服器,使您可針對隱私權,所有權以及對資料和對話內容的完整控制權。您可以連線到所有開放的網路,所以您不是只能與其他 億洽 使用者聊天。而且還非常安全。\n\n億洽 之所以能夠做到所有這些目標,是因為它使用 Matrix(一套開放、去中心化的通訊標準)運作。\n\n億洽 讓您可以自行選擇要將對話放在哪一台伺服器來讓您可自行控制自己的訊息和資料。在 億洽 應用程式中,您可以選擇以不同方式託管您的訊息:\n\n1. 在 matrix.org 公開伺服器註冊免費帳號\n2. 使用自行架設的硬體主機上的伺服器來註冊帳號\n3. 訂閱 億洽 Matrix Services 代管平台,註冊自己的伺服器\n\n為什麼要選擇 億洽?\n\n自己擁有自己資料:由您決定將資料與訊息保留在何處。您自己擁有並管理這些資料,而不用讓某些「超大型企業」來探勘您的資料,或將資料提供給第三方。\n\n開放的通訊與協作機制:您可以與 Matrix 網路中的任何人聊天,不管他們使用的是 億洽 還是其他 Matrix 應用程式,甚至他們也可以使用像 Slack 、IRC 或 XMPP 之類的其他通訊系統。\n\n超級安全:真正的端對端加密(只有對話中的人才能解開訊息內容),並進行交叉簽署以驗證對話參與者的設備。\n\n完整的通訊:傳訊息、進行語音或視訊通話、分享檔案、畫面,還有大量整合、機器人與小工具。建立聊天室、社群,保持聯繫並完成工作。\n\n無論您身在何處都可保持聯繫:無論您身在何處,都可以透過 https://element.io/app 在所有裝置與網路取得完全同步的訊息記錄來保持聯繫。"; +"store_full_description" = "Element 是一套新型的通訊和協作應用程式,它提供下列功能:\n\n1. 您可以自行掌控隱私\n2. 可以與 Matrix 網路中的任何人進行通訊,甚至可以與 Slack 等應用程式整合\n3. 保護您免受廣告、資料探勘、後門和封閉平台的侵害\n4. 透過端到端加密和交叉簽署來驗證彼此,互相確保安全\n\nElement 是去中心化的開放原始碼軟體,因此與其他通訊和協作應用程式完全不同。\n\nElement 允許您自行架設(或選擇託管)伺服器,使您可針對隱私權,所有權以及對資料和對話內容的完整控制權。您可以連線到所有開放的網路,所以您不是只能與其他 Element 使用者聊天。而且還非常安全。\n\nElement 之所以能夠做到所有這些目標,是因為它使用 Matrix(一套開放、去中心化的通訊標準)運作。\n\nElement 讓您可以自行選擇要將對話放在哪一台伺服器來讓您可自行控制自己的訊息和資料。在 Element 應用程式中,您可以選擇以不同方式託管您的訊息:\n\n1. 在 matrix.org 公開伺服器註冊免費帳號\n2. 使用自行架設的硬體主機上的伺服器來註冊帳號\n3. 訂閱 Element Matrix Services 代管平台,註冊自己的伺服器\n\n為什麼要選擇 Element?\n\n自己擁有自己資料:由您決定將資料與訊息保留在何處。您自己擁有並管理這些資料,而不用讓某些「超大型企業」來探勘您的資料,或將資料提供給第三方。\n\n開放的通訊與協作機制:您可以與 Matrix 網路中的任何人聊天,不管他們使用的是 Element 還是其他 Matrix 應用程式,甚至他們也可以使用像 Slack 、IRC 或 XMPP 之類的其他通訊系統。\n\n超級安全:真正的端對端加密(只有對話中的人才能解開訊息內容),並進行交叉簽署以驗證對話參與者的設備。\n\n完整的通訊:傳訊息、進行語音或視訊通話、分享檔案、畫面,還有大量整合、機器人與小工具。建立聊天室、社群,保持聯繫並完成工作。\n\n無論您身在何處都可保持聯繫:無論您身在何處,都可以透過 https://element.io/app 在所有裝置與網路取得完全同步的訊息記錄來保持聯繫。"; // String for App Store "store_short_description" = "去中心化的安全通訊/VoIP 軟體"; "settings_three_pids_management_information_part1" = "在此管理你可以用作登入或回復帳戶的電郵地址或電話號碼。你也可控制誰可以用這些資料找到你。 "; @@ -1191,7 +1191,7 @@ "authentication_server_info_title_login" = "您的對話要在哪裡進行"; "authentication_login_forgot_password" = "忘記密碼"; "authentication_login_username" = "使用者名稱 / 電子郵件 / 電話號碼"; -"authentication_login_title" = "歡迎使用億洽!"; +"authentication_login_title" = "歡迎回來!"; "authentication_server_info_title" = "您的對話將在哪裡進行"; "authentication_registration_password_footer" = "至少需要 8 個字元"; /* The placeholder will show the full Matrix ID that has been entered. */ @@ -1229,7 +1229,7 @@ "onboarding_use_case_personal_messaging" = "朋友與家人"; "onboarding_use_case_message" = "我們將會協助您建立聯繫"; "onboarding_use_case_title" = "您最常與誰聊天?"; -"onboarding_splash_page_4_message" = "億洽 也很適合用在工作場合。許多最重視安全的組織也使用此軟體。"; +"onboarding_splash_page_4_message" = "Element 也很適合用在工作場合。許多最重視安全的組織也使用此軟體。"; "onboarding_splash_page_4_title_no_pun" = "傳訊息給您的團隊。"; "onboarding_splash_page_3_message" = "端對端加密且無須電話號碼。沒有廣告也不探勘您的個資。"; "onboarding_splash_page_1_message" = "安全且獨立的通訊,為您提供與在家中進行面對面對話相同的隱私等級。"; @@ -1237,8 +1237,7 @@ "onboarding_splash_page_2_message" = "選擇儲存對話的位置,讓您擁有控制權與獨立性。透過 Matrix 連結。"; "onboarding_splash_page_2_title" = "一切都在您的掌控之中。"; "onboarding_splash_page_1_title" = "掌握您的對話。"; -//"onboarding_splash_login_button_title" = "我已經有帳號了"; -"onboarding_splash_login_button_title" = "開始"; +"onboarding_splash_login_button_title" = "我已經有帳號了"; // MARK: Onboarding "onboarding_splash_register_button_title" = "建立帳號"; @@ -1535,7 +1534,7 @@ "user_session_permanently_unverified_session_description" = "此工作階段不支援加密功能,所以無法驗證。\n\n您無法使用此工作階段進入有開啟加密的聊天室中。\n\n為了安全與隱私,建議使用支援加密的 Matrix 客戶端。"; "user_session_unverified_session_description" = "未驗證的工作階段是使用您的憑證登入但交叉叉驗證的工作階段。\n\n您應特別確定您可以識別這些工作階段,因為它們可能代表未經授權使用您的帳號。"; "user_session_unverified_session_title" = "未經驗證的工作階段"; -"user_session_verified_session_description" = "已驗證的工作階段,是您輸入安全密語或透過另一個已驗證工作階段確認您的身分後,使用此 億洽 帳號的任何地方。\n\n這代表了您擁有解鎖加密訊息,並向其他使用者確認您信任此工作階段所需的所有金鑰。"; +"user_session_verified_session_description" = "已驗證的工作階段,是您輸入安全密語或透過另一個已驗證工作階段確認您的身分後,使用此 Element 帳號的任何地方。\n\n這代表了您擁有解鎖加密訊息,並向其他使用者確認您信任此工作階段所需的所有金鑰。"; "user_session_verified_session_title" = "已驗證的工作階段"; "user_session_got_it" = "了解"; "user_session_push_notifications_message" = "打開此選項,工作階段會收到通知。"; @@ -1608,7 +1607,7 @@ "location_sharing_map_credits_title" = "著作權"; "location_sharing_allow_background_location_cancel_action" = "現在不要"; "location_sharing_allow_background_location_validate_action" = "設定"; -"location_sharing_allow_background_location_message" = "如果您想要分享即時位置,億洽 需要在背景存取您的位置。您可以在設定 > 位置中選擇「總是啟用此選項」"; +"location_sharing_allow_background_location_message" = "如果您想要分享即時位置,Element 需要在背景存取您的位置。您可以在設定 > 位置中選擇「總是啟用此選項」"; "location_sharing_allow_background_location_title" = "允許存取"; "location_sharing_settings_toggle_title" = "啟用位置分享"; "location_sharing_settings_header" = "即時位置分享"; @@ -2781,7 +2780,7 @@ "authentication_qr_login_scan_subtitle" = "將 QR Code 放在下方的方框中"; "authentication_qr_login_scan_title" = "掃描 QR Code"; "authentication_qr_login_display_step2" = "選擇「用 QR Code 登入」"; -"authentication_qr_login_display_step1" = "開啟您另一台裝置上的 億洽"; +"authentication_qr_login_display_step1" = "開啟您另一台裝置上的 Element"; "authentication_qr_login_display_subtitle" = "請用您已登出的裝置掃描下列 QR Code。"; "authentication_qr_login_display_title" = "連結裝置"; "authentication_qr_login_start_display_qr" = "在此裝置顯示 QR Code"; @@ -2789,14 +2788,14 @@ "authentication_qr_login_start_step4" = "選擇「在此裝置顯示 QR Code」"; "authentication_qr_login_start_step3" = "選擇「連結裝置」"; "authentication_qr_login_start_step2" = "到「設定」→「安全性與隱私權」"; -"authentication_qr_login_start_step1" = "開啟您另一台裝置上的 億洽"; +"authentication_qr_login_start_step1" = "開啟您另一台裝置上的 Element"; "authentication_qr_login_start_subtitle" = "使用此裝置的相機掃描您其他裝置上顯示的 QR Code:"; "authentication_qr_login_start_title" = "掃描 QR Code"; "authentication_recaptcha_title" = "您是人類使用者嗎?"; "authentication_terms_policy_url_error" = "無法找到您選擇的條款。請再次嘗試。"; "key_verification_scan_qr_code_title" = "掃描 QR Code"; "device_verification_self_verify_wait_recover_secrets_additional_help" = "無法存取其他的 %@ 工作階段嗎?"; -"device_verification_self_verify_open_on_other_device_information" = "需要先驗證此工作階段,才能讀取加密訊息紀錄。\n\n請在您的任一其他裝置開啟 億洽 並依照當中的指示進行驗證。"; +"device_verification_self_verify_open_on_other_device_information" = "需要先驗證此工作階段,才能讀取加密訊息紀錄。\n\n請在您的任一其他裝置開啟 Element 並依照當中的指示進行驗證。"; "device_verification_self_verify_open_on_other_device_title" = "開啟您另一台裝置上的 %@"; "key_backup_recover_from_private_key_progress" = "完成 %@%%"; "room_details_polls" = "投票紀錄"; diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index 48165c7..9ee7e99 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -3667,6 +3667,14 @@ public class VectorL10n: NSObject { public static var manageSessionNotTrusted: String { return VectorL10n.tr("Vector", "manage_session_not_trusted") } + /// You will be redirected to your server's authentication provider to complete sign out. + public static var manageSessionRedirect: String { + return VectorL10n.tr("Vector", "manage_session_redirect") + } + /// Functionality currently unavailable. Please contact your homeserver admin + public static var manageSessionRedirectError: String { + return VectorL10n.tr("Vector", "manage_session_redirect_error") + } /// Rename session public static var manageSessionRename: String { return VectorL10n.tr("Vector", "manage_session_rename") @@ -4551,7 +4559,7 @@ public class VectorL10n: NSObject { public static var onboardingPersonalizationSkip: String { return VectorL10n.tr("Vector", "onboarding_personalization_skip") } - /// Start + /// I already have an account public static var onboardingSplashLoginButtonTitle: String { return VectorL10n.tr("Vector", "onboarding_splash_login_button_title") } @@ -7791,6 +7799,18 @@ public class VectorL10n: NSObject { public static var settingsLinks: String { return VectorL10n.tr("Vector", "settings_links") } + /// Manage account + public static var settingsManageAccountAction: String { + return VectorL10n.tr("Vector", "settings_manage_account_action") + } + /// Manage your account at %@ + public static func settingsManageAccountDescription(_ p1: String) -> String { + return VectorL10n.tr("Vector", "settings_manage_account_description", p1) + } + /// Account + public static var settingsManageAccountTitle: String { + return VectorL10n.tr("Vector", "settings_manage_account_title") + } /// Mark all messages as read public static var settingsMarkAllAsRead: String { return VectorL10n.tr("Vector", "settings_mark_all_as_read") diff --git a/Riot/Model/HomeserverConfiguration/HomeserverConfigurationBuilder.swift b/Riot/Model/HomeserverConfiguration/HomeserverConfigurationBuilder.swift index 1b78052..3bb6c86 100644 --- a/Riot/Model/HomeserverConfiguration/HomeserverConfigurationBuilder.swift +++ b/Riot/Model/HomeserverConfiguration/HomeserverConfigurationBuilder.swift @@ -50,11 +50,14 @@ final class HomeserverConfigurationBuilder: NSObject { } else { secureBackupSetupMethods = VectorWellKnownBackupSetupMethod.allCases } + + let deviceDehydrationEnabled = wellKnown?.jsonDictionary()["org.matrix.msc3814"] as? Bool == true let encryptionConfiguration = HomeserverEncryptionConfiguration(isE2EEByDefaultEnabled: isE2EEByDefaultEnabled, isSecureBackupRequired: isSecureBackupRequired, secureBackupSetupMethods: secureBackupSetupMethods, - outboundKeysPreSharingMode: outboundKeysPreSharingMode) + outboundKeysPreSharingMode: outboundKeysPreSharingMode, + deviceDehydrationEnabled: deviceDehydrationEnabled) // Jitsi configuration let jitsiPreferredDomain: String? @@ -69,6 +72,8 @@ final class HomeserverConfigurationBuilder: NSObject { jitsiServerURL = hardcodedJitsiServerURL } + let useJitsiFor1To1Calls = vectorWellKnownJitsiConfiguration?.useFor1To1Calls + // Tile server configuration let tileServerMapStyleURL: URL @@ -84,7 +89,8 @@ final class HomeserverConfigurationBuilder: NSObject { // Create HomeserverConfiguration let jitsiConfiguration = HomeserverJitsiConfiguration(serverDomain: jitsiPreferredDomain, - serverURL: jitsiServerURL) + serverURL: jitsiServerURL, + useFor1To1Calls: useJitsiFor1To1Calls) return HomeserverConfiguration(jitsi: jitsiConfiguration, encryption: encryptionConfiguration, diff --git a/Riot/Model/HomeserverConfiguration/HomeserverEncryptionConfiguration.swift b/Riot/Model/HomeserverConfiguration/HomeserverEncryptionConfiguration.swift index 6672bff..671756f 100644 --- a/Riot/Model/HomeserverConfiguration/HomeserverEncryptionConfiguration.swift +++ b/Riot/Model/HomeserverConfiguration/HomeserverEncryptionConfiguration.swift @@ -23,15 +23,18 @@ final class HomeserverEncryptionConfiguration: NSObject { let isSecureBackupRequired: Bool let secureBackupSetupMethods: [VectorWellKnownBackupSetupMethod] let outboundKeysPreSharingMode: MXKKeyPreSharingStrategy + let deviceDehydrationEnabled: Bool init(isE2EEByDefaultEnabled: Bool, isSecureBackupRequired: Bool, secureBackupSetupMethods: [VectorWellKnownBackupSetupMethod], - outboundKeysPreSharingMode: MXKKeyPreSharingStrategy) { + outboundKeysPreSharingMode: MXKKeyPreSharingStrategy, + deviceDehydrationEnabled: Bool) { self.isE2EEByDefaultEnabled = isE2EEByDefaultEnabled self.isSecureBackupRequired = isSecureBackupRequired self.outboundKeysPreSharingMode = outboundKeysPreSharingMode self.secureBackupSetupMethods = secureBackupSetupMethods + self.deviceDehydrationEnabled = deviceDehydrationEnabled super.init() } diff --git a/Riot/Model/HomeserverConfiguration/HomeserverJitsiConfiguration.swift b/Riot/Model/HomeserverConfiguration/HomeserverJitsiConfiguration.swift index e31ea36..16714b5 100644 --- a/Riot/Model/HomeserverConfiguration/HomeserverJitsiConfiguration.swift +++ b/Riot/Model/HomeserverConfiguration/HomeserverJitsiConfiguration.swift @@ -21,10 +21,12 @@ import Foundation final class HomeserverJitsiConfiguration: NSObject { let serverDomain: String? let serverURL: URL? + let useFor1To1Calls: Bool - init(serverDomain: String?, serverURL: URL?) { + init(serverDomain: String?, serverURL: URL?, useFor1To1Calls: Bool?) { self.serverDomain = serverDomain self.serverURL = serverURL + self.useFor1To1Calls = useFor1To1Calls ?? false super.init() } diff --git a/Riot/Model/WellKnown/VectorWellKnown.swift b/Riot/Model/WellKnown/VectorWellKnown.swift index 71c127e..356fbdd 100644 --- a/Riot/Model/WellKnown/VectorWellKnown.swift +++ b/Riot/Model/WellKnown/VectorWellKnown.swift @@ -74,7 +74,8 @@ extension VectorWellKnownEncryptionConfiguration: Decodable { // MARK: - Jitsi struct VectorWellKnownJitsiConfiguration: Decodable { - /// Default Jitsi server let preferredDomain: String? + /// Override native calling with Jitsi for 1:1 calls. + let useFor1To1Calls: Bool? } diff --git a/Riot/Modules/Authentication/SSO/SSOAccountService.swift b/Riot/Modules/Authentication/SSO/SSOAccountService.swift new file mode 100644 index 0000000..4623fb8 --- /dev/null +++ b/Riot/Modules/Authentication/SSO/SSOAccountService.swift @@ -0,0 +1,48 @@ +// +// Copyright 2020 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +@objcMembers +/// A service for the SSOAuthenticationPresenter that allows to open an OIDC account management URL. +/// +/// Both `callBackURLScheme` and `loginToken` are unneeded for this use case and return `nil`. +final class SSOAccountService: NSObject, SSOAuthenticationServiceProtocol { + + // MARK: - Properties + + private let accountURL: URL + + let callBackURLScheme: String? = nil + + // MARK: - Setup + + init(accountURL: URL) { + self.accountURL = accountURL + super.init() + } + + // MARK: - Public + + func authenticationURL(for identityProvider: String?, transactionId: String) -> URL? { + accountURL + } + + func loginToken(from url: URL) -> String? { + MXLog.error("The account service shouldn't receive a completion callback.") + return nil + } +} diff --git a/Riot/Modules/Authentication/SSO/SSOAuthenticationPresenter.swift b/Riot/Modules/Authentication/SSO/SSOAuthenticationPresenter.swift index 1145d86..b45f3a8 100644 --- a/Riot/Modules/Authentication/SSO/SSOAuthenticationPresenter.swift +++ b/Riot/Modules/Authentication/SSO/SSOAuthenticationPresenter.swift @@ -37,7 +37,7 @@ final class SSOAuthenticationPresenter: NSObject { // MARK: - Properties - private let ssoAuthenticationService: SSOAuthenticationService + private let ssoAuthenticationService: SSOAuthenticationServiceProtocol // MARK: Private @@ -53,7 +53,7 @@ final class SSOAuthenticationPresenter: NSObject { // MARK: - Setup - init(ssoAuthenticationService: SSOAuthenticationService) { + init(ssoAuthenticationService: SSOAuthenticationServiceProtocol) { self.ssoAuthenticationService = ssoAuthenticationService super.init() } diff --git a/Riot/Modules/Authentication/SSO/SSOAuthenticationService.swift b/Riot/Modules/Authentication/SSO/SSOAuthenticationService.swift index a0282c7..cb3d36d 100644 --- a/Riot/Modules/Authentication/SSO/SSOAuthenticationService.swift +++ b/Riot/Modules/Authentication/SSO/SSOAuthenticationService.swift @@ -22,8 +22,16 @@ enum SSOAuthenticationServiceError: Error { case unknown } +@objc protocol SSOAuthenticationServiceProtocol { + var callBackURLScheme: String? { get } + + func authenticationURL(for identityProvider: String?, transactionId: String) -> URL? + + func loginToken(from url: URL) -> String? +} + @objcMembers -final class SSOAuthenticationService: NSObject { +final class SSOAuthenticationService: NSObject, SSOAuthenticationServiceProtocol { // MARK: - Constants @@ -50,7 +58,7 @@ final class SSOAuthenticationService: NSObject { var ssoRedirectPath = SSOURLConstants.Paths.redirect - if let identityProvider = identityProvider { + if let identityProvider = identityProvider, !identityProvider.isEmpty { ssoRedirectPath.append("/\(identityProvider)") } diff --git a/Riot/Modules/ContextMenu/ActionProviders/AllChatsSpaceActionProvider.swift b/Riot/Modules/ContextMenu/ActionProviders/AllChatsSpaceActionProvider.swift index 2339d51..1d13e26 100644 --- a/Riot/Modules/ContextMenu/ActionProviders/AllChatsSpaceActionProvider.swift +++ b/Riot/Modules/ContextMenu/ActionProviders/AllChatsSpaceActionProvider.swift @@ -131,7 +131,7 @@ class AllChatsSpaceActionProvider { private var leaveSpaceAction: UIAction { UIAction(title: VectorL10n.allChatsEditMenuLeaveSpace(spaceName), - image: UIImage(systemName: "rectangle.portrait.and.arrow.right"), + image: UIImage(systemName: "rectangle.portrait.and.arrow.right.fill"), attributes: .destructive) { [weak self] action in guard let self = self else { return } diff --git a/Riot/Modules/LaunchLoading/LaunchLoadingView.xib b/Riot/Modules/LaunchLoading/LaunchLoadingView.xib index c009232..6c31fe2 100644 --- a/Riot/Modules/LaunchLoading/LaunchLoadingView.xib +++ b/Riot/Modules/LaunchLoading/LaunchLoadingView.xib @@ -1,9 +1,9 @@ - + - + diff --git a/Riot/Modules/MajorUpdate/MajorUpdateViewController.storyboard b/Riot/Modules/MajorUpdate/MajorUpdateViewController.storyboard index eb78d67..5a7bf37 100644 --- a/Riot/Modules/MajorUpdate/MajorUpdateViewController.storyboard +++ b/Riot/Modules/MajorUpdate/MajorUpdateViewController.storyboard @@ -1,9 +1,9 @@ - + - + @@ -11,13 +11,13 @@ - + - + @@ -70,13 +70,13 @@ - -