Merge branch 'develop' into fix_3408

# Conflicts:
#	Podfile
#	Riot.xcodeproj/project.pbxproj
This commit is contained in:
ismailgulek 2020-08-12 10:02:31 +03:00
commit 6351baf9e1
195 changed files with 8096 additions and 1928 deletions

View file

@ -1,11 +1,109 @@
Changes in 0.12.0 (2020-xx-xx)
Changes to be released in next version
=================================================
Features:
*
Improvements:
*
Bugfix:
*
API Change:
*
Translations:
*
Others:
*
Build:
*
Test:
*
Changes in 1.0.4 (2020-08-07)
=================================================
Features:
*
Improvements:
* Upgrade MatrixKit version ([v0.12.11](https://github.com/matrix-org/matrix-ios-kit/releases/tag/v0.12.11)).
*
Bugfix:
*
API Change:
*
Translations:
*
Others:
*
Build:
*
Test:
*
Changes in 1.0.3 (2020-08-05)
===============================================
Improvements:
* Upgrade MatrixKit version ([v0.12.10](https://github.com/matrix-org/matrix-ios-kit/releases/tag/v0.12.10)).
* Implement PIN protection (#3436).
* Biometrics protection: Implement TouchID/FaceID protection (#3437).
* Build: Make the app build if JitsiMeetSDK is not in the Podfile.
* Configuration: Add CommonConfiguration and AppConfiguratio classes as central points to configure all targets in the same way.
* Xcconfig: Add Common config and app and share extension config files.
* BuildSettings: A new class that entralises build settings and exposes xcconfig variable.
* AuthenticationVC: Make custom server options and register button configurable.
* Xcconfig: Add product bundle identifiers for each target.
* BuildSettings: Namespace some settings.
* BuildSettings: Reuse base bundle identifier for various settings.
Bug fix:
* Rebranding: Remove Riot from app name (#3497).
* AuthenticationViewController: Fix custom homeserver textfield scroll issue (#3467).
* Rebranding: Update provisioning universal link domain (#3483).
Changes in 1.0.2 (2020-07-28)
===============================================
Bug fix:
* Registration: Do not display the skip button if email is mandatory (#3417).
* NotificationService: Do not cache showDecryptedContentInNotifications setting (#3444).
Changes in 1.0.1 (2020-07-17)
===============================================
Bug fix:
* SettingsViewController: Fix crash when scrolling to Discovery (#3401).
* Main.storyboard: Set storyboard identifier for SettingsViewController (#3398).
* Universal links: Fix broken links for web apps (#3420).
* SettingsViewController: Fix pan gesture crash (#3396).
* RecentsViewController: Fix crash on dequeue some cells (#3433).
* NotificationService: Fix losing sound when not showing decrypted content in notifications (#3423).
Changes in 1.0.0 (2020-07-13)
===============================================
Improvements:
* Rename Riot to Element
* Update deployment target to iOS 11.0. Required for Jitsi > 2.8.x.
* Theme: Customize UISearchBar with new iOS 13 properties (#3270).
* NSE: Make extension reusable (#3326).
* Strings: Use you instead of display name on notice events (#3282).
* Third-party licences: Add license for FlowCommoniOS (#3415).
* Lazy-loading: Remove lazy loading labs setting, enable it by default (#3389).
* Room: Show alert if link text does not match link target (#3137).
Bug fix:
* Xcode11: Fix content change error when dragging start chat page (PR #3075).
@ -31,6 +129,12 @@ Bug fix:
* Xcode11: Disable voip background mode to avoid VoIP pushes (#3369).
* Xcode11: Disable key backup on push extension (#3371).
* RoomMembershipBubbleCell: Fix message textview leading constraint (#3226).
* SettingsViewController: Fix crash when scrolling to Discovery (#3401).
* Main.storyboard: Set storyboard identifier for SettingsViewController (#3398).
* Universal links: Fix broken links for web apps (#3420).
* SettingsViewController: Fix pan gesture crash (#3396).
* RecentsViewController: Fix crash on dequeue some cells (#3433).
* NotificationService: Fix losing sound when not showing decrypted content in notifications (#3423).
Changes in 0.11.6 (2020-06-30)
===============================================

54
Config/AppConfig.swift Normal file
View file

@ -0,0 +1,54 @@
//
// Copyright 2020 Vector Creations 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
import MatrixKit
/// AppConfig is Config plus configurations dedicated to the app
class AppConfiguration: Config {
// MARK: - Global settings
override func setupSettings() {
super.setupSettings()
setupAppSettings()
}
private func setupAppSettings() {
// Enable long press on event in bubble cells
MXKRoomBubbleTableViewCell.disableLongPressGesture(onEvent: false)
// Each room member will be considered as a potential contact.
MXKContactManager.shared().contactManagerMXRoomSource = MXKContactManagerMXRoomSource.all
}
// MARK: - Per matrix session settings
override func setupSettings(for matrixSession: MXSession) {
super.setupSettings(for: matrixSession)
setupWidgetReadReceipts(for: matrixSession)
}
private func setupWidgetReadReceipts(for matrixSession: MXSession) {
var acknowledgableEventTypes = matrixSession.acknowledgableEventTypes ?? []
acknowledgableEventTypes.append(kWidgetMatrixEventTypeString)
acknowledgableEventTypes.append(kWidgetModularEventTypeString)
matrixSession.acknowledgableEventTypes = acknowledgableEventTypes
}
}

View file

@ -0,0 +1,54 @@
//
// Copyright 2020 Vector Creations 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
import MatrixKit
/// AppConfiguration is CommonConfiguration plus configurations dedicated to the app
class AppConfiguration: CommonConfiguration {
// MARK: - Global settings
override func setupSettings() {
super.setupSettings()
setupAppSettings()
}
private func setupAppSettings() {
// Enable long press on event in bubble cells
MXKRoomBubbleTableViewCell.disableLongPressGesture(onEvent: false)
// Each room member will be considered as a potential contact.
MXKContactManager.shared().contactManagerMXRoomSource = MXKContactManagerMXRoomSource.all
}
// MARK: - Per matrix session settings
override func setupSettings(for matrixSession: MXSession) {
super.setupSettings(for: matrixSession)
setupWidgetReadReceipts(for: matrixSession)
}
private func setupWidgetReadReceipts(for matrixSession: MXSession) {
var acknowledgableEventTypes = matrixSession.acknowledgableEventTypes ?? []
acknowledgableEventTypes.append(kWidgetMatrixEventTypeString)
acknowledgableEventTypes.append(kWidgetModularEventTypeString)
matrixSession.acknowledgableEventTypes = acknowledgableEventTypes
}
}

178
Config/BuildSettings.swift Normal file
View file

@ -0,0 +1,178 @@
//
// Copyright 2020 Vector Creations 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
/// BuildSettings provides settings computed at build time.
/// In future, it may be automatically generated from xcconfig files
@objcMembers
final class BuildSettings: NSObject {
// MARK: - Bundle Settings
static var bundleDisplayName: String {
Bundle.app.object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
}
static var applicationGroupIdentifier: String {
Bundle.app.object(forInfoDictionaryKey: "applicationGroupIdentifier") as! String
}
static var baseBundleIdentifier: String {
Bundle.app.object(forInfoDictionaryKey: "baseBundleIdentifier") as! String
}
static var keychainAccessGroup: String {
Bundle.app.object(forInfoDictionaryKey: "keychainAccessGroup") as! String
}
static var pushKitAppIdProd: String {
return baseBundleIdentifier + ".ios.voip.prod"
}
static var pushKitAppIdDev: String {
return baseBundleIdentifier + ".ios.voip.dev"
}
static var pusherAppIdProd: String {
return baseBundleIdentifier + ".ios.prod"
}
static var pusherAppIdDev: String {
return baseBundleIdentifier + ".ios.dev"
}
// Element-Web instance for the app
static let applicationWebAppUrlString = "https://app.element.io"
// MARK: - Server configuration
// Default servers proposed on the authentication screen
static let serverConfigDefaultHomeserverUrlString = "https://matrix.org"
static let serverConfigDefaultIdentityServerUrlString = "https://vector.im"
static let serverConfigSygnalAPIUrlString = "https://matrix.org/_matrix/push/v1/notify"
// MARK: - Legal URLs
static let applicationCopyrightUrlString = "https://element.io/copyright"
static let applicationPrivacyPolicyUrlString = "https://element.io/privacy"
static let applicationTermsConditionsUrlString = "https://element.io/terms-of-service"
// MARk: - Matrix permalinks
// Paths for URLs that will considered as Matrix permalinks. Those permalinks are opened within the app
static let matrixPermalinkPaths: [String: [String]] = [
"app.element.io": [],
"staging.element.io": [],
"develop.element.io": [],
"mobile.element.io": [""],
// Historical ones
"riot.im": ["/app", "/staging", "/develop"],
"www.riot.im": ["/app", "/staging", "/develop"],
"vector.im": ["/app", "/staging", "/develop"],
"www.vector.im": ["/app", "/staging", "/develop"],
// Official Matrix ones
"matrix.to": ["/"],
"www.matrix.to": ["/"],
]
// MARK: - VoIP
static var allowVoIPUsage: Bool {
#if canImport(JitsiMeet)
return true
#else
return false
#endif
}
static let stunServerFallbackUrlString: String? = "stun:turn.matrix.org"
// MARK: - Public rooms Directory
static let publicRoomsShowDirectory: Bool = true
static let publicRoomsAllowServerChange: Bool = true
// List of homeservers for the public rooms directory
static let publicRoomsDirectoryServers = [
"matrix.org"
]
// MARK: - Analytics
static let analyticsServerUrl = URL(string: "https://piwik.riot.im/piwik.php")
static let analyticsAppId = "14"
// MARK: - Bug report
static let bugReportEndpointUrlString = "https://riot.im/bugreports"
// Use the name allocated by the bug report server
static let bugReportApplicationId = "riot-ios"
// MARK: - Integrations
static let integrationsUiUrlString = "https://scalar.vector.im/"
static let integrationsRestApiUrlString = "https://scalar.vector.im/api"
// Widgets in those paths require a scalar token
static let integrationsScalarWidgetsPaths = [
"https://scalar.vector.im/_matrix/integrations/v1",
"https://scalar.vector.im/api",
"https://scalar-staging.vector.im/_matrix/integrations/v1",
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api",
]
// Jitsi server used outside integrations to create conference calls from the call button in the timeline
static let jitsiServerUrl = NSURL(string: "https://jitsi.riot.im")
// MARK: - Features
/// Setting to force protection by pin code
static let forcePinProtection: Bool = false
/// Force non-jailbroken app usage
static let forceNonJailbrokenUsage: Bool = true
static let allowSendingStickers: Bool = true
static let allowLocalContactsAccess: Bool = true
// MARK: - Screen settings -
static let settingsScreenShowUserFirstName: Bool = false
static let settingsScreenShowUserSurname: Bool = false
static let settingsScreenAllowAddingEmailThreepids: Bool = true
static let settingsScreenAllowAddingPhoneThreepids: Bool = true
static let settingsScreenShowThreepidExplanatory: Bool = true
static let settingsScreenShowDiscoverySettings: Bool = true
static let settingsScreenAllowIdentityServerConfig: Bool = true
static let settingsScreenShowAdvancedSettings: Bool = true
static let settingsScreenShowLabSettings: Bool = true
static let settingsScreenAllowChangingRageshakeSettings: Bool = true
static let settingsScreenAllowChangingCrashUsageDataSettings: Bool = true
static let settingsScreenAllowBugReportingManually: Bool = true
static let settingsScreenAllowDeactivatingAccount: Bool = true
// MARK: - Message
static let messageDetailsAllowShare: Bool = true
static let messageDetailsAllowPermalink: Bool = true
static let messageDetailsAllowViewSource: Bool = true
// MARK: - Authentication Screen
static let authScreenShowRegister = true
static let authScreenShowCustomServerOptions = true
}

26
Config/Common.xcconfig Normal file
View file

@ -0,0 +1,26 @@
//
// Copyright 2020 Vector Creations 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.
//
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
BUNDLE_DISPLAY_NAME = Element
APPLICATION_GROUP_IDENTIFIER = group.im.vector
BASE_BUNDLE_IDENTIFIER = im.vector.app
KEYCHAIN_ACCESS_GROUP = $(AppIdentifierPrefix)$(BASE_BUNDLE_IDENTIFIER).keychain.shared

View file

@ -0,0 +1,93 @@
//
// Copyright 2020 Vector Creations 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
import MatrixKit
/// CommonConfiguration is the central point to setup settings for MatrixSDK, MatrixKit and common configurations for all targets.
class CommonConfiguration: NSObject, Configurable {
// MARK: - Global settings
func setupSettings() {
setupMatrixKitSettings()
setupMatrixSDKSettings()
}
private func setupMatrixKitSettings() {
guard let settings = MXKAppSettings.standard() else {
return
}
// Customize the localized string table
Bundle.mxk_customizeLocalizedStringTableName("Vector")
// Disable CallKit
settings.isCallKitEnabled = false
// Enable lazy loading
settings.syncWithLazyLoadOfRoomMembers = true
}
private func setupMatrixSDKSettings() {
let sdkOptions = MXSDKOptions.sharedInstance()
sdkOptions.applicationGroupIdentifier = BuildSettings.applicationGroupIdentifier
// Define the media cache version
sdkOptions.mediaCacheAppVersion = 0
// Enable e2e encryption for newly created MXSession
sdkOptions.enableCryptoWhenStartingMXSession = true
sdkOptions.computeE2ERoomSummaryTrust = true
// Disable identicon use
sdkOptions.disableIdenticonUseForUserAvatar = true
// Use UIKit BackgroundTask for handling background tasks in the SDK
sdkOptions.backgroundModeHandler = MXUIKitBackgroundModeHandler()
}
// MARK: - Per matrix session settings
func setupSettings(for matrixSession: MXSession) {
setupCallsSettings(for: matrixSession)
}
private func setupCallsSettings(for matrixSession: MXSession) {
guard let callManager = matrixSession.callManager else {
// This means nothing happens if the project does not embed a VoIP stack
return
}
// Let's call invite be valid for 1 minute
callManager.inviteLifetime = 60000
if RiotSettings.shared.allowStunServerFallback, let stunServerFallback = BuildSettings.stunServerFallbackUrlString {
callManager.fallbackSTUNServer = stunServerFallback
}
}
// MARK: - Per loaded matrix session settings
func setupSettingsWhenLoaded(for matrixSession: MXSession) {
// Do not warn for unknown devices. We have cross-signing now
matrixSession.crypto.warnOnUnknowDevices = false
}
}

32
Config/Configurable.swift Normal file
View file

@ -0,0 +1,32 @@
//
// Copyright 2020 Vector Creations 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
import Foundation
import MatrixKit
/// Configurable expose settings app and its entensions must use.
@objc protocol Configurable {
// MARK: - Global settings
func setupSettings()
// MARK: - Per matrix session settings
func setupSettings(for matrixSession: MXSession)
// MARK: - Per loaded matrix session settings
func setupSettingsWhenLoaded(for matrixSession: MXSession)
}

View file

@ -14,27 +14,27 @@ GEM
json (>= 1.5.1)
atomos (0.1.3)
aws-eventstream (1.1.0)
aws-partitions (1.337.0)
aws-sdk-core (3.102.1)
aws-partitions (1.351.0)
aws-sdk-core (3.104.3)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.35.0)
aws-sdk-kms (1.36.0)
aws-sdk-core (~> 3, >= 3.99.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.72.0)
aws-sdk-core (~> 3, >= 3.102.1)
aws-sdk-s3 (1.75.0)
aws-sdk-core (~> 3, >= 3.104.1)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.3)
claide (1.0.3)
cocoapods (1.8.4)
cocoapods (1.9.3)
activesupport (>= 4.0.2, < 5)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.8.4)
cocoapods-core (= 1.9.3)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 1.2.2, < 2.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
@ -49,15 +49,17 @@ GEM
molinillo (~> 0.6.6)
nap (~> 1.0)
ruby-macho (~> 1.4)
xcodeproj (>= 1.11.1, < 2.0)
cocoapods-core (1.8.4)
xcodeproj (>= 1.14.0, < 2.0)
cocoapods-core (1.9.3)
activesupport (>= 4.0.2, < 6)
algoliasearch (~> 1.0)
concurrent-ruby (~> 1.1)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
netrc (~> 0.11)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.4)
cocoapods-downloader (1.3.0)
cocoapods-downloader (1.4.0)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.0)
@ -73,13 +75,16 @@ GEM
concurrent-ruby (1.1.6)
declarative (0.0.20)
declarative-option (0.1.0)
digest-crc (0.5.1)
digest-crc (0.6.1)
rake (~> 13.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.5)
emoji_regex (1.0.1)
dotenv (2.7.6)
emoji_regex (3.0.0)
escape (0.0.4)
excon (0.75.0)
ethon (0.12.0)
ffi (>= 1.3.0)
excon (0.76.0)
faraday (1.0.1)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
@ -87,34 +92,32 @@ GEM
http-cookie (~> 1.0.0)
faraday_middleware (1.0.0)
faraday (~> 1.0)
fastimage (2.1.7)
fastlane (2.149.1)
fastimage (2.2.0)
fastlane (2.154.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
aws-sdk-s3 (~> 1.0)
babosa (>= 1.0.2, < 2.0.0)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored
commander-fastlane (>= 4.4.6, < 5.0.0)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 2.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
faraday (>= 0.17, < 2.0)
faraday (~> 1.0)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (>= 0.13.1, < 2.0)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-api-client (>= 0.37.0, < 0.39.0)
google-cloud-storage (>= 1.15.0, < 2.0.0)
highline (>= 1.7.2, < 2.0.0)
json (< 3.0.0)
jwt (~> 2.1.0)
jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
multi_xml (~> 0.5)
multipart-post (~> 2.0.0)
plist (>= 3.1.0, < 4.0.0)
public_suffix (~> 2.0.0)
rubyzip (>= 1.3.0, < 2.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.3)
simctl (~> 1.6.3)
slack-notifier (>= 2.0.0, < 3.0.0)
@ -127,6 +130,7 @@ GEM
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
fastlane-plugin-versioning (0.4.3)
ffi (1.13.1)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
@ -141,17 +145,17 @@ GEM
google-cloud-core (1.5.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.3.2)
google-cloud-env (1.3.3)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.0.1)
google-cloud-storage (1.26.2)
google-cloud-storage (1.27.0)
addressable (~> 2.5)
digest-crc (~> 0.4)
google-api-client (~> 0.33)
google-cloud-core (~> 1.2)
googleauth (~> 0.9)
mini_mime (~> 1.0)
googleauth (0.13.0)
googleauth (0.13.1)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
@ -166,22 +170,22 @@ GEM
concurrent-ruby (~> 1.0)
jmespath (1.4.0)
json (2.3.1)
jwt (2.1.0)
jwt (2.2.1)
memoist (0.16.2)
mini_magick (4.10.1)
mini_mime (1.0.2)
minitest (5.14.1)
molinillo (0.6.6)
multi_json (1.14.1)
multi_xml (0.6.0)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.2.6)
nanaimo (0.3.0)
nap (1.1.0)
naturally (2.2.0)
netrc (0.11.0)
os (1.1.0)
os (1.1.1)
plist (3.5.0)
public_suffix (2.0.5)
public_suffix (4.0.5)
rake (13.0.1)
representable (3.0.4)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
@ -189,7 +193,7 @@ GEM
retriable (3.1.2)
rouge (2.0.7)
ruby-macho (1.4.0)
rubyzip (1.3.0)
rubyzip (2.3.0)
security (0.1.3)
signet (0.14.0)
addressable (~> 2.3)
@ -205,9 +209,11 @@ GEM
unicode-display_width (~> 1.1, >= 1.1.1)
thread_safe (0.3.6)
tty-cursor (0.7.1)
tty-screen (0.8.0)
tty-screen (0.8.1)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (1.2.7)
thread_safe (~> 0.1)
uber (0.1.0)
@ -219,12 +225,12 @@ GEM
xcode-install (2.6.6)
claide (>= 0.9.1, < 1.1.0)
fastlane (>= 2.1.0, < 3.0.0)
xcodeproj (1.17.0)
xcodeproj (1.17.1)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.2.6)
nanaimo (~> 0.3.0)
xcpretty (0.3.0)
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.0)
@ -234,7 +240,7 @@ PLATFORMS
ruby
DEPENDENCIES
cocoapods (~> 1.8.3)
cocoapods (~> 1.9.3)
fastlane
fastlane-plugin-versioning
xcode-install

166
Podfile
View file

@ -4,117 +4,109 @@ platform :ios, '11.0'
# Use frameforks to allow usage of pod written in Swift (like PiwikTracker)
use_frameworks!
# Different flavours of pods to MatrixKit. Can be one of:
# - a String indicating an official MatrixKit released version number
# - `:local` (to use Development Pods)
# - `{'kit branch name' => 'sdk branch name'}` to depend on specific branches of each repo
# - `{ {kit spec hash} => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for each 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
$matrixKitVersion = '0.12.11'
# $matrixKitVersion = :local
# $matrixKitVersion = {'develop' => 'develop'}
# Different flavours of pods to MatrixKit
# The current MatrixKit pod version
$matrixKitVersion = '0.12.8'
# The specific branch version (supported: develop)
#$matrixKitVersion = 'develop'
# The one used for developing both MatrixSDK and MatrixKit
# Note that MatrixSDK must be cloned into a folder called matrix-ios-sdk next to the MatrixKit folder
#$matrixKitVersion = 'local'
########################################
case $matrixKitVersion
when :local
$matrixKitVersionSpec = { :path => '../matrix-ios-kit/MatrixKit.podspec' }
$matrixSDKVersionSpec = { :path => '../matrix-ios-sdk/MatrixSDK.podspec' }
when Hash # kit branch name => sdk branch name or {kit spec Hash} => {sdk spec Hash}
kit_spec, sdk_spec = $matrixKitVersion.first # extract first and only key/value pair; key is kit_spec, value is sdk_spec
kit_spec = { :git => 'https://github.com/matrix-org/matrix-ios-kit.git', :branch => kit_spec.to_s } unless kit_spec.is_a?(Hash)
sdk_spec = { :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => sdk_spec.to_s } unless sdk_spec.is_a?(Hash)
$matrixKitVersionSpec = kit_spec
$matrixSDKVersionSpec = sdk_spec
when String # specific MatrixKit released version
$matrixKitVersionSpec = $matrixKitVersion
$matrixSDKVersionSpec = {}
end
# Method to import the right MatrixKit flavour
def import_MatrixKit
if $matrixKitVersion == 'local'
pod 'MatrixSDK', :path => '../matrix-ios-sdk/MatrixSDK.podspec'
pod 'MatrixSDK/SwiftSupport', :path => '../matrix-ios-sdk/MatrixSDK.podspec'
pod 'MatrixSDK/JingleCallStack', :path => '../matrix-ios-sdk/MatrixSDK.podspec'
pod 'MatrixKit', :path => '../matrix-ios-kit/MatrixKit.podspec'
else
if $matrixKitVersion == 'develop'
pod 'MatrixSDK', :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => $matrixKitVersion
pod 'MatrixSDK/SwiftSupport', :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => $matrixKitVersion
pod 'MatrixSDK/JingleCallStack', :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => $matrixKitVersion
pod 'MatrixKit', :git => 'https://github.com/matrix-org/matrix-ios-kit.git', :branch => $matrixKitVersion
else
pod 'MatrixKit', $matrixKitVersion
pod 'MatrixSDK/SwiftSupport'
pod 'MatrixSDK/JingleCallStack'
end
end
pod 'MatrixSDK', $matrixSDKVersionSpec
pod 'MatrixSDK/SwiftSupport', $matrixSDKVersionSpec
pod 'MatrixSDK/JingleCallStack', $matrixSDKVersionSpec
pod 'MatrixKit', $matrixKitVersionSpec
end
# Method to import the right MatrixKit/AppExtension flavour
def import_MatrixKitAppExtension
if $matrixKitVersion == 'local'
pod 'MatrixSDK', :path => '../matrix-ios-sdk/MatrixSDK.podspec'
pod 'MatrixSDK/SwiftSupport', :path => '../matrix-ios-sdk/MatrixSDK.podspec'
pod 'MatrixKit/AppExtension', :path => '../matrix-ios-kit/MatrixKit.podspec'
else
if $matrixKitVersion == 'develop'
pod 'MatrixSDK', :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => $matrixKitVersion
pod 'MatrixSDK/SwiftSupport', :git => 'https://github.com/matrix-org/matrix-ios-sdk.git', :branch => $matrixKitVersion
pod 'MatrixKit/AppExtension', :git => 'https://github.com/matrix-org/matrix-ios-kit.git', :branch => $matrixKitVersion
else
pod 'MatrixKit/AppExtension', $matrixKitVersion
pod 'MatrixSDK/SwiftSupport'
end
end
pod 'MatrixSDK', $matrixSDKVersionSpec
pod 'MatrixSDK/SwiftSupport', $matrixSDKVersionSpec
pod 'MatrixKit/AppExtension', $matrixKitVersionSpec
end
########################################
abstract_target 'RiotPods' do
pod 'GBDeviceInfo', '~> 6.3.0'
pod 'Reusable', '~> 4.1'
pod 'FlowCommoniOS', '~> 1.8.6'
pod 'GBDeviceInfo', '~> 6.3.0'
pod 'Reusable', '~> 4.1'
pod 'KeychainAccess', '~> 4.2'
# Piwik for analytics
pod 'MatomoTracker', '~> 7.2.0'
# Piwik for analytics
pod 'MatomoTracker', '~> 7.2.0'
# Remove warnings from "bad" pods
pod 'OLMKit', :inhibit_warnings => true
pod 'cmark', :inhibit_warnings => true
pod 'zxcvbn-ios'
# Remove warnings from "bad" pods
pod 'OLMKit', :inhibit_warnings => true
pod 'cmark', :inhibit_warnings => true
pod 'zxcvbn-ios'
# Tools
pod 'SwiftGen', '~> 6.1'
pod 'SwiftLint', '~> 0.36.0'
# Tools
pod 'SwiftGen', '~> 6.1'
pod 'SwiftLint', '~> 0.36.0'
target "Riot" do
import_MatrixKit
pod 'DGCollectionViewLeftAlignFlowLayout', '~> 1.0.4'
pod 'KTCenterFlowLayout', '~> 1.3.1'
pod 'ZXingObjC', '~> 3.6.5'
target 'RiotTests' do
inherit! :search_paths
end
end
target "RiotShareExtension" do
import_MatrixKitAppExtension
end
target "Riot" do
import_MatrixKit
pod 'DGCollectionViewLeftAlignFlowLayout', '~> 1.0.4'
pod 'KTCenterFlowLayout', '~> 1.3.1'
pod 'ZXingObjC', '~> 3.6.5'
pod 'FlowCommoniOS', '~> 1.8.7'
target "SiriIntents" do
import_MatrixKitAppExtension
target 'RiotTests' do
inherit! :search_paths
end
target "RiotNSE" do
import_MatrixKitAppExtension
end
end
target "RiotShareExtension" do
import_MatrixKitAppExtension
end
target "SiriIntents" do
import_MatrixKitAppExtension
end
target "RiotNSE" do
import_MatrixKitAppExtension
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
installer.pods_project.targets.each do |target|
# Disable bitcode for each pod framework
# Because the WebRTC pod (included by the JingleCallStack pod) does not support it.
# Plus the app does not enable it
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
# Force SwiftUTI Swift version to 5.0 (as there is no code changes to perform for SwiftUTI fork using Swift 4.2)
if target.name.include? 'SwiftUTI'
config.build_settings['SWIFT_VERSION'] = '5.0'
end
end
# Disable bitcode for each pod framework
# Because the WebRTC pod (included by the JingleCallStack pod) does not support it.
# Plus the app does not enable it
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
# Force SwiftUTI Swift version to 5.0 (as there is no code changes to perform for SwiftUTI fork using Swift 4.2)
if target.name.include? 'SwiftUTI'
config.build_settings['SWIFT_VERSION'] = '5.0'
end
end
end
end

View file

@ -16,18 +16,18 @@ PODS:
- AFNetworking/NSURLSession
- cmark (0.24.1)
- DGCollectionViewLeftAlignFlowLayout (1.0.4)
- DTCoreText (1.6.23):
- DTCoreText/Core (= 1.6.23)
- DTCoreText (1.6.24):
- DTCoreText/Core (= 1.6.24)
- DTFoundation/Core (~> 1.7.5)
- DTFoundation/DTAnimatedGIF (~> 1.7.5)
- DTFoundation/DTHTMLParser (~> 1.7.5)
- DTFoundation/UIKit (~> 1.7.5)
- DTCoreText/Core (1.6.23):
- DTCoreText/Core (1.6.24):
- DTFoundation/Core (~> 1.7.5)
- DTFoundation/DTAnimatedGIF (~> 1.7.5)
- DTFoundation/DTHTMLParser (~> 1.7.5)
- DTFoundation/UIKit (~> 1.7.5)
- DTCoreText/Extension (1.6.23):
- DTCoreText/Extension (1.6.24):
- DTFoundation/Core (~> 1.7.5)
- DTFoundation/DTAnimatedGIF (~> 1.7.5)
- DTFoundation/DTHTMLParser (~> 1.7.5)
@ -38,50 +38,52 @@ PODS:
- DTFoundation/Core
- DTFoundation/UIKit (1.7.14):
- DTFoundation/Core
- FlowCommoniOS (1.8.7)
- GBDeviceInfo (6.3.0):
- GBDeviceInfo/Core (= 6.3.0)
- GBDeviceInfo/Core (6.3.0)
- GZIP (1.2.3)
- HPGrowingTextView (1.1)
- JitsiMeetSDK (2.8.1)
- KeychainAccess (4.2.0)
- KTCenterFlowLayout (1.3.1)
- libbase58 (0.1.4)
- libPhoneNumber-iOS (0.9.15)
- MatomoTracker (7.2.1):
- MatomoTracker/Core (= 7.2.1)
- MatomoTracker/Core (7.2.1)
- MatrixKit (0.12.8):
- MatrixKit (0.12.11):
- cmark (~> 0.24.1)
- DTCoreText (~> 1.6.23)
- HPGrowingTextView (~> 1.1)
- libPhoneNumber-iOS (~> 0.9.13)
- MatrixKit/Core (= 0.12.8)
- MatrixSDK (= 0.16.7)
- MatrixKit/AppExtension (0.12.8):
- MatrixKit/Core (= 0.12.11)
- MatrixSDK (= 0.16.10)
- MatrixKit/AppExtension (0.12.11):
- cmark (~> 0.24.1)
- DTCoreText (~> 1.6.23)
- DTCoreText/Extension
- HPGrowingTextView (~> 1.1)
- libPhoneNumber-iOS (~> 0.9.13)
- MatrixSDK (= 0.16.7)
- MatrixKit/Core (0.12.8):
- MatrixSDK (= 0.16.10)
- MatrixKit/Core (0.12.11):
- cmark (~> 0.24.1)
- DTCoreText (~> 1.6.23)
- HPGrowingTextView (~> 1.1)
- libPhoneNumber-iOS (~> 0.9.13)
- MatrixSDK (= 0.16.7)
- MatrixSDK (0.16.7):
- MatrixSDK/Core (= 0.16.7)
- MatrixSDK/Core (0.16.7):
- MatrixSDK (= 0.16.10)
- MatrixSDK (0.16.10):
- MatrixSDK/Core (= 0.16.10)
- MatrixSDK/Core (0.16.10):
- AFNetworking (~> 4.0.0)
- GZIP (~> 1.2.2)
- libbase58 (~> 0.1.4)
- OLMKit (~> 3.1.0)
- Realm (~> 4.4.0)
- MatrixSDK/JingleCallStack (0.16.7):
- MatrixSDK/JingleCallStack (0.16.10):
- JitsiMeetSDK (~> 2.8.1)
- MatrixSDK/Core
- MatrixSDK/SwiftSupport (0.16.7):
- MatrixSDK/SwiftSupport (0.16.10):
- MatrixSDK/Core
- OLMKit (3.1.0):
- OLMKit/olmc (= 3.1.0)
@ -106,11 +108,14 @@ PODS:
DEPENDENCIES:
- cmark
- DGCollectionViewLeftAlignFlowLayout (~> 1.0.4)
- FlowCommoniOS (~> 1.8.7)
- GBDeviceInfo (~> 6.3.0)
- KeychainAccess (~> 4.2)
- KTCenterFlowLayout (~> 1.3.1)
- MatomoTracker (~> 7.2.0)
- MatrixKit (= 0.12.8)
- MatrixKit/AppExtension (= 0.12.8)
- MatrixKit (= 0.12.11)
- MatrixKit/AppExtension (= 0.12.11)
- MatrixSDK
- MatrixSDK/JingleCallStack
- MatrixSDK/SwiftSupport
- OLMKit
@ -127,10 +132,12 @@ SPEC REPOS:
- DGCollectionViewLeftAlignFlowLayout
- DTCoreText
- DTFoundation
- FlowCommoniOS
- GBDeviceInfo
- GZIP
- HPGrowingTextView
- JitsiMeetSDK
- KeychainAccess
- KTCenterFlowLayout
- libbase58
- libPhoneNumber-iOS
@ -149,18 +156,20 @@ SPEC CHECKSUMS:
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
cmark: 1d9ad0375e3b9fa281732e992467903606015520
DGCollectionViewLeftAlignFlowLayout: a0fa58797373ded039cafba8133e79373d048399
DTCoreText: 67023bb51b26711d5f640c851f4845aea14c24c9
DTCoreText: 0298d372ccc137e51f27b3ec1af65fd4af5d173a
DTFoundation: 25aa19bb7c6e225b1dfae195604fb8cf1da0ab4c
FlowCommoniOS: 1647a1775b988f5d97202f635bcbcbce4f4c46a1
GBDeviceInfo: a3f39dba1a04dcb630abff65d6f7e8fbf319eadd
GZIP: af5c90ef903776a7e9afe6ebebd794a84a2929d4
HPGrowingTextView: 88a716d97fb853bcb08a4a08e4727da17efc9b19
JitsiMeetSDK: 2984eac1343690bf1c0c72bde75b48b0148d0f79
KeychainAccess: 3f760109aa99b05d0f231e28b22642da7153e38a
KTCenterFlowLayout: 6e02b50ab2bd865025ae82fe266ed13b6d9eaf97
libbase58: 7c040313537b8c44b6e2d15586af8e21f7354efd
libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75
MatomoTracker: 246b6b0693cf39b356134dec7561f719d3538b96
MatrixKit: 0e519c481b87930e30b1732a9a8d5605dba03176
MatrixSDK: 24e0adca0dc0dbbaa502bafdc75564bafd964c7b
MatrixKit: 6c5ba4a7673475eca2ad38bbfa02122a502fd03c
MatrixSDK: a9793d20448ee7cbe8acd8650fa319ea0b11d273
OLMKit: 4ee0159d63feeb86d836fdcfefe418e163511639
Realm: 4eb04d7487bd43c0581256f40b424eafb711deff
Reusable: 53a9acf5c536f229b31b5865782414b508252ddb
@ -169,6 +178,6 @@ SPEC CHECKSUMS:
zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
PODFILE CHECKSUM: a6f754f2d6b9d3ef6ead7aa90e2cd23b80dde8e4
PODFILE CHECKSUM: e717ca842bdc92972d5982a5b70032b9fe3ec9c2
COCOAPODS: 1.8.4
COCOAPODS: 1.9.3

View file

@ -8,7 +8,7 @@ Element iOS
Element iOS is an iOS Matrix client.
.. image:: https://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.svg
:target: https://itunes.apple.com/us/app/riot-open-source-collaboration/id1083446067?mt=8
:target: https://itunes.apple.com/us/app/element/id1083446067?mt=8
It is based on MatrixKit (https://github.com/matrix-org/matrix-ios-kit) and MatrixSDK (https://github.com/matrix-org/matrix-ios-sdk).
@ -20,7 +20,7 @@ Build instructions
Before opening the Element Xcode workspace, you need to build it with the
CocoaPods command::
$ cd Riot
$ cd Element
$ bundle install
$ bundle exec pod install

View file

@ -74,6 +74,7 @@
32891D6C2264CBA300C82226 /* SimpleScreenTemplateViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32891D6A2264CBA300C82226 /* SimpleScreenTemplateViewController.storyboard */; };
32891D75226728EE00C82226 /* KeyVerificationDataLoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32891D73226728EE00C82226 /* KeyVerificationDataLoadingViewController.swift */; };
32891D76226728EF00C82226 /* KeyVerificationDataLoadingViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32891D74226728EE00C82226 /* KeyVerificationDataLoadingViewController.storyboard */; };
328E410624CB168500DC4490 /* AppConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 328E410524CB168500DC4490 /* AppConfiguration.swift */; };
3291DC8A23E0BE820009732F /* Security.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3291DC8923E0BE820009732F /* Security.storyboard */; };
3291DC8D23E0BFF10009732F /* SecurityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3291DC8C23E0BFF10009732F /* SecurityViewController.m */; };
329E746622CD02EA006F9797 /* BubbleReactionActionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 329E746422CD02EA006F9797 /* BubbleReactionActionViewCell.xib */; };
@ -115,6 +116,34 @@
32F6B96C2270623100BBA352 /* KeyVerificationDataLoadingCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9662270623100BBA352 /* KeyVerificationDataLoadingCoordinatorType.swift */; };
32F6B96D2270623100BBA352 /* KeyVerificationDataLoadingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9672270623100BBA352 /* KeyVerificationDataLoadingViewModel.swift */; };
32F6B96E2270623100BBA352 /* KeyVerificationDataLoadingViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F6B9682270623100BBA352 /* KeyVerificationDataLoadingViewModelType.swift */; };
32FD754C24D06EBE00BA7B37 /* RiotSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B5597F20EFC3DF00210D55 /* RiotSettings.swift */; };
32FD754D24D06EBF00BA7B37 /* RiotSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B5597F20EFC3DF00210D55 /* RiotSettings.swift */; };
32FD755024D074C700BA7B37 /* CommonConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD754F24D074C700BA7B37 /* CommonConfiguration.swift */; };
32FD755124D074C700BA7B37 /* CommonConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD754F24D074C700BA7B37 /* CommonConfiguration.swift */; };
32FD755224D074C700BA7B37 /* CommonConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD754F24D074C700BA7B37 /* CommonConfiguration.swift */; };
32FD755324D074C700BA7B37 /* CommonConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD754F24D074C700BA7B37 /* CommonConfiguration.swift */; };
32FD755424D074C700BA7B37 /* CommonConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD754F24D074C700BA7B37 /* CommonConfiguration.swift */; };
32FD755524D0754500BA7B37 /* AppConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 328E410524CB168500DC4490 /* AppConfiguration.swift */; };
32FD755724D15C7A00BA7B37 /* Configurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD755624D15C7A00BA7B37 /* Configurable.swift */; };
32FD755824D15C7A00BA7B37 /* Configurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD755624D15C7A00BA7B37 /* Configurable.swift */; };
32FD755924D15C7A00BA7B37 /* Configurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD755624D15C7A00BA7B37 /* Configurable.swift */; };
32FD755A24D15C7A00BA7B37 /* Configurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD755624D15C7A00BA7B37 /* Configurable.swift */; };
32FD755B24D15C7A00BA7B37 /* Configurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD755624D15C7A00BA7B37 /* Configurable.swift */; };
32FD756424D2AD5100BA7B37 /* BuildSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756324D2AD5100BA7B37 /* BuildSettings.swift */; };
32FD756524D2AD5100BA7B37 /* BuildSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756324D2AD5100BA7B37 /* BuildSettings.swift */; };
32FD756624D2AD5100BA7B37 /* BuildSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756324D2AD5100BA7B37 /* BuildSettings.swift */; };
32FD756724D2AD5100BA7B37 /* BuildSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756324D2AD5100BA7B37 /* BuildSettings.swift */; };
32FD756824D2AD5100BA7B37 /* BuildSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756324D2AD5100BA7B37 /* BuildSettings.swift */; };
32FD757024D2BEF700BA7B37 /* InfoPlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756F24D2BEF700BA7B37 /* InfoPlist.swift */; };
32FD757124D2BEF700BA7B37 /* InfoPlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756F24D2BEF700BA7B37 /* InfoPlist.swift */; };
32FD757224D2BEF700BA7B37 /* InfoPlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756F24D2BEF700BA7B37 /* InfoPlist.swift */; };
32FD757324D2BEF700BA7B37 /* InfoPlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756F24D2BEF700BA7B37 /* InfoPlist.swift */; };
32FD757424D2BEF700BA7B37 /* InfoPlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD756F24D2BEF700BA7B37 /* InfoPlist.swift */; };
32FD757624D2C9BA00BA7B37 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD757524D2C9BA00BA7B37 /* Bundle.swift */; };
32FD757724D2C9BA00BA7B37 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD757524D2C9BA00BA7B37 /* Bundle.swift */; };
32FD757824D2C9BA00BA7B37 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD757524D2C9BA00BA7B37 /* Bundle.swift */; };
32FD757924D2C9BA00BA7B37 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD757524D2C9BA00BA7B37 /* Bundle.swift */; };
32FD757A24D2C9BA00BA7B37 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FD757524D2C9BA00BA7B37 /* Bundle.swift */; };
32FDC1CD2386CD390084717A /* RiotSettingIntegrationProvisioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FDC1CC2386CD390084717A /* RiotSettingIntegrationProvisioning.swift */; };
39D49C6524B8D40500FEDBC8 /* ElementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D49C6224B8D40500FEDBC8 /* ElementViewController.swift */; };
39D49C6624B8D40500FEDBC8 /* Timeline_1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D49C6324B8D40500FEDBC8 /* Timeline_1.swift */; };
@ -136,7 +165,6 @@
B108932323AB908A00802670 /* KeyVerificationRequestStatusViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B108932223AB908A00802670 /* KeyVerificationRequestStatusViewData.swift */; };
B108932523AB93A200802670 /* KeyVerificationConclusionViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B108932423AB93A200802670 /* KeyVerificationConclusionViewData.swift */; };
B108932823ABEE6800802670 /* BubbleCellReadReceiptsDisplayable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B108932723ABEE6700802670 /* BubbleCellReadReceiptsDisplayable.swift */; };
B108932A23ACBA0B00802670 /* SizingViewHeight.swift in Sources */ = {isa = PBXBuildFile; fileRef = B108932923ACBA0B00802670 /* SizingViewHeight.swift */; };
B1098BDF21ECE09F000DDA48 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098BDA21ECE09E000DDA48 /* Strings.swift */; };
B1098BE121ECE09F000DDA48 /* Images.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098BDC21ECE09E000DDA48 /* Images.swift */; };
B1098BE321ECE09F000DDA48 /* RiotDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1098BDE21ECE09E000DDA48 /* RiotDefaults.swift */; };
@ -312,6 +340,13 @@
B1B336C3242B933700F95EC4 /* KeyVerificationSelfVerifyStartCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B336BB242B933500F95EC4 /* KeyVerificationSelfVerifyStartCoordinator.swift */; };
B1B336C4242B933700F95EC4 /* KeyVerificationSelfVerifyStartViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B336BC242B933600F95EC4 /* KeyVerificationSelfVerifyStartViewAction.swift */; };
B1B336C5242B933700F95EC4 /* KeyVerificationSelfVerifyStartViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B336BD242B933600F95EC4 /* KeyVerificationSelfVerifyStartViewModel.swift */; };
B1B4E9B924D46EB3004D5C33 /* SizingViewHeight.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B4E9B624D46EB3004D5C33 /* SizingViewHeight.swift */; };
B1B4E9BA24D46EB4004D5C33 /* SizableBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B4E9B724D46EB3004D5C33 /* SizableBubbleCell.swift */; };
B1B4E9BB24D46EB4004D5C33 /* SizingViewHeightStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B4E9B824D46EB3004D5C33 /* SizingViewHeightStore.swift */; };
B1B4E9BD24D4701F004D5C33 /* BubbleCellReactionsDisplayable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B4E9BC24D4701F004D5C33 /* BubbleCellReactionsDisplayable.swift */; };
B1B4E9BF24D4703E004D5C33 /* BaseBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B4E9BE24D4703E004D5C33 /* BaseBubbleCell.swift */; };
B1B4E9C224D471FD004D5C33 /* BubbleReactionsViewSizer.m in Sources */ = {isa = PBXBuildFile; fileRef = B1B4E9C024D471FD004D5C33 /* BubbleReactionsViewSizer.m */; };
B1B4E9C424D47207004D5C33 /* BubbleReactionsViewModelBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B4E9C324D47206004D5C33 /* BubbleReactionsViewModelBuilder.swift */; };
B1B5571820EE6C4D00210D55 /* CountryPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1B5567A20EE6C4C00210D55 /* CountryPickerViewController.m */; };
B1B5571920EE6C4D00210D55 /* LanguagePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1B5567C20EE6C4C00210D55 /* LanguagePickerViewController.m */; };
B1B5571A20EE6C4D00210D55 /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1B5567E20EE6C4C00210D55 /* SettingsViewController.m */; };
@ -691,12 +726,43 @@
B1E5368F21FB7258001F3AFF /* KeyBackupRecoverFromPassphraseViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1E5368E21FB7258001F3AFF /* KeyBackupRecoverFromPassphraseViewController.storyboard */; };
B1FDF56021F5FE5500BA3834 /* KeyBackupSetupPassphraseViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1FDF55F21F5FE5500BA3834 /* KeyBackupSetupPassphraseViewAction.swift */; };
DB1392A2332C3CAF6C9962EF /* Pods_RiotPods_RiotNSE.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4D418D054E4032F2CFA8B51 /* Pods_RiotPods_RiotNSE.framework */; };
EC1CA85F24C1DEC400DE9EBF /* EnterPinCodeViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85124C1DEC400DE9EBF /* EnterPinCodeViewModelType.swift */; };
EC1CA86024C1DEC400DE9EBF /* EnterPinCodeViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85224C1DEC400DE9EBF /* EnterPinCodeViewAction.swift */; };
EC1CA86124C1DEC400DE9EBF /* EnterPinCodeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85324C1DEC400DE9EBF /* EnterPinCodeViewModel.swift */; };
EC1CA86224C1DEC400DE9EBF /* EnterPinCodeViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85424C1DEC400DE9EBF /* EnterPinCodeViewState.swift */; };
EC1CA86324C1DEC400DE9EBF /* EnterPinCodeCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85524C1DEC400DE9EBF /* EnterPinCodeCoordinatorType.swift */; };
EC1CA86424C1DEC400DE9EBF /* EnterPinCodeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85624C1DEC400DE9EBF /* EnterPinCodeCoordinator.swift */; };
EC1CA86524C1DEC400DE9EBF /* EnterPinCodeViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC1CA85724C1DEC400DE9EBF /* EnterPinCodeViewController.storyboard */; };
EC1CA86624C1DEC400DE9EBF /* EnterPinCodeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85824C1DEC400DE9EBF /* EnterPinCodeViewController.swift */; };
EC1CA86824C1DEC400DE9EBF /* SetPinCoordinatorBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85A24C1DEC400DE9EBF /* SetPinCoordinatorBridgePresenter.swift */; };
EC1CA86924C1DEC400DE9EBF /* SetPinCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85B24C1DEC400DE9EBF /* SetPinCoordinator.swift */; };
EC1CA86C24C1DEC400DE9EBF /* SetPinCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA85E24C1DEC400DE9EBF /* SetPinCoordinatorType.swift */; };
EC1CA86E24C5BA4500DE9EBF /* PinCodePreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA86D24C5BA4500DE9EBF /* PinCodePreferences.swift */; };
EC1CA87224C823E700DE9EBF /* KeyValueStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA87124C823E700DE9EBF /* KeyValueStore.swift */; };
EC1CA87524C8259700DE9EBF /* KeychainStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA87424C8259700DE9EBF /* KeychainStore.swift */; };
EC1CA87724C82D0E00DE9EBF /* MemoryStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA87624C82D0E00DE9EBF /* MemoryStore.swift */; };
EC1CA87A24C8841C00DE9EBF /* LocalAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA87924C8841C00DE9EBF /* LocalAuthenticationService.swift */; };
EC1CA89524C9C9A200DE9EBF /* SetupBiometricsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA88D24C9C9A200DE9EBF /* SetupBiometricsViewController.swift */; };
EC1CA89624C9C9A200DE9EBF /* SetupBiometricsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA88E24C9C9A200DE9EBF /* SetupBiometricsCoordinator.swift */; };
EC1CA89724C9C9A200DE9EBF /* SetupBiometricsViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA88F24C9C9A200DE9EBF /* SetupBiometricsViewModelType.swift */; };
EC1CA89824C9C9A200DE9EBF /* SetupBiometricsViewAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA89024C9C9A200DE9EBF /* SetupBiometricsViewAction.swift */; };
EC1CA89924C9C9A200DE9EBF /* SetupBiometricsViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EC1CA89124C9C9A200DE9EBF /* SetupBiometricsViewController.storyboard */; };
EC1CA89A24C9C9A200DE9EBF /* SetupBiometricsCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA89224C9C9A200DE9EBF /* SetupBiometricsCoordinatorType.swift */; };
EC1CA89B24C9C9A200DE9EBF /* SetupBiometricsViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA89324C9C9A200DE9EBF /* SetupBiometricsViewState.swift */; };
EC1CA89C24C9C9A200DE9EBF /* SetupBiometricsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA89424C9C9A200DE9EBF /* SetupBiometricsViewModel.swift */; };
EC1CA8C824D3160100DE9EBF /* Row.m in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA8C724D3160100DE9EBF /* Row.m */; };
EC1CA8CB24D3168F00DE9EBF /* Section.m in Sources */ = {isa = PBXBuildFile; fileRef = EC1CA8CA24D3168F00DE9EBF /* Section.m */; };
EC1CA8D424D8103400DE9EBF /* App-Common.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = EC1CA8D324D8103400DE9EBF /* App-Common.xcconfig */; };
EC1CA8D624D8108700DE9EBF /* ShareExtension-Common.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = EC1CA8D524D8108700DE9EBF /* ShareExtension-Common.xcconfig */; };
EC1CA8D824D8118400DE9EBF /* SiriIntents-Common.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = EC1CA8D724D8118400DE9EBF /* SiriIntents-Common.xcconfig */; };
EC1CA8DA24D811B400DE9EBF /* NSE-Common.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = EC1CA8D924D811B400DE9EBF /* NSE-Common.xcconfig */; };
EC2B4EF124A1EEBD005EB739 /* DataProtectionHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2B4EF024A1EEBD005EB739 /* DataProtectionHelper.swift */; };
EC2B4EF224A1EF34005EB739 /* DataProtectionHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2B4EF024A1EEBD005EB739 /* DataProtectionHelper.swift */; };
EC3B066924AC6ADE000DF9BF /* CrossSigningService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC3B066424AC6ADD000DF9BF /* CrossSigningService.swift */; };
EC3B066A24AC6ADE000DF9BF /* CrossSigningSetupBannerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = EC3B066624AC6ADD000DF9BF /* CrossSigningSetupBannerCell.xib */; };
EC3B066B24AC6ADE000DF9BF /* CrossSigningBannerPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC3B066724AC6ADD000DF9BF /* CrossSigningBannerPreferences.swift */; };
EC3B066C24AC6ADE000DF9BF /* CrossSigningSetupBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC3B066824AC6ADD000DF9BF /* CrossSigningSetupBannerCell.swift */; };
EC619C1924DAD96000663A80 /* UIScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC619C1824DAD96000663A80 /* UIScrollView.swift */; };
EC711B4624A63B13008F830C /* MXRecoveryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC711B4524A63B13008F830C /* MXRecoveryService.swift */; };
EC711B7424A63B37008F830C /* SecretsSetupRecoveryKeyViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC711B4A24A63B36008F830C /* SecretsSetupRecoveryKeyViewModelType.swift */; };
EC711B7524A63B37008F830C /* SecretsSetupRecoveryKeyCoordinatorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC711B4B24A63B36008F830C /* SecretsSetupRecoveryKeyCoordinatorType.swift */; };
@ -782,6 +848,7 @@
ECB101322477CFDB00CF8C11 /* UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECB1012E2477CFDB00CF8C11 /* UIDevice.swift */; };
ECB101332477CFDB00CF8C11 /* UITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECB1012F2477CFDB00CF8C11 /* UITableViewCell.swift */; };
ECB101362477D00700CF8C11 /* UniversalLink.m in Sources */ = {isa = PBXBuildFile; fileRef = ECB101352477D00700CF8C11 /* UniversalLink.m */; };
ECDC15F224AF41D2003437CF /* FormattedBodyParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECDC15F124AF41D2003437CF /* FormattedBodyParser.swift */; };
F05927C91FDED836009F2A68 /* MXGroup+Riot.m in Sources */ = {isa = PBXBuildFile; fileRef = F05927C71FDED835009F2A68 /* MXGroup+Riot.m */; };
F083BD1E1E7009ED00A9B29C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F083BB0D1E7009EC00A9B29C /* AppDelegate.m */; };
F083BDE61E7009ED00A9B29C /* busy.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = F083BBDB1E7009EC00A9B29C /* busy.mp3 */; };
@ -925,6 +992,7 @@
32891D6A2264CBA300C82226 /* SimpleScreenTemplateViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = SimpleScreenTemplateViewController.storyboard; sourceTree = "<group>"; };
32891D73226728EE00C82226 /* KeyVerificationDataLoadingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyVerificationDataLoadingViewController.swift; sourceTree = "<group>"; };
32891D74226728EE00C82226 /* KeyVerificationDataLoadingViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = KeyVerificationDataLoadingViewController.storyboard; sourceTree = "<group>"; };
328E410524CB168500DC4490 /* AppConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppConfiguration.swift; sourceTree = "<group>"; };
3291DC8923E0BE820009732F /* Security.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Security.storyboard; sourceTree = "<group>"; };
3291DC8B23E0BFF10009732F /* SecurityViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecurityViewController.h; sourceTree = "<group>"; };
3291DC8C23E0BFF10009732F /* SecurityViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecurityViewController.m; sourceTree = "<group>"; };
@ -980,6 +1048,11 @@
32F6B9662270623100BBA352 /* KeyVerificationDataLoadingCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyVerificationDataLoadingCoordinatorType.swift; sourceTree = "<group>"; };
32F6B9672270623100BBA352 /* KeyVerificationDataLoadingViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyVerificationDataLoadingViewModel.swift; sourceTree = "<group>"; };
32F6B9682270623100BBA352 /* KeyVerificationDataLoadingViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyVerificationDataLoadingViewModelType.swift; sourceTree = "<group>"; };
32FD754F24D074C700BA7B37 /* CommonConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommonConfiguration.swift; sourceTree = "<group>"; };
32FD755624D15C7A00BA7B37 /* Configurable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Configurable.swift; sourceTree = "<group>"; };
32FD756324D2AD5100BA7B37 /* BuildSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildSettings.swift; sourceTree = "<group>"; };
32FD756F24D2BEF700BA7B37 /* InfoPlist.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfoPlist.swift; sourceTree = "<group>"; };
32FD757524D2C9BA00BA7B37 /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = "<group>"; };
32FDC1CC2386CD390084717A /* RiotSettingIntegrationProvisioning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RiotSettingIntegrationProvisioning.swift; sourceTree = "<group>"; };
3942DD65EBEB7AE647C6392A /* Pods-RiotPods-SiriIntents.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-SiriIntents.debug.xcconfig"; path = "Target Support Files/Pods-RiotPods-SiriIntents/Pods-RiotPods-SiriIntents.debug.xcconfig"; sourceTree = "<group>"; };
39D49C6224B8D40500FEDBC8 /* ElementViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ElementViewController.swift; sourceTree = "<group>"; };
@ -1015,7 +1088,6 @@
B108932223AB908A00802670 /* KeyVerificationRequestStatusViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyVerificationRequestStatusViewData.swift; sourceTree = "<group>"; };
B108932423AB93A200802670 /* KeyVerificationConclusionViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyVerificationConclusionViewData.swift; sourceTree = "<group>"; };
B108932723ABEE6700802670 /* BubbleCellReadReceiptsDisplayable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BubbleCellReadReceiptsDisplayable.swift; sourceTree = "<group>"; };
B108932923ACBA0B00802670 /* SizingViewHeight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SizingViewHeight.swift; sourceTree = "<group>"; };
B1098BDA21ECE09E000DDA48 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = "<group>"; };
B1098BDC21ECE09E000DDA48 /* Images.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Images.swift; sourceTree = "<group>"; };
B1098BDE21ECE09E000DDA48 /* RiotDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RiotDefaults.swift; sourceTree = "<group>"; };
@ -1241,6 +1313,14 @@
B1B336BB242B933500F95EC4 /* KeyVerificationSelfVerifyStartCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyVerificationSelfVerifyStartCoordinator.swift; sourceTree = "<group>"; };
B1B336BC242B933600F95EC4 /* KeyVerificationSelfVerifyStartViewAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyVerificationSelfVerifyStartViewAction.swift; sourceTree = "<group>"; };
B1B336BD242B933600F95EC4 /* KeyVerificationSelfVerifyStartViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyVerificationSelfVerifyStartViewModel.swift; sourceTree = "<group>"; };
B1B4E9B624D46EB3004D5C33 /* SizingViewHeight.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SizingViewHeight.swift; sourceTree = "<group>"; };
B1B4E9B724D46EB3004D5C33 /* SizableBubbleCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SizableBubbleCell.swift; sourceTree = "<group>"; };
B1B4E9B824D46EB3004D5C33 /* SizingViewHeightStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SizingViewHeightStore.swift; sourceTree = "<group>"; };
B1B4E9BC24D4701F004D5C33 /* BubbleCellReactionsDisplayable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleCellReactionsDisplayable.swift; sourceTree = "<group>"; };
B1B4E9BE24D4703E004D5C33 /* BaseBubbleCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseBubbleCell.swift; sourceTree = "<group>"; };
B1B4E9C024D471FD004D5C33 /* BubbleReactionsViewSizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BubbleReactionsViewSizer.m; sourceTree = "<group>"; };
B1B4E9C124D471FD004D5C33 /* BubbleReactionsViewSizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BubbleReactionsViewSizer.h; sourceTree = "<group>"; };
B1B4E9C324D47206004D5C33 /* BubbleReactionsViewModelBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleReactionsViewModelBuilder.swift; sourceTree = "<group>"; };
B1B5567920EE6C4C00210D55 /* CountryPickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CountryPickerViewController.h; sourceTree = "<group>"; };
B1B5567A20EE6C4C00210D55 /* CountryPickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CountryPickerViewController.m; sourceTree = "<group>"; };
B1B5567C20EE6C4C00210D55 /* LanguagePickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LanguagePickerViewController.m; sourceTree = "<group>"; };
@ -1760,11 +1840,53 @@
BABB6681FBD79219B1213D6C /* Pods-RiotTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotTests.debug.xcconfig"; path = "Target Support Files/Pods-RiotTests/Pods-RiotTests.debug.xcconfig"; sourceTree = "<group>"; };
E2599D0ECB8DD206624E450B /* Pods-RiotPods-SiriIntents.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-SiriIntents.release.xcconfig"; path = "Target Support Files/Pods-RiotPods-SiriIntents/Pods-RiotPods-SiriIntents.release.xcconfig"; sourceTree = "<group>"; };
E4D418D054E4032F2CFA8B51 /* Pods_RiotPods_RiotNSE.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RiotPods_RiotNSE.framework; sourceTree = BUILT_PRODUCTS_DIR; };
EC1CA85124C1DEC400DE9EBF /* EnterPinCodeViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnterPinCodeViewModelType.swift; sourceTree = "<group>"; };
EC1CA85224C1DEC400DE9EBF /* EnterPinCodeViewAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnterPinCodeViewAction.swift; sourceTree = "<group>"; };
EC1CA85324C1DEC400DE9EBF /* EnterPinCodeViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnterPinCodeViewModel.swift; sourceTree = "<group>"; };
EC1CA85424C1DEC400DE9EBF /* EnterPinCodeViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnterPinCodeViewState.swift; sourceTree = "<group>"; };
EC1CA85524C1DEC400DE9EBF /* EnterPinCodeCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnterPinCodeCoordinatorType.swift; sourceTree = "<group>"; };
EC1CA85624C1DEC400DE9EBF /* EnterPinCodeCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnterPinCodeCoordinator.swift; sourceTree = "<group>"; };
EC1CA85724C1DEC400DE9EBF /* EnterPinCodeViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = EnterPinCodeViewController.storyboard; sourceTree = "<group>"; };
EC1CA85824C1DEC400DE9EBF /* EnterPinCodeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnterPinCodeViewController.swift; sourceTree = "<group>"; };
EC1CA85A24C1DEC400DE9EBF /* SetPinCoordinatorBridgePresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetPinCoordinatorBridgePresenter.swift; sourceTree = "<group>"; };
EC1CA85B24C1DEC400DE9EBF /* SetPinCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetPinCoordinator.swift; sourceTree = "<group>"; };
EC1CA85E24C1DEC400DE9EBF /* SetPinCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetPinCoordinatorType.swift; sourceTree = "<group>"; };
EC1CA86D24C5BA4500DE9EBF /* PinCodePreferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PinCodePreferences.swift; sourceTree = "<group>"; };
EC1CA87124C823E700DE9EBF /* KeyValueStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyValueStore.swift; sourceTree = "<group>"; };
EC1CA87424C8259700DE9EBF /* KeychainStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainStore.swift; sourceTree = "<group>"; };
EC1CA87624C82D0E00DE9EBF /* MemoryStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MemoryStore.swift; sourceTree = "<group>"; };
EC1CA87924C8841C00DE9EBF /* LocalAuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAuthenticationService.swift; sourceTree = "<group>"; };
EC1CA88D24C9C9A200DE9EBF /* SetupBiometricsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupBiometricsViewController.swift; sourceTree = "<group>"; };
EC1CA88E24C9C9A200DE9EBF /* SetupBiometricsCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupBiometricsCoordinator.swift; sourceTree = "<group>"; };
EC1CA88F24C9C9A200DE9EBF /* SetupBiometricsViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupBiometricsViewModelType.swift; sourceTree = "<group>"; };
EC1CA89024C9C9A200DE9EBF /* SetupBiometricsViewAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupBiometricsViewAction.swift; sourceTree = "<group>"; };
EC1CA89124C9C9A200DE9EBF /* SetupBiometricsViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = SetupBiometricsViewController.storyboard; sourceTree = "<group>"; };
EC1CA89224C9C9A200DE9EBF /* SetupBiometricsCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupBiometricsCoordinatorType.swift; sourceTree = "<group>"; };
EC1CA89324C9C9A200DE9EBF /* SetupBiometricsViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupBiometricsViewState.swift; sourceTree = "<group>"; };
EC1CA89424C9C9A200DE9EBF /* SetupBiometricsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupBiometricsViewModel.swift; sourceTree = "<group>"; };
EC1CA8B324D1AA8000DE9EBF /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = "<group>"; };
EC1CA8B424D1AA8700DE9EBF /* App-Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "App-Debug.xcconfig"; sourceTree = "<group>"; };
EC1CA8B624D1AA8D00DE9EBF /* App-Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "App-Release.xcconfig"; sourceTree = "<group>"; };
EC1CA8B824D1AD1600DE9EBF /* ShareExtension-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "ShareExtension-Debug.xcconfig"; sourceTree = "<group>"; };
EC1CA8B924D1AD1600DE9EBF /* ShareExtension-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "ShareExtension-Release.xcconfig"; sourceTree = "<group>"; };
EC1CA8BA24D1B4BF00DE9EBF /* SiriIntents-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "SiriIntents-Release.xcconfig"; sourceTree = "<group>"; };
EC1CA8BB24D1B4BF00DE9EBF /* SiriIntents-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "SiriIntents-Debug.xcconfig"; sourceTree = "<group>"; };
EC1CA8BC24D1B4CF00DE9EBF /* NSE-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "NSE-Debug.xcconfig"; sourceTree = "<group>"; };
EC1CA8BD24D1B4CF00DE9EBF /* NSE-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "NSE-Release.xcconfig"; sourceTree = "<group>"; };
EC1CA8C624D3160100DE9EBF /* Row.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Row.h; sourceTree = "<group>"; };
EC1CA8C724D3160100DE9EBF /* Row.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Row.m; sourceTree = "<group>"; };
EC1CA8C924D3168F00DE9EBF /* Section.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Section.h; sourceTree = "<group>"; };
EC1CA8CA24D3168F00DE9EBF /* Section.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Section.m; sourceTree = "<group>"; };
EC1CA8D324D8103400DE9EBF /* App-Common.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "App-Common.xcconfig"; sourceTree = "<group>"; };
EC1CA8D524D8108700DE9EBF /* ShareExtension-Common.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "ShareExtension-Common.xcconfig"; sourceTree = "<group>"; };
EC1CA8D724D8118400DE9EBF /* SiriIntents-Common.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "SiriIntents-Common.xcconfig"; sourceTree = "<group>"; };
EC1CA8D924D811B400DE9EBF /* NSE-Common.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "NSE-Common.xcconfig"; sourceTree = "<group>"; };
EC2B4EF024A1EEBD005EB739 /* DataProtectionHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataProtectionHelper.swift; sourceTree = "<group>"; };
EC3B066424AC6ADD000DF9BF /* CrossSigningService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossSigningService.swift; sourceTree = "<group>"; };
EC3B066624AC6ADD000DF9BF /* CrossSigningSetupBannerCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CrossSigningSetupBannerCell.xib; sourceTree = "<group>"; };
EC3B066724AC6ADD000DF9BF /* CrossSigningBannerPreferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossSigningBannerPreferences.swift; sourceTree = "<group>"; };
EC3B066824AC6ADD000DF9BF /* CrossSigningSetupBannerCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossSigningSetupBannerCell.swift; sourceTree = "<group>"; };
EC619C1824DAD96000663A80 /* UIScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIScrollView.swift; sourceTree = "<group>"; };
EC711B4524A63B13008F830C /* MXRecoveryService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MXRecoveryService.swift; sourceTree = "<group>"; };
EC711B4A24A63B36008F830C /* SecretsSetupRecoveryKeyViewModelType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretsSetupRecoveryKeyViewModelType.swift; sourceTree = "<group>"; };
EC711B4B24A63B36008F830C /* SecretsSetupRecoveryKeyCoordinatorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretsSetupRecoveryKeyCoordinatorType.swift; sourceTree = "<group>"; };
@ -1855,6 +1977,7 @@
ECB1012F2477CFDB00CF8C11 /* UITableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewCell.swift; sourceTree = "<group>"; };
ECB101342477D00700CF8C11 /* UniversalLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniversalLink.h; sourceTree = "<group>"; };
ECB101352477D00700CF8C11 /* UniversalLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UniversalLink.m; sourceTree = "<group>"; };
ECDC15F124AF41D2003437CF /* FormattedBodyParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormattedBodyParser.swift; sourceTree = "<group>"; };
F05927C71FDED835009F2A68 /* MXGroup+Riot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MXGroup+Riot.m"; sourceTree = "<group>"; };
F05927C81FDED835009F2A68 /* MXGroup+Riot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MXGroup+Riot.h"; sourceTree = "<group>"; };
F083BB031E7005FD00A9B29C /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -2256,6 +2379,18 @@
path = Modal;
sourceTree = "<group>";
};
32FD754E24D073E400BA7B37 /* Config */ = {
isa = PBXGroup;
children = (
EC1CA8B324D1AA8000DE9EBF /* Common.xcconfig */,
32FD754F24D074C700BA7B37 /* CommonConfiguration.swift */,
328E410524CB168500DC4490 /* AppConfiguration.swift */,
32FD755624D15C7A00BA7B37 /* Configurable.swift */,
32FD756324D2AD5100BA7B37 /* BuildSettings.swift */,
);
path = Config;
sourceTree = "<group>";
};
39D49C6124B8D3B000FEDBC8 /* LaunchLoadingAnimation */ = {
isa = PBXGroup;
children = (
@ -2303,6 +2438,9 @@
92726A451F58737A004AD26F /* IntentHandler.h */,
92726A461F58737A004AD26F /* IntentHandler.m */,
92726A481F58737A004AD26F /* Info.plist */,
EC1CA8D724D8118400DE9EBF /* SiriIntents-Common.xcconfig */,
EC1CA8BB24D1B4BF00DE9EBF /* SiriIntents-Debug.xcconfig */,
EC1CA8BA24D1B4BF00DE9EBF /* SiriIntents-Release.xcconfig */,
);
path = SiriIntents;
sourceTree = "<group>";
@ -2318,19 +2456,22 @@
path = Success;
sourceTree = "<group>";
};
B108932623ABE82C00802670 /* BaseContentViews */ = {
B108932623ABE82C00802670 /* BaseBubbleCell */ = {
isa = PBXGroup;
children = (
B108932723ABEE6700802670 /* BubbleCellReadReceiptsDisplayable.swift */,
B1B4E9BE24D4703E004D5C33 /* BaseBubbleCell.swift */,
B14084C523BF76890010F692 /* BubbleCellContentView.swift */,
B14084C723BF76CB0010F692 /* BubbleCellContentView.xib */,
B108932723ABEE6700802670 /* BubbleCellReadReceiptsDisplayable.swift */,
B1B4E9BC24D4701F004D5C33 /* BubbleCellReactionsDisplayable.swift */,
);
path = BaseContentViews;
path = BaseBubbleCell;
sourceTree = "<group>";
};
B1098BD921ECE09E000DDA48 /* Generated */ = {
isa = PBXGroup;
children = (
32FD756F24D2BEF700BA7B37 /* InfoPlist.swift */,
B1098BDA21ECE09E000DDA48 /* Strings.swift */,
B1098BDC21ECE09E000DDA48 /* Images.swift */,
B1098BDE21ECE09E000DDA48 /* RiotDefaults.swift */,
@ -2660,6 +2801,9 @@
B1664BD120F4E82700808783 /* RiotShareExtension-Bridging-Header.h */,
B1664BD220F4E82800808783 /* RiotShareExtension.entitlements */,
B1664BD320F4E82800808783 /* Info.plist */,
EC1CA8D524D8108700DE9EBF /* ShareExtension-Common.xcconfig */,
EC1CA8B824D1AD1600DE9EBF /* ShareExtension-Debug.xcconfig */,
EC1CA8B924D1AD1600DE9EBF /* ShareExtension-Release.xcconfig */,
);
path = SupportingFiles;
sourceTree = "<group>";
@ -2682,6 +2826,9 @@
B16932A020F3A21B00746532 /* Riot.entitlements */,
B16932A120F3A21B00746532 /* Info.plist */,
B16932A220F3A21B00746532 /* empty.mm */,
EC1CA8D324D8103400DE9EBF /* App-Common.xcconfig */,
EC1CA8B424D1AA8700DE9EBF /* App-Debug.xcconfig */,
EC1CA8B624D1AA8D00DE9EBF /* App-Release.xcconfig */,
);
path = SupportingFiles;
sourceTree = "<group>";
@ -2876,11 +3023,14 @@
329E746422CD02EA006F9797 /* BubbleReactionActionViewCell.xib */,
B1963B31228F1C6B00CBA17F /* BubbleReactionsViewModelType.swift */,
B1963B27228F1C4800CBA17F /* BubbleReactionsViewModel.swift */,
B1B4E9C324D47206004D5C33 /* BubbleReactionsViewModelBuilder.swift */,
B1963B25228F1C4800CBA17F /* BubbleReactionsView.swift */,
B1963B2A228F1C4800CBA17F /* BubbleReactionsView.xib */,
B1963B28228F1C4800CBA17F /* BubbleReactionViewData.swift */,
B1963B29228F1C4800CBA17F /* BubbleReactionViewCell.swift */,
B1963B26228F1C4800CBA17F /* BubbleReactionViewCell.xib */,
B1B4E9C124D471FD004D5C33 /* BubbleReactionsViewSizer.h */,
B1B4E9C024D471FD004D5C33 /* BubbleReactionsViewSizer.m */,
);
path = BubbleReactions;
sourceTree = "<group>";
@ -2904,7 +3054,6 @@
B1A12C65239ABBDB00AA2B86 /* KeyVerification */ = {
isa = PBXGroup;
children = (
B108932923ACBA0B00802670 /* SizingViewHeight.swift */,
B1C543A3239E98E400DCA1FA /* KeyVerificationCellInnerContentView.swift */,
B1C543A5239E999700DCA1FA /* KeyVerificationCellInnerContentView.xib */,
B1C543AF23A2871300DCA1FA /* KeyVerificationBaseBubbleCell.swift */,
@ -2986,9 +3135,20 @@
path = SelfVerifyStart;
sourceTree = "<group>";
};
B1B4E9B524D46EB3004D5C33 /* SizableCell */ = {
isa = PBXGroup;
children = (
B1B4E9B624D46EB3004D5C33 /* SizingViewHeight.swift */,
B1B4E9B724D46EB3004D5C33 /* SizableBubbleCell.swift */,
B1B4E9B824D46EB3004D5C33 /* SizingViewHeightStore.swift */,
);
path = SizableCell;
sourceTree = "<group>";
};
B1B5567620EE6C4C00210D55 /* Modules */ = {
isa = PBXGroup;
children = (
EC1CA84F24C1DEC400DE9EBF /* SetPinCode */,
EC3B066324AC6ADD000DF9BF /* CrossSigning */,
EC711BB424A63C11008F830C /* AuthenticatedSession */,
EC711B9A24A63B58008F830C /* SecureBackup */,
@ -3032,6 +3192,7 @@
B1B5567720EE6C4C00210D55 /* Settings */ = {
isa = PBXGroup;
children = (
EC1CA8C524D315EA00DE9EBF /* Models */,
B1B5567F20EE6C4C00210D55 /* SettingsViewController.h */,
B1B5567E20EE6C4C00210D55 /* SettingsViewController.m */,
B1B5578120EF564900210D55 /* Views */,
@ -3839,7 +4000,8 @@
B1B5583F20EF768E00210D55 /* BubbleCells */ = {
isa = PBXGroup;
children = (
B108932623ABE82C00802670 /* BaseContentViews */,
B108932623ABE82C00802670 /* BaseBubbleCell */,
B1B4E9B524D46EB3004D5C33 /* SizableCell */,
B1A12C65239ABBDB00AA2B86 /* KeyVerification */,
B1B5584220EF768E00210D55 /* Encryption */,
B1B5589220EF768E00210D55 /* RoomEmptyBubbleCell.h */,
@ -4063,6 +4225,8 @@
B1B5597C20EFC3DF00210D55 /* Managers */ = {
isa = PBXGroup;
children = (
EC1CA87824C8840B00DE9EBF /* LocalAuthentication */,
EC1CA87324C8257F00DE9EBF /* KeyValueStorage */,
B185145324B7CF9500EE19EA /* AppVersion */,
EC85D73B2477DDD0002C44C9 /* PushNotification */,
B12C56ED2396CB0100FAC6DE /* RoomMessageLinkParser */,
@ -4383,6 +4547,78 @@
path = Recover;
sourceTree = "<group>";
};
EC1CA84F24C1DEC400DE9EBF /* SetPinCode */ = {
isa = PBXGroup;
children = (
EC1CA88C24C9C9A200DE9EBF /* SetupBiometrics */,
EC1CA85024C1DEC400DE9EBF /* EnterPinCode */,
EC1CA85A24C1DEC400DE9EBF /* SetPinCoordinatorBridgePresenter.swift */,
EC1CA85B24C1DEC400DE9EBF /* SetPinCoordinator.swift */,
EC1CA85E24C1DEC400DE9EBF /* SetPinCoordinatorType.swift */,
EC1CA86D24C5BA4500DE9EBF /* PinCodePreferences.swift */,
);
path = SetPinCode;
sourceTree = "<group>";
};
EC1CA85024C1DEC400DE9EBF /* EnterPinCode */ = {
isa = PBXGroup;
children = (
EC1CA85124C1DEC400DE9EBF /* EnterPinCodeViewModelType.swift */,
EC1CA85224C1DEC400DE9EBF /* EnterPinCodeViewAction.swift */,
EC1CA85324C1DEC400DE9EBF /* EnterPinCodeViewModel.swift */,
EC1CA85424C1DEC400DE9EBF /* EnterPinCodeViewState.swift */,
EC1CA85524C1DEC400DE9EBF /* EnterPinCodeCoordinatorType.swift */,
EC1CA85624C1DEC400DE9EBF /* EnterPinCodeCoordinator.swift */,
EC1CA85724C1DEC400DE9EBF /* EnterPinCodeViewController.storyboard */,
EC1CA85824C1DEC400DE9EBF /* EnterPinCodeViewController.swift */,
);
path = EnterPinCode;
sourceTree = "<group>";
};
EC1CA87324C8257F00DE9EBF /* KeyValueStorage */ = {
isa = PBXGroup;
children = (
EC1CA87124C823E700DE9EBF /* KeyValueStore.swift */,
EC1CA87424C8259700DE9EBF /* KeychainStore.swift */,
EC1CA87624C82D0E00DE9EBF /* MemoryStore.swift */,
);
path = KeyValueStorage;
sourceTree = "<group>";
};
EC1CA87824C8840B00DE9EBF /* LocalAuthentication */ = {
isa = PBXGroup;
children = (
EC1CA87924C8841C00DE9EBF /* LocalAuthenticationService.swift */,
);
path = LocalAuthentication;
sourceTree = "<group>";
};
EC1CA88C24C9C9A200DE9EBF /* SetupBiometrics */ = {
isa = PBXGroup;
children = (
EC1CA88D24C9C9A200DE9EBF /* SetupBiometricsViewController.swift */,
EC1CA88E24C9C9A200DE9EBF /* SetupBiometricsCoordinator.swift */,
EC1CA88F24C9C9A200DE9EBF /* SetupBiometricsViewModelType.swift */,
EC1CA89024C9C9A200DE9EBF /* SetupBiometricsViewAction.swift */,
EC1CA89124C9C9A200DE9EBF /* SetupBiometricsViewController.storyboard */,
EC1CA89224C9C9A200DE9EBF /* SetupBiometricsCoordinatorType.swift */,
EC1CA89324C9C9A200DE9EBF /* SetupBiometricsViewState.swift */,
EC1CA89424C9C9A200DE9EBF /* SetupBiometricsViewModel.swift */,
);
path = SetupBiometrics;
sourceTree = "<group>";
};
EC1CA8C524D315EA00DE9EBF /* Models */ = {
isa = PBXGroup;
children = (
EC1CA8C624D3160100DE9EBF /* Row.h */,
EC1CA8C724D3160100DE9EBF /* Row.m */,
EC1CA8C924D3168F00DE9EBF /* Section.h */,
EC1CA8CA24D3168F00DE9EBF /* Section.m */,
);
path = Models;
sourceTree = "<group>";
};
EC3B066324AC6ADD000DF9BF /* CrossSigning */ = {
isa = PBXGroup;
children = (
@ -4608,6 +4844,9 @@
EC85D7452477E5F7002C44C9 /* NotificationService.swift */,
EC85D756247E700F002C44C9 /* NSEMemoryStore.swift */,
EC85D7472477E5F7002C44C9 /* Info.plist */,
EC1CA8D924D811B400DE9EBF /* NSE-Common.xcconfig */,
EC1CA8BC24D1B4CF00DE9EBF /* NSE-Debug.xcconfig */,
EC1CA8BD24D1B4CF00DE9EBF /* NSE-Release.xcconfig */,
);
path = RiotNSE;
sourceTree = "<group>";
@ -4708,6 +4947,7 @@
B1CA3A2821EF692B000D1D89 /* UIView.swift */,
B140B4A121F87F7100E3F5FE /* OperationQueue.swift */,
B1E5368821FB1E20001F3AFF /* UIButton.swift */,
EC619C1824DAD96000663A80 /* UIScrollView.swift */,
3281BCF62201FA4200F4A383 /* UIControl.swift */,
B109D6F0222D8C400061B6D9 /* UIApplication.swift */,
B1DB4F05223015080065DBFA /* Character.swift */,
@ -4718,6 +4958,7 @@
B1B12B2822942315002CB419 /* UITouch.swift */,
B1DCC63322E72C1B00625807 /* UISearchBar.swift */,
B11291EB238D704C0077B478 /* FloatingPoint.swift */,
32FD757524D2C9BA00BA7B37 /* Bundle.swift */,
);
path = Categories;
sourceTree = "<group>";
@ -4760,6 +5001,7 @@
B1DB4F0D22316FFF0065DBFA /* UserNameColorGenerator.swift */,
B197B7C5243DE947005ABBF3 /* EncryptionTrustLevelBadgeImageHelper.swift */,
EC2B4EF024A1EEBD005EB739 /* DataProtectionHelper.swift */,
ECDC15F124AF41D2003437CF /* FormattedBodyParser.swift */,
);
path = Utils;
sourceTree = "<group>";
@ -4771,6 +5013,7 @@
3267EFB320E379FD00FF1CAA /* CHANGES.rst */,
3267EFB520E379FD00FF1CAA /* AUTHORS.rst */,
3267EFB420E379FD00FF1CAA /* Podfile */,
32FD754E24D073E400BA7B37 /* Config */,
F083BB081E7009EC00A9B29C /* Riot */,
F083BB021E7005FD00A9B29C /* RiotTests */,
24CBEC4F1F0EAD310093EABB /* RiotShareExtension */,
@ -5007,6 +5250,7 @@
B1664BCB20F4E67600808783 /* RoomsListViewController.xib in Resources */,
B169328520F38BE800746532 /* SegmentedViewController.xib in Resources */,
B1664DA420F4F96300808783 /* Vector.strings in Resources */,
EC1CA8D624D8108700DE9EBF /* ShareExtension-Common.xcconfig in Resources */,
B1664BC920F4E67600808783 /* ShareViewController.xib in Resources */,
B169328820F3954A00746532 /* SharedImages.xcassets in Resources */,
B1664BC520F4E67600808783 /* FallbackViewController.xib in Resources */,
@ -5018,6 +5262,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EC1CA8D824D8118400DE9EBF /* SiriIntents-Common.xcconfig in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -5025,6 +5270,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EC1CA8DA24D811B400DE9EBF /* NSE-Common.xcconfig in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -5079,6 +5325,7 @@
B1B558D620EF768F00210D55 /* RoomOutgoingEncryptedTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib in Resources */,
B1B5593720EF7BAC00210D55 /* TableViewCellWithCheckBoxAndLabel.xib in Resources */,
B190F55B22CE35FD00AEB493 /* EditHistoryHeaderView.xib in Resources */,
EC1CA86524C1DEC400DE9EBF /* EnterPinCodeViewController.storyboard in Resources */,
B1B5579020EF568D00210D55 /* GroupTableViewCell.xib in Resources */,
B142317B22CCFA2000FFA96A /* EditHistoryCell.xib in Resources */,
B1B5581B20EF625800210D55 /* ExpandedRoomTitleView.xib in Resources */,
@ -5185,6 +5432,7 @@
B1B558C520EF768F00210D55 /* RoomOutgoingEncryptedTextMsgBubbleCell.xib in Resources */,
B1B5582B20EF666100210D55 /* DirectoryRecentTableViewCell.xib in Resources */,
B105778F2213052A00334B1E /* KeyBackupSetupSuccessFromRecoveryKeyViewController.storyboard in Resources */,
EC1CA89924C9C9A200DE9EBF /* SetupBiometricsViewController.storyboard in Resources */,
B1B5590F20EF782800210D55 /* TableViewCellWithPhoneNumberTextField.xib in Resources */,
B1B5578520EF564900210D55 /* GroupTableViewCellWithSwitch.xib in Resources */,
B1B557B320EF5AEF00210D55 /* EventDetailsView.xib in Resources */,
@ -5199,6 +5447,7 @@
B1C562E5228C7C8D0037F12A /* RoomContextualMenuViewController.storyboard in Resources */,
3232ABA2225730E100AD6A5C /* DeviceVerificationStartViewController.storyboard in Resources */,
3284A35120A07C210044F922 /* postMessageAPI.js in Resources */,
EC1CA8D424D8103400DE9EBF /* App-Common.xcconfig in Resources */,
B1B557A220EF58AD00210D55 /* ContactTableViewCell.xib in Resources */,
B1B558EB20EF768F00210D55 /* RoomIncomingTextMsgWithPaginationTitleBubbleCell.xib in Resources */,
B1C543A6239E999700DCA1FA /* KeyVerificationCellInnerContentView.xib in Resources */,
@ -5397,16 +5646,21 @@
buildActionMask = 2147483647;
files = (
B169328420F38BE300746532 /* SegmentedViewController.m in Sources */,
32FD757824D2C9BA00BA7B37 /* Bundle.swift in Sources */,
32242F1821E8FBF800725742 /* DefaultTheme.swift in Sources */,
B1664BCA20F4E67600808783 /* ShareViewController.m in Sources */,
B1664BC620F4E67600808783 /* FallbackViewController.m in Sources */,
32242F1621E8FBCC00725742 /* ThemeService.m in Sources */,
24EEE5A31F23A8C300B3C705 /* AvatarGenerator.m in Sources */,
32FD757224D2BEF700BA7B37 /* InfoPlist.swift in Sources */,
B1664BCF20F4E67600808783 /* ShareExtensionManager.m in Sources */,
32FD756624D2AD5100BA7B37 /* BuildSettings.swift in Sources */,
B1DB4F0722301AF20065DBFA /* Character.swift in Sources */,
3209451321F1C1D50088CAA2 /* BlackTheme.swift in Sources */,
24EEE5A21F23A8B400B3C705 /* MXRoom+Riot.m in Sources */,
32FD755924D15C7A00BA7B37 /* Configurable.swift in Sources */,
B1664BC720F4E67600808783 /* SharePresentingViewController.m in Sources */,
32FD755224D074C700BA7B37 /* CommonConfiguration.swift in Sources */,
B1DB4F0F223170000065DBFA /* UserNameColorGenerator.swift in Sources */,
F0A8955F1F7D1FEA00BD6C2A /* MXRoomSummary+Riot.m in Sources */,
32242F1721E8FBE500725742 /* Theme.swift in Sources */,
@ -5426,7 +5680,13 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
32FD757324D2BEF700BA7B37 /* InfoPlist.swift in Sources */,
32FD757924D2C9BA00BA7B37 /* Bundle.swift in Sources */,
92726A471F58737A004AD26F /* IntentHandler.m in Sources */,
32FD755324D074C700BA7B37 /* CommonConfiguration.swift in Sources */,
32FD756724D2AD5100BA7B37 /* BuildSettings.swift in Sources */,
32FD755A24D15C7A00BA7B37 /* Configurable.swift in Sources */,
32FD754C24D06EBE00BA7B37 /* RiotSettings.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -5435,10 +5695,15 @@
buildActionMask = 2147483647;
files = (
EC85D74F2477E8EB002C44C9 /* RiotSettings.swift in Sources */,
32FD756824D2AD5100BA7B37 /* BuildSettings.swift in Sources */,
EC85D757247E700F002C44C9 /* NSEMemoryStore.swift in Sources */,
EC2B4EF224A1EF34005EB739 /* DataProtectionHelper.swift in Sources */,
EC85D7462477E5F7002C44C9 /* NotificationService.swift in Sources */,
32FD755424D074C700BA7B37 /* CommonConfiguration.swift in Sources */,
32FD757424D2BEF700BA7B37 /* InfoPlist.swift in Sources */,
EC85D752247C0F52002C44C9 /* UNUserNotificationCenter.swift in Sources */,
32FD757A24D2C9BA00BA7B37 /* Bundle.swift in Sources */,
32FD755B24D15C7A00BA7B37 /* Configurable.swift in Sources */,
EC85D755247C0F84002C44C9 /* Constants.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -5453,6 +5718,7 @@
324A2053225FC571004FE8B0 /* DeviceVerificationIncomingViewModel.swift in Sources */,
B1B557A120EF58AD00210D55 /* ContactTableViewCell.m in Sources */,
B1CE83DE2422817200D07506 /* KeyVerificationVerifyBySASViewModelType.swift in Sources */,
32FD757024D2BEF700BA7B37 /* InfoPlist.swift in Sources */,
F083BE021E7009ED00A9B29C /* AvatarGenerator.m in Sources */,
B157FAA023264AE900EBFBD4 /* SettingsDiscoveryThreePidDetailsViewModelType.swift in Sources */,
B1B5573A20EE6C4D00210D55 /* GroupRoomsViewController.m in Sources */,
@ -5460,17 +5726,22 @@
B1FDF56021F5FE5500BA3834 /* KeyBackupSetupPassphraseViewAction.swift in Sources */,
B1B5573120EE6C4D00210D55 /* BugReportViewController.m in Sources */,
324A2051225FC571004FE8B0 /* DeviceVerificationIncomingViewState.swift in Sources */,
B1B4E9BF24D4703E004D5C33 /* BaseBubbleCell.swift in Sources */,
B16932A520F3A21C00746532 /* empty.mm in Sources */,
3232AB4A2256558300AD6A5C /* FlowTemplateCoordinator.swift in Sources */,
B19EFA3B21F8BB4100FC070E /* KeyBackupRecoverCoordinator.swift in Sources */,
B1B9DEDE22E9D9890065E677 /* EmojiServiceType.swift in Sources */,
EC1CA89724C9C9A200DE9EBF /* SetupBiometricsViewModelType.swift in Sources */,
3232ABA9225730E100AD6A5C /* DeviceVerificationStartViewModel.swift in Sources */,
B1B4E9BB24D46EB4004D5C33 /* SizingViewHeightStore.swift in Sources */,
32DB557C22FDADE50016329E /* ServiceTermsModalScreenViewModelType.swift in Sources */,
B16932FA20F3C51A00746532 /* RecentCellData.m in Sources */,
EC85D72B2477DCF2002C44C9 /* KeyVerificationManuallyVerifyCoordinatorType.swift in Sources */,
B16932F220F3C49E00746532 /* GroupsDataSource.m in Sources */,
B1B5581C20EF625800210D55 /* RoomAvatarTitleView.m in Sources */,
EC1CA86124C1DEC400DE9EBF /* EnterPinCodeViewModel.swift in Sources */,
B169330820F3CA0E00746532 /* ContactsDataSource.m in Sources */,
EC1CA86924C1DEC400DE9EBF /* SetPinCoordinator.swift in Sources */,
B1B5574B20EE6C4D00210D55 /* MediaAlbumContentViewController.m in Sources */,
B1B5598820EFC3E000210D55 /* WidgetManager.m in Sources */,
B1DB4F0E22316FFF0065DBFA /* UserNameColorGenerator.swift in Sources */,
@ -5495,6 +5766,8 @@
B1CE9F062216FB09000FAE6A /* EncryptionKeysExportPresenter.swift in Sources */,
32607D72243E0A55006674CC /* KeyBackupRecoverFromPrivateKeyViewAction.swift in Sources */,
B1B5574420EE6C4D00210D55 /* CallViewController.m in Sources */,
EC1CA86024C1DEC400DE9EBF /* EnterPinCodeViewAction.swift in Sources */,
32FD757624D2C9BA00BA7B37 /* Bundle.swift in Sources */,
B12D7A0023E2462200FACEDC /* UserVerificationStartCoordinatorType.swift in Sources */,
EC711B9324A63B37008F830C /* SecretsRecoveryWithKeyViewController.swift in Sources */,
B1B5572220EE6C4D00210D55 /* RoomSettingsViewController.m in Sources */,
@ -5506,6 +5779,7 @@
B1B558E820EF768F00210D55 /* RoomIncomingAttachmentWithPaginationTitleBubbleCell.m in Sources */,
B1B558F320EF768F00210D55 /* RoomOutgoingAttachmentWithoutSenderInfoBubbleCell.m in Sources */,
B12D79FE23E2462200FACEDC /* UserVerificationStartViewController.swift in Sources */,
32FD755724D15C7A00BA7B37 /* Configurable.swift in Sources */,
32607D73243E0A55006674CC /* KeyBackupRecoverFromPrivateKeyCoordinator.swift in Sources */,
B1B557BD20EF5B4500210D55 /* KeyboardGrowingTextView.m in Sources */,
EC711B9524A63B37008F830C /* SecretsRecoveryWithKeyViewModelType.swift in Sources */,
@ -5514,6 +5788,7 @@
B1B5572320EE6C4D00210D55 /* AttachmentsViewController.m in Sources */,
B18DEDDD2433967C0075FEF7 /* KeyVerificationFlow.swift in Sources */,
F083BDEE1E7009ED00A9B29C /* MXRoom+Riot.m in Sources */,
328E410624CB168500DC4490 /* AppConfiguration.swift in Sources */,
EC711B9624A63B37008F830C /* SecretsRecoveryWithKeyViewState.swift in Sources */,
B120863722EF375F001F89E0 /* ReactionHistoryBridgeCoordinatorPresenter.swift in Sources */,
EC711B9224A63B37008F830C /* SecretsRecoveryWithKeyViewModel.swift in Sources */,
@ -5530,6 +5805,7 @@
B1BEE71523DF2ACF0003A4CB /* UserVerificationCoordinator.swift in Sources */,
32607D70243E0A55006674CC /* KeyBackupRecoverFromPrivateKeyViewModel.swift in Sources */,
B1B558C420EF768F00210D55 /* RoomIncomingEncryptedTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m in Sources */,
EC1CA86424C1DEC400DE9EBF /* EnterPinCodeCoordinator.swift in Sources */,
B1963B2E228F1C4900CBA17F /* BubbleReactionViewData.swift in Sources */,
B1C3361C22F32B4A0021BA8D /* SingleImagePickerPresenter.swift in Sources */,
B1B5572F20EE6C4D00210D55 /* ReadReceiptsViewController.m in Sources */,
@ -5557,6 +5833,7 @@
ECB101302477CFDB00CF8C11 /* UITableView.swift in Sources */,
B1CE83DC2422817200D07506 /* KeyVerificationVerifyByScanningViewState.swift in Sources */,
B139C21B21FE5B9200BB68EC /* KeyBackupRecoverFromPassphraseViewModel.swift in Sources */,
EC1CA87224C823E700DE9EBF /* KeyValueStore.swift in Sources */,
B1C45A8C232A8C2600165425 /* SettingsIdentityServerViewAction.swift in Sources */,
32A6001E22C661100042C1D9 /* EditHistoryCoordinatorBridgePresenter.swift in Sources */,
B1B5574A20EE6C4D00210D55 /* MediaPickerViewController.m in Sources */,
@ -5603,6 +5880,7 @@
EC711B7424A63B37008F830C /* SecretsSetupRecoveryKeyViewModelType.swift in Sources */,
B14F143122144F6500FA0595 /* KeyBackupRecoverFromRecoveryKeyViewState.swift in Sources */,
32DB557F22FDADE50016329E /* ServiceTermsModalScreenCoordinator.swift in Sources */,
EC1CA85F24C1DEC400DE9EBF /* EnterPinCodeViewModelType.swift in Sources */,
B1098C1121ED07E4000DDA48 /* NavigationRouterType.swift in Sources */,
B1B5573D20EE6C4D00210D55 /* WebViewViewController.m in Sources */,
3209451221F1C1430088CAA2 /* BlackTheme.swift in Sources */,
@ -5614,6 +5892,7 @@
32DB557722FDADE50016329E /* ServiceTermsModalCoordinator.swift in Sources */,
B185145B24B8C98200EE19EA /* MajorUpdateViewController.swift in Sources */,
32DB557922FDADE50016329E /* ServiceTermsModalScreenViewModel.swift in Sources */,
B1B4E9BA24D46EB4004D5C33 /* SizableBubbleCell.swift in Sources */,
32891D75226728EE00C82226 /* KeyVerificationDataLoadingViewController.swift in Sources */,
F083BDEF1E7009ED00A9B29C /* UINavigationController+Riot.m in Sources */,
B1B5581F20EF625800210D55 /* SimpleRoomTitleView.m in Sources */,
@ -5639,6 +5918,8 @@
B1D4752821EE4E630067973F /* KeyboardNotification.swift in Sources */,
B1D1BDA622BBAFB500831367 /* ReactionsMenuView.swift in Sources */,
EC711B4624A63B13008F830C /* MXRecoveryService.swift in Sources */,
EC1CA86C24C1DEC400DE9EBF /* SetPinCoordinatorType.swift in Sources */,
EC1CA86324C1DEC400DE9EBF /* EnterPinCodeCoordinatorType.swift in Sources */,
B18DEDD6243377C10075FEF7 /* KeyVerificationSelfVerifyWaitCoordinator.swift in Sources */,
32DB557A22FDADE50016329E /* ServiceTermsModalScreenViewController.swift in Sources */,
B1B9DEF422EB426D0065E677 /* ReactionHistoryViewCell.swift in Sources */,
@ -5701,8 +5982,10 @@
B1B5593C20EF7BAC00210D55 /* TableViewCellWithCheckBoxes.m in Sources */,
32891D6B2264CBA300C82226 /* SimpleScreenTemplateViewController.swift in Sources */,
EC711B7924A63B37008F830C /* SecretsSetupRecoveryKeyViewController.swift in Sources */,
32FD755024D074C700BA7B37 /* CommonConfiguration.swift in Sources */,
B1CA3A2721EF6914000D1D89 /* UIViewController.swift in Sources */,
322C110822BBC6F80043FEAC /* WidgetManagerConfig.swift in Sources */,
EC1CA86624C1DEC400DE9EBF /* EnterPinCodeViewController.swift in Sources */,
F0D2ADA11F6AA5FD00A7097D /* MXRoomSummary+Riot.m in Sources */,
B1CE83B92422815C00D07506 /* KeyVerificationKind.swift in Sources */,
EC85D7262477DCF2002C44C9 /* KeyVerificationManuallyVerifyCoordinator.swift in Sources */,
@ -5745,10 +6028,11 @@
EC711BAE24A63B58008F830C /* SecureBackupSetupCoordinator.swift in Sources */,
B1B5599320EFC5E400210D55 /* DecryptionFailure.m in Sources */,
B1CE83E12422817200D07506 /* KeyVerificationVerifyBySASCoordinator.swift in Sources */,
EC619C1924DAD96000663A80 /* UIScrollView.swift in Sources */,
B125FE1F231D5DF700B72806 /* SettingsDiscoveryViewModelType.swift in Sources */,
EC85D7162477DCD7002C44C9 /* KeyVerificationScanConfirmationViewAction.swift in Sources */,
EC711BAF24A63B58008F830C /* SecureBackupSetupCoordinatorType.swift in Sources */,
B108932A23ACBA0B00802670 /* SizingViewHeight.swift in Sources */,
EC1CA89C24C9C9A200DE9EBF /* SetupBiometricsViewModel.swift in Sources */,
B157FAA323264AE900EBFBD4 /* SettingsDiscoveryThreePidDetailsViewState.swift in Sources */,
B1098BF921ECFE65000DDA48 /* KeyBackupSetupCoordinator.swift in Sources */,
B140B4A821F8AB4600E3F5FE /* KeyBackupRecoverCoordinatorBridgePresenter.swift in Sources */,
@ -5765,9 +6049,11 @@
B1A6C10D23882D1D002882FD /* SlidingModalPresentationController.swift in Sources */,
32A6001D22C661100042C1D9 /* EditHistoryCoordinatorType.swift in Sources */,
F083BDFA1E7009ED00A9B29C /* RoomPreviewData.m in Sources */,
EC1CA8CB24D3168F00DE9EBF /* Section.m in Sources */,
B1B557B420EF5AEF00210D55 /* EventDetailsView.m in Sources */,
EC85D751247C0E8F002C44C9 /* UNUserNotificationCenter.swift in Sources */,
B1BEE73823DF44A60003A4CB /* UserVerificationSessionsStatusViewAction.swift in Sources */,
ECDC15F224AF41D2003437CF /* FormattedBodyParser.swift in Sources */,
B1B5577E20EE84BF00210D55 /* IncomingCallView.m in Sources */,
B1CE83E22422817200D07506 /* KeyVerificationVerifyBySASViewState.swift in Sources */,
B1DCC62822E60CE300625807 /* EmojiCategory.swift in Sources */,
@ -5788,12 +6074,14 @@
EC711B7624A63B37008F830C /* SecretsSetupRecoveryKeyViewState.swift in Sources */,
32FDC1CD2386CD390084717A /* RiotSettingIntegrationProvisioning.swift in Sources */,
B1BEE73523DF44A60003A4CB /* UserVerificationSessionsStatusViewModel.swift in Sources */,
EC1CA8C824D3160100DE9EBF /* Row.m in Sources */,
B1B5572020EE6C4D00210D55 /* ContactsTableViewController.m in Sources */,
EC85D7142477DCD7002C44C9 /* KeyVerificationScanConfirmationViewState.swift in Sources */,
EC711B9124A63B37008F830C /* SecretsRecoveryWithKeyCoordinatorType.swift in Sources */,
B1B5581920EF625800210D55 /* RoomTitleView.m in Sources */,
B1098BE321ECE09F000DDA48 /* RiotDefaults.swift in Sources */,
EC711B9424A63B37008F830C /* SecretsRecoveryWithKeyViewAction.swift in Sources */,
EC1CA86824C1DEC400DE9EBF /* SetPinCoordinatorBridgePresenter.swift in Sources */,
B1C562CA2289C2690037F12A /* UIGestureRecognizer.swift in Sources */,
B1C562CC228AB3510037F12A /* UIStackView.swift in Sources */,
B1B557BE20EF5B4500210D55 /* RoomInputToolbarView.m in Sources */,
@ -5806,6 +6094,7 @@
B1D44999243CD73700959523 /* RoomPowerLevel.swift in Sources */,
B1798302211B13B3001FD722 /* OnBoardingManager.swift in Sources */,
B1BEE74823E093260003A4CB /* UserVerificationSessionStatusViewModel.swift in Sources */,
EC1CA89624C9C9A200DE9EBF /* SetupBiometricsCoordinator.swift in Sources */,
EC711B9024A63B37008F830C /* SecretsRecoveryWithKeyCoordinator.swift in Sources */,
B1A6C10723881EF2002882FD /* SlidingModalPresenter.swift in Sources */,
B1B5573520EE6C4D00210D55 /* GroupDetailsViewController.m in Sources */,
@ -5813,12 +6102,15 @@
EC85D7372477DD97002C44C9 /* LocalContactsSectionHeaderContainerView.m in Sources */,
B1DCC61A22E5E17100625807 /* EmojiPickerViewController.swift in Sources */,
B1963B32228F1C6B00CBA17F /* BubbleReactionsViewModelType.swift in Sources */,
EC1CA89A24C9C9A200DE9EBF /* SetupBiometricsCoordinatorType.swift in Sources */,
32A6001722C661100042C1D9 /* EditHistoryViewController.swift in Sources */,
B1098BFA21ECFE65000DDA48 /* KeyBackupSetupPassphraseViewModel.swift in Sources */,
EC1CA87524C8259700DE9EBF /* KeychainStore.swift in Sources */,
B1B5575220EE6C4D00210D55 /* RoomKeyRequestViewController.m in Sources */,
32A6001A22C661100042C1D9 /* EditHistoryCoordinator.swift in Sources */,
F083BD1E1E7009ED00A9B29C /* AppDelegate.m in Sources */,
B1B558E620EF768F00210D55 /* RoomIncomingAttachmentWithoutSenderInfoBubbleCell.m in Sources */,
B1B4E9BD24D4701F004D5C33 /* BubbleCellReactionsDisplayable.swift in Sources */,
329E746722CD02EA006F9797 /* BubbleReactionActionViewCell.swift in Sources */,
B1098BFB21ECFE65000DDA48 /* KeyBackupSetupCoordinatorType.swift in Sources */,
B1098BF721ECFE65000DDA48 /* PasswordStrength.swift in Sources */,
@ -5826,8 +6118,10 @@
B1B336BE242B933700F95EC4 /* KeyVerificationSelfVerifyStartViewState.swift in Sources */,
B1BEE73423DF44A60003A4CB /* UserVerificationSessionsStatusViewModelType.swift in Sources */,
B18DEDD9243377C10075FEF7 /* KeyVerificationSelfVerifyWaitViewController.swift in Sources */,
EC1CA89524C9C9A200DE9EBF /* SetupBiometricsViewController.swift in Sources */,
324A2052225FC571004FE8B0 /* DeviceVerificationIncomingViewAction.swift in Sources */,
EC85D72C2477DCF2002C44C9 /* KeyVerificationManuallyVerifyViewState.swift in Sources */,
EC1CA86E24C5BA4500DE9EBF /* PinCodePreferences.swift in Sources */,
B105778D2213051E00334B1E /* KeyBackupSetupSuccessFromRecoveryKeyViewController.swift in Sources */,
B1B557D820EF5EA900210D55 /* RoomActivitiesView.m in Sources */,
B1B9DEE922EB34EF0065E677 /* ReactionHistoryViewController.swift in Sources */,
@ -5852,6 +6146,7 @@
B1D211E622C194A200D939BD /* ReactionsMenuViewState.swift in Sources */,
B17982FF2119FED2001FD722 /* GDPRConsentViewController.swift in Sources */,
B1098BE121ECE09F000DDA48 /* Images.swift in Sources */,
B1B4E9C424D47207004D5C33 /* BubbleReactionsViewModelBuilder.swift in Sources */,
EC85D72A2477DCF2002C44C9 /* KeyVerificationManuallyVerifyViewModel.swift in Sources */,
B1BEE74A23E093260003A4CB /* UserVerificationSessionStatusCoordinatorType.swift in Sources */,
3232ABA4225730E100AD6A5C /* DeviceVerificationStartViewAction.swift in Sources */,
@ -5882,6 +6177,7 @@
EC85D71A2477DCD7002C44C9 /* KeyVerificationScanConfirmationCoordinator.swift in Sources */,
EC85D754247C0F5B002C44C9 /* Constants.swift in Sources */,
B1B336C4242B933700F95EC4 /* KeyVerificationSelfVerifyStartViewAction.swift in Sources */,
B1B4E9B924D46EB3004D5C33 /* SizingViewHeight.swift in Sources */,
B1B5590920EF768F00210D55 /* RoomEmptyBubbleCell.m in Sources */,
324A2054225FC571004FE8B0 /* DeviceVerificationIncomingCoordinatorType.swift in Sources */,
B139C21F21FE5D6600BB68EC /* KeyBackupRecoverFromPassphraseViewAction.swift in Sources */,
@ -5926,9 +6222,11 @@
B1963B3822933BC800CBA17F /* AutosizedCollectionView.swift in Sources */,
EC711B7A24A63B37008F830C /* SecretsSetupRecoveryKeyViewAction.swift in Sources */,
B12D79FB23E2462200FACEDC /* UserVerificationStartCoordinator.swift in Sources */,
EC1CA87A24C8841C00DE9EBF /* LocalAuthenticationService.swift in Sources */,
EC3B066B24AC6ADE000DF9BF /* CrossSigningBannerPreferences.swift in Sources */,
ECB101322477CFDB00CF8C11 /* UIDevice.swift in Sources */,
B169330320F3C98900746532 /* RoomBubbleCellData.m in Sources */,
EC1CA86224C1DEC400DE9EBF /* EnterPinCodeViewState.swift in Sources */,
EC711B8A24A63B37008F830C /* SecretsRecoveryWithPassphraseViewController.swift in Sources */,
B1B336C3242B933700F95EC4 /* KeyVerificationSelfVerifyStartCoordinator.swift in Sources */,
B1B557CC20EF5D8000210D55 /* DirectoryServerTableViewCell.m in Sources */,
@ -5939,9 +6237,11 @@
B1B5577020EE702800210D55 /* WidgetPickerViewController.m in Sources */,
B1B558D320EF768F00210D55 /* RoomOutgoingEncryptedTextMsgBubbleCell.m in Sources */,
B1B5576F20EE702800210D55 /* IntegrationManagerViewController.m in Sources */,
32FD756424D2AD5100BA7B37 /* BuildSettings.swift in Sources */,
B1B557AC20EF5A6D00210D55 /* DeviceView.m in Sources */,
3281BCF72201FA4200F4A383 /* UIControl.swift in Sources */,
B16932EE20F3C3C900746532 /* FilesSearchCellData.m in Sources */,
EC1CA89824C9C9A200DE9EBF /* SetupBiometricsViewAction.swift in Sources */,
B1B558E520EF768F00210D55 /* RoomMembershipExpandedBubbleCell.m in Sources */,
EC85D73E2477DDD0002C44C9 /* PushNotificationService.m in Sources */,
32BF995121FA29DC00698084 /* SettingsKeyBackupViewModelType.swift in Sources */,
@ -5979,6 +6279,7 @@
3232AB482256558300AD6A5C /* FlowTemplateCoordinatorType.swift in Sources */,
B1B9DEF122EB396B0065E677 /* ReactionHistoryViewData.swift in Sources */,
B1B558F820EF768F00210D55 /* RoomIncomingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m in Sources */,
EC1CA89B24C9C9A200DE9EBF /* SetupBiometricsViewState.swift in Sources */,
B1BD71B5238DCBF700BA92E2 /* SlidingModalEmptyViewController.swift in Sources */,
B125FE1B231D5BF200B72806 /* SettingsDiscoveryTableViewSection.swift in Sources */,
B18DEDD5243377C10075FEF7 /* KeyVerificationSelfVerifyWaitViewModel.swift in Sources */,
@ -5986,6 +6287,7 @@
B1CE83DA2422817200D07506 /* KeyVerificationVerifyByScanningViewModel.swift in Sources */,
32242F0921E8B05F00725742 /* UIColor.swift in Sources */,
B16932E720F3C37100746532 /* HomeMessagesSearchDataSource.m in Sources */,
B1B4E9C224D471FD004D5C33 /* BubbleReactionsViewSizer.m in Sources */,
B12D79FF23E2462200FACEDC /* UserVerificationStartViewState.swift in Sources */,
B1B558CE20EF768F00210D55 /* RoomOutgoingEncryptedAttachmentBubbleCell.m in Sources */,
B1B5577D20EE84BF00210D55 /* CircleButton.m in Sources */,
@ -6002,6 +6304,7 @@
B1B5591020EF782800210D55 /* TableViewCellWithPhoneNumberTextField.m in Sources */,
B1CE83E52422817200D07506 /* KeyVerificationVerifyBySASViewModel.swift in Sources */,
B1DB4F06223015080065DBFA /* Character.swift in Sources */,
EC1CA87724C82D0E00DE9EBF /* MemoryStore.swift in Sources */,
B1B9DEEE22EB34EF0065E677 /* ReactionHistoryViewAction.swift in Sources */,
EC711BB624A63C11008F830C /* AuthenticatedSessionViewControllerFactory.swift in Sources */,
B1C543A4239E98E400DCA1FA /* KeyVerificationCellInnerContentView.swift in Sources */,
@ -6022,6 +6325,13 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
32FD755824D15C7A00BA7B37 /* Configurable.swift in Sources */,
32FD757724D2C9BA00BA7B37 /* Bundle.swift in Sources */,
32FD754D24D06EBF00BA7B37 /* RiotSettings.swift in Sources */,
32FD757124D2BEF700BA7B37 /* InfoPlist.swift in Sources */,
32FD756524D2AD5100BA7B37 /* BuildSettings.swift in Sources */,
32FD755524D0754500BA7B37 /* AppConfiguration.swift in Sources */,
32FD755124D074C700BA7B37 /* CommonConfiguration.swift in Sources */,
F083BEA51E70356E00A9B29C /* RiotTests.m in Sources */,
B152C73122DF561E0041315A /* EmojiServiceTests.swift in Sources */,
);
@ -6150,7 +6460,7 @@
/* Begin XCBuildConfiguration section */
24CBEC5A1F0EAD310093EABB /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9C3242E3FE95BCDA9562C75D /* Pods-RiotPods-RiotShareExtension.debug.xcconfig */;
baseConfigurationReference = EC1CA8B824D1AD1600DE9EBF /* ShareExtension-Debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
APPLICATION_EXTENSION_API_ONLY = YES;
@ -6178,7 +6488,7 @@
OTHER_CFLAGS = "$(inherited)";
OTHER_LDFLAGS = "$(inherited)";
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.shareExtension;
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/SupportingFiles/RiotShareExtension-Bridging-Header.h";
@ -6189,7 +6499,7 @@
};
24CBEC5B1F0EAD310093EABB /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 4FC6A5D63FAD1B27C2F57AFA /* Pods-RiotPods-RiotShareExtension.release.xcconfig */;
baseConfigurationReference = EC1CA8B924D1AD1600DE9EBF /* ShareExtension-Release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
APPLICATION_EXTENSION_API_ONLY = YES;
@ -6218,7 +6528,7 @@
OTHER_CFLAGS = "$(inherited)";
OTHER_LDFLAGS = "$(inherited)";
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.shareExtension;
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/SupportingFiles/RiotShareExtension-Bridging-Header.h";
@ -6229,7 +6539,7 @@
};
92726A4C1F58737A004AD26F /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3942DD65EBEB7AE647C6392A /* Pods-RiotPods-SiriIntents.debug.xcconfig */;
baseConfigurationReference = EC1CA8BB24D1B4BF00DE9EBF /* SiriIntents-Debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
CLANG_ANALYZER_NONNULL = YES;
@ -6252,16 +6562,17 @@
OTHER_CFLAGS = "$(inherited)";
OTHER_LDFLAGS = "$(inherited)";
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.SiriIntents;
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
USER_HEADER_SEARCH_PATHS = "$(inherited)";
};
name = Debug;
};
92726A4D1F58737A004AD26F /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = E2599D0ECB8DD206624E450B /* Pods-RiotPods-SiriIntents.release.xcconfig */;
baseConfigurationReference = EC1CA8BA24D1B4BF00DE9EBF /* SiriIntents-Release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
CLANG_ANALYZER_NONNULL = YES;
@ -6285,16 +6596,17 @@
OTHER_CFLAGS = "$(inherited)";
OTHER_LDFLAGS = "$(inherited)";
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.SiriIntents;
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
USER_HEADER_SEARCH_PATHS = "$(inherited)";
};
name = Release;
};
EC85D74B2477E5F7002C44C9 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 2B582BE9B2A98BCF5F740873 /* Pods-RiotPods-RiotNSE.debug.xcconfig */;
baseConfigurationReference = EC1CA8BC24D1B4CF00DE9EBF /* NSE-Debug.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@ -6317,7 +6629,7 @@
);
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.nse;
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
@ -6330,7 +6642,7 @@
};
EC85D74C2477E5F7002C44C9 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 8A61E94F88EA96AFE1CFD9D3 /* Pods-RiotPods-RiotNSE.release.xcconfig */;
baseConfigurationReference = EC1CA8BD24D1B4CF00DE9EBF /* NSE-Release.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@ -6353,7 +6665,7 @@
"@executable_path/../../Frameworks",
);
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.nse;
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
@ -6393,7 +6705,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1.0.0;
CURRENT_PROJECT_VERSION = 1.0.5;
DEFINES_MODULE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@ -6413,7 +6725,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 1.0.0;
MARKETING_VERSION = 1.0.5;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -6451,7 +6763,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
CURRENT_PROJECT_VERSION = 1.0.0;
CURRENT_PROJECT_VERSION = 1.0.5;
DEFINES_MODULE = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@ -6464,7 +6776,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 1.0.0;
MARKETING_VERSION = 1.0.5;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
@ -6475,7 +6787,7 @@
};
F094A9C91B78D8F000B1FBBF /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 43C2962BE367F59220F517FA /* Pods-RiotPods-Riot.debug.xcconfig */;
baseConfigurationReference = EC1CA8B424D1AA8700DE9EBF /* App-Debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@ -6496,7 +6808,7 @@
OTHER_CFLAGS = "$(inherited)";
OTHER_LDFLAGS = "$(inherited)";
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app;
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/SupportingFiles/Riot-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@ -6508,7 +6820,7 @@
};
F094A9CA1B78D8F000B1FBBF /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B43DC75D1590BB8A4243BD4D /* Pods-RiotPods-Riot.release.xcconfig */;
baseConfigurationReference = EC1CA8B624D1AA8D00DE9EBF /* App-Release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@ -6528,7 +6840,7 @@
OTHER_CFLAGS = "$(inherited)";
OTHER_LDFLAGS = "$(inherited)";
OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app;
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/SupportingFiles/Riot-Bridging-Header.h";
SWIFT_VERSION = 5.0;

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>FILEHEADER</key>
<string>
// Copyright 2020 Vector Creations 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.
//</string>
</dict>
</plist>

View file

@ -27,6 +27,9 @@
#import "ThemeService.h"
#import "UniversalLink.h"
@protocol Configurable;
#pragma mark - Notifications
/**
Posted when the user taps the clock status bar.
@ -98,6 +101,9 @@ extern NSString *const AppDelegateUniversalLinkDidChangeNotification;
// New message sound id.
@property (nonatomic, readonly) SystemSoundID messageSound;
// Build Settings
@property (nonatomic, readonly) id<Configurable> configuration;
+ (AppDelegate*)theDelegate;
#pragma mark - Push Notifications

View file

@ -90,7 +90,7 @@ NSString *const AppDelegateDidValidateEmailNotificationClientSecretKey = @"AppDe
NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUniversalLinkDidChangeNotification";
@interface AppDelegate () <GDPRConsentViewControllerDelegate, KeyVerificationCoordinatorBridgePresenterDelegate, ServiceTermsModalCoordinatorBridgePresenterDelegate, PushNotificationServiceDelegate>
@interface AppDelegate () <GDPRConsentViewControllerDelegate, KeyVerificationCoordinatorBridgePresenterDelegate, ServiceTermsModalCoordinatorBridgePresenterDelegate, PushNotificationServiceDelegate, SetPinCoordinatorBridgePresenterDelegate>
{
/**
Reachability observer
@ -223,6 +223,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
@property (nonatomic, strong) ServiceTermsModalCoordinatorBridgePresenter *serviceTermsModalCoordinatorBridgePresenter;
@property (nonatomic, strong) SlidingModalPresenter *slidingModalPresenter;
@property (nonatomic, strong) SetPinCoordinatorBridgePresenter *setPinCoordinatorBridgePresenter;
/**
Used to manage on boarding steps, like create DM with riot bot
@ -236,6 +237,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
Related push notification service instance. Will be created when launch finished.
*/
@property (nonatomic, strong) PushNotificationService *pushNotificationService;
@property (nonatomic, strong) LocalAuthenticationService *localAuthenticationService;
@property (nonatomic, strong) MajorUpdateManager *majorUpdateManager;
@ -249,10 +251,8 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
NSLog(@"[AppDelegate] initialize");
// Set the App Group identifier.
MXSDKOptions *sdkOptions = [MXSDKOptions sharedInstance];
sdkOptions.applicationGroupIdentifier = @"group.im.vector";
sdkOptions.computeE2ERoomSummaryTrust = YES;
// Set static application settings
[[AppConfiguration new] setupSettings];
// Redirect NSLogs to files only if we are not debugging
if (!isatty(STDERR_FILENO))
@ -431,6 +431,8 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// NSLog(@"[AppDelegate] didFinishLaunchingWithOptions: isProtectedDataAvailable: %@ (%tu)", @([application isProtectedDataAvailable]), loopCount);
NSLog(@"[AppDelegate] didFinishLaunchingWithOptions: isProtectedDataAvailable: %@", @([application isProtectedDataAvailable]));
_configuration = [AppConfiguration new];
// Log app information
NSString *appDisplayName = [[NSBundle mainBundle] infoDictionary][@"CFBundleDisplayName"];
NSString* appVersion = [AppDelegate theDelegate].appVersion;
@ -468,9 +470,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[NSBundle mxk_setFallbackLanguage:@"en"];
// Customize the localized string table
[NSBundle mxk_customizeLocalizedStringTableName:@"Vector"];
mxSessionArray = [NSMutableArray array];
callEventsListeners = [NSMutableDictionary dictionary];
@ -508,24 +507,21 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[MXSDKOptions sharedInstance].analyticsDelegate = [Analytics sharedInstance];
[DecryptionFailureTracker sharedInstance].delegate = [Analytics sharedInstance];
[[Analytics sharedInstance] start];
// Disable CallKit
[MXKAppSettings standardAppSettings].enableCallKit = NO;
self.pushNotificationService = [PushNotificationService new];
self.pushNotificationService.delegate = self;
self.localAuthenticationService = [[LocalAuthenticationService alloc] initWithPinCodePreferences:[PinCodePreferences shared]];
// Add matrix observers, and initialize matrix sessions if the app is not launched in background.
[self initMatrixSessions];
#ifdef CALL_STACK_JINGLE
// Setup Jitsi
NSString *jitsiServerStringURL = [[NSUserDefaults standardUserDefaults] objectForKey:@"jitsiServerURL"];
NSURL *jitsiServerURL = [NSURL URLWithString:jitsiServerStringURL];
[JitsiService.shared configureDefaultConferenceOptionsWith:jitsiServerURL];
[JitsiService.shared configureDefaultConferenceOptionsWith:BuildSettings.jitsiServerUrl];
[JitsiService.shared application:application didFinishLaunchingWithOptions:launchOptions];
#endif
self.majorUpdateManager = [MajorUpdateManager new];
@ -648,6 +644,25 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
NSLog(@"[AppDelegate] applicationDidBecomeActive");
if ([self.localAuthenticationService shouldShowPinCode])
{
if (self.setPinCoordinatorBridgePresenter)
{
// it's already on screen
return;
}
self.setPinCoordinatorBridgePresenter = [[SetPinCoordinatorBridgePresenter alloc] initWithSession:mxSessionArray.firstObject viewMode:SetPinCoordinatorViewModeUnlock];
self.setPinCoordinatorBridgePresenter.delegate = self;
[self.setPinCoordinatorBridgePresenter presentIn:self.window];
} else {
[self afterAppUnlockedByPin:application];
}
}
- (void)afterAppUnlockedByPin:(UIApplication *)application
{
NSLog(@"[AppDelegate] afterAppUnlockedByPin");
// Check if there is crash log to send
if (RiotSettings.shared.enableCrashReport)
{
@ -1214,7 +1229,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[[NSNotificationCenter defaultCenter] postNotificationName:AppDelegateUniversalLinkDidChangeNotification object:nil];
}
if ([webURL.path hasPrefix:@"/config"])
if ([webURL.path isEqualToString:@"/"])
{
return [self handleServerProvionningLink:webURL];
}
@ -1757,7 +1772,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
- (void)parseServerProvionningLink:(NSURL*)link homeserver:(NSString**)homeserver identityServer:(NSString**)identityServer
{
if ([link.path isEqualToString:@"/config/config"])
if ([link.path isEqualToString:@"/"])
{
NSURLComponents *linkURLComponents = [NSURLComponents componentsWithURL:link resolvingAgainstBaseURL:NO];
for (NSURLQueryItem *item in linkURLComponents.queryItems)
@ -1812,30 +1827,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
- (void)initMatrixSessions
{
NSLog(@"[AppDelegate] initMatrixSessions");
MXSDKOptions *sdkOptions = [MXSDKOptions sharedInstance];
// Define the media cache version
sdkOptions.mediaCacheAppVersion = 0;
// Enable e2e encryption for newly created MXSession
sdkOptions.enableCryptoWhenStartingMXSession = YES;
// Disable identicon use
sdkOptions.disableIdenticonUseForUserAvatar = YES;
// Use UIKit BackgroundTask for handling background tasks in the SDK
sdkOptions.backgroundModeHandler = [[MXUIKitBackgroundModeHandler alloc] init];
// Get modular widget events in rooms histories
[[MXKAppSettings standardAppSettings] addSupportedEventTypes:@[kWidgetMatrixEventTypeString, kWidgetModularEventTypeString]];
// Hide undecryptable messages that were sent while the user was not in the room
[MXKAppSettings standardAppSettings].hidePreJoinedUndecryptableEvents = YES;
// Enable long press on event in bubble cells
[MXKRoomBubbleTableViewCell disableLongPressGestureOnEvent:NO];
// Set first RoomDataSource class used in Vector
[MXKRoomDataSourceManager registerRoomDataSourceClass:RoomDataSource.class];
@ -1865,14 +1857,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
[mxSession enableVoIPWithCallStack:callStack];
// Let's call invite be valid for 1 minute
mxSession.callManager.inviteLifetime = 60000;
if (RiotSettings.shared.allowStunServerFallback)
{
mxSession.callManager.fallbackSTUNServer = RiotSettings.shared.stunServerFallback;
}
// Setup CallKit
if ([MXCallKitAdapter callKitAvailable])
{
@ -1896,14 +1880,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
[self enableNoVoIPOnMatrixSession:mxSession];
}
// Each room member will be considered as a potential contact.
[MXKContactManager sharedManager].contactManagerMXRoomSource = MXKContactManagerMXRoomSourceAll;
// Send read receipts for widgets events too
NSMutableArray<MXEventTypeString> *acknowledgableEventTypes = [NSMutableArray arrayWithArray:mxSession.acknowledgableEventTypes];
[acknowledgableEventTypes addObject:kWidgetMatrixEventTypeString];
[acknowledgableEventTypes addObject:kWidgetModularEventTypeString];
mxSession.acknowledgableEventTypes = acknowledgableEventTypes;
[self.configuration setupSettingsFor:mxSession];
}
else if (mxSession.state == MXSessionStateStoreDataReady)
{
@ -1922,8 +1899,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
}
}
// Do not warn for unknown devices. We have cross-signing now
mxSession.crypto.warnOnUnknowDevices = NO;
[self.configuration setupSettingsWhenLoadedFor:mxSession];
// Register to user new device sign in notification
[self registerUserDidSignInOnNewDeviceNotificationForSession:mxSession];
@ -1963,7 +1939,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
account.mxSession.roomSummaryUpdateDelegate = eventFormatter;
// Set the push gateway URL.
account.pushGatewayURL = [[NSUserDefaults standardUserDefaults] objectForKey:@"pushGatewayURL"];
account.pushGatewayURL = BuildSettings.serverConfigSygnalAPIUrlString;
BOOL isPushRegistered = self.pushNotificationService.isPushRegistered;
@ -2079,7 +2055,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// Set this url in the existing accounts when it is undefined.
if (!account.pushGatewayURL)
{
account.pushGatewayURL = [[NSUserDefaults standardUserDefaults] objectForKey:@"pushGatewayURL"];
account.pushGatewayURL = BuildSettings.serverConfigSygnalAPIUrlString;
}
}
@ -2305,6 +2281,9 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// Reset key verification banner preferences
[CrossSigningBannerPreferences.shared reset];
// Reset user pin code
[PinCodePreferences.shared reset];
#ifdef MX_CALL_STACK_ENDPOINT
// Erase all created certificates and private keys by MXEndpointCallStack
for (MXKAccount *account in MXKAccountManager.sharedManager.accounts)
@ -2524,6 +2503,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
- (void)enableCallKit:(BOOL)enable forCallManager:(MXCallManager *)callManager
{
#ifdef CALL_STACK_JINGLE
JitsiService.shared.enableCallKit = enable;
if (enable)
@ -2533,18 +2513,15 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
callKitConfiguration.iconName = @"callkit_icon";
NSData *riotCallKitIconData = UIImagePNGRepresentation([UIImage imageNamed:callKitConfiguration.iconName]);
[JitsiService.shared configureCallKitProviderWithLocalizedName:callKitConfiguration.name
ringtoneName:callKitConfiguration.ringtoneName
iconTemplateImageData:riotCallKitIconData];
MXCallKitAdapter *callKitAdapter = [[MXCallKitAdapter alloc] initWithConfiguration:callKitConfiguration];
id<MXCallAudioSessionConfigurator> audioSessionConfigurator;
#ifdef CALL_STACK_JINGLE
audioSessionConfigurator = [[MXJingleCallAudioSessionConfigurator alloc] init];
#endif
callKitAdapter.audioSessionConfigurator = audioSessionConfigurator;
@ -2554,6 +2531,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
callManager.callKitAdapter = nil;
}
#endif
}
- (void)checkLocalPrivateKeysInSession:(MXSession*)mxSession
@ -3019,6 +2997,11 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
- (void)refreshLocalContacts
{
if (!BuildSettings.allowLocalContactsAccess)
{
return;
}
// Do not scan local contacts in background if the user has not decided yet about using
// an identity server
BOOL doRefreshLocalContacts = NO;
@ -3148,7 +3131,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
[_errorNotification dismissViewControllerAnimated:NO completion:nil];
NSString *stunFallbackHost = RiotSettings.shared.stunServerFallback;
NSString *stunFallbackHost = BuildSettings.stunServerFallbackUrlString;
// Remove "stun:"
stunFallbackHost = [stunFallbackHost componentsSeparatedByString:@":"].lastObject;
@ -3168,7 +3151,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
handler:^(UIAlertAction * action) {
RiotSettings.shared.allowStunServerFallback = YES;
mainSession.callManager.fallbackSTUNServer = RiotSettings.shared.stunServerFallback;
mainSession.callManager.fallbackSTUNServer = BuildSettings.stunServerFallbackUrlString;
[AppDelegate theDelegate].errorNotification = nil;
}]];
@ -3194,6 +3177,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
- (void)displayJitsiViewControllerWithWidget:(Widget*)jitsiWidget andVideo:(BOOL)video
{
#ifdef CALL_STACK_JINGLE
if (!_jitsiViewController && !currentCallViewController)
{
MXWeakify(self);
@ -3223,6 +3207,9 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
[self showAlertWithTitle:nil message:NSLocalizedStringFromTable(@"call_already_displayed", @"Vector", nil)];
}
#else
[self showAlertWithTitle:nil message:[NSBundle mxk_localizedStringForKey:@"not_supported_yet"]];
#endif
}
- (void)presentJitsiViewController:(void (^)(void))completion
@ -4546,7 +4533,14 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// Register "Riot-Defaults.plist" default values
NSString* userDefaults = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UserDefaults"];
NSString *defaultsPathFromApp = [[NSBundle mainBundle] pathForResource:userDefaults ofType:@"plist"];
NSDictionary *defaults = [NSDictionary dictionaryWithContentsOfFile:defaultsPathFromApp];
NSMutableDictionary *defaults = [[NSDictionary dictionaryWithContentsOfFile:defaultsPathFromApp] mutableCopy];
// add pusher ids, as they don't belong to plist anymore
defaults[@"pushKitAppIdProd"] = BuildSettings.pushKitAppIdProd;
defaults[@"pushKitAppIdDev"] = BuildSettings.pushKitAppIdDev;
defaults[@"pusherAppIdProd"] = BuildSettings.pusherAppIdProd;
defaults[@"pusherAppIdDev"] = BuildSettings.pusherAppIdDev;
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
if (!RiotSettings.shared.isUserDefaultsMigrated)
@ -4579,7 +4573,10 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{
if (self.majorUpdateManager.shouldShowMajorUpdate)
{
[self showMajorUpdate];
// When you do not understand why the UI does not work as expected...
dispatch_async(dispatch_get_main_queue(), ^{
[self showMajorUpdate];
});
}
}
@ -4625,5 +4622,20 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
completion:nil];
}
#pragma mark - SetPinCoordinatorBridgePresenterDelegate
- (void)setPinCoordinatorBridgePresenterDelegateDidComplete:(SetPinCoordinatorBridgePresenter *)coordinatorBridgePresenter
{
[coordinatorBridgePresenter dismiss];
self.setPinCoordinatorBridgePresenter = nil;
[self afterAppUnlockedByPin:[UIApplication sharedApplication]];
}
- (void)setPinCoordinatorBridgePresenterDelegateDidCompleteWithReset:(SetPinCoordinatorBridgePresenter *)coordinatorBridgePresenter
{
[coordinatorBridgePresenter dismiss];
self.setPinCoordinatorBridgePresenter = nil;
[self logoutWithConfirmation:NO completion:nil];
}
@end

View file

@ -324,7 +324,7 @@
<!--Settings-->
<scene sceneID="9we-7Q-LBo">
<objects>
<tableViewController title="Settings" id="taU-5Q-sdv" customClass="SettingsViewController" sceneMemberID="viewController">
<tableViewController storyboardIdentifier="SettingsViewController" title="Settings" id="taU-5Q-sdv" customClass="SettingsViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="egL-pK-Xhr">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>

View file

@ -1,23 +1,26 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "disclosure_icon.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "disclosure_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "disclosure_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}
}

View file

@ -1,23 +1,23 @@
{
"images" : [
{
"filename" : "face id.png",
"idiom" : "universal",
"filename" : "voice_call_icon.png",
"scale" : "1x"
},
{
"filename" : "face id@2x.png",
"idiom" : "universal",
"filename" : "voice_call_icon@2x.png",
"scale" : "2x"
},
{
"filename" : "face id@3x.png",
"idiom" : "universal",
"filename" : "voice_call_icon@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -1,23 +1,26 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "shrink_icon.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "shrink_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "shrink_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
}
}

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "Touch ID.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Touch ID@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Touch ID@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 629 B

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 999 B

After

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 989 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -6,51 +6,8 @@
<true/>
<key>pinRoomsWithUnread</key>
<true/>
<key>pushGatewayURL</key>
<string>https://matrix.org/_matrix/push/v1/notify</string>
<key>pushKitAppIdProd</key>
<string>im.vector.app.ios.voip.prod</string>
<key>pushKitAppIdDev</key>
<string>im.vector.app.ios.voip.dev</string>
<key>pusherAppIdDev</key>
<string>im.vector.app.ios.dev</string>
<key>pusherAppIdProd</key>
<string>im.vector.app.ios.prod</string>
<key>identityserverurl</key>
<string>https://vector.im</string>
<key>homeserverurl</key>
<string>https://matrix.org</string>
<key>homeserver</key>
<string>matrix.org</string>
<key>webAppUrlDev</key>
<string>https://develop.element.io</string>
<key>webAppUrlStaging</key>
<string>https://staging.element.io</string>
<key>webAppUrl</key>
<string>https://app.element.io</string>
<key>matrixApps</key>
<true/>
<key>integrationsUiUrl</key>
<string>https://scalar.vector.im/</string>
<key>integrationsRestUrl</key>
<string>https://scalar.vector.im/api</string>
<key>jitsiServerURL</key>
<string>https://jitsi.riot.im</string>
<key>integrationsWidgetsUrls</key>
<array>
<string>https://scalar.vector.im/_matrix/integrations/v1</string>
<string>https://scalar.vector.im/api</string>
<string>https://scalar-staging.vector.im/_matrix/integrations/v1</string>
<string>https://scalar-staging.vector.im/api</string>
<string>https://scalar-staging.riot.im/scalar/api</string>
</array>
<key>piwik</key>
<dict>
<key>url</key>
<string>https://piwik.riot.im/piwik.php</string>
<key>siteId</key>
<string>14</string>
</dict>
<key>showAllEventsInRoomHistory</key>
<false/>
<key>showRedactionsInRoomHistory</key>
@ -65,8 +22,6 @@
<false/>
<key>createConferenceCallsWithJitsi</key>
<true/>
<key>stunServerFallback</key>
<string>stun:turn.matrix.org</string>
<key>enableRageShake</key>
<true/>
<key>maxAllowedMediaCacheSize</key>
@ -77,21 +32,6 @@
<integer>15066368</integer>
<key>presenceColorForOfflineUser</key>
<integer>15020851</integer>
<key>bugReportEndpointUrl</key>
<string>https://riot.im/bugreports</string>
<key>bugReportApp</key>
<string>riot-ios</string>
<key>roomDirectoryServers</key>
<dict>
<key>matrix.org</key>
<string></string>
</dict>
<key>settingsCopyrightUrl</key>
<string>https://element.io/copyright</string>
<key>settingsPrivacyPolicyUrl</key>
<string>https://element.io/privacy</string>
<key>settingsTermsConditionsUrl</key>
<string>https://element.io/terms-of-service</string>
<key>enableBotCreation</key>
<false/>
</dict>

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "Камерата се използва, за да се правят снимки и видеа, както и да се водят видео разговори.";
"NSPhotoLibraryUsageDescription" = "Галерията се използва, за да се изпращат снимки и видеа.";
"NSMicrophoneUsageDescription" = "Микрофонът се използва, за да се правят видеа и да се водят разговори.";
"NSContactsUsageDescription" = "За да открие контакти използващи Matrix, Riot може да изпрати имейл адресите и телефонните номера от телефонния указател към избрания от вас Matrix сървър за самоличност. Ако се поддържа, личните данни могат да бъдат хеширани преди изпращане - вижте политиката за поверителност на сървъра за самоличност за повече информация.";
"NSContactsUsageDescription" = "За да открие контакти използващи Matrix, Element може да изпрати имейл адресите и телефонните номера от телефонния указател към избрания от вас Matrix сървър за самоличност. Ако се поддържа, личните данни могат да бъдат хеширани преди изпращане - вижте политиката за поверителност на сървъра за самоличност за повече информация.";
"NSCalendarsUsageDescription" = "Вижте насрочените срещи в приложението.";

View file

@ -55,3 +55,9 @@
/* Sticker from a specific person, not referencing a room. */
"STICKER_FROM_USER" = "%@ изпрати стикер";
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@ иска потвърждение";
/* New message indicator on unknown room */
"MESSAGE" = "Съобщение";
/* New message indicator from a DM */
"MESSAGE_FROM_X" = "Съобщение от %@";
/* New message indicator on a room */
"MESSAGE_IN_X" = "Съобщение в %@";

View file

@ -149,7 +149,7 @@
"contacts_address_book_matrix_users_toggle" = "Само потребители на Matrix";
"contacts_address_book_no_contact" = "Няма локални контакти";
"contacts_address_book_permission_required" = "Необходимо е разрешение за достъп до локални контакти";
"contacts_address_book_permission_denied" = "Не сте позволили достъп на Riot до локалните Ви контакти";
"contacts_address_book_permission_denied" = "Не сте позволили достъп на Element до локалните Ви контакти";
"contacts_user_directory_section" = "ДИРЕКТОРИЯ С ПОТРЕБИТЕЛИ";
"contacts_user_directory_offline_section" = "ДИРЕКТОРИЯ С ПОТРЕБИТЕЛИ (офлайн)";
"room_details_access_section_directory_toggle" = "Включване в директорията със стаи";
@ -301,7 +301,7 @@
"settings_pin_rooms_with_unread" = "Закачане на стаи с непрочетени съобщения";
"settings_on_denied_notification" = "Известията са отказани за %@. Моля, включете ги в настройките на устройството";
"settings_enable_callkit" = "Интегрирани разговори";
"settings_callkit_info" = "Получаване на входящи повиквания при заключен екран. Показване на Riot разговори в историята на системата. Ако iCloud е включен, историята на разговорите се споделя с Apple.";
"settings_callkit_info" = "Получаване на входящи повиквания при заключен екран. Показване на Element разговори в историята на системата. Ако iCloud е включен, историята на разговорите се споделя с Apple.";
"settings_ui_language" = "Език";
"settings_ui_theme" = "Тема";
"settings_ui_theme_auto" = "Автоматична";
@ -313,17 +313,14 @@
"settings_unignore_user" = "Покажи всички съобщения от %@?";
"settings_labs_e2e_encryption" = "Шифроване от край до край";
"settings_copyright" = "Лиценз";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_olm_version" = "Olm версия %@";
"settings_version" = "Версия %@";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_contacts_discover_matrix_users" = "Използване на имейл и телефонен номер за откриване на потребители";
"settings_contacts_phonebook_country" = "Държава на телефонния указател";
"settings_labs_e2e_encryption_prompt_message" = "За да завършите настройката на шифроването, трябва да влезете в профила си отново.";
"settings_labs_create_conference_with_jitsi" = "Създаване на групови разговори с jitsi";
"settings_term_conditions" = "Правила и условия";
"settings_privacy_policy" = "Политика за поверителност";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Други известия";
"settings_send_crash_report" = "Изпращане на анон. данни за грешки и използване";
"settings_enable_rageshake" = "Силно разклащане на телефона за изпращане на грешка";
@ -450,7 +447,7 @@
"network_offline_prompt" = "Интернет връзката изглежда не работи.";
"public_room_section_title" = "Публични стаи (в %@):";
"bug_report_prompt" = "Приложението спря да работи последния път. Искате ли да изпратите съобщение за грешка?";
"rage_shake_prompt" = "Изглежда, че разклащате телефона, което ни кара да мислим, че не сте доволни от Riot. Искате ли да изпратите съобщение за грешка?";
"rage_shake_prompt" = "Изглежда, че разклащате телефона, което ни кара да мислим, че не сте доволни от Element. Искате ли да изпратите съобщение за грешка?";
"do_not_ask_again" = "Не питай отново";
"camera_access_not_granted" = "%@ няма разрешение да използва камерата. Моля, проверете настройките за сигурност";
"large_badge_value_k_format" = "%.1fK";
@ -476,7 +473,7 @@
// Crash report
"google_analytics_use_prompt" = "Искате ли да помогнете за подобрението на %@ като анонимно изпращате съобщения за грешки и данни за използване?";
// Crypto
"e2e_enabling_on_app_update" = "Riot поддържа шифроване от край до край, но за да го включите трябва да влезете в профила си отново.\n\nМоже да го направите сега или по-късно от настройките на приложението.";
"e2e_enabling_on_app_update" = "Element поддържа шифроване от край до край, но за да го включите трябва да влезете в профила си отново.\n\nМоже да го направите сега или по-късно от настройките на приложението.";
"e2e_need_log_in_again" = "Трябва да влезете обратно в профила си, за да се създадат ключове за шифроване от-край-до-край за тази сесия и да се изпрати публичния ключ към Home сървъра.\nТова е еднократно. Извинете за неудобството.";
"bug_crash_report_description" = "Моля, опишете какво правихте преди да възникне грешката:";
"bug_report_logs_description" = "За да се диагностицират проблемите, логовете от този клиент ще бъдат изпратени с този доклад за грешки. Ако предпочитате да изпратите само текста по-горе, моля, премахнете отметката:";
@ -535,7 +532,7 @@
"event_formatter_rerequest_keys_part2" = " от другите ми сесии.";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Заявката е изпратена";
"rerequest_keys_alert_message" = "Моля стартирайте Riot на друго устройство можещо да разшифрова съобщението, за да може то да изпрати ключовете до тази сесия.";
"rerequest_keys_alert_message" = "Моля стартирайте Element на друго устройство можещо да разшифрова съобщението, за да може то да изпрати ключовете до тази сесия.";
"room_message_reply_to_placeholder" = "Изпрати отговор (нешифрован)…";
"encrypted_room_message_reply_to_placeholder" = "Изпрати шифрован отговор…";
"room_message_reply_to_short_placeholder" = "Изпрати отговор…";
@ -670,7 +667,7 @@
"sign_out_key_backup_in_progress_alert_cancel_action" = "Ще почакам";
// String for App Store
"store_short_description" = "Защитен децентрализиран чат/VoIP";
"store_full_description" = "Комуникирай по свой начин.\n\nЧат приложение, което е изцяло гъвкаво и под Ваш контрол. Riot позволява да комуникирате по начина, по който искате. Направено за [matrix] - стандарт за отворена и децентрализирана комуникация.\n\nИзползвайте безплатен matrix.org акаунт, собствен сървър от https://modular.im или друг Matrix сървър.\n\nЗащо да изберете Riot.im?\n\n• ПЪЛНА КОМУНИКАЦИЯ: Създавайте каквито пожелаете чат стаи - свързани с работни екипи, приятели или друг вид общности! Чатете, споделяйте файлове, добавяйте приспособления и водете аудио и видео разговори - всичко това, изцяло безплатно.\n\n• МОЩНИ ИНТЕГРАЦИИ: Използвайте Riot.im с досега-познатите Ви инструменти. Посредством Riot.im дори можете да чатите с потребители и групи използващи други чат приложения.\n\n• ЛИЧНО И ЗАЩИТЕНО: Пазете комуникацията си в тайна. Съвременна технология за шифроване от край до край гарантира, че Вашата комуникацията наистина остава Ваша.\n\n• ОТВОРЕНО, А НЕ ЗАТВОРЕНО: Приложение с отворен код, изградено върху Matrix. Дръжте данните си под Ваш контрол, като използвате Ваш собствен сървър или като изберете сървър, на който вярвате.\n\n• КЪДЕТО И ДА СТЕ: Поддържайте връзка където и да сте, с напълно синхронизирана чат история на всички Ваши устройства или онлайн на https://riot.im.";
"store_full_description" = "Комуникирай по свой начин.\n\nЧат приложение, което е изцяло гъвкаво и под Ваш контрол. Element позволява да комуникирате по начина, по който искате. Направено за [matrix] - стандарт за отворена и децентрализирана комуникация.\n\nИзползвайте безплатен matrix.org акаунт, собствен сървър от https://ems.element.io или друг Matrix сървър.\n\nЗащо да изберете Element?\n\n• ПЪЛНА КОМУНИКАЦИЯ: Създавайте каквито пожелаете чат стаи - свързани с работни екипи, приятели или друг вид общности! Чатете, споделяйте файлове, добавяйте приспособления и водете аудио и видео разговори - всичко това, изцяло безплатно.\n\n• МОЩНИ ИНТЕГРАЦИИ: Използвайте Element с досега-познатите Ви инструменти. Посредством Element дори можете да чатите с потребители и групи използващи други чат приложения.\n\n• ЛИЧНО И ЗАЩИТЕНО: Пазете комуникацията си в тайна. Съвременна технология за шифроване от край до край гарантира, че Вашата комуникацията наистина остава Ваша.\n\n• ОТВОРЕНО, А НЕ ЗАТВОРЕНО: Приложение с отворен код, изградено върху Matrix. Дръжте данните си под Ваш контрол, като използвате Ваш собствен сървър или като изберете сървър, на който вярвате.\n\n• КЪДЕТО И ДА СТЕ: Поддържайте връзка където и да сте, с напълно синхронизирана чат история на всички Ваши устройства или онлайн на https://app.element.io.";
"auth_autodiscover_invalid_response" = "Невалиден отговор при опит за откриване на адреса на сървъра";
"room_message_unable_open_link_error_message" = "Неуспешно отваряне на връзката.";
"room_event_action_reply" = "Отговори";
@ -956,10 +953,10 @@
"security_settings_crypto_sessions" = "МОИТЕ СЕСИИ";
"security_settings_crypto_sessions_loading" = "Зареждан на сесии…";
// MARK: Clients
"client_desktop_name" = "Riot Desktop";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X за Android";
"client_desktop_name" = "Element Desktop";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"room_member_power_level_admin_in" = "Админ в %@";
"room_member_power_level_moderator_in" = "Модератор в %@";
"room_member_power_level_custom_in" = "Собствен (%@) в %@";
@ -984,7 +981,7 @@
"security_settings_blacklist_unverified_devices_description" = "Потвърждаване на всички потребителски сесии за да бъдат маркирани като доверени и да се изпращат съобщения до тях.";
"security_settings_complete_security_alert_title" = "Завършване на сигурността";
"security_settings_complete_security_alert_message" = "Първо трябва да завършите сигурността на текущата си сесия.";
"security_settings_coming_soon" = "Извинете. Това действие все още не е налично в Riot-iOS. Моля използвайте друг Matrix клиент за да го настройте. Riot-iOS ще го използва след това.";
"security_settings_coming_soon" = "Извинете. Това действие все още не е налично в Element iOS. Моля използвайте друг Matrix клиент за да го настройте. Element iOS ще го използва след това.";
// Manage session
"manage_session_title" = "Управление на сесията";
"manage_session_info" = "СЕСИЙНА ИНФОРМАЦИЯ";
@ -1016,7 +1013,7 @@
"key_verification_self_verify_unverified_sessions_alert_validate_action" = "Прегледай";
"device_verification_self_verify_wait_title" = "Завършване на сигурността";
"device_verification_self_verify_wait_new_sign_in_title" = "Потвърждение на вход";
"device_verification_self_verify_wait_information" = "Потвърдете тази сесия от някоя от другите ви сесии, така че да й дадете достъп до шифрованите съобщения.\n\nИзползвайте най-новия Riot на другите си устройства:";
"device_verification_self_verify_wait_information" = "Потвърдете тази сесия от някоя от другите ви сесии, така че да й дадете достъп до шифрованите съобщения.\n\nИзползвайте най-новия Element на другите си устройства:";
"device_verification_self_verify_wait_additional_information" = "или друг Matrix клиент поддържащ кръстосано-подписване";
"device_verification_self_verify_wait_recover_secrets_without_passphrase" = "Използвай ключ за възстановяване";
"device_verification_self_verify_wait_recover_secrets_with_passphrase" = "Използвай парола или ключ за възстановяване";

View file

@ -2,4 +2,4 @@
"NSCameraUsageDescription" = "La càmera s'utilitza per fer fotos i vídeos, fer vídeo conferència.";
"NSPhotoLibraryUsageDescription" = "La fototeca s'utilitza per enviar fotos i vídeos.";
"NSMicrophoneUsageDescription" = "El micròfon s'utilitza per fer vídeos, fer trucades.";
"NSContactsUsageDescription" = "Per tal de mostrar-vos quins dels vostres contactes ja són usuaris de Riot o Matrix, podem enviar les seves adreces i números de telèfon desades a la vostra agenda cap al vostre servidor d'identitats de Matrix. El nou Vector no emmagatzema aquestes dades ni les usa per a cap altra finalitat. Per a més informació, si us plau visiteu l'apartat de política de privacitat als paràmetres de l'aplicació.";
"NSContactsUsageDescription" = "Per tal de mostrar-vos quins dels vostres contactes ja són usuaris de Element o Matrix, podem enviar les seves adreces i números de telèfon desades a la vostra agenda cap al vostre servidor d'identitats de Matrix. El nou Vector no emmagatzema aquestes dades ni les usa per a cap altra finalitat. Per a més informació, si us plau visiteu l'apartat de política de privacitat als paràmetres de l'aplicació.";

View file

@ -149,7 +149,7 @@
"contacts_address_book_matrix_users_toggle" = "Només usuaris de Matrix";
"contacts_address_book_no_contact" = "Sense contactes locals";
"contacts_address_book_permission_required" = "Es necessita permís per accedir als contactes locals";
"contacts_address_book_permission_denied" = "No vas permetre que Riot accedís als teus contactes locals";
"contacts_address_book_permission_denied" = "No vas permetre que Element accedís als teus contactes locals";
"contacts_user_directory_section" = "Directori d'usuaris";
"contacts_user_directory_offline_section" = "Directori d'usuaris (fora de línia)";
// Chat participants
@ -298,7 +298,7 @@
"settings_pin_rooms_with_unread" = "Fixa sales amb missatges pendents";
"settings_on_denied_notification" = "%@ no permet notificacions, si us plau activa-les en els ajustos del teu dispositiu";
"settings_enable_callkit" = "Trucades integrades";
"settings_callkit_info" = "Rep les trucades entrants a la pantalla de bloqueig. Consulta les trucades de Riot a l'historial de trucades del sistema. Si està habilitat iCloud, aquest historial de trucades es compartirà amb Apple.";
"settings_callkit_info" = "Rep les trucades entrants a la pantalla de bloqueig. Consulta les trucades de Element a l'historial de trucades del sistema. Si està habilitat iCloud, aquest historial de trucades es compartirà amb Apple.";
"settings_ui_language" = "Llenguatge";
"settings_ui_theme" = "Tema";
"settings_ui_theme_auto" = "Auto";
@ -316,11 +316,8 @@
"settings_version" = "Versió %@";
"settings_olm_version" = "Versió Olm %@";
"settings_copyright" = "Copyright";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Termes i Condicions";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Política de Privacitat";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Avisos de tercers";
"settings_send_crash_report" = "Envia anònimament dades de fallades i d'ús";
"settings_enable_rageshake" = "Agitar rabiosament per informar d'errors";
@ -470,7 +467,7 @@
// Crash report
"google_analytics_use_prompt" = "T'agradaria ajudar a millorar %@ enviant automàticament informes de bloquejos i ús de dades?";
// Crypto
"e2e_enabling_on_app_update" = "Riot ara permet l'ús de xifrat punt a punt però has de tornar a connectar-te per tal d'activar-lo.\n\nPots fer-ho ara o més tard des de les preferències de l'aplicació.";
"e2e_enabling_on_app_update" = "Element ara permet l'ús de xifrat punt a punt però has de tornar a connectar-te per tal d'activar-lo.\n\nPots fer-ho ara o més tard des de les preferències de l'aplicació.";
"e2e_need_log_in_again" = "Has de tornar a iniciar sessió per tal de generar claus de xifrat punt a punt per a aquest dispositiu i enviar la clau pública al servidor.\nAixò només s'ha de fer un cop, disculpa les molèsties.";
// Bug report
"bug_report_title" = "Informe d'errors";
@ -554,4 +551,4 @@
"deactivate_account_password_alert_message" = "Per a continuar si us plau introdueix la teva contrasenya";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Sol·licitud enviada";
"rerequest_keys_alert_message" = "Inicia Riot en un altre dispositiu que pugui desxifrar el missatge per que pugui enviar les claus a aquest dispositiu.";
"rerequest_keys_alert_message" = "Inicia Element en un altre dispositiu que pugui desxifrar el missatge per que pugui enviar les claus a aquest dispositiu.";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "Defnyddir y camera i dynnu lluniau a fideos, gwneud galwadau fideo.";
"NSPhotoLibraryUsageDescription" = "Defnyddir y llyfrgell ffotograffau i anfon lluniau a fideos.";
"NSMicrophoneUsageDescription" = "Defnyddir y meicroffon i gymryd fideos, gwneud galwadau.";
"NSContactsUsageDescription" = "I ddarganfod cysylltiadau sydd eisoes yn defnyddio Matrix, gall Riot anfon cyfeiriadau e-bost a rhifau ffôn yn eich llyfr cyfeiriadau at y gweinydd adnabod Matrix o'ch dewis. Pan gânt eu cefnogi, mae data personol yn cael ei amgodio cyn ei anfon - gwiriwch bolisi preifatrwydd eich gweinydd adnabod i gael mwy o fanylion.";
"NSContactsUsageDescription" = "I ddarganfod cysylltiadau sydd eisoes yn defnyddio Matrix, gall Element anfon cyfeiriadau e-bost a rhifau ffôn yn eich llyfr cyfeiriadau at y gweinydd adnabod Matrix o'ch dewis. Pan gânt eu cefnogi, mae data personol yn cael ei amgodio cyn ei anfon - gwiriwch bolisi preifatrwydd eich gweinydd adnabod i gael mwy o fanylion.";
"NSCalendarsUsageDescription" = "Gweler eich cyfarfodydd a drefnwyd yn yr ap.";

View file

@ -1,6 +1,6 @@
// String for App Store
"store_short_description" = "Sgwrs/VoIP datgonoledig a diogel";
"store_full_description" = "Cyfathrebu, eich ffordd eich hyn.\n\nAp sgwrsio, o dan eich rheolaeth ac yn hollol hyblyg. Mae Riot yn gadael ichi gyfathrebu'r ffordd rydych chi ei eisiau. Wedi'i wneud ar gyfer [matrix] - y safon ar gyfer cyfathrebu agored, datganoledig.\n\nSicrhewch gyfrif matrix.org am ddim, mynnwch eich gweinydd eich hun yn https://modular.im, neu defnyddiwch weinydd Matrix arall.\n\nPam dewis Riot.im?\n\nCYFATHREBU LLAWN: Adeiladwch ystafelloedd o amgylch eich timau, eich ffrindiau, eich cymuned - sut bynnag yr ydych chi'n hoffi! Sgwrsiwch, rhannwch ffeiliau, ychwanegwch teclynnau a gwnewch galwadau llais a fideo - i gyd yn rhad ac am ddim.\n\nINTEGREIDDIAU GRYMUS: Defnyddiwch Riot.im gyda'r offer rydych chi'n eu hadnabod ac yn eu caru. Gyda Riot.im gallwch hyd yn oed sgwrsio â defnyddwyr a grwpiau ar apiau sgwrsio eraill.\n\nPREIFAT A DIOGEL: Cadwch eich sgyrsiau yn gyfrinachol. Mae amgryptio o'r dechrau i'r diwedd o'r radd flaenaf yn sicrhau bod cyfathrebu preifat yn aros yn breifat.\n\nAGORED, NID YN GAËDIG: Ffynhonnell agor, ac wedi'i adeiladu ar Matrix. Byddwch yn berchen ar eich data eich hun trwy gynnal eich gweinydd eich hun, neu ddewis un rydych chi'n ymddiried ynddo.\n\nBOB MAN YDYCH CHI: Cadwch mewn cysylltiad ble bynnag yr ydych â hanes negeseuon wedi'i gydamseru'n llawn ar draws eich holl ddyfeisiau ac ar-lein yn https://riot.im.";
"store_full_description" = "Cyfathrebu, eich ffordd eich hyn.\n\nAp sgwrsio, o dan eich rheolaeth ac yn hollol hyblyg. Mae Element yn gadael ichi gyfathrebu'r ffordd rydych chi ei eisiau. Wedi'i wneud ar gyfer [matrix] - y safon ar gyfer cyfathrebu agored, datganoledig.\n\nSicrhewch gyfrif matrix.org am ddim, mynnwch eich gweinydd eich hun yn https://ems.element.io, neu defnyddiwch weinydd Matrix arall.\n\nPam dewis Element?\n\nCYFATHREBU LLAWN: Adeiladwch ystafelloedd o amgylch eich timau, eich ffrindiau, eich cymuned - sut bynnag yr ydych chi'n hoffi! Sgwrsiwch, rhannwch ffeiliau, ychwanegwch teclynnau a gwnewch galwadau llais a fideo - i gyd yn rhad ac am ddim.\n\nINTEGREIDDIAU GRYMUS: Defnyddiwch Element gyda'r offer rydych chi'n eu hadnabod ac yn eu caru. Gyda Element gallwch hyd yn oed sgwrsio â defnyddwyr a grwpiau ar apiau sgwrsio eraill.\n\nPREIFAT A DIOGEL: Cadwch eich sgyrsiau yn gyfrinachol. Mae amgryptio o'r dechrau i'r diwedd o'r radd flaenaf yn sicrhau bod cyfathrebu preifat yn aros yn breifat.\n\nAGORED, NID YN GAËDIG: Ffynhonnell agor, ac wedi'i adeiladu ar Matrix. Byddwch yn berchen ar eich data eich hun trwy gynnal eich gweinydd eich hun, neu ddewis un rydych chi'n ymddiried ynddo.\n\nBOB MAN YDYCH CHI: Cadwch mewn cysylltiad ble bynnag yr ydych â hanes negeseuon wedi'i gydamseru'n llawn ar draws eich holl ddyfeisiau ac ar-lein yn https://app.element.io.";
// Titles
"title_home" = "Hafan";
"title_favourites" = "Ffefrynnau";
@ -175,7 +175,7 @@
"contacts_address_book_no_identity_server" = "Dim gweinydd adnabod wedi'i osod";
"contacts_address_book_no_contact" = "Dim cysylltiadau lleol";
"contacts_address_book_permission_required" = "Mae angen caniatâd i gael mynediad at gysylltiadau lleol";
"contacts_address_book_permission_denied" = "Gwrthodwyd caniatâd i Riot gael mynediad i'ch cysylltiadau lleol";
"contacts_address_book_permission_denied" = "Gwrthodwyd caniatâd i Element gael mynediad i'ch cysylltiadau lleol";
"contacts_user_directory_section" = "CYFEIRIADUR DEFNYDDWYR";
"contacts_user_directory_offline_section" = "CYFEIRIADUR DEFNYDDWYR (all-lein)";
// Chat participants
@ -376,7 +376,7 @@
"settings_pin_rooms_with_unread" = "Pinio ystafelloedd gyda negeseuon heb eu darllen";
"settings_on_denied_notification" = "Gwrthodir hysbysiadau i %@, caniatewch nhw yn eich gosodiadau dyfais";
"settings_enable_callkit" = "Galw integredig";
"settings_callkit_info" = "Derbyn galwadau sy'n dod i mewn ar eich sgrin clo. Gwelwch eich galwadau Riot yn hanes galwadau'r system. Os yw iCloud wedi'i alluogi, bydd yr hanes galw hwn yn cael ei rannu gydag Apple.";
"settings_callkit_info" = "Derbyn galwadau sy'n dod i mewn ar eich sgrin clo. Gwelwch eich galwadau Element yn hanes galwadau'r system. Os yw iCloud wedi'i alluogi, bydd yr hanes galw hwn yn cael ei rannu gydag Apple.";
"settings_calls_stun_server_fallback_button" = "Caniatáu gweinydd cymorth galw wrth gefn";
"settings_calls_stun_server_fallback_description" = "Caniatáu gweinydd cymorth galw wrth gefn %@ pan nad yw eich hafanweinydd yn cynnig un (byddai eich cyfeiriad IP yn cael ei rannu yn ystod galwad).";
"settings_ui_language" = "Iaith";
@ -399,11 +399,8 @@
"settings_version" = "Fersiwn %@";
"settings_olm_version" = "Fersiwn Olm %@";
"settings_copyright" = "Hawlfraint";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Telerau ac Amodau";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Polisi Preifatrwydd";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Hysbysiadau Trydydd Parti";
"settings_send_crash_report" = "Anfonwch ddata namau a defnydd dienw";
"settings_enable_rageshake" = "Ysgwydiad blin i roi gwybod am nam";
@ -630,7 +627,7 @@
// Crash report
"google_analytics_use_prompt" = "Hoffech chi helpu i wella %@ trwy gyrru adroddiadau pall a data defnydd dienw yn awtomatig?";
// Crypto
"e2e_enabling_on_app_update" = "Mae Riot bellach yn cefnogi amgryptio o'r dechrau i'r diwedd ond mae angen i chi fewngofnodi eto i'w alluogi.\n\nGallwch ei wneud nawr neu'n hwyrach o'r gosodiadau.";
"e2e_enabling_on_app_update" = "Mae Element bellach yn cefnogi amgryptio o'r dechrau i'r diwedd ond mae angen i chi fewngofnodi eto i'w alluogi.\n\nGallwch ei wneud nawr neu'n hwyrach o'r gosodiadau.";
"e2e_need_log_in_again" = "Mae angen i chi fewngofnodi i gynhyrchu allweddi amgryptio o'r dechrau i'r diwedd ar gyfer y sesiwn hon a chyflwyno'r allwedd gyhoeddus i'ch hafanweinydd\nDim ond unwaith fydd rhaid gwneud hyn; sori am yr anghyfleustra.";
// Key backup wrong version
"e2e_key_backup_wrong_version_title" = "Copi Allwedd Wrth Gefn Newydd";
@ -706,7 +703,7 @@
"deactivate_account_password_alert_message" = "I barhau, rhowch eich cyfrinair os gwelwch yn dda";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Anfonwyd y Cais";
"rerequest_keys_alert_message" = "Lansiwch Riot ar ddyfais arall a all ddadgryptio'r neges fel y gall anfon yr allweddi i'r sesiwn hon.";
"rerequest_keys_alert_message" = "Lansiwch Element ar ddyfais arall a all ddadgryptio'r neges fel y gall anfon yr allweddi i'r sesiwn hon.";
"key_backup_setup_title" = "Allweddi Wrth Gefn";
"key_backup_setup_skip_alert_title" = "Ydych chi'n siwr?";
"key_backup_setup_skip_alert_message" = "Efallai y byddwch chi'n colli negeseuon diogel os byddwch chi'n allgofnodi neu'n colli'ch dyfais.";
@ -986,10 +983,10 @@
"key_verification_verify_qr_code_scan_other_code_success_message" = "Mae'r côd QR wedi'i brofi'n ddilys.";
"skip" = "Hepgor";
// MARK: Clients
"client_desktop_name" = "Riot Cyfrifiadur";
"client_web_name" = "Riot Gwê";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X i Android";
"client_desktop_name" = "Element Cyfrifiadur";
"client_web_name" = "Element Gwê";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"room_participants_action_security_status_complete_security" = "Cwblhewch diogelwch";
"room_participants_action_security_status_loading" = "Yn llwytho…";
"room_member_power_level_admin_in" = "Gweinyddwr yn %@";
@ -1009,7 +1006,7 @@
"security_settings_cryptography" = "CRYPTOGRAFFEG";
"security_settings_complete_security_alert_title" = "Cwblhewch diogelwch";
"security_settings_complete_security_alert_message" = "Dylech gwblhau diogelwch ar eich sesiwn gyfredol yn gyntaf.";
"security_settings_coming_soon" = "Sori. Nid yw'r weithred hon ar gael ar Riot-iOS eto. Defnyddiwch gleient Matrix arall i'w osod. Bydd Riot-iOS yn ei ddefnyddio.";
"security_settings_coming_soon" = "Sori. Nid yw'r weithred hon ar gael ar Element iOS eto. Defnyddiwch gleient Matrix arall i'w osod. Bydd Element iOS yn ei ddefnyddio.";
// Recover from private key
"key_backup_recover_from_private_key_info" = "Yn adfer copi wrth gefn…";
"device_verification_self_verify_alert_title" = "Mewngofnodiad Newydd";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "Die Kamera wird verwendet, um Fotos und Videos aufzunehmen sowie Videoanrufe durchzuführen.";
"NSPhotoLibraryUsageDescription" = "Die Fotobibliothek wird verwendet, um Fotos und Videos zu versenden.";
"NSMicrophoneUsageDescription" = "Das Mikrofon wird verwendet, um Videos aufzunehmen sowie Gespräche zu führen.";
"NSContactsUsageDescription" = "Riot kann E-Mail-Adressen und Telefonnummern aus deinem Adressbuch zu deinem Matrix-Identitätsserver schicken, um Kontakte zu finden, die bereits Matrix verwenden. Wenn verfügbar, werden persönliche Daten vor dem Versand gehasht. Für weitere Informationen schaue bitte in die Datenschutzerklärung deines Identitätsservers.";
"NSContactsUsageDescription" = "Element kann E-Mail-Adressen und Telefonnummern aus deinem Adressbuch zu deinem Matrix-Identitätsserver schicken, um Kontakte zu finden, die bereits Matrix verwenden. Wenn verfügbar, werden persönliche Daten vor dem Versand gehasht. Für weitere Informationen schaue bitte in die Datenschutzerklärung deines Identitätsservers.";
"NSCalendarsUsageDescription" = "Sieh dir deine geplanten Meetings in der App an.";

View file

@ -232,11 +232,8 @@
"settings_version" = "Version %@";
"settings_olm_version" = "Olm-Version %@";
"settings_copyright" = "Kopierrecht";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Geschäftsbedingungen";
"settings_privacy_policy" = "Datenschutzerklärung";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_send_crash_report" = "Sende anonyme Absturz- & Nutzungsdaten";
"settings_change_password" = "Passwort ändern";
"settings_old_password" = "altes Passwort";
@ -295,7 +292,7 @@
"directory_cell_description" = "%tu Räume";
"directory_search_results" = "%tu Treffer gefunden für %@";
"directory_search_results_more_than" = ">%tu Treffer gefunden für %@";
"contacts_address_book_permission_denied" = "Riot fehlt die Berechtigung auf die lokalen Kontakte zuzugreifen";
"contacts_address_book_permission_denied" = "Element fehlt die Berechtigung auf die lokalen Kontakte zuzugreifen";
"room_participants_remove_third_party_invite_msg" = "Entfernen der Einladung von Dritten ist noch nicht unterstützt";
"room_participants_invite_another_user" = "Suchen/Einladen mittels Benutzer-ID, Name oder E-Mail-Adresse";
"room_participants_invite_malformed_id" = "Ungültige ID. Sollte eine E-Mail-Adresse oder Matrix-ID wie \"@thomas:matrix.org' sein";
@ -390,7 +387,7 @@
// Crash report
"google_analytics_use_prompt" = "Möchtest du helfen %@ zu verbessern, indem du anonyme Crash Reports und Daten über die Verwendung sendest?";
// Crypto
"e2e_enabling_on_app_update" = "Riot unterstützt nun Ende-zu-Ende Verschlüsselung, um es zu aktivieren musst du dich erneut anmelden.\n\nDu kannst es nun machen oder später in den Einstellungen.";
"e2e_enabling_on_app_update" = "Element unterstützt nun Ende-zu-Ende Verschlüsselung, um es zu aktivieren musst du dich erneut anmelden.\n\nDu kannst es nun machen oder später in den Einstellungen.";
"e2e_need_log_in_again" = "Du musst dich erneut anmelden um Ende-zu-Ende Schlüssel für diese Sitzung zu erstellen und zum Server zu senden.\nDies ist nur einmal notwendig.";
// Bug report
"bug_report_title" = "Bug Report";
@ -461,7 +458,7 @@
"settings_calls_settings" = "ANRUFE";
"settings_show_decrypted_content" = "Entschlüsselten Inhalt anzeigen";
"settings_enable_callkit" = "Eingebettetes Anrufen";
"settings_callkit_info" = "Empfange eingehende Anrufe auf deinem Sperrbildschirm und sehe deine Riot-Anrufe in der System-Anruf-Historie. Wenn iCloud aktiviert ist, wird diese Anruf-Historie mit Apple geteilt.";
"settings_callkit_info" = "Empfange eingehende Anrufe auf deinem Sperrbildschirm und sehe deine Element-Anrufe in der System-Anruf-Historie. Wenn iCloud aktiviert ist, wird diese Anruf-Historie mit Apple geteilt.";
"settings_enable_rageshake" = "Schüttle stark um einen Fehler zu melden";
"do_not_ask_again" = "Nicht erneut fragen";
"settings_ui_theme_black" = "Schwarz";
@ -536,7 +533,7 @@
"event_formatter_rerequest_keys_part2" = " von deinen anderen Sitzungen anfragen.";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Anfrage gesendet";
"rerequest_keys_alert_message" = "Öffne Riot bitte in einer anderen Sitzung, die die Nachricht entschlüsseln kann, damit es die Schlüssel an dieses Gerät übertragen kann.";
"rerequest_keys_alert_message" = "Öffne Element bitte in einer anderen Sitzung, die die Nachricht entschlüsseln kann, damit es die Schlüssel an dieses Gerät übertragen kann.";
"room_message_reply_to_placeholder" = "Sende eine unverschlüsselte Antwort…";
"encrypted_room_message_reply_to_placeholder" = "Sende eine verschlüsselte Antwort…";
"room_message_reply_to_short_placeholder" = "Sende eine Antwort…";
@ -656,7 +653,7 @@
"key_backup_setup_intro_manual_export_action" = "Manueller Schlüssel Export";
// String for App Store
"store_short_description" = "Sicherer, dezentralisierter Chat/VoIP";
"store_full_description" = "Kommuniziere - auf deine Art.\n\nEine Chat-App - unter deiner Kontrolle und komplett flexibel. Riot lässt dich so kommunizieren wie du willst. Gebaut für [matrix] - dem Standard für offene, dezentrale Kommunikation.\n\nHol dir ein kostenloses Konto auf matrix.org, deinen eigenen Server auf https://modular.im oder nutze einen anderen Matrix-Server.\n\nWarum Riot.im nutzen?\n\nLÜCKENLOSE KOMMUNIKATION: Baue Räume um deine Teams, deine Freunde, deine Community - ganz nach deinen Vorstellungen! Chatte, teile Dateien, füge Widgets hinzu und führe Sprach- sowie Videogespräche - alles kostenlos.\n\nMÄCHTIGE INTEGRATIONEN: Nutze Riot.im mit den Werkzeugen die du kennst und liebst. Mit Riot.im kannst du sogar mit Nutzern und Gruppen anderer Chat-Apps in Kontakt bleiben.\n\nPRIVAT UND SICHER: Halte deine Gespräche geheim. Modernste Verschlüsselung sogt dafür, dass private Kommunikation auch privat bleibt.\n\nOFFEN, NICHT VERSCHLOSSEN: Open Source - basierend auf [matrix]. Behalte die Hoheit über deine Daten indem du deinen eigenen Server betreibst - oder einen wählst, dem du vertraust.\n\nWO AUCH IMMER DU BIST: Halte den Kontakt - mit einem Nachrichtenverlauf der vollständig synchronisiert wird - auf all deinen Geräten oder Online unter https://riot.im";
"store_full_description" = "Kommuniziere - auf deine Art.\n\nEine Chat-App - unter deiner Kontrolle und komplett flexibel. Element lässt dich so kommunizieren wie du willst. Gebaut für [matrix] - dem Standard für offene, dezentrale Kommunikation.\n\nHol dir ein kostenloses Konto auf matrix.org, deinen eigenen Server auf https://ems.element.io oder nutze einen anderen Matrix-Server.\n\nWarum Element nutzen?\n\nLÜCKENLOSE KOMMUNIKATION: Baue Räume um deine Teams, deine Freunde, deine Community - ganz nach deinen Vorstellungen! Chatte, teile Dateien, füge Widgets hinzu und führe Sprach- sowie Videogespräche - alles kostenlos.\n\nMÄCHTIGE INTEGRATIONEN: Nutze Element mit den Werkzeugen die du kennst und liebst. Mit Element kannst du sogar mit Nutzern und Gruppen anderer Chat-Apps in Kontakt bleiben.\n\nPRIVAT UND SICHER: Halte deine Gespräche geheim. Modernste Verschlüsselung sogt dafür, dass private Kommunikation auch privat bleibt.\n\nOFFEN, NICHT VERSCHLOSSEN: Open Source - basierend auf [matrix]. Behalte die Hoheit über deine Daten indem du deinen eigenen Server betreibst - oder einen wählst, dem du vertraust.\n\nWO AUCH IMMER DU BIST: Halte den Kontakt - mit einem Nachrichtenverlauf der vollständig synchronisiert wird - auf all deinen Geräten oder Online unter https://app.element.io";
"auth_login_single_sign_on" = "Anmelden mit Single Sign-On";
"auth_autodiscover_invalid_response" = "Ungültige Antwort beim Entdecken des Heimservers";
"room_message_unable_open_link_error_message" = "Konnte Link nicht öffnen.";
@ -1005,14 +1002,24 @@
"device_verification_self_verify_wait_waiting" = "warte…";
"skip" = "Überspringen";
// MARK: Clients
"client_desktop_name" = "Riot Desktop";
"client_desktop_name" = "Element Desktop";
"security_settings_crosssigning_info_not_bootstrapped" = "Cross-signing ist bisher nicht konfiguriert.";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X für Android";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"room_member_power_level_admin_in" = "Admin in %@";
"room_member_power_level_moderator_in" = "Moderator in %@";
"room_member_power_level_custom_in" = "Benutzerdefiniert (%@) in %@";
"room_member_power_level_short_admin" = "Admin";
"room_member_power_level_short_moderator" = "Mod";
"room_member_power_level_short_custom" = "Benutzerdefiniert";
"security_settings_secure_backup" = "SICHERES BACKUP";
"security_settings_secure_backup_synchronise" = "Synchronisiere";
"security_settings_secure_backup_delete" = "Lösche";
"security_settings_crosssigning_info_ok" = "Cross-signing ist angeschaltet.";
"security_settings_crosssigning_reset" = "Cross-signing zurücksetzen";
"security_settings_coming_soon" = "Entschuldigung, diese Funktion ist noch nicht für Element iOS verfügbar. Bitte nutze einen anderen Matrix Client, um es einzurichten. Element iOS wird es benutzen.";
"security_settings_user_password_description" = "Bestätigen Sie Ihre Identität durch Eingabe von deinem Kontopasswort";
// AuthenticatedSessionViewControllerFactory
"authenticated_session_flow_not_supported" = "Diese App unterstützt nicht diese Authentifizierungsmethode für deinen Home-Server.";
"secure_key_backup_setup_intro_title" = "Sicheres Backup";

View file

@ -20,4 +20,4 @@
"NSMicrophoneUsageDescription" = "The microphone is used to take videos, make calls.";
"NSContactsUsageDescription" = "To discover contacts already using Matrix, Element can send email addresses and phone numbers in your address book to your chosen Matrix identity server. Where supported, personal data is hashed before sending - please check your identity server's privacy policy for more details.";
"NSCalendarsUsageDescription" = "See your scheduled meetings in the app.";
"NSFaceIDUsageDescription" = "Face ID is used to access your app.";

View file

@ -366,6 +366,9 @@
"media_type_accessibility_file" = "File";
"media_type_accessibility_sticker" = "Sticker";
"external_link_confirmation_title" = "Double-check this link";
"external_link_confirmation_message" = "The link %@ is taking you to another site: %@\n\nAre you sure you want to continue?";
// Unknown devices
"unknown_devices_alert_title" = "Room contains unknown sessions";
"unknown_devices_alert" = "This room contains unknown sessions which have not been verified.\nThis means there is no guarantee that the sessions belong to the users they claim to.\nWe recommend you go through the verification process for each session before continuing, but you can resend the message without verifying if you prefer.";
@ -482,8 +485,6 @@
"settings_labs_e2e_encryption" = "End-to-End Encryption";
"settings_labs_e2e_encryption_prompt_message" = "To finish setting up encryption you must log in again.";
"settings_labs_room_members_lazy_loading" = "Lazy load rooms members";
"settings_labs_room_members_lazy_loading_error_message" = "Your homeserver does not support lazy loading of room members yet. Try later.";
"settings_labs_create_conference_with_jitsi" = "Create conference calls with jitsi";
"settings_labs_message_reaction" = "React to messages with emoji";
@ -1414,3 +1415,40 @@
"major_update_information" = "We're excited to announce we've changed name! Your app is up to date and you're signed in to your account.";
"major_update_learn_more_action" = "Learn more";
"major_update_done_action" = "Got it";
// MARK: - PIN Protection
"pin_protection_choose_pin" = "Choose a PIN for security";
"pin_protection_confirm_pin" = "Confirm your PIN";
"pin_protection_confirm_pin_to_disable" = "Confirm PIN to disable PIN";
"pin_protection_enter_pin" = "Enter your PIN";
"pin_protection_forgot_pin" = "Forgot PIN";
"pin_protection_reset_alert_title" = "Reset PIN";
"pin_protection_reset_alert_message" = "To reset your PIN, you'll need to re-login and create a new one";
"pin_protection_reset_alert_action_reset" = "Reset";
"pin_protection_mismatch_error_title" = "PINs don't match";
"pin_protection_mismatch_error_message" = "Please try again";
"pin_protection_mismatch_too_many_times_error_message" = "If you can't remember your PIN, tap the forgot PIN button.";
"pin_protection_settings_section_header_x" = "PIN & %@";
"pin_protection_settings_section_footer" = "To reset your PIN, you'll need to re-login and create a new one.";
"pin_protection_settings_enabled_forced" = "PIN enabled";
"pin_protection_settings_enable_pin" = "Enable PIN";
// MARK: - Biometrics Protection
"biometrics_mode_touch_id" = "Touch ID";
"biometrics_mode_face_id" = "Face ID";
"biometrics_settings_enable_x" = "Enable %@";
"biometrics_setup_title_x" = "Enable %@";
"biometrics_setup_enable_button_title_x" = "Enable %@";
"biometrics_setup_subtitle" = "Save yourself time";
"biometrics_desetup_title_x" = "Disable %@";
"biometrics_desetup_subtitle" = "";
"biometrics_desetup_disable_button_title_x" = "Disable %@";
"biometrics_usage_reason" = "Authentication is needed to access your app";
"biometrics_cant_unlocked_alert_title" = "Can't unlock app";
"biometrics_cant_unlocked_alert_message_x" = "To unlock, use %@ or log back in and enable %@ again";
"biometrics_cant_unlocked_alert_message_login" = "Log back in";
"biometrics_cant_unlocked_alert_message_retry" = "Retry";

View file

@ -2,4 +2,4 @@
"NSCameraUsageDescription" = "La cámara se utiliza para tomar fotos y vídeos, realizar llamadas de vídeo.";
"NSPhotoLibraryUsageDescription" = "La biblioteca de fotos se utiliza para enviar fotos y vídeos.";
"NSMicrophoneUsageDescription" = "El micrófono se utiliza para tomar vídeos, realizar llamadas.";
"NSContactsUsageDescription" = "Para mostrarte cuáles de tus contactos ya utilizan Riot o Matrix, podemos enviar las direcciones de correo electrónico y números telefónicos de tu agenda de contactos a tu Servidor de Identidad de Matrix. New Vector no almacena estos datos ni los utiliza para ningún otro propósito. Para obtener más información, por favor consulta la página de política de privacidad en los ajustes de la aplicación.";
"NSContactsUsageDescription" = "Para mostrarte cuáles de tus contactos ya utilizan Element o Matrix, podemos enviar las direcciones de correo electrónico y números telefónicos de tu agenda de contactos a tu Servidor de Identidad de Matrix. New Vector no almacena estos datos ni los utiliza para ningún otro propósito. Para obtener más información, por favor consulta la página de política de privacidad en los ajustes de la aplicación.";

View file

@ -66,7 +66,7 @@
"deactivate_account_password_alert_message" = "Para continuar, ingresa tu contraseña por favor";
"deactivate_account_forget_messages_information_part2_emphasize" = "Advertencia";
"deactivate_account_informations_part2_emphasize" = "Esta acción es irreversible.";
"rerequest_keys_alert_message" = "Por favor, inicia Riot en otro dispositivo que pueda descifrar el mensaje para que pueda enviar las claves a este dispositivo.";
"rerequest_keys_alert_message" = "Por favor, inicia Element en otro dispositivo que pueda descifrar el mensaje para que pueda enviar las claves a este dispositivo.";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Solicitud Enviada";
"auth_password_dont_match" = "Las contraseñas no coinciden";
@ -166,7 +166,7 @@
"directory_search_fail" = "Error al buscar datos";
"contacts_address_book_no_contact" = "No hay contactos locales";
"contacts_address_book_permission_required" = "Se requiere permiso para acceder a tus contactos locales";
"contacts_address_book_permission_denied" = "No permitiste que Riot acceda a tus contactos locales";
"contacts_address_book_permission_denied" = "No permitiste que Element acceda a tus contactos locales";
"contacts_user_directory_section" = "DIRECTORIO DE USUARIOS";
"contacts_user_directory_offline_section" = "DIRECTORIO DE USUARIOS (desconectados)";
"room_participants_leave_prompt_title" = "Salir de la sala";
@ -324,7 +324,7 @@
"settings_pin_rooms_with_unread" = "Fijar salas con mensajes no leídos";
"settings_on_denied_notification" = "Las notificaciones están denegadas para %@, por favor habilita notificaciones en los ajustes de tu dispositivo";
"settings_enable_callkit" = "Integración de llamadas";
"settings_callkit_info" = "Recibe llamadas entrantes en tu pantalla de bloqueo. Ve tus llamadas de Riot en el historial de llamadas del sistema. Si iCloud está habilitado, este historial de llamadas se compartirá con Apple.";
"settings_callkit_info" = "Recibe llamadas entrantes en tu pantalla de bloqueo. Ve tus llamadas de Element en el historial de llamadas del sistema. Si iCloud está habilitado, este historial de llamadas se compartirá con Apple.";
"settings_ui_language" = "Idioma";
"settings_ui_theme" = "Tema";
"settings_ui_theme_auto" = "Automático";
@ -344,11 +344,8 @@
"settings_version" = "Versión %@";
"settings_olm_version" = "Versión de Olm %@";
"settings_copyright" = "Derechos de autor";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Términos y Condiciones";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Política de Privacidad";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Avisos de Terceros";
"settings_send_crash_report" = "Enviar datos de uso e informes de fallas anónimos";
"settings_enable_rageshake" = "Agitar con rabia para reportar un error";
@ -502,7 +499,7 @@
// Crash report
"google_analytics_use_prompt" = "¿Te gustaría ayudar a mejorar %@ enviando automáticamente informes de fallas y datos de uso anónimos?";
// Crypto
"e2e_enabling_on_app_update" = "Riot ahora admite cifrado de extremo a extremo pero debes volver a iniciar sesión para habilitarlo.\n\nPuedes hacerlo ahora o más tarde desde los ajustes de la aplicación.";
"e2e_enabling_on_app_update" = "Element ahora admite cifrado de extremo a extremo pero debes volver a iniciar sesión para habilitarlo.\n\nPuedes hacerlo ahora o más tarde desde los ajustes de la aplicación.";
"e2e_need_log_in_again" = "Tienes que volver a iniciar sesión para generar claves de cifrado de extremo a extremo para este dispositivo y enviar la clave pública a tu servidor doméstico.\nEsto es por única vez; disculpas por la molestia.";
// Bug report
"bug_report_title" = "Informe de Error";

View file

@ -0,0 +1,6 @@
// Permissions usage explanations
"NSCameraUsageDescription" = "Kaameraga salvestatakse pilte ning videosid ja tehakse videokõnesid.";
"NSPhotoLibraryUsageDescription" = "Fotogaleriid kasutatakse fotode ja videote saatmiseks teistele kasutajatele.";
"NSMicrophoneUsageDescription" = "Mikrofoni kasutatakse videote salvestamisel ning kõnede tegemisel.";
"NSCalendarsUsageDescription" = "Vaata päevakavasse lisatud koosolekuid vastvast rakendusest.";
"NSContactsUsageDescription" = "Selleks, et leida Matrixi võrgu kasutajaid, võib Element saata sinu aadressiraamatus leiduvad e-posti aadressid ja telefoninumbrid sinu valitud Matrixi isikutuvastusserverile. Kui server seda toetab, siis andmed muudetakse enne saatmist räsideks - täpsema teabe leiad oma isikutuvastusserveri privaatsuspoliitikast.";

View file

@ -0,0 +1,63 @@
/* New message from a specific person, not referencing a room */
"MSG_FROM_USER" = "%@ saatis sõnumi";
/* New message from a specific person in a named room */
"MSG_FROM_USER_IN_ROOM" = "%@ kirjutas jututoas %@";
/* New message from a specific person, not referencing a room. Content included. */
"MSG_FROM_USER_WITH_CONTENT" = "%@: %@";
/* New message from a specific person in a named room. Content included. */
"MSG_FROM_USER_IN_ROOM_WITH_CONTENT" = "%@ kirjutas jututoas %@: %@";
/* New action message from a specific person, not referencing a room. */
"IMAGE_FROM_USER" = "%@ saatis pildi %@";
/* A single unread message in a room */
"SINGLE_UNREAD_IN_ROOM" = "Sa said sõnumi jututoas %@";
/* A single unread message */
"SINGLE_UNREAD" = "Sa said sõnumi";
/* Sticker from a specific person, not referencing a room. */
"STICKER_FROM_USER" = "%@ saatis kleepsu";
/* New message indicator on unknown room */
"MESSAGE" = "Sõnum";
/* New message indicator from a DM */
"MESSAGE_FROM_X" = "Sõnum kasutajalt %@";
/* New message indicator on a room */
"MESSAGE_IN_X" = "Sõnum jututoas %@";
/* Multiple unread messages in a room */
"UNREAD_IN_ROOM" = "%@ lugemata sõnumit jututoas %@";
/* Multiple unread messages from a specific person, not referencing a room */
"MSGS_FROM_USER" = "%@ lugemata sõnumit jututoas %@";
/* Multiple unread messages from two people */
"MSGS_FROM_TWO_USERS" = "%@ lugemata sõnumit kasutajatelt %@ ja %@";
/* Multiple unread messages from three people */
"MSGS_FROM_THREE_USERS" = "%@ lugemata sõnumit kasutajatelt %@, %@ ja %@";
/* Multiple unread messages from two plus people (ie. for 4+ people: 'others' replaces the third person) */
"MSGS_FROM_TWO_PLUS_USERS" = "%@ lugemata sõnumit kasutajatelt %@, %@ ja veel teisteltki";
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@ soovib verifitseerida";
/* Message title for a specific person in a named room */
"MSG_FROM_USER_IN_ROOM_TITLE" = "%@ jututoas %@";
/* New action message from a specific person, not referencing a room. */
"ACTION_FROM_USER" = "* %@ %@";
/* New action message from a specific person in a named room. */
"ACTION_FROM_USER_IN_ROOM" = "%@: * %@ %@";
/* New action message from a specific person in a named room. */
"IMAGE_FROM_USER_IN_ROOM" = "%@ saatis pildi %@ jututoas %@";
/* Multiple messages in two rooms */
"MSGS_IN_TWO_ROOMS" = "%@ uut sõnumit jututubades %@ ja %@";
/* Look, stuff's happened, alright? Just open the app. */
"MSGS_IN_TWO_PLUS_ROOMS" = "%@ uut sõnumit %@, %@ ja muudes jututubades";
/* A user has invited you to a chat */
"USER_INVITE_TO_CHAT" = "%@ kutsus sind vestlema";
/* A user has invited you to an (unamed) group chat */
"USER_INVITE_TO_CHAT_GROUP_CHAT" = "%@ kutsus sind rühmavestlusele";
/* A user has invited you to a named room */
"USER_INVITE_TO_NAMED_ROOM" = "%@ kutsus sind %@ jututuppa";
/* Incoming one-to-one voice call */
"VOICE_CALL_FROM_USER" = "Kõne %@'lt";
/* Incoming one-to-one video call */
"VIDEO_CALL_FROM_USER" = "Videokõne %@'lt";
/* Incoming unnamed voice conference invite from a specific person */
"VOICE_CONF_FROM_USER" = "Rühmakõne %@'lt";
/* Incoming unnamed video conference invite from a specific person */
"VIDEO_CONF_FROM_USER" = "Video rühmakõne %@'lt";
/* Incoming named voice conference invite from a specific person */
"VOICE_CONF_NAMED_FROM_USER" = "Rühmakõne %@'lt: \"%@\"";
/* Incoming named video conference invite from a specific person */
"VIDEO_CONF_NAMED_FROM_USER" = "Video rühmakõne %@'lt: \"%@\"";

View file

@ -0,0 +1,692 @@
// String for App Store
"store_short_description" = "Turvalised detsentraliseeritud sõnumid ja VoIP";
// Titles
"title_home" = "Avaleht";
"title_favourites" = "Lemmikud";
"title_people" = "Inimesed";
"title_rooms" = "Jututoad";
"title_groups" = "Kogukonnad";
"warning" = "Hoiatus";
// Actions
"view" = "Näita";
"next" = "Järgmine";
"back" = "Tagasi";
"continue" = "Jätka";
"create" = "Loo";
"start" = "Alusta";
"leave" = "Lahku";
"remove" = "Eemalda";
"invite" = "Kutsu";
"retry" = "Proovi uuesti";
"cancel" = "Loobu";
"save" = "Salvesta";
"join" = "Liitu";
"decline" = "Keeldu";
"accept" = "Võta vastu";
"preview" = "Eelvaade";
"camera" = "Kaamera";
"video" = "Video";
"active_call" = "Kõne on käsil";
"active_call_details" = "Kõne on käsil (%@)";
"later" = "Hiljem";
"rename" = "Muuda nime";
"collapse" = "ahenda";
"send_to" = "Saada kasutajale %@";
"sending" = "Saadan";
"close" = "Sulge";
"skip" = "Jäta vahele";
// Accessibility
"accessibility_checkbox_label" = "märkeruut";
// Authentication
"auth_login" = "Logi sisse";
"auth_register" = "Registreeru";
"auth_submit" = "Saada";
"auth_skip" = "Jäta vahele";
"auth_send_reset_email" = "Saada salasõna taastamise e-kiri";
"auth_return_to_login" = "Mine tagasi sisselogimisekraani juurde";
"auth_user_id_placeholder" = "E-posti aadress või kasutajanimi";
"auth_password_placeholder" = "Salasõna";
"auth_new_password_placeholder" = "Uus salasõna";
"auth_user_name_placeholder" = "Kasutajanimi";
"auth_optional_email_placeholder" = "E-posti aadress (kui soovid)";
"auth_email_placeholder" = "E-posti aadress";
"auth_optional_phone_placeholder" = "Telefoninumber (kui soovid)";
"auth_phone_placeholder" = "Telefoninumber";
"auth_repeat_password_placeholder" = "Korda salasõna";
"auth_repeat_new_password_placeholder" = "Korda uut salasõna";
"auth_home_server_placeholder" = "URL (näiteks https://matrix.org)";
"auth_identity_server_placeholder" = "URL (näiteks https://vector.im)";
"auth_invalid_login_param" = "Vigane kasutajanimi ja/või salasõna";
"auth_invalid_user_name" = "Kasutajanimi võib sisaldada vaid tähti, numbreid, punkte, sidekriipse ja alakriipse";
"auth_invalid_password" = "Salasõna on liiga lühike (nõutav on vähemalt 6 tähemärki)";
"auth_invalid_email" = "See ei tundu olema e-posti aadressi moodi";
"auth_invalid_phone" = "See ei tundu olema telefoninumbri moodi";
"auth_missing_password" = "Salasõna puudub";
"auth_add_email_message_2" = "Seadista oma e-posti aadress taastamaks vajadusel ligipääsu oma kontole. Hiljem saad soovi korral teda kasutada ka selleks, et teised kasutajad saaks sind leida.";
"auth_add_phone_message_2" = "Seadista oma telefoninumber. Hiljem saad soovi korral teda kasutada ka selleks, et teised kasutajad saaks sind leida.";
"auth_add_email_phone_message_2" = "Seadista oma e-posti aadress taastamaks vajadusel ligipääsu oma kontole. Hiljem saad soovi korral e-posti aadressi või telefoninumbrit kasutada ka selleks, et teised kasutajad saaks sind leida.";
"auth_missing_email" = "E-posti aadress on puudu";
"auth_missing_phone" = "Telefoninumber on puudu";
"auth_missing_email_or_phone" = "E-posti aadress või telefoninumber on puudu";
"auth_email_in_use" = "See e-posti aadress on juba kasutusel";
"auth_phone_in_use" = "See telefoninumber on juba kasutusel";
"auth_email_is_required" = "Ühtegi isikutuvastusserverit pole seadistatud ning sul ei ole võimalik lisada oma e-posti aadressi hilisemaks võimalikuks salasõna muutmiseks.";
"auth_phone_is_required" = "Ühtegi isikutuvastusserverit pole seadistatud ning sul ei ole võimalik lisada oma telefoninumbrit hilisemaks võimalikuks salasõna muutmiseks.";
"auth_untrusted_id_server" = "See isikutuvastusserver pole usaldusväärne";
"auth_password_dont_match" = "Salasõnad ei klapi omavahel";
"auth_username_in_use" = "Selline kasutajanimi on juba olemas";
"auth_forgot_password" = "Kas unustasid oma salasõna?";
"auth_forgot_password_error_no_configured_identity_server" = "Ühtegi isikutuvastusserverit pole seadistatud: salasõna taastamiseks määra see.";
"auth_email_not_found" = "E-kirja saatmine ei õnnestunud: sellist e-posti aadressi ei leidu";
"auth_use_server_options" = "Kohandatud serveriseadistused";
"auth_email_validation_message" = "Registreerimise jätkamiseks palun vaata oma e-posti";
"auth_msisdn_validation_title" = "Verifikatsioon on ootel";
"auth_msisdn_validation_message" = "Me oleme SMS'iga saatnud aktiveerimiskoodi. Palun sisesta see kood siia.";
"auth_msisdn_validation_error" = "Telefoninumbri verifitseerimine ei õnnestunud.";
"auth_recaptcha_message" = "See server soovib kindlaks teha, et sa ei ole robot";
"auth_reset_password_message" = "Salasõna taastamiseks sisesta sinu kontoga seotud e-posti aadress:";
"auth_reset_password_missing_email" = "Sa pead sisestama oma kontoga seotud e-posti aadressi.";
"auth_reset_password_missing_password" = "Palun sisesta uus salasõna.";
"auth_reset_password_email_validation_message" = "Saatsime e-kirja %@ aadressile. Kui oled avanud selles kirjas leidunud lingi, siis palun vajuta järgnevat nuppu.";
"auth_reset_password_next_step_button" = "Ma olen teinud läbi oma e-posti aadressi kontrolli";
"auth_reset_password_error_unauthorized" = "E-posti aadressi kontrollimine ei õnnestunud: palun vaata, et sa kindlasti klõpsisid saabunud kirjas olnud viidet";
"auth_reset_password_error_not_found" = "Sinu e-posti aadress ei tundu olema selles koduserveris seotud Matrixi kasutajatunnusega.";
"auth_reset_password_error_is_required" = "Ühtegi isikutuvastusserverit pole seadistatud: salasõna taastamiseks määra see serveri sätetes.";
"auth_reset_password_success_message" = "Sinu salasõna on vahetatud. \n \nSa oled välja logitud kõikidest oma seni kasutusel olnud sessioonidest ega saa enam teateid ega sõnumeid. Nende uuesti lugemiseks palun logi igas seadmes tagasi Matrix'i võrku.";
"auth_add_email_and_phone_warning" = "Registreerimine kasutades korraga nii e-posti aadressi kui ka telefoninumbrit ei ole senise API versiooni puhul veel võimalik. Hetkel läheb arvesse vaid telefoninumber. Sa võid hiljem lisada e-posti aadressi oma kasutajaprofiili seadetest.";
"auth_accept_policies" = "Palun vaata üle kõik selle koduserveri kasutustingimused ja nõustu nendega:";
"auth_autodiscover_invalid_response" = "Vigane koduserveri tuvastamise päringu vastus";
"auth_softlogout_signed_out" = "Sa oled loginud välja";
"auth_softlogout_sign_in" = "Logi sisse";
"auth_softlogout_reason" = "Sinu koduserveri (%1$@) haldur on sind sinu kontolt %2$@ (%3$@) välja loginud.";
"room_participants_ago" = "tagasi";
"room_participants_action_section_admin_tools" = "Haldustoimingud";
"room_participants_action_section_devices" = "Sessioonid";
"room_participants_action_section_other" = "Valikud";
"room_participants_action_section_security" = "Turvalisus";
"room_participants_action_invite" = "Kutsu";
"room_participants_action_leave" = "Lahku sellest jututoast";
"room_participants_action_remove" = "Eemalda sellest jututoast";
"room_participants_action_security_status_verified" = "Verifitseeritud";
"room_participants_action_security_status_verify" = "Verifitseeri";
"room_participants_action_security_status_warning" = "Hoiatus";
"room_participants_action_security_status_loading" = "Laeme…";
"room_participants_security_loading" = "Laeme…";
"room_participants_security_information_room_not_encrypted" = "See jututuba ei ole läbivalt krüptitud.";
"room_participants_security_information_room_encrypted" = "Sõnumid siis jututoas kasutavad läbivat krüptimist.\n\nSinu sõnumid on turvatud ning ainult sinul ja saaja(te)l on unikaalsed võtmed selliste sõnumite lugemiseks.";
// Chat
"room_jump_to_first_unread" = "Mine esimese lugemata sõnumi juurde";
// Room Details
"room_details_title" = "Jututoa üksikasjad";
"room_details_advanced_enable_e2e_encryption" = "Võta krüptimine kasutusele (hoiatus: seda ei saa hiljem enam välja lülitada!)";
"room_details_advanced_e2e_encryption_enabled" = "Krüptimine on selles jututoas kasutusel";
"room_details_advanced_e2e_encryption_disabled" = "Krüptimine ei ole selles jututoas kasutusel.";
"room_details_advanced_e2e_encryption_blacklist_unverified_devices" = "Kasuta krüptimist vaid verifitseeritud sessioonides";
"room_details_fail_to_update_avatar" = "Jututoa foto uuendamine ei õnnestunud";
"room_details_fail_to_update_room_name" = "Jututoa nime uuendamine ei õnnestunud";
"room_details_fail_to_update_topic" = "Teema uuendamine ei õnnestunud";
"room_details_fail_to_update_room_guest_access" = "Jututoa külaliste ligipääsureeglite uuendamine ei õnnestunud";
"room_details_fail_to_update_room_join_rule" = "Liitumisreeglite uuendamine ei õnnestunud";
"room_details_fail_to_update_room_directory_visibility" = "Jututoa loendites nähtavuse uuendamine ei õnnestunud";
"room_details_fail_to_update_history_visibility" = "Ajaloo nähtavuse uuendamine ei õnnestunud";
"room_details_fail_to_add_room_aliases" = "Uue jututoa aadressi lisamine ei õnnestunud";
"room_details_fail_to_remove_room_aliases" = "Jututoa aadressi eemaldamine ei õnnestunud";
"room_details_fail_to_update_room_canonical_alias" = "Põhiaadressi uuendamine ei õnnestunud";
"room_details_fail_to_update_room_communities" = "Seotud kogukondade uuendamine ei õnnestunud";
// Image picker
"image_picker_action_camera" = "Tee foto";
"image_picker_action_library" = "Vali galeriist";
// Directory
"directory_title" = "Kaust";
"directory_server_picker_title" = "Vali kaust";
"directory_server_all_rooms" = "Kõik jututoad %@ serveris";
"key_verification_verified_user_information" = "Sõnumid selle kasutajaga on läbivalt krüptitud ning kolmandad osapooled ei saa neid lugeda.";
// MARK: Emoji
"device_verification_emoji_dog" = "Koer";
"device_verification_emoji_cat" = "Kass";
"device_verification_emoji_lion" = "Lõvi";
"device_verification_emoji_horse" = "Hobune";
"device_verification_emoji_unicorn" = "Ükssarvik";
"device_verification_emoji_pig" = "Siga";
"device_verification_emoji_elephant" = "Elevant";
"device_verification_emoji_rabbit" = "Jänes";
"device_verification_emoji_panda" = "Panda";
"device_verification_emoji_rooster" = "Kukk";
"device_verification_emoji_penguin" = "Pingviin";
"device_verification_emoji_turtle" = "Kilpkonn";
"device_verification_emoji_fish" = "Kala";
"device_verification_emoji_octopus" = "Kaheksajalg";
"device_verification_emoji_butterfly" = "Liblikas";
"device_verification_emoji_flower" = "Lill";
"device_verification_emoji_tree" = "Puu";
"device_verification_emoji_cactus" = "Kaktus";
"device_verification_emoji_mushroom" = "Seen";
"device_verification_emoji_globe" = "Maakera";
"device_verification_emoji_moon" = "Kuu";
"device_verification_emoji_cloud" = "Pilv";
"device_verification_emoji_fire" = "Tuli";
"device_verification_emoji_banana" = "Banaan";
"device_verification_emoji_apple" = "Õun";
"device_verification_emoji_strawberry" = "Maasikas";
"device_verification_emoji_corn" = "Mais";
"device_verification_emoji_pizza" = "Pitsa";
"device_verification_emoji_cake" = "Kook";
"device_verification_emoji_heart" = "Süda";
"device_verification_emoji_smiley" = "Smaili";
"device_verification_emoji_robot" = "Robot";
"device_verification_emoji_hat" = "Müts";
"device_verification_emoji_glasses" = "Prillid";
"device_verification_emoji_spanner" = "Mutrivõti";
"device_verification_emoji_santa" = "Jõuluvana";
"device_verification_emoji_thumbs up" = "Pöidlad püsti";
"device_verification_emoji_umbrella" = "Vihmavari";
"device_verification_emoji_hourglass" = "Liivakell";
"device_verification_emoji_clock" = "Kell";
"device_verification_emoji_gift" = "Kingitus";
"device_verification_emoji_light bulb" = "Lambipirn";
"device_verification_emoji_book" = "Raamat";
"device_verification_emoji_pencil" = "Pliiats";
"device_verification_emoji_paperclip" = "Kirjaklamber";
"device_verification_emoji_scissors" = "Käärid";
"device_verification_emoji_lock" = "Lukk";
"device_verification_emoji_key" = "Võti";
"device_verification_emoji_hammer" = "Haamer";
"device_verification_emoji_telephone" = "Telefon";
"device_verification_emoji_flag" = "Lipp";
"device_verification_emoji_train" = "Rong";
"device_verification_emoji_bicycle" = "Jalgratas";
"device_verification_emoji_aeroplane" = "Lennuk";
"device_verification_emoji_rocket" = "Rakett";
"device_verification_emoji_trophy" = "Auhind";
"device_verification_emoji_ball" = "Pall";
"device_verification_emoji_guitar" = "Kitarr";
"device_verification_emoji_trumpet" = "Trompet";
"device_verification_emoji_bell" = "Kelluke";
"device_verification_emoji_anchor" = "Ankur";
"device_verification_emoji_headphones" = "Kõrvaklapid";
"device_verification_emoji_folder" = "Kaust";
"device_verification_emoji_pin" = "Knopka";
"deactivate_account_forget_messages_information_part2_emphasize" = "Hoiatus";
"deactivate_account_validate_action" = "Kas eemaldame selle konto kasutusest";
"deactivate_account_password_alert_title" = "Eemalda konto";
"deactivate_account_password_alert_message" = "Jätkamiseks palun sisesta oma salasõna";
// MARK: Clients
"client_desktop_name" = "Element Desktop";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"auth_login_single_sign_on" = "Logi sisse ühekordse sisselogimise abil";
// Room recents
"room_recents_directory_section" = "JUTUTUBADE LOEND";
"room_recents_directory_section_network" = "Võrk";
"room_recents_favourites_section" = "LEMMIKUD";
"room_recents_people_section" = "INIMESED";
"room_recents_conversations_section" = "JUTUTOAD";
"room_recents_no_conversation" = "Jututube ei leidu";
"contacts_address_book_permission_denied" = "Sa pole Element'ile andnud ligipääsu kohalikele kontaktidele";
"security_settings_coming_soon" = "Vabandust. See tegevus pole veel kasutatav Element iOS rakenduses. Palun kasuta seadistamiseks mõnda muud Matrix'i klienti ning Element iOS oskab seda kasutada.";
"major_update_title" = "Riot'i uus nimi on Element";
"security_settings_secure_backup_synchronise" = "Sünkroniseeri";
"security_settings_secure_backup_delete" = "Kustuta";
"security_settings_backup" = "SÕNUMITE VARUNDUS";
"security_settings_crosssigning" = "RISTTUNNUSTAMINE";
"security_settings_crosssigning_info_not_bootstrapped" = "Risttunnustamine pole veel seadistatud.";
"security_settings_crosssigning_info_ok" = "Risttunnustamine on kasutusel.";
"security_settings_cryptography" = "KRÜPTOGRAAFIA";
"security_settings_export_keys_manually" = "Ekspordi võtmed käsitsi";
"group_participants_leave_prompt_title" = "Lahku grupist";
"group_participants_leave_prompt_msg" = "Kas sa oled kindel, et soovid grupist lahkuda?";
"group_participants_remove_prompt_title" = "Kinnitus";
"encrypted_room_message_placeholder" = "Saada krüptitud sõnum…";
"encrypted_room_message_reply_to_placeholder" = "Saada krüptitud vastus…";
"room_message_short_placeholder" = "Saada sõnum…";
"room_message_reply_to_short_placeholder" = "Saada vastus…";
"room_offline_notification" = "Ühendus sinu serveriga on katkenud.";
"room_unsent_messages_notification" = "Sõnumid pole saadetud. %@ või %@ nüüd?";
"room_unsent_messages_unknown_devices_notification" = "Kuna leidub tundmatuid sessioone, siis sõnumid pole saadetud. %@ või %@ nüüd?";
"room_ongoing_conference_call" = "Konverentsikõne on käsil. Liitu kas %@ või %@.";
"room_ongoing_conference_call_with_close" = "Konverentsikõne on käsil. Liitu kas %@ või %@. %@ seda.";
"room_ongoing_conference_call_close" = "Sulge";
"room_conference_call_no_power" = "Sul on vaja õigusi, et selles jututoas hallata konverentsikõnet";
"room_prompt_resend" = "Saada kõik uuesti";
"room_prompt_cancel" = "tühista kõik";
"room_resend_unsent_messages" = "Saada saatmata sõnumid uuesti";
"room_delete_unsent_messages" = "Kustuta saatmata sõnumid";
"room_event_action_copy" = "Kopeeri";
"room_event_action_quote" = "Tsiteeri";
"room_event_action_redact" = "Eemalda";
"room_event_action_more" = "Veel";
"room_event_action_share" = "Jaga";
"room_event_action_permalink" = "Püsiviide";
"room_event_action_view_source" = "Vaata lähtekoodi";
"room_event_action_view_decrypted_source" = "Näita dekrüptitud lähtekoodi";
"room_event_action_report" = "Teata kahtlasest sisust";
"room_event_action_resend" = "Saada uuesti";
"room_event_action_delete" = "Kustuta";
"room_event_action_cancel_send" = "Tühista saatmine";
"room_event_action_cancel_download" = "Katkesta allalaadimine";
"room_event_action_view_encryption" = "Teave krüptimise kohta";
"room_event_action_reply" = "Vasta";
"room_event_action_edit" = "Muuda";
"room_event_action_reaction_show_all" = "Näita kõiki";
"room_event_action_reaction_show_less" = "Näita vähem";
"room_event_failed_to_send" = "Saatmine ei õnnestunud";
"room_action_camera" = "Tee foto või video";
"room_action_send_photo_or_video" = "Saada foto või video";
"room_action_send_sticker" = "Saada kleeps";
"room_action_send_file" = "Saada fail";
"room_action_reply" = "Vasta";
"room_replacement_link" = "Vestlus jätkub siin.";
"room_predecessor_information" = "See jututuba on järg varasemale vestlusele.";
"room_predecessor_link" = "Vanemate sõnumite nägemiseks klõpsi siin.";
"room_resource_limit_exceeded_message_contact_1" = " Palun ";
"room_resource_limit_exceeded_message_contact_2_link" = "palun võta ühendust oma teenuse haldajaga";
"room_resource_limit_exceeded_message_contact_3" = " jätkamaks selle teenuse kasutamist.";
"room_resource_usage_limit_reached_message_1_default" = "See koduserver ületanud ühe oma ressursipiirangutest, seega ";
"room_resource_usage_limit_reached_message_1_monthly_active_user" = "See koduserver on saavutanud igakuise aktiivsete kasutajate piiri, seega ";
"room_resource_usage_limit_reached_message_2" = "mõned kasutajad ei saa sisse logida.";
"room_resource_usage_limit_reached_message_contact_3" = " selle piiri suurendamiseks.";
"room_message_edits_history_title" = "Sõnumite muutmised";
"room_accessibility_search" = "Otsing";
"room_accessibility_integrations" = "Lõiminguid";
"room_accessibility_upload" = "Lae üles";
"room_accessibility_call" = "Helista";
"room_accessibility_hangup" = "Lõpeta kõne";
"media_type_accessibility_image" = "Pilt";
"settings_key_backup_info_checking" = "Kontrollin…";
"settings_key_backup_info_none" = "Sinu selle sessiooni krüptovõtmeid ei varundata.";
"settings_key_backup_info_version" = "Võtmete varukoopia versioon: %@";
"settings_key_backup_info_algorithm" = "Algoritm: %@";
"settings_key_backup_info_valid" = "See sessioon varundab sinu krüptovõtmeid.";
"settings_key_backup_info_not_valid" = "See sessioon ei varunda sinu krüptovõtmeid, aga sul on olemas varundus, millest saad taastada ning millele saad võtmeid lisada.";
"settings_key_backup_info_progress" = "Varundan %@ võtmeid…";
"settings_key_backup_info_progress_done" = "Kõik krüptovõtmed on varundatud";
"settings_key_backup_info_trust_signature_unknown" = "Varukoopial on allkiri sessioonilt tunnusega %@";
"settings_key_backup_info_trust_signature_valid" = "Varukoopial on selle sessiooni kehtiv allkiri";
"settings_key_backup_info_trust_signature_valid_device_verified" = "Varukoopial on kehtiv allkiri osapoolelt %@";
"settings_key_backup_info_trust_signature_valid_device_unverified" = "Varukoopial on allkiri osapoolelt %@";
"settings_key_backup_info_trust_signature_invalid_device_verified" = "Varukoopial on vigane allkiri osapoolelt %@";
"settings_key_backup_info_trust_signature_invalid_device_unverified" = "Varukoopial on vigane allkiri osapoolelt %@";
"settings_key_backup_button_create" = "Võta kasutusele krüptovõtmete varundamine";
"settings_key_backup_button_restore" = "Taasta varukoopiast";
"settings_key_backup_button_delete" = "Kustuta varukoopia";
"settings_key_backup_button_connect" = "Seo see sessioon krüptovõtmete varundusega";
"settings_key_backup_delete_confirmation_prompt_title" = "Kustuta varukoopia";
"settings_key_backup_delete_confirmation_prompt_msg" = "Kas sa oled kindel? Kui sul muud varundust pole, siis kaotad ligipääsu oma krüptitud sõnumitele.";
"settings_devices_description" = "Sessiooni avalik nimi on nähtav neile, kellega sa suhtled";
"widget_integration_must_be_in_room" = "Sa ei asu selles jututoas.";
"widget_integration_no_permission_in_room" = "Sinul pole selle toimingu jaoks selles jututoas õigusi.";
"widget_integration_missing_room_id" = "Päringus puudub jututoa tunnus ehk room_id.";
"widget_integration_missing_user_id" = "Päringus puudub kasutaja tunnus ehk user_id.";
"widget_integration_room_not_visible" = "Jututuba %@ ei ole nähtav.";
"widget_integration_manager_disabled" = "Sa peaksid seadistustes kasutusele võtma lõiminguhalduri";
// Widget Picker
"widget_picker_title" = "Lõiminguid";
"widget_picker_manage_integrations" = "Halda lõiminguid…";
// Room widget permissions
"room_widget_permission_title" = "Lae vidin";
"room_widget_permission_creator_info_title" = "Selle vidina lisaja:";
"secure_key_backup_setup_existing_backup_error_title" = "Sõnumite varukoopia on juba olemas";
"secure_key_backup_setup_cancel_alert_title" = "Kas sa oled kindel?";
"secure_backup_setup_banner_title" = "Turvaline varundus";
"secure_backup_setup_banner_subtitle" = "Hoia ära, et kaotad ligipääsu krüptitud sõnumitele ja andmetele";
"key_backup_setup_title" = "Võtmete varundus";
"key_backup_setup_skip_alert_title" = "Kas sa oled kindel?";
"key_backup_setup_skip_alert_skip_action" = "Jäta vahele";
"key_backup_setup_intro_title" = "Ära kunagi kaota krüptitud sõnumeid";
"device_verification_self_verify_wait_new_sign_in_title" = "Verifitseeri see sisselogimissessioon";
"settings_show_decrypted_content" = "Näita krüptitud sisu";
"identity_server_settings_disconnect" = "Katkesta ühendus";
"identity_server_settings_alert_no_terms_title" = "Isikutuvastusserveril puuduvad kasutustingimused";
"identity_server_settings_alert_no_terms" = "Sinu valitud isikutuvastusserveril pole kasutustingimusi. Jätka vaid siis, kui sa usaldad serveri omanikku ja haldajat.";
"identity_server_settings_alert_change_title" = "Muuda isikutuvastusserverit";
"identity_server_settings_alert_change" = "Kas katkestame ühenduse %1$@ isikutuvastusserveriga ning selle asemel loome uue ühenduse serveriga %2$@?";
"identity_server_settings_alert_disconnect_title" = "Katkesta ühendus isikutuvastusserveriga";
"identity_server_settings_alert_disconnect" = "Kas katkestame ühenduse isikutuvastusserveriga %@?";
"identity_server_settings_alert_disconnect_button" = "Katkesta ühendus";
"identity_server_settings_alert_disconnect_still_sharing_3pid" = "Sa jätkuvalt jagad oma isiklikke andmeid isikutuvastusserveriga %@.\n\nMe soovitame, et eemaldad enne ühenduse katkestamist oma e-posti aadressi ja telefoninumbrid isikutuvastusserverist.";
"identity_server_settings_alert_disconnect_still_sharing_3pid_button" = "Ikkagi katkesta ühendus";
"identity_server_settings_alert_error_terms_not_accepted" = "Võtmaks kasutusele %@ isikutuvastusserverit, pead sa nõustuma tema kasutustingimustega.";
"identity_server_settings_alert_error_invalid_identity_server" = "%@ ei ole korrektne isikutuvastusserver.";
"room_details_people" = "Liikmed";
"room_details_files" = "Failid";
"room_details_settings" = "Seadistused";
"room_details_photo" = "Jututoa foto";
"room_details_room_name" = "Jututoa nimi";
"room_details_topic" = "Jututoa teema";
"room_details_favourite_tag" = "Lemmik";
"room_details_low_priority_tag" = "Vähetähtis";
"room_details_mute_notifs" = "Keera teavitused kinni";
"room_details_direct_chat" = "Otsevestlus";
"room_details_access_section" = "Kes pääsevad ligi siia jututuppa?";
"room_details_access_section_invited_only" = "Vaid kutsutud kasutajad";
"room_details_access_section_anyone_apart_from_guest" = "Kõik, kes teavad jututoa viidet, välja arvatud külalised";
"room_details_access_section_anyone" = "Kõik, kes teavad jututoa viidet, kaasa arvatud külalised";
"room_details_access_section_no_address_warning" = "Sellele jututoale viitamiseks peab tal olema aadress";
"room_details_access_section_directory_toggle" = "Näita seda jututuba jututubade kataloogis";
"room_details_history_section" = "Kes võivad lugeda ajalugu?";
"room_details_history_section_anyone" = "Kõik kasutajad";
"room_details_history_section_members_only" = "Ainult liikmetele (alates selle seadistuse kasutuselevõtmisest)";
"room_details_history_section_members_only_since_invited" = "Ainult liikmetele (alates nende kutsumise ajast)";
"room_details_history_section_members_only_since_joined" = "Ainult liikmetele (alates liitumisest)";
"room_details_addresses_section" = "Aadressid";
"room_details_no_local_addresses" = "Sellel jututoal puudub kohalik aadress";
"room_details_new_address" = "Lisa uus aadress";
"room_details_new_address_placeholder" = "Lisa uus aadress (näiteks #torenimi%@)";
"room_details_addresses_invalid_address_prompt_title" = "Vigane aliase vorming";
"room_details_addresses_invalid_address_prompt_msg" = "%@ ei ole lubatud aliase vorming";
"room_details_addresses_disable_main_address_prompt_title" = "Põhiaadressi hoiatus";
"room_details_new_flair_placeholder" = "Uus kogukonna tunnus (näiteks +torekogukond%@)";
"room_details_flair_invalid_id_prompt_title" = "Vigane vorming";
"room_details_flair_invalid_id_prompt_msg" = "%@ ei ole lubatud kogukonna tunnus";
"room_details_banned_users_section" = "Suhtluskeelu saanud kasutajad";
"room_details_advanced_section" = "Lisaseadistused";
"room_details_advanced_room_id" = "Jututoa tunnus:";
"room_details_fail_to_update_room_direct" = "Selle jututoa otsevestluse oleku uuendamine ei õnnestunud";
"room_details_fail_to_enable_encryption" = "Selles jututoas ei õnnestunud krüptimise kasutuselevõtmine";
"room_details_save_changes_prompt" = "Kas sa soovid muutusi salvestada?";
"room_details_set_main_address" = "Määra põhiaadressiks";
"room_details_unset_main_address" = "Eemalda põhiaadressiks määramine";
"room_details_copy_room_id" = "Kopeeri jututoa tunnus";
"room_details_copy_room_address" = "Kopeeri jututoa aadress";
"room_details_copy_room_url" = "Kopeeri jututoa URL";
// Group Details
"group_details_title" = "Kogukonna üksikasjad";
"group_details_home" = "Avaleht";
"group_details_people" = "Inimesed";
"group_details_rooms" = "Jututoad";
// Group Home
"group_home_one_member_format" = "1 liige";
"group_home_multi_members_format" = "%tu liiget";
"group_home_one_room_format" = "1 jututuba";
"group_home_multi_rooms_format" = "%tu jututuba";
"group_invitation_format" = "%@ on kutsunud sind kogukonna liikmeks";
// Group participants
"group_participants_add_participant" = "Lisa uus kogukonna liige";
"group_participants_remove_prompt_msg" = "Kas sa soovid eemaldada %@ sellest kogukonnast?";
"group_participants_invite_prompt_title" = "Kinnitus";
"group_participants_invite_prompt_msg" = "Kas sa oled kindel, et soovid kutsuda %@ selle kogukonna liikmeks?";
"group_participants_filter_members" = "Filtreeri kogukonna liikmeid";
"group_participants_invite_another_user" = "Otsi või kutsu uut kasutajat tema kasutajatunnuse või nime alusel";
"group_participants_invite_malformed_id_title" = "Viga kutse saatmisel";
"group_participants_invite_malformed_id" = "Vigane kasutajatunnus. Õige Matrix'i kasutajatunnus on vormingus '@toreinimene:domeen.ee'";
"group_participants_invited_section" = "KUTSUTUD";
// Group rooms
"group_rooms_filter_rooms" = "Filtreeri kogukonna jututubasid";
"contacts_address_book_matrix_users_toggle" = "Vaid Matrix'i kasutajad";
"contacts_address_book_no_identity_server" = "Isikutuvastusserver ei ole seadistatud";
"contacts_address_book_no_contact" = "Kohalikke kasutajaid ei leidu";
"contacts_address_book_permission_required" = "Kohalikele kasutajatele ligipääsuks on luba vaja";
"contacts_user_directory_section" = "KASUTAJATE LOEND";
"contacts_user_directory_offline_section" = "KASUTAJATE LOEND (ei ole võrgus)";
// Chat participants
"room_participants_title" = "Osalejad";
"room_participants_add_participant" = "Lisa osaleja";
"room_participants_one_participant" = "1 osaleja";
"room_participants_multi_participants" = "%d osalejat";
"room_participants_leave_prompt_title" = "Lahku jututoast";
"room_participants_leave_prompt_msg" = "Kas oled kindel, et soovid lahkuda jututoast?";
"room_participants_remove_prompt_title" = "Kinnitus";
"room_participants_remove_prompt_msg" = "Kas sa oled kindel, et soovid eemaldada %@ vestlusest?";
"room_participants_remove_third_party_invite_prompt_msg" = "Kas sa oled kindel, et soovid tühistada selle kutse?";
"room_participants_invite_prompt_title" = "Kinnitus";
"room_participants_invite_prompt_msg" = "Kas sa oled kindel, et soovid kutsuda %@ vestlusele?";
"room_participants_filter_room_members" = "Filtreeri jututoa liikmeid";
"room_participants_invite_another_user" = "Otsi või kutsu uut kasutajat tema kasutajatunnuse või nime alusel";
"room_participants_invite_malformed_id_title" = "Viga kutse saatmisel";
"room_participants_invite_malformed_id" = "Vigane kasutajatunnus. Peaksid kasutama kas e-posti aadressi või õiget Matrix'i kasutajatunnust vormingus '@toreinimene:domeen.ee'";
"room_participants_invited_section" = "KUTSUTUD";
"room_participants_start_new_chat_error_using_user_email_without_identity_server" = "Ühtegi isikutuvastusserverit pole seadistatud ning sul ei ole võimalik alustada vestlust teise osapoole e-posti aadressi alusel.";
"room_participants_online" = "Võrgus";
"room_participants_offline" = "Võrgust väljas";
"room_participants_unknown" = "Teadmata olek";
"room_participants_idle" = "Jõude";
"room_participants_now" = "praegu";
"room_participants_action_section_direct_chats" = "Otsevestlused";
"room_participants_action_ban" = "Keela ligipääs siia jututuppa";
"room_participants_action_unban" = "Taasta ligipääs";
"room_participants_action_ignore" = "Peida kõik selle kasutaja sõnumid";
"room_participants_action_unignore" = "Näita kõiki selle kasutaja sõnumeid";
"room_participants_action_set_default_power_level" = "Muuda tavakasutajaks";
"room_participants_action_set_moderator" = "Määra moderaatoriks";
"room_participants_action_set_admin" = "Määra peakasutajaks";
"room_participants_action_start_new_chat" = "Alusta uut vestlust";
"room_participants_action_start_voice_call" = "Algata häälkõne";
"room_participants_action_start_video_call" = "Algata videokõne";
"room_participants_action_mention" = "Maini";
"room_member_power_level_admin_in" = "Peakasutaja jututoas %@";
"room_member_power_level_moderator_in" = "Moderaator jututoas %@";
"room_member_power_level_custom_in" = "Kohandatud õigused (%@) jututoas %@";
"room_member_power_level_short_admin" = "Peakasutaja";
"room_member_power_level_short_moderator" = "Moderaator";
"room_member_power_level_short_custom" = "Kohandatud õigused";
"room_accessiblity_scroll_to_bottom" = "Mine lõppu";
"room_new_message_notification" = "%d uus sõnum";
"room_new_messages_notification" = "%d uut sõnumit";
"room_one_user_is_typing" = "%@ kirjutab…";
"room_two_users_are_typing" = "%@ ja %@ kirjutavad…";
"room_many_users_are_typing" = "%@, %@ & teised kirjutavad…";
"room_message_placeholder" = "Saada krüptimata sõnum…";
"room_message_reply_to_placeholder" = "Saada krüptimata vastus…";
"room_message_unable_open_link_error_message" = "Lingi avamine ei õnnestu.";
"room_do_not_have_permission_to_post" = "Sul ei ole õigusi siia jututuppa kirjutamiseks";
"room_event_action_report_prompt_reason" = "Sellest sisust teatamise põhjus";
"room_event_action_kick_prompt_reason" = "Selle kasutaja välja müksamise põhjus";
"room_event_action_ban_prompt_reason" = "Sellele kasutajale suhtluskeelu seadmise põhjus";
"room_event_action_report_prompt_ignore_user" = "Kas sa soovid peita kõik sõnumid selle kasutaja eest?";
"room_event_action_save" = "Salvesta";
"room_event_action_reaction_history" = "Reageerimiste ajalugu";
"room_replacement_information" = "See jututuba on asendatud teise jututoaga ning ei ole enam kasutusel.";
"media_type_accessibility_video" = "Video";
"media_type_accessibility_location" = "Asukoht";
"media_type_accessibility_file" = "Fail";
"media_type_accessibility_sticker" = "Kleeps";
"settings_profile_picture" = "Profiilipilt";
"settings_display_name" = "Kuvatav nimi";
"settings_first_name" = "Eesnimi";
"settings_surname" = "Perenimi";
"settings_remove_prompt_title" = "Kinnitus";
"settings_remove_email_prompt_msg" = "Kas sa oled kindel, et soovid eemaldada e-posti aadressi %@?";
"settings_remove_phone_prompt_msg" = "Kas sa oled kindel, et soovid eemaldada telefoninumbri %@?";
"settings_email_address" = "E-posti aadress";
"settings_email_address_placeholder" = "Sisesta oma e-posti aadress";
"settings_add_email_address" = "Lisa e-posti aadress";
"settings_phone_number" = "Telefon";
"settings_add_phone_number" = "Lisa telefoninumber";
"settings_change_password" = "Muuda salasõna";
"settings_fail_to_update_profile" = "Profiili uuendamine ei õnnestunud";
"settings_global_settings_info" = "Üldised teavituste seadistused leiduvad sinu %@ veebikliendis";
"settings_pin_rooms_with_missed_notif" = "Klammerda jututoad, kus leidub lugemata teavitusi";
"settings_pin_rooms_with_unread" = "Klammerda jututoad, kus leidub lugemata sõnumeid";
"settings_on_denied_notification" = "Teavitused on %@ jaoks keelatud, palun luba nad oma seadme seadistustes";
"settings_enable_callkit" = "Lõimitud helistamine";
"settings_callkit_info" = "Vasta kõnedele lukustuskuvalt. Vaata Element'i kõnesid süsteemi kõnelogist. Kui iCloud on kasutusel, siis kõnede ajalugu jagatakse Applega.";
"settings_calls_stun_server_fallback_button" = "Kasuta kõnehõlbustusserverit";
"settings_calls_stun_server_fallback_description" = "Kui sinu koduserveris on seadistamata kõnehõlbustusserver, siis luba alternatiivina kasutada avalikku serverit %@ (kõne ajal jagatakse temaga nii sinu avalikku, kui privaatvõrgu IP-aadressi).";
"settings_integrations_allow_button" = "Halda lõiminguid";
"settings_integrations_allow_description" = "Kasuta lõiminguhadurit (%@) robotite, võrgusildade, vidinate ja kleepsupakkide seadistamiseks.\n\nLõiminguhalduritel on laiad volitused - nad võivad sinu nimel lugeda seadistusi, kohandada vidinaid, saata jututubade kutseid ning määrata õigusi.";
"settings_ui_language" = "Keel";
"settings_ui_theme" = "Teema";
"settings_ui_theme_auto" = "Vali automaatselt";
"settings_ui_theme_light" = "Hele";
"settings_ui_theme_dark" = "Tume";
"settings_ui_theme_black" = "Must";
"settings_ui_theme_picker_title" = "Vali teema";
"settings_ui_theme_picker_message" = "Automaatne valik kasutab sinu seadme pööratud värvide seadistust";
"settings_unignore_user" = "Kas näitame kõiki kasutaja %@ sõnumeid?";
"settings_contacts_discover_matrix_users" = "Kasuta e-posti aadresse ja telefoninumbreid teiste kasutajate leidmiseks";
"settings_contacts_phonebook_country" = "Telefoniraamatu riik";
"settings_labs_e2e_encryption" = "Läbiv krüptimine";
"settings_labs_e2e_encryption_prompt_message" = "Krüptimise kasutuselevõtmiseks palun logi uuesti sisse.";
"settings_labs_create_conference_with_jitsi" = "Algata rühmakõnesid jitsi vahendusel";
"settings_labs_message_reaction" = "Reageeri sõnumitele emoji'ga";
"settings_version" = "Versioon %@";
"settings_olm_version" = "Olm'i versioon %@";
"settings_copyright" = "Autoriõigused";
"settings_term_conditions" = "Kasutustingimused";
"settings_privacy_policy" = "Privaatsuspoliitika";
"settings_third_party_notices" = "Kolmandate osapoolte litsentsid";
"settings_send_crash_report" = "Saada anonüümset kasutusteavet ning vigade kirjeldusi";
"settings_enable_rageshake" = "Veateate saatmiseks raputa väga kõvasti";
"settings_old_password" = "vana salasõna";
"settings_new_password" = "uus salasõna";
"settings_confirm_password" = "korda uut salasõna";
"settings_fail_to_update_password" = "Salasõna uuendamine ei õnnestunud";
"settings_password_updated" = "Sinu salasõna on muudetud";
"settings_add_3pid_password_title_email" = "Lisa e-posti aadress";
"settings_add_3pid_password_title_msidsn" = "Lisa telefoninumber";
"settings_add_3pid_password_message" = "Jätkamiseks palun sisesta oma salasõna";
"settings_add_3pid_invalid_password_message" = "Vigane kasutajanimi";
"settings_crypto_device_name" = "Sessiooni nimi: ";
"settings_crypto_device_id" = "\nSessiooni tunnus: ";
"settings_crypto_device_key" = "\nSessiooni võti:\n";
"settings_crypto_export" = "Ekspordi võtmed";
"settings_crypto_blacklist_unverified_devices" = "Kasuta krüptimist vaid verifitseeritud sessioonides";
"settings_deactivate_my_account" = "Eemalda minu konto kasutusest";
"security_settings_crypto_sessions_loading" = "Laen sessioone…";
"security_settings_user_password_description" = "Tuvasta oma isik sisestades salasõna";
// Manage session
"manage_session_title" = "Halda sessiooni";
"manage_session_info" = "SESSIOONI TEAVE";
"manage_session_name" = "Sessiooni nimi";
"manage_session_trusted" = "Sinu poolt usaldatud";
"manage_session_not_trusted" = "Ei ole usaldusväärne";
"manage_session_sign_out" = "Logi sellest sessioonist välja";
// Identity server settings
"identity_server_settings_title" = "Isikutuvastusserver";
"identity_server_settings_description" = "Sa hetkel kasutad %@ serverit, et olla leitav ja ise leida sinule teadaolevaid inimesi.";
"identity_server_settings_no_is_description" = "Sa hetkel ei kasuta isikutuvastusserverit. Et olla leitav ja ise leida sinule teadaolevaid inimesi seadista ta ülal.";
"identity_server_settings_place_holder" = "Sisesta isikutuvastusserver";
"identity_server_settings_add" = "Lisa";
"identity_server_settings_change" = "Muuda";
"identity_server_settings_disconnect_info" = "Isikutuvastusserveri kasutamise lõpetamine tähendab, et sa ei ole leitav teiste kasutajate poolt ega sulle ei saa telefoninumbri või e-posti aadressi alusel kutset saata. Küll aga saab kutset saata Matrix'i kasutajatunnuse alusel.";
"room_details_history_section_prompt_msg" = "Kui muudad seda, kes saavad selle jututoa ajalugu lugeda, siis kehtib see vaid tulevaste sõnumite kohta. Senise ajaloo nähtavus sellega ei muutu.";
// Read Receipts
"read_receipts_list" = "Lugemisteatiste loend";
"receipt_status_read" = "Loetud: ";
// Media picker
"media_picker_title" = "Meediateek";
"media_picker_library" = "Failid";
"media_picker_select" = "Vali";
"directory_server_all_native_rooms" = "Kõik Matrix'i jututoad";
"directory_server_type_homeserver" = "Sisesta koduserveri nimi, mille avalike jututubade loendit soovid näha";
"directory_server_placeholder" = "matrix.org";
// Events formatter
"event_formatter_member_updates" = "%tu liikmelisuse muudatused";
"event_formatter_widget_added" = "%@ vidin on lisatud %@ poolt";
"event_formatter_widget_removed" = "%@ vidin on eemaldatud %@ poolt";
"event_formatter_jitsi_widget_added" = "VoIP rühmakõne algatas %@";
"event_formatter_jitsi_widget_removed" = "VoIP rühmakõne lõpetas %@";
"event_formatter_rerequest_keys_part1_link" = "Tee uus krüptovõtmete päring";
"event_formatter_rerequest_keys_part2" = " oma muudest sessioonidest.";
"event_formatter_message_edited_mention" = "(muudetud)";
// Events formatter with you
"event_formatter_widget_added_by_you" = "Sina lisasid vidina %@";
"event_formatter_widget_removed_by_you" = "Sina eemaldasid vidina %@";
"event_formatter_jitsi_widget_added_by_you" = "Sina algatasid VoIP rühmakõne";
"event_formatter_jitsi_widget_removed_by_you" = "Sina eemaldasid VoIP rühmakõne";
// Others
"or" = "või";
"you" = "Sina";
"today" = "Täna";
"yesterday" = "Eile";
"network_offline_prompt" = "Internetiühendus ei tundu hetkel toimima.";
"homeserver_connection_lost" = "Ei saanud ühendust koduserveriga.";
"public_room_section_title" = "Avalikud jututoad (serveris %@):";
"bug_report_prompt" = "See rakendus jooksis viimati kokku. Kas sa tahaksid saata selle kohta veateate?";
"rage_shake_prompt" = "Ma märkan, et pahameelega raputad oma telefoni. Kas sa tahaksid saata veateate?";
"do_not_ask_again" = "Ära küsi uuesti";
"camera_access_not_granted" = "%@ ei oma õigust kaamera kasutamiseks, palun muuda privaatsusseadistusi";
"camera_unavailable" = "Kaamera ei ole sinu seadmes saadaval";
"photo_library_access_not_granted" = "%@ ei oma õigust fotogalerii sirvimiseks, palun muuda privaatsusseadistusi";
"large_badge_value_k_format" = "%.1fK";
"room_does_not_exist" = "%@ ei ole olemas";
// Call
"call_incoming_voice_prompt" = "Saabuv häälkõne kasutajalt %@";
"call_incoming_video_prompt" = "Saabuv videokõne kasutajalt %@";
"call_incoming_voice" = "Saabuv kõne…";
"call_incoming_video" = "Saabuv videokõne…";
"call_already_displayed" = "Kõne on juba pooleli.";
"call_jitsi_error" = "Rühmakõnega liitumine ei õnnestunud.";
"call_no_stun_server_error_title" = "Kõne ebaõnnestus valesti seadistatud serveri tõttu";
"call_no_stun_server_error_message_1" = "Palu oma koduserveri %@ haldajat, et ta seadistaks kõnede kindlamaks toimimiseks TURN serveri.";
"call_no_stun_server_error_message_2" = "Alternatiivina võid sa kasutada avalikku serverit %@, kuid see ei pruugi olla piisavalt töökindel ning sa jagad ka oma IP-aadressi selle serveriga. Täpsemalt saad seda määrata seadistustes";
"call_no_stun_server_error_use_fallback_button" = "Proovi kasutada serverit %@";
// No VoIP support
"no_voip_title" = "Saabuv kõne";
"no_voip" = "%@ helistab sulle, kuid %@ ei toeta veel kõnesid.\nSa võid seda teadet eirata ning vastata kõnele mõnest muust seadmest või kõne sootuks kinni panna.";
"widget_integrations_server_failed_to_connect" = "Ei saanud ühendust lõiminguserveriga";
"widget_no_power_to_manage" = "Sul on vaja õigusi, et selles jututoas hallata vidinaid";
"widget_creation_failure" = "Vidina loomine ei õnnestunud";
"widget_sticker_picker_no_stickerpacks_alert" = "Sul pole hetkel ühtegi kleepsupakki kasutusel.";
"widget_sticker_picker_no_stickerpacks_alert_add_now" = "Kas lisad nüüd mõned?";
"widget_menu_refresh" = "Värskenda";
"widget_menu_open_outside" = "Ava veebibrauseris";
"widget_menu_remove" = "Eemalda kõigilt";
// Widget Integration Manager
"widget_integration_need_to_be_able_to_invite" = "Selle tegevuse jaoks peaks sul olema õigus teistele kasutajatele kutse saatmiseks.";
"widget_integration_unable_to_create" = "Vidina loomine ei õnnestunud.";
"widget_integration_failed_to_send_request" = "Päringu saatmine ei õnnestunud.";
"widget_integration_room_not_recognised" = "Seda jututuba ei õnnestu ära tunda.";
"widget_integration_positive_power_level" = "Õiguste tase peab olema positiivne täisarv.";
"room_widget_permission_display_name_permission" = "Sinu kuvatav nimi";
"room_widget_permission_avatar_url_permission" = "Sinu avatari aadress";
"room_widget_permission_user_id_permission" = "Sinu kasutajatunnus";
"room_widget_permission_theme_permission" = "Sinu teema";
"room_widget_permission_widget_id_permission" = "Vidina tunnus";
"room_widget_permission_room_id_permission" = "Jututoa tunnus";
// Success from passphrase
"key_backup_setup_success_from_passphrase_info" = "Sinu krüptovõtmed on varundatud.\n\nSinu taastevõti toimib turvavõrguna - juhul, kui sa unustad taastamiseks mõeldud paroolifraasi, siis sa saad seda kasutada taastamaks ligipääsu krüptitud sõnumitele.\n\nHoia taastevõtit turvalises kohas, nagu näiteks salasõnahalduris või vana kooli seifis.";
"key_backup_setup_success_from_passphrase_save_recovery_key_action" = "Salvesta taastevõti";
"key_backup_setup_success_from_passphrase_done_action" = "Valmis";
"key_backup_recover_from_passphrase_passphrase_placeholder" = "Sisesta paroolifraas";
"key_backup_recover_from_recovery_key_recovery_key_placeholder" = "Sisesta taastevõti";
"sign_out_key_backup_in_progress_alert_discard_key_backup_action" = "Ma ei soovi lugeda oma krüptitud sõnumeid";
"sign_out_key_backup_in_progress_alert_cancel_action" = "Ma võin oodata";
// MARK: - Device Verification
"key_verification_other_session_title" = "Verifitseeri sessioon";
"key_verification_new_session_title" = "Verifitseeri oma uus sessioon";
"key_verification_this_session_title" = "Verifitseeri see sessioon";
"key_verification_user_title" = "Verifitseeri neid";
"device_verification_security_advice_emoji" = "Võrdle unikaalset emoji'de kombinatsiooni ja vaata et nad oleks samas järjekorras.";
"device_verification_security_advice_number" = "Võrdle numbreid ja vaata et nad oleks samas järjekorras.";
"device_verification_cancelled" = "Teine osapool tühistas verifitseerimise.";
"device_verification_cancelled_by_me" = "Verifitseerimine on tühistatud. Põhjus: %@";
"device_verification_error_cannot_load_device" = "Ei õnnestu laadida sessiooniteavet.";
// Mark: Incoming
"device_verification_incoming_title" = "Saabuv verifitseerimispalve";
"device_verification_incoming_description_1" = "Selle sessiooni usaldamiseks peaksid ta verifitseerima. Kui sa pruugid läbivalt krüptitud sõnumeid, siis partnerite sessioonide verifitseerimine tagab sulle täiendava meelerahu.";
"device_verification_incoming_description_2" = "Selle sessiooni verifitseerimisel loetakse ta usaldusväärseks ning samuti märgitakse sinu sessioon tema jaoks usaldusväärseks.";
// MARK: Start
"device_verification_start_title" = "Verifitseeri lühikese sõne võrdlemise teel";
"device_verification_start_wait_partner" = "Ootan teise osapoole nõustumist…";
"device_verification_start_use_legacy" = "Mitte midagi huvitavat ei paista? Kõik kliendid ei toeta veel interaktiivset verifitseerimist. Selle asemel kasuta vana kooli verifitseerimist.";
"device_verification_start_verify_button" = "Alusta verifitseerimist";
"device_verification_start_use_legacy_action" = "Kasuta vana kooli verifitseerimist";
// New login
"device_verification_self_verify_alert_title" = "Uus sisselogimine. Kas see olid sina?";
"device_verification_self_verify_alert_message" = "Verifitseeri uus kasutajasessioon, mis pruugib sinu kontot: %@";
"device_verification_self_verify_alert_validate_action" = "Verifitseeri";
"device_verification_self_verify_start_verify_action" = "Alusta verifitseerimist";
"device_verification_self_verify_start_information" = "Kasuta seda sessiooni uute sessioonide verifitseerimiseks, andes sellega ligipääsu krüptitud sõnumitele.";
"device_verification_self_verify_start_waiting" = "Ootan…";
"key_verification_self_verify_current_session_alert_title" = "Verifitseeri see sessioon";
"key_verification_self_verify_current_session_alert_message" = "Teised kasutajad ei pruugi seda usaldada.";
"key_verification_self_verify_current_session_alert_validate_action" = "Verifitseeri";
"key_verification_self_verify_unverified_sessions_alert_title" = "Vaata üle, kust sa oled Matrix'i võrku loginud";
"key_verification_self_verify_unverified_sessions_alert_message" = "Selleks et sinu konto ja sõnumid oleks turvatud, verifitseeri kõik oma sessioonid.";
"key_verification_self_verify_unverified_sessions_alert_validate_action" = "Vaata üle";
"key_verification_tile_request_incoming_approval_accept" = "Võta vastu";
"key_verification_tile_request_incoming_approval_decline" = "Keeldu";
"key_verification_tile_conclusion_done_title" = "Verifitseeritud";
"key_verification_incoming_request_incoming_alert_message" = "%@ soovib verifitseerida";
"key_verification_verify_qr_code_title" = "Verifitseeri skaneerides";
"key_verification_verify_qr_code_information" = "Selleks, et üksteist turvaliselt verifitseerida, skaneeri seda QR-koodi.";
"key_verification_verify_qr_code_information_other_device" = "Verifitseerimiseks skaneeri järgnevat koodi:";
"key_verification_verify_qr_code_emoji_information" = "Verifitseeri unikaalsete emoji'de võrdlemise teel.";
"key_verification_verify_qr_code_scan_code_action" = "Skaneeri teise osapoole QR-koodi";
"key_verification_verify_qr_code_cannot_scan_action" = "Kas sa ei saa skaneerida?";
"key_verification_verify_qr_code_start_emoji_action" = "Verifitseeri emoji'de abil";
"key_verification_verify_qr_code_other_scan_my_code_title" = "Kas teisel osapoolel õnnestus QR-koodi skaneerimine?";
"key_verification_verify_qr_code_scan_other_code_success_title" = "Koodid klapivad!";
"key_verification_verify_qr_code_scan_other_code_success_message" = "QR-koodi valideerimine õnnestus.";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "Kamera argazkiak eta bideoak ateratzeko eta bideo deiak egiteko erabiltzen da.";
"NSPhotoLibraryUsageDescription" = "Argazkien liburutegia argazkiak eta bideoak bidaltzeko erabiltzen da.";
"NSMicrophoneUsageDescription" = "Mikrofonoa bideoak atera eta deiak egiteko erabiltzen da.";
"NSContactsUsageDescription" = "Matrix darabilten kontaktuak erakusteko, Riot-ek zure kontaktu liburuko e-mail helbideak eta telefono zenbakiak bidali ditzake hautatutako Matrix identitate-zerbitzarira. Ahal denean datuak hasheatu egiten dira bidali aurretik, egiaztatu zure identitate zerbitzariaren pribatutasun politika xehetasun gehiagorako.";
"NSContactsUsageDescription" = "Matrix darabilten kontaktuak erakusteko, Element-ek zure kontaktu liburuko e-mail helbideak eta telefono zenbakiak bidali ditzake hautatutako Matrix identitate-zerbitzarira. Ahal denean datuak hasheatu egiten dira bidali aurretik, egiaztatu zure identitate zerbitzariaren pribatutasun politika xehetasun gehiagorako.";
"NSCalendarsUsageDescription" = "Ikusi zure programatutako batzarrak aplikazioan.";

View file

@ -27,7 +27,7 @@
"room_details_low_priority_tag" = "Lehentasun baxua";
"people_no_conversation" = "Elkarrizketarik ez";
"contacts_address_book_no_contact" = "Gailuko kontakturik ez";
"contacts_address_book_permission_denied" = "Ez diozu baimena eman Riot aplikazioari zure gailuko kontaktuak atzitzeko";
"contacts_address_book_permission_denied" = "Ez diozu baimena eman Element aplikazioari zure gailuko kontaktuak atzitzeko";
"search_no_result" = "Emaitzarik ez";
"room_recents_no_conversation" = "Gelarik ez";
// Rooms tab
@ -195,7 +195,7 @@
// Directory
"directory_title" = "Direktorioa";
// Crypto
"e2e_enabling_on_app_update" = "Riotek orain muturretik muturrerako zifratzea onartzen du baina berriro hasi behar duzu saioa hau gaitzeko.\n\nOrain egin dezakezu edo gero aplikazioaren ezarpenetatik.";
"e2e_enabling_on_app_update" = "Elementek orain muturretik muturrerako zifratzea onartzen du baina berriro hasi behar duzu saioa hau gaitzeko.\n\nOrain egin dezakezu edo gero aplikazioaren ezarpenetatik.";
// Unknown devices
"unknown_devices_alert_title" = "Gelan saio ezezagunak daude";
"directory_server_type_homeserver" = "Idatzi hasiera zerbitzari bat honen gela publikoak zerrendatzeko";
@ -343,11 +343,8 @@
"settings_labs_e2e_encryption_prompt_message" = "Zifratzea ezartzen bukatzeko saioa berriro hasi behar duzu.";
"settings_version" = "%@ bertsioa";
"settings_olm_version" = "%@ Olm bertsioa";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Termino eta baldintzak";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Pribatutasun politika";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Hirugarrengoen adierazpenak";
"settings_send_crash_report" = "Bidali kraskatze eta erabilera datu anonimoak";
"settings_crypto_device_name" = "Saioaren izena: ";
@ -435,7 +432,7 @@
"settings_calls_settings" = "DEIAK";
"settings_show_decrypted_content" = "Erakutsi deszifratutako edukia";
"settings_enable_callkit" = "Dei integratuak";
"settings_callkit_info" = "Jaso deiak zure blokeo-pantailan. Ikusi Riot deiak sistemaren deian historialean. Cloud gaituta badago, deien historiala Apple-ekin partekatuko da.";
"settings_callkit_info" = "Jaso deiak zure blokeo-pantailan. Ikusi Element deiak sistemaren deian historialean. Cloud gaituta badago, deien historiala Apple-ekin partekatuko da.";
"settings_ui_theme" = "Azala";
"settings_ui_theme_auto" = "Automatikoa";
"settings_ui_theme_light" = "Argia";
@ -538,7 +535,7 @@
"event_formatter_rerequest_keys_part2" = " zure beste saioetatik.";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Eskaria bidalita";
"rerequest_keys_alert_message" = "Abiatu Riot mezua deszifratu dezakeen beste gailuren batean handik hona gakoak bidali ahal izateko.";
"rerequest_keys_alert_message" = "Abiatu Element mezua deszifratu dezakeen beste gailuren batean handik hona gakoak bidali ahal izateko.";
"room_message_reply_to_placeholder" = "Bidali erantzun bat (zifratu gabea)…";
"encrypted_room_message_reply_to_placeholder" = "Bidali zifratutako erantzun bat…";
"room_message_reply_to_short_placeholder" = "Bidali erantzun bat…";
@ -659,7 +656,7 @@
"key_backup_setup_intro_manual_export_action" = "Esportatu gakoak eskuz";
// String for App Store
"store_short_description" = "Deszentralizatutako txat/VoIP segurua";
"store_full_description" = "Komunikatu, zure erara.\n\nTxat aplikazio bat, zure kontrolpean eta erabat malgua. Riot-ek zuk nahi eran komunikatzea ahalbidetzen dizu. Komunikaziorako estandar ireki eta deszentralizatua den [matrix] protokolorako egina.\n\nEskuratu matrix.org kontu bat, ezarri zure zerbitzaria https://modular.im erabiliz, edo erabili beste Matrix zerbitzari bat.\n\nZertgatik aukeratu Riot.im?\n\nERABATEKO KOMUNIKAZIOA: Sortu zure taldeentzako gelak, zure lagunentzko, zure komunitatearentzat, zuk nahi eran! Txateatu, partekatu fitxategiak, gehitu trepetak eta egin ahots eta bideo-deiak, dena doan.\n\nINTEGRAZIO AHALTSUAK: Erabili Riot.im jada ezagutu eta maite dituzun tresnekin. Riot.im erabilita beste txat aplikazioak erabiltzen dituzten erabiltzaile eta taldeekin ere aritu zaitezke.\n\nPRIBATUA ETA SEGURUA: Mantendu zure elkarrizketak sekretupean. Gaur egungo muturretik muturrerako zifratzeak pribatua dena pribatu mantentzen laguntzen du.\n\nIREKIA, EZ ITXIA: Kode irekikoa, eta Matrix protokoloan eraikia. Izan zure datuen jabe zure zerbitzaria osatatauz, edo fidagarritzat duzun bat aukeratuz.\n\nZUREKIN NONAHI: Mantendu kontaktua zauden tokian zaudela gailuetan zehar erabat sinkronizatutako mezuen historialarekin, eta web bidez https://riot.im helbidean.";
"store_full_description" = "Komunikatu, zure erara.\n\nTxat aplikazio bat, zure kontrolpean eta erabat malgua. Element-ek zuk nahi eran komunikatzea ahalbidetzen dizu. Komunikaziorako estandar ireki eta deszentralizatua den [matrix] protokolorako egina.\n\nEskuratu matrix.org kontu bat, ezarri zure zerbitzaria https://ems.element.io erabiliz, edo erabili beste Matrix zerbitzari bat.\n\nZertgatik aukeratu Element?\n\nERABATEKO KOMUNIKAZIOA: Sortu zure taldeentzako gelak, zure lagunentzko, zure komunitatearentzat, zuk nahi eran! Txateatu, partekatu fitxategiak, gehitu trepetak eta egin ahots eta bideo-deiak, dena doan.\n\nINTEGRAZIO AHALTSUAK: Erabili Element jada ezagutu eta maite dituzun tresnekin. Element erabilita beste txat aplikazioak erabiltzen dituzten erabiltzaile eta taldeekin ere aritu zaitezke.\n\nPRIBATUA ETA SEGURUA: Mantendu zure elkarrizketak sekretupean. Gaur egungo muturretik muturrerako zifratzeak pribatua dena pribatu mantentzen laguntzen du.\n\nIREKIA, EZ ITXIA: Kode irekikoa, eta Matrix protokoloan eraikia. Izan zure datuen jabe zure zerbitzaria osatatauz, edo fidagarritzat duzun bat aukeratuz.\n\nZUREKIN NONAHI: Mantendu kontaktua zauden tokian zaudela gailuetan zehar erabat sinkronizatutako mezuen historialarekin, eta web bidez https://app.element.io helbidean.";
"auth_login_single_sign_on" = "Hasi saioa Single sign-on bidez";
"auth_autodiscover_invalid_response" = "Erantzun baliogabea hasiera-zerbitzarien bilaketari";
"room_message_unable_open_link_error_message" = "Ezin izan da esteka ireki.";
@ -1024,13 +1021,13 @@
// Recover from private key
"key_backup_recover_from_private_key_info" = "Babes-kopia berrezartzen…";
"device_verification_self_verify_wait_title" = "Segurtasun osoa";
"device_verification_self_verify_wait_information" = "Egiaztatu saio hau zure beste saio batetik, honela mezu zifratuetara sarbidea emanez.\n\nErabili azken Riot bertsioa zure beste gailuetan:";
"device_verification_self_verify_wait_information" = "Egiaztatu saio hau zure beste saio batetik, honela mezu zifratuetara sarbidea emanez.\n\nErabili azken Element bertsioa zure beste gailuetan:";
"device_verification_self_verify_wait_waiting" = "Itxaroten…";
// MARK: Clients
"client_desktop_name" = "Riot Desktop";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X Androidentzat";
"client_desktop_name" = "Element Desktop";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Androidentzat";
"room_participants_action_security_status_complete_security" = "Segurtasun osoa";
"security_settings_crosssigning_info_not_bootstrapped" = "Zeharkako sinadura ez dago ezarrita.";
"security_settings_crosssigning_info_exists" = "Zure kontuak zeharkako sinatze identitate bat du biltegi sekretuan, baina saio honek ez du oraindik fidagarritzat. Osatu saio honen segurtasuna.";
@ -1041,7 +1038,7 @@
"security_settings_crosssigning_complete_security" = "Segurtasun osoa";
"security_settings_complete_security_alert_title" = "Segurtasun osoa";
"security_settings_complete_security_alert_message" = "Aurretik segurtasuna osatu beharko zenuke oraingo saioan.";
"security_settings_coming_soon" = "Sentitzen dugu. Ekintza hau ez dago iOS plataformarako Riot bezeroan eskuragarri oraindik. Erabili beste Matrix bezero bat ezartzeko. Riot-iOS-ek erabili egingo du.";
"security_settings_coming_soon" = "Sentitzen dugu. Ekintza hau ez dago iOS plataformarako Element bezeroan eskuragarri oraindik. Erabili beste Matrix bezero bat ezartzeko. Element iOS-ek erabili egingo du.";
"device_verification_self_verify_wait_new_sign_in_title" = "Egiaztatu saio hau";
"device_verification_self_verify_wait_additional_information" = "edo zeharkako sinadurarako gai den beste Matrix bezero bat";
// Scanning

View file

@ -46,3 +46,6 @@
// Directory
"directory_title" = "Luettelo";
"directory_server_picker_title" = "Valitse luettelo";
"major_update_title" = "Riot on nyt Element";
"major_update_learn_more_action" = "Lue lisää";
"major_update_done_action" = "Selvä";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "L'appareil photo est utilisé pour prendre des photos et des vidéos et pour passer des appels vidéo.";
"NSPhotoLibraryUsageDescription" = "La photothèque est utilisée pour envoyer des photos et des vidéos.";
"NSMicrophoneUsageDescription" = "Le microphone est utilisé pour prendre des vidéos et passer des appels.";
"NSContactsUsageDescription" = "Pour découvrir vos contacts qui utilisent déjà Matrix, Riot peut envoyer les adresses e-mails et les numéros de téléphone de votre carnet dadresse à votre serveur didentité Matrix. Si votre serveur didentité le prend en charge, les données personnelles sont hachées avant lenvoi  vérifiez sa politique de vie privée pour plus de détails.";
"NSContactsUsageDescription" = "Pour découvrir vos contacts qui utilisent déjà Matrix, Element peut envoyer les adresses e-mails et les numéros de téléphone de votre carnet dadresse à votre serveur didentité Matrix. Si votre serveur didentité le prend en charge, les données personnelles sont hachées avant lenvoi  vérifiez sa politique de vie privée pour plus de détails.";
"NSCalendarsUsageDescription" = "Voir vos rendez-vous prévus dans lapplication.";

View file

@ -55,3 +55,9 @@
/* Sticker from a specific person, not referencing a room. */
"STICKER_FROM_USER" = "%@ a envoyé un sticker";
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@ veut vérifier";
/* New message indicator on unknown room */
"MESSAGE" = "Message";
/* New message indicator from a DM */
"MESSAGE_FROM_X" = "Message de %@";
/* New message indicator on a room */
"MESSAGE_IN_X" = "Message dans %@";

View file

@ -140,7 +140,7 @@
"contacts_address_book_matrix_users_toggle" = "Utilisateurs Matrix uniquement";
"contacts_address_book_no_contact" = "Aucun contact local";
"contacts_address_book_permission_required" = "Permissions requises pour accéder aux contacts locaux";
"contacts_address_book_permission_denied" = "Vous n'avez pas autorisé Riot à accéder à vos contacts locaux";
"contacts_address_book_permission_denied" = "Vous n'avez pas autorisé Element à accéder à vos contacts locaux";
"contacts_user_directory_section" = "RÉPERTOIRE UTILISATEURS";
"contacts_user_directory_offline_section" = "RÉPERTOIRE UTILISATEURS (hors-ligne)";
// Chat participants
@ -288,11 +288,8 @@
"settings_version" = "Version %@";
"settings_olm_version" = "Version de olm %@";
"settings_copyright" = "Droits d'auteur";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Termes et conditions";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Politique de confidentialité";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Licences tierces";
"settings_send_crash_report" = "Envoyer des rapports d'erreur anonymes et des statistiques d'utilisation";
"settings_enable_rageshake" = "Secouer l'appareil pour signaler un bug";
@ -427,7 +424,7 @@
// Crash report
"google_analytics_use_prompt" = "Souhaitez-vous aider à améliorer %@ en envoyant automatiquement des rapports d'erreur et des statistiques d'utilisation ?";
// Crypto
"e2e_enabling_on_app_update" = "Riot prend désormais en charge le chiffrement de bout en bout, mais vous devez vous reconnecter pour l'activer.\n\nVous pouvez le faire maintenant ou plus tard à partir des paramètres de l'application.";
"e2e_enabling_on_app_update" = "Element prend désormais en charge le chiffrement de bout en bout, mais vous devez vous reconnecter pour l'activer.\n\nVous pouvez le faire maintenant ou plus tard à partir des paramètres de l'application.";
"e2e_need_log_in_again" = "Vous devez vous reconnecter pour générer les clés de chiffrement de bout en bout pour cette session et envoyer la clé publique vers votre serveur daccueil.\nCeci ne se produira quune fois. Veuillez nous excuser pour ce désagrément.";
// Bug report
"bug_report_title" = "Rapport d'erreur";
@ -488,7 +485,7 @@
"settings_calls_settings" = "APPELS";
"settings_show_decrypted_content" = "Afficher les messages chiffrés en clair";
"settings_enable_callkit" = "Appels intégrés";
"settings_callkit_info" = "Recevez les appels entrants sur votre écran de verrouillage. Voir vos appels Riot dans l'historique des appels du système. Si iCloud est activé, cet historique d'appels sera partagé avec Apple.";
"settings_callkit_info" = "Recevez les appels entrants sur votre écran de verrouillage. Voir vos appels Element dans l'historique des appels du système. Si iCloud est activé, cet historique d'appels sera partagé avec Apple.";
"event_formatter_widget_added" = "Widget %@ ajoutée par %@";
"event_formatter_widget_removed" = "Widget %@ supprimée par %@";
// Share extension
@ -536,7 +533,7 @@
"event_formatter_rerequest_keys_part2" = " depuis vos autres sessions.";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Demande envoyée";
"rerequest_keys_alert_message" = "Lancez Riot sur un autre appareil qui peut déchiffrer le message pour quil puisse envoyer les clés à cette session.";
"rerequest_keys_alert_message" = "Lancez Element sur un autre appareil qui peut déchiffrer le message pour quil puisse envoyer les clés à cette session.";
"room_message_reply_to_placeholder" = "Envoyer une réponse (non chiffrée)…";
"encrypted_room_message_reply_to_placeholder" = "Envoyer une réponse chiffrée…";
"room_message_reply_to_short_placeholder" = "Envoyer une réponse…";
@ -671,7 +668,7 @@
"key_backup_setup_intro_manual_export_action" = "Exporter les clés manuellement";
// String for App Store
"store_short_description" = "Discussions et appels sécurisés et décentralisés";
"store_full_description" = "Communiquez, à votre façon.\n\nUne application de discussion, que vous contrôlez et entièrement flexible. Riot vous laisse communiquer comme vous le souhaitez. Conçu pour [matrix], le standard pour les communications libres et décentralisées.\n\nCréez un compte matrix.org gratuit, gérez votre propre serveur sur https://modular.im ou utilisez un autre serveur Matrix.\n\nPourquoi choisir Riot.im ?\n\n• COMMUNICATION COMPLÈTE : Construisez des salons autours de vos équipes, de vos amis, de votre communauté comme vous le souhaitez ! Discutez, partagez des fichiers, ajoutez des widgets et passez des appels audio et vidéo gratuitement.\n\n• INTÉGRATIONS PUISSANTES : Utilisez Riot.im avec les outils que vous connaissez déjà. Avec Riot.im vous pouvez même discuter avec les utilisateurs et les groupes qui utilisent d'autres applications de discussion.\n\n• PRIVÉ ET SÉCURISÉ : Gardez vos conversations secrètes. Un chiffrement de bout en bout de pointe vous garanti que vos communications privées restent privées.\n\n• OUVERT, PAS FERMÉ : Open source, et construit autour de Matrix. Restez en possession de vos données en hébergeant votre propre serveur, ou choisissez celui auquel vous faites confiance.\n\n• PARTOUT OÙ VOUS ÊTES : Restez en contact où que vous soyez avec la synchronisation complète de l'historique de vos messages entre vos différents appareils et en ligne sur https://riot.im.";
"store_full_description" = "Communiquez, à votre façon.\n\nUne application de discussion, que vous contrôlez et entièrement flexible. Element vous laisse communiquer comme vous le souhaitez. Conçu pour [matrix], le standard pour les communications libres et décentralisées.\n\nCréez un compte matrix.org gratuit, gérez votre propre serveur sur https://ems.element.io ou utilisez un autre serveur Matrix.\n\nPourquoi choisir Element ?\n\n• COMMUNICATION COMPLÈTE : Construisez des salons autours de vos équipes, de vos amis, de votre communauté comme vous le souhaitez ! Discutez, partagez des fichiers, ajoutez des widgets et passez des appels audio et vidéo gratuitement.\n\n• INTÉGRATIONS PUISSANTES : Utilisez Element avec les outils que vous connaissez déjà. Avec Element vous pouvez même discuter avec les utilisateurs et les groupes qui utilisent d'autres applications de discussion.\n\n• PRIVÉ ET SÉCURISÉ : Gardez vos conversations secrètes. Un chiffrement de bout en bout de pointe vous garanti que vos communications privées restent privées.\n\n• OUVERT, PAS FERMÉ : Open source, et construit autour de Matrix. Restez en possession de vos données en hébergeant votre propre serveur, ou choisissez celui auquel vous faites confiance.\n\n• PARTOUT OÙ VOUS ÊTES : Restez en contact où que vous soyez avec la synchronisation complète de l'historique de vos messages entre vos différents appareils et en ligne sur https://app.element.io.";
"auth_login_single_sign_on" = "Se connecter avec l'authentification unique";
"room_message_unable_open_link_error_message" = "Impossible douvrir le lien.";
"auth_autodiscover_invalid_response" = "Réponse de découverte du serveur daccueil non valide";
@ -1031,7 +1028,7 @@
"device_verification_self_verify_start_waiting" = "En attente…";
"skip" = "Passer";
"device_verification_self_verify_wait_title" = "Compléter la sécurité";
"device_verification_self_verify_wait_information" = "Vérifiez cette session depuis une de vos autres sessions, ce qui lui permettra davoir accès aux messages chiffrés.\n\nUtilisez la dernière version de Riot sur vos autres appareils :";
"device_verification_self_verify_wait_information" = "Vérifiez cette session depuis une de vos autres sessions, ce qui lui permettra davoir accès aux messages chiffrés.\n\nUtilisez la dernière version de Element sur vos autres appareils :";
"device_verification_self_verify_wait_waiting" = "En attente…";
"room_member_power_level_admin_in" = "Administrateur dans %@";
"room_member_power_level_moderator_in" = "Modérateur dans %@";
@ -1059,12 +1056,12 @@
"security_settings_crosssigning_complete_security" = "Compléter la sécurité";
"security_settings_complete_security_alert_title" = "Compléter la sécurité";
"security_settings_complete_security_alert_message" = "Vous devriez dabord compléter la sécurité de votre session actuelle.";
"security_settings_coming_soon" = "Désolé, cette action nest pas encore disponible dans Riot-iOS. Utilisez un autre client Matrix pour le configurer. Riot-iOS lutilisera.";
"security_settings_coming_soon" = "Désolé, cette action nest pas encore disponible dans Element iOS. Utilisez un autre client Matrix pour le configurer. Element iOS lutilisera.";
// MARK: Clients
"client_desktop_name" = "Riot pour ordinateur";
"client_web_name" = "Riot web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X pour Android";
"client_desktop_name" = "Element pour ordinateur";
"client_web_name" = "Element web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"device_verification_self_verify_wait_new_sign_in_title" = "Vérifier cette connexion";
"device_verification_self_verify_wait_additional_information" = "ou un autre client Matrix qui prend en charge la signature croisée";
// MARK: - Device Verification

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "A kamera fényképek, videók készítéséhez és videóhívásokhoz lesz használva.";
"NSPhotoLibraryUsageDescription" = "A fénykép galéria fényképek és videók küldéséhez lesz használva.";
"NSMicrophoneUsageDescription" = "A mikrofon videók készítéséhez és hívásokhoz lesz használva.";
"NSContactsUsageDescription" = "Az olyan ismerősök felderítéséhez akik már használják a Matrixot, Riot el tudja küldeni a címjegyzékben található e-mail címeket és telefonszámokat az általad választott Matrix azonosítási szervernek. Ahol lehetséges a személyes adatok hash-elve lesznek - kérlek ellenőrizd az azonosítási szervered adatvédelmi szabályait.";
"NSContactsUsageDescription" = "Az olyan ismerősök felderítéséhez akik már használják a Matrixot, Elementet el tudja küldeni a címjegyzékben található e-mail címeket és telefonszámokat az általad választott Matrix azonosítási szervernek. Ahol lehetséges a személyes adatok hash-elve lesznek - kérlek ellenőrizd az azonosítási szervered adatvédelmi szabályait.";
"NSCalendarsUsageDescription" = "Nézd meg a találkozóidat az alkalmazásban.";

View file

@ -55,3 +55,9 @@
/* Sticker from a specific person, not referencing a room. */
"STICKER_FROM_USER" = "%@ matricát küldött";
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@ ellenőrizni szeretné";
/* New message indicator on unknown room */
"MESSAGE" = "Üzenet";
/* New message indicator from a DM */
"MESSAGE_FROM_X" = "Üzenet tőle: %@";
/* New message indicator on a room */
"MESSAGE_IN_X" = "Üzenet itt: %@";

View file

@ -151,7 +151,7 @@
"contacts_address_book_matrix_users_toggle" = "Csak Matrix felhasználók";
"contacts_address_book_no_contact" = "Nincsenek helyi ismerősök";
"contacts_address_book_permission_required" = "Jogosultság szükséges a helyi névjegyzék eléréséhez";
"contacts_address_book_permission_denied" = "Nem engedted meg, hogy a Riot hozzáférjen a helyi névjegyzékhez";
"contacts_address_book_permission_denied" = "Nem engedted meg, hogy az Element hozzáférjen a helyi névjegyzékhez";
"contacts_user_directory_section" = "FELHASZNÁLÓI KÖNYVTÁR";
"contacts_user_directory_offline_section" = "FELHASZNÁLÓI KÖNYVTÁR (kapcsolat nélküli)";
// Chat participants
@ -314,7 +314,7 @@
"settings_pin_rooms_with_unread" = "Szobák kitűzése olvasatlan üzenetekkel";
"settings_on_denied_notification" = "Az értesítések tiltva vannak ehhez: %@, kérlek engedélyezd az eszköz beállításaiban";
"settings_enable_callkit" = "Beépített hívás";
"settings_callkit_info" = "Hívások fogadása a zárolt képernyőn. Riot hívások megjelenítése a rendszer hívás naplójában. Ha az iCloud engedélyezett akkor a hívásnapló az Apple-el megosztásra kerül.";
"settings_callkit_info" = "Hívások fogadása a zárolt képernyőn. Element hívások megjelenítése a rendszer hívás naplójában. Ha az iCloud engedélyezett akkor a hívásnapló az Apple-el megosztásra kerül.";
"settings_ui_language" = "Nyelv";
"settings_ui_theme" = "Téma";
"settings_ui_theme_auto" = "Autó";
@ -334,11 +334,8 @@
"settings_version" = "Verzió %@";
"settings_olm_version" = "Olm verzió %@";
"settings_copyright" = "Szerzői jog";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Felhasználási feltételek";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Adatvédelmi szabályok";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Harmadik fél jegyzetek";
"settings_send_crash_report" = "Személytelen összeomlás és felhasználási adatok küldése";
"settings_enable_rageshake" = "Eszköz megrázása a hiba bejelentéséhez";
@ -495,7 +492,7 @@
// Crash report
"google_analytics_use_prompt" = "Szeretnél segíteni személytelen összeomlás és felhasználási adatok küldésével a(z) %@ fejlesztésében?";
// Crypto
"e2e_enabling_on_app_update" = "Riot most már támogatja a végponttól végpontig titkosítást de újra be kell jelentkezned.\n\nMegteheted most vagy később az alkalmazás beállításainál.";
"e2e_enabling_on_app_update" = "Element most már támogatja a végponttól végpontig titkosítást de újra be kell jelentkezned.\n\nMegteheted most vagy később az alkalmazás beállításainál.";
"e2e_need_log_in_again" = "Vissza kell jelentkezned, hogy a munkamenetedhez a végponttól végpontig titkosítási kulcsokat létrehozzuk és a nyilvános kulcsokat elküldjük a Matrix szerverednek.\nEz egy egyszeri alkalom; elnézést a kellemetlenségért.";
// Bug report
"bug_report_title" = "Hiba bejelentés";
@ -551,7 +548,7 @@
"deactivate_account_password_alert_message" = "A folytatáshoz add meg a jelszavadat";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Kérés elküldve";
"rerequest_keys_alert_message" = "Kérlek indítsd el a Riot-ot egy másik eszközödön amelyik vissza tudja fejteni az üzenetet, hogy el tudja küldeni a kulcsokat ennek a munkamenetnek.";
"rerequest_keys_alert_message" = "Kérlek indítsd el a Elementet egy másik eszközödön amelyik vissza tudja fejteni az üzenetet, hogy el tudja küldeni a kulcsokat ennek a munkamenetnek.";
"room_recents_server_notice_section" = "RENDSZER FIGYELMEZTETÉSEK";
"room_resource_limit_exceeded_message_contact_1" = " Kérlek ";
"room_resource_limit_exceeded_message_contact_2_link" = "vedd fel a kapcsolatot a szolgáltatás adminisztrátorával";
@ -678,7 +675,7 @@
"store_short_description" = "Biztonságos elosztott csevegés/VoIP";
"auth_login_single_sign_on" = "Bejelentkezés egyszeri bejelentkezéssel";
"room_message_unable_open_link_error_message" = "A linket nem lehet megnyitni.";
"store_full_description" = "Beszélgess, ahogy tetszik.\n\nA csevegő alkalmazás ami személyre szabható és az irányításod alatt marad. Riot megteremti a lehetőséget, hogy úgy beszélgess ahogy szeretnél. A [matrix] hálózathoz tervezve - ami egy nyílt és elosztott hálózat.\n\nKészíts egy ingyenes matrix.org fiókot vagy igényelj egy saját szervert a https://modular.im -től, de üzemeltethetsz is saját Matrix szervert.\n\nMiért válaszd a Riot.im-et?\n\nTELJES KOMMUNIKÁCIÓ: Nyiss szobákat a csoportod, barátaid, közösséged vagy bárkiknek akiknek szeretnél! Beszélgess, ossz meg fájlokat, adj hozzá kisalkalmazásokat és indíts hang és videóhívásokat - teljesen ingyen.\n\nERŐS KAPCSOLATOK: Használd a Riot-ot a kedvenc eszközeiddel. A Riottal még másik rendszerekben lévő emberekkel és csoportokkal is képes lehetsz beszélgetni.\n\nSZEMÉLYES ÉS BIZTONSÁGOS: Tartsd a beszélgetéseidet titokban. A végponttól-végpontig titkosítás biztosítja, hogy a személyes beszélgetések személyesek maradnak.\n\nNYÍLT ÉS NEM ZÁRT: Nyílt forrású és a Matrix-hoz készült. Az adataid maradjanak a birtokodban a saját szerver üzemeltetésével vagy válassz olyan szervert amiben megbízol.\n\nMINDENHOL AMERRE JÁRSZ: Maradj kapcsolatban a többiekkel mindenhol az eszközeid közötti teljesen szinkronizált üzenetváltásokkal. Akár a https://riot.im -en.";
"store_full_description" = "Element egy újfajta csevegő és együttműködést segítő alkalmazás ami:\n\n1. Visszaadja az irányítást neked, hogy megvédd a magánéleted információit\n2. Lépj kapcsolatba bárkivel a Matrix hálózatban, és azon túl alkalmazások integrálásával mint amilyen például a slack\n3. Megvéd a hirdetőktől, adatbányászoktól, hátsó kapuktól és fallal védett rendszerektől\n4. Végpontok közötti titkosítással véd, ahol egymás személyazonosságát ellenőrizhetitek\n\nElement a többi üzenetküldő és kollaborációs alkalmazástól teljesen eltérő abban a tekintetben, hogy elosztott és nyílt forrású rendszer.\n\nElement megengedi, hogy saját magadnak üzemeltess szervert vagy válassz szervert tetszés szerint - így biztonságban vagy te vagy a tulajdonosa az üzeneteidnek és te irányítod az adatokat és a beszélgetéseket. Egy nyílt hálózathoz enged hozzáférést; tehát nem csak más Element felhasználókkal beszélgethetsz. És nagyon biztonságos.\n\nElement mindezt a Matrix miatt tudja ami egy szabványos nyílt és elosztott kommunikációs rendszer.\n\nElement visszaadja az irányítást azzal, hogy kiválaszthatod ki kezelje a beszélgetéseidet. Az Element alkalmazásból különbözőképpen választhatod ki a szerverd:\n\n1. Kérj egy ingyenes fiókot a matrix.org nyilvános szerveren\n2. Saját szervert is üzemeltethetsz a fiókodnak saját hardveren\n3. Jelentkezz egy fiókért egy egyedi szerveren az Element Matrix Services hosting platformra való feliratkozással\n\nMiért válasz az Elementet?\n\nAZ ADATOD A TULAJDONOD: Te döntöd el hol tárolod az adataidat és üzeneteidet. A tiéd és nálad az irányítás és nem valami NAGYVÁLLALATNÁL ami elemzi az adataidat és odaadja másoknak.\n\nNYILT ÜZENETKÜLDÉS ÉS KOLLABORÁCIÓ: Bárkivel beszélgethetsz a Matrix hálózaton, akár az Elementet használja akár más Matrix alkalmazást vagy akár másik üzenetküldő rendszert használ mint például a Slack, IRC vagy XMPP.\n\nSZUPER-BIZTONSÁGOS: Igazi végpontok közötti titkosítás (csak a beszélgetés résztvevői tudják visszafejteni az üzenetet), és kereszt aláírásokkal lehet a beszélgetésben résztvevő eszközöket ellenőrizni.\n\nTELJES KOMMUNIKÁCIÓ: Üzenetküldés, hang és videó hívások, fájl megosztás, képernyő megosztás és egy csomó egyéb integráció, botok és kisalkalmazások. Építs szobákat, közösségeket, maradj kapcsolatban és vigyél véghez dolgokat. \n\nBÁRHOL VAGY: Maradj kapcsolatban akárhol vagy az összes üzeneteddel minden eszközödön vagy a weben a https://element.io/app -pal.";
"auth_autodiscover_invalid_response" = "Matrix szerver felderítésénél érvénytelen válasz érkezett";
"room_event_action_reply" = "Válasz";
"room_event_action_edit" = "Szerkeszt";
@ -1041,7 +1038,7 @@
"device_verification_self_verify_start_information" = "Az új munkamenet ellenőrzéséhez használd ezt, amivel hozzáférést adsz a titkosított üzenetekhez.";
"device_verification_self_verify_start_waiting" = "Várakozik…";
"device_verification_self_verify_wait_title" = "Biztonság beállítása";
"device_verification_self_verify_wait_information" = "Ennek a munkamenet ellenőrzéséhez használd valamelyik másik munkamenetedet, amivel hozzáférést adsz a titkosított üzenetekhez.\n\nHasználd a legfrissebb Riotot valamelyik eszközödön:";
"device_verification_self_verify_wait_information" = "Ennek a munkamenet ellenőrzéséhez használd valamelyik másik munkamenetedet, amivel hozzáférést adsz a titkosított üzenetekhez.\n\nHasználd a legfrissebb Elementet valamelyik eszközödön:";
"device_verification_self_verify_wait_waiting" = "Várakozik…";
// Scanning
"key_verification_scan_confirmation_scanning_title" = "Majdnem kész! Várakozás a megerősítésre…";
@ -1053,10 +1050,10 @@
"key_verification_scan_confirmation_scanned_device_information" = "A másik eszköz is ugyanazt a pajzsot mutatja?";
"room_participants_action_security_status_complete_security" = "Biztonsági beállítás befejezése";
// MARK: Clients
"client_desktop_name" = "Asztali Riot";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "RiotX Android";
"client_desktop_name" = "Asztali Element";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"security_settings_crosssigning_info_not_bootstrapped" = "Az eszközök közötti hitelesítés nincs még beállítva.";
"security_settings_crosssigning_info_exists" = "A fiókodban az eszközök közötti aláírás be van állítva, de ebben a munkamenetben még nem ellenőrizted. Végezd el a munkamenet biztonsági beállításait.";
"security_settings_crosssigning_info_trusted" = "Eszközök közötti hitelesítés engedélyezve van. Megbízhatsz más felhasználókban és a munkameneteidben az aláírást felhasználva de ebből a munkamenetből nem tudsz aláírni mert az eszközök közötti aláíráshoz hiányzik a privát kulcs. Fejezd be a munkamenet biztonsági beállításait.";
@ -1066,7 +1063,7 @@
"security_settings_crosssigning_complete_security" = "Biztonsági beállítás befejezése";
"security_settings_complete_security_alert_title" = "Biztonsági beállítás befejezése";
"security_settings_complete_security_alert_message" = "Először be kell fejezned ennek a munkamenetnek a biztonsági beállítását.";
"security_settings_coming_soon" = "Bocsánat. Riot-iOS-n ez a művelet egyenlőre nem érhető el. Kérlek használj másik Matrix klienst a beállításához. Riot-iOS használni fogja.";
"security_settings_coming_soon" = "Bocsánat. Element iOS-n ez a művelet egyenlőre nem érhető el. Kérlek használj másik Matrix klienst a beállításához. Element iOS használni fogja.";
"device_verification_self_verify_wait_new_sign_in_title" = "Belépés ellenőrzése";
"device_verification_self_verify_wait_additional_information" = "vagy másik eszközök közötti hitelesítésre alkalmas Matrix kliensre";
// MARK: - Device Verification
@ -1156,3 +1153,24 @@
"secrets_setup_recovery_passphrase_confirm_passphrase_placeholder" = "Jelmondat megerősítése";
"cross_signing_setup_banner_title" = "Titkosítás beállítása";
"cross_signing_setup_banner_subtitle" = "A többi eszközödet ellenőrizd egyszerűen";
"security_settings_crypto_sessions_description_2" = "Ha ez a bejelentkezés nem ismerős, akkor változtasd meg a jelszavad és újra állítsd be a Biztonsági Mentést.";
"security_settings_secure_backup_description" = "A titkosított üzenetekhez és adatokhoz való hozzáférés elvesztése esetén használható biztonsági tartalék a titkosított kulcsok a szerveredre való elmentésével.";
// AuthenticatedSessionViewControllerFactory
"authenticated_session_flow_not_supported" = "Ez az alkalmazás nem támogatja a matrix szervered azonosítási mechanizmusát.";
// Events formatter with you
"event_formatter_widget_added_by_you" = "Hozzáadtad ezt a kisalkalmazást: %@";
"event_formatter_widget_removed_by_you" = "Törölted ezt a kisalkalmazást: %@";
"event_formatter_jitsi_widget_added_by_you" = "VoIP konferenciát adtál hozzá";
"event_formatter_jitsi_widget_removed_by_you" = "Törölted a VoIP konferenciát";
"secure_key_backup_setup_intro_use_security_passphrase_info" = "Adj meg olyan biztonsági jelmondatot amit csak te ismersz és generálj egy kulcsot a mentéshez.";
"secure_key_backup_setup_existing_backup_error_info" = "Old fel, hogy a biztonsági mentéshez tudd használni vagy töröld, hogy új üzenet mentést állíthass be a biztonsági mentésben.";
"secrets_setup_recovery_key_information" = "A Visszaállítási Kulcsot tárold valahol biztonságos helyen. Felhasználható a titkosított üzenetek és adatok hozzáféréshez.";
"secrets_setup_recovery_key_storage_alert_message" = "✓Nyomtasd ki és tárold biztonságos helyen\n✓Mentsd egy USB kulcsra vagy biztonsági mentésbe\n✓Másold a saját felhő tárhelyedre";
"secrets_setup_recovery_passphrase_information" = "Add meg a biztonsági jelmondatot amit csak te tudsz és a titkok biztosításához használod a szervereden.";
"major_update_title" = "Riot mostantól Element";
"major_update_learn_more_action" = "Tudj meg többet";
"major_update_done_action" = "Értem";
"store_promotional_text" = "Magánéletet tiszteletben tartó csevegő és együttműködést segítő alkalmazás egy nyílt hálózaton. Elosztott rendszer ami visszaadja neked az irányítást. Nincs adathalászat, nincsenek hátsó bejáratok és hozzáférések harmadik fél részére.";
"external_link_confirmation_title" = "Ezt a hivatkozást ellenőrizd le még egyszer";
"external_link_confirmation_message" = "%@ hivatkozás egy másik oldalra visz: %@ \n \nFolytatod?";
"major_update_information" = "Izgatottan jelentjük, hogy megváltoztattuk a nevünket! Az alkalmazásod friss és be vagy jelentkezve a fiókodba.";

View file

@ -186,11 +186,8 @@
"settings_version" = "Útgáfa %@";
"settings_olm_version" = "Útgáfa olm %@";
"settings_copyright" = "Höfundarréttur";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Skilmálar og kvaðir";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Stefna vegna meðferðar persónuupplýsinga";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Athugasemdir frá þriðja aðila";
"settings_send_crash_report" = "Senda nafnlausar hrunskýrslur og upplýsingar um notkun";
"settings_clear_cache" = "Hreinsa skyndiminni";
@ -400,7 +397,7 @@
"auth_reset_password_success_message" = "Lykilorðið þitt hefur verið endurstillt.\n\nÞú hefur verið skráður út af öllum tækjum og munt ekki lengur fá ýti-tilkynningar. Til að endurvirkja tilkynningar, þarf að skrá sig aftur inn á hverju tæki fyrir sig.";
"directory_search_results" = "%tu niðurstöður fundust fyrir %@";
"directory_search_results_more_than" = ">%tu niðurstöður fundust fyrir %@";
"contacts_address_book_permission_denied" = "Þú heimilaðir Riot ekki aðgang að tengiliðum á tækinu";
"contacts_address_book_permission_denied" = "Þú heimilaðir Element ekki aðgang að tengiliðum á tækinu";
"room_participants_remove_prompt_msg" = "Ertu viss um að þú viljir fjarlægja %@ úr þessu spjalli?";
"room_participants_invite_prompt_msg" = "Ertu viss um að þú viljir bjóða %@ á þetta spjall?";
"room_participants_invite_malformed_id" = "Rangt formað auðkenni. Ætti að vera tölvupóstfang eða Matrix-auðkenni á borð við'@sérheiti:lén'";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "La fotocamera viene utilizzata per scattare fotografie, registrare video ed eseguire videochiamate.";
"NSPhotoLibraryUsageDescription" = "La libreria fotografica viene utilizzata per inviare foto e video.";
"NSMicrophoneUsageDescription" = "Il microfono viene utilizzato per registrare video ed effettuare chiamate.";
"NSContactsUsageDescription" = "Per scoprire i contatti che già usano Matrix, Riot può inviare gli indirizzi email e i numeri di telefono della tua rubrica al server identità che hai scelto. Se supportato, viene fatto un hash dei dati personali prima dell'invio - controlla la politica sulla privacy del tuo server di identità per maggiori informazioni.";
"NSContactsUsageDescription" = "Per scoprire i contatti che già usano Matrix, Element può inviare gli indirizzi email e i numeri di telefono della tua rubrica al server identità che hai scelto. Se supportato, viene fatto un hash dei dati personali prima dell'invio - controlla la politica sulla privacy del tuo server di identità per maggiori informazioni.";
"NSCalendarsUsageDescription" = "Vedi le tue riunioni programmate nell'app.";

View file

@ -41,17 +41,23 @@
/* Incoming one-to-one voice call */
"VOICE_CALL_FROM_USER" = "Chiamata da %@";
/* Incoming one-to-one video call */
"VIDEO_CALL_FROM_USER" = "Video chiamata da %@";
"VIDEO_CALL_FROM_USER" = "Videochiamata da %@";
/* Incoming unnamed voice conference invite from a specific person */
"VOICE_CONF_FROM_USER" = "Chiamata di gruppo da %@";
/* Incoming unnamed video conference invite from a specific person */
"VIDEO_CONF_FROM_USER" = "Video chiamata di gruppo da %@";
"VIDEO_CONF_FROM_USER" = "Videochiamata di gruppo da %@";
/* Incoming named voice conference invite from a specific person */
"VOICE_CONF_NAMED_FROM_USER" = "Chiamata di gruppo da %@: '%@'";
/* Incoming named video conference invite from a specific person */
"VIDEO_CONF_NAMED_FROM_USER" = "Video chiamata di gruppo da %@: '%@'";
"VIDEO_CONF_NAMED_FROM_USER" = "Videochiamata di gruppo da %@: '%@'";
/* Message title for a specific person in a named room */
"MSG_FROM_USER_IN_ROOM_TITLE" = "%@ in %@";
/* Sticker from a specific person, not referencing a room. */
"STICKER_FROM_USER" = "%@ ha inviato un adesivo";
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@ vuole verificare";
/* New message indicator on unknown room */
"MESSAGE" = "Messaggio";
/* New message indicator from a DM */
"MESSAGE_FROM_X" = "Messaggio da %@";
/* New message indicator on a room */
"MESSAGE_IN_X" = "Messaggio in %@";

View file

@ -3,7 +3,7 @@
"title_favourites" = "Preferiti";
"title_people" = "Chat dirette";
"title_rooms" = "Stanze";
"store_full_description" = "Comunica, a modo tuo.\n\nUn'app di messaggistica, sotto il tuo controllo e interamente flessibile. Riot ti permette di comunicare a modo tuo. Creata per [matrix] - lo standard per le comunicazioni aperte, decentralizzate.\n\nOttieni un account matrix.org gratuito, ottieni il tuo server su https://modular.im, o usa un altro server Matrix.\n\nPerché scegliere Riot.im?\n\n• COMUNICAZIONE COMPLETA: crea stanze per i tuoi team, i tuoi amici, la tua comunità - come preferisci! Chatta, condividi file, aggiungi widget e fai videochiamate vocali - tutto gratuito.\n\n• GRANDI INTEGRAZIONI: usa Riot.im con gli strumenti che conosci ed ami. Con Riot.im puoi addirittura chattare con utenti e gruppi su altre applicazioni di messaggistica.\n\n• PRIVATO E SICURO: tieni segrete le tue conversazioni. Una crittografia end-to-end allo stato dell'arte assicura che le comunicazioni private restino tali.\n\n• APERTO, NON CHIUSO: open source e costruito su Matrix. Possiedi i tuoi dati ospitando il tuo server personale, o scegliendone uno di cui ti fidi.\n\n• OVUNQUE TU SIA: resta in contatto ovunque tu sia con la cronologia dei messaggi totalmente sincronizzata tra i tuoi dispositivi ed online su https://riot.im.";
"store_full_description" = "Element è un nuovo tipo di app di messaggistica e collaborazione che:\n\n1. Ti dà il controllo per preservare la tua privacy\n2. Ti permette di comunicare con chiunque nella rete Matrix e anche oltre, integrandosi con app come Slack\n3. Ti protegge da pubblicità, datamining, backdoor ed ecosistemi chiusi\n4. Ti protegge tramite crittografia end-to-end, con la firma incrociata per verificare gli altri\n\nElement è completamente diverso dalle altre app di messaggistica e collaborazione perchè è decentralizzato e open source.\n\nElement può essere auto-ospitato - o puoi scegliere un host - in modo da avere privacy, proprietà e controllo dei tuoi dati e delle conversazioni. Ti dà l'accesso a una rete aperta, perciò non sei limitato a parlare solo con gli altri utenti Element. È anche molto sicuro.\n\nElement può fare tutto questo perchè opera su Matrix - lo standard per le comunicazioni aperte e decentralizzate. \n\nElement ti dà il controllo lasciandoti scegliere chi ospita le tue conversazioni. Dall'app Element, puoi scegliere l'host in diversi modi:\n\n1. Ottieni un account gratuito sul server pubblico matrix.org\n2. Auto-ospita il tuo account gestendo un server su tuo hardware personale\n3. Registra un account su un server personalizzato sottoscrivendoti alla piattaforma di hosting Element Matrix Services\n\nPerché scegliere Element?\n\nPOSSIEDI I TUOI DATI: decidi tu dove tenere i tuoi dati e messaggi. Sei tu che li possiedi e li controlli, non una MEGADITTA che estrae i tuoi dati o ne dà l'accesso a terze parti.\n\nMESSAGGISTICA APERTA E COLLABORAZIONE: puoi parlare con chiunque nella rete Matrix, sia che usino Element o un'altra app Matrix, e addirittura anche se usano un altro sistema di messaggistica come Slack, IRC o XMPP.\n\nSUPER SICURO: vera crittografia end-to-end (solo chi è nella conversazione può decifrare i messaggi) e firma incrociata per verificare i dispositivi dei partecipanti alla conversazione.\n\nCOMUNICAZIONE COMPLETA: messaggi, telefonate e videochiamate, condivisione file, condivisione schermo e un sacco di integrazioni, bot e widget. Crea stanze, comunità, resta in contatto e porta a termine le cose.\n\nOVUNQUE TU SIA: resta in contatto ovunque tu sia con la cronologia dei messaggi totalmente sincronizzata tra i tuoi dispositivi e sul web su https://element.io/app.";
"title_groups" = "Comunità";
"warning" = "Attenzione";
"next" = "Prossimo";
@ -155,8 +155,8 @@
"contacts_address_book_section" = "CONTATTI LOCALI";
"contacts_address_book_matrix_users_toggle" = "Solo utenti Matrix";
"contacts_address_book_no_contact" = "Nessun contatto locale";
"contacts_address_book_permission_required" = "Riot deve essere autorizzato per poter accedere alla Rubrica locale";
"contacts_address_book_permission_denied" = "Non hai autorizzato Riot ad accedere alla Rubrica locale";
"contacts_address_book_permission_required" = "Element deve essere autorizzato per poter accedere alla Rubrica locale";
"contacts_address_book_permission_denied" = "Non hai autorizzato Element ad accedere alla rubrica locale";
"contacts_user_directory_section" = "ELENCO UTENTI";
"contacts_user_directory_offline_section" = "ELENCO UTENTI (offline)";
// Chat participants
@ -197,8 +197,8 @@
"room_participants_action_set_moderator" = "Nomina moderatore";
"room_participants_action_set_admin" = "Nomina amministratore";
"room_participants_action_start_new_chat" = "Inizia nuova chat";
"room_participants_action_start_voice_call" = "Avvia chiamata audio";
"room_participants_action_start_video_call" = "Avvia chiamata video";
"room_participants_action_start_voice_call" = "Nuova telefonata";
"room_participants_action_start_video_call" = "Nuova videochiamata";
"room_participants_action_mention" = "Citazione";
// Chat
"room_jump_to_first_unread" = "Vai al primo messaggio non letto";
@ -330,7 +330,7 @@
"settings_pin_rooms_with_unread" = "Segna le stanze con messaggi non letti";
"settings_on_denied_notification" = "Le notifiche non sono permesse per %@, abilitale nelle impostazioni del tuo dispositivo";
"settings_enable_callkit" = "Chiamate integrate";
"settings_callkit_info" = "Ricevi le chiamate in arrivo sul blocca schermo. Mostra le chiamate Riot nella cronologia di chiamate del dispositivo. Se iCloud è attivo, questa cronologia sarà condivisa con Apple.";
"settings_callkit_info" = "Ricevi le chiamate in arrivo sul blocca schermo. Mostra le chiamate Element nella cronologia di chiamate del dispositivo. Se iCloud è attivo, questa cronologia sarà condivisa con Apple.";
"settings_ui_language" = "Lingua";
"settings_ui_theme" = "Tema";
"settings_ui_theme_auto" = "Automatico";
@ -350,11 +350,8 @@
"settings_version" = "Versione %@";
"settings_olm_version" = "Versione Olm %@";
"settings_copyright" = "Copyright";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Termini e condizioni";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Privacy Policy";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Avvisi di terze parti";
"settings_send_crash_report" = "Invia dati di utilizzo anonimi";
"settings_enable_rageshake" = "Per segnalare un errore agita il dispositivo con rabbia";
@ -367,7 +364,7 @@
"settings_crypto_device_id" = "\nID sessione: ";
"settings_crypto_device_key" = "\nChiave sessione:\n";
"settings_crypto_export" = "Esporta chiavi";
"settings_crypto_blacklist_unverified_devices" = "Cifratura solo per le sessioni verificate";
"settings_crypto_blacklist_unverified_devices" = "Crittografia solo per le sessioni verificate";
"settings_deactivate_my_account" = "Disattiva il mio account";
"settings_key_backup_info" = "I messaggi nelle stanze cifrate sono protetti con crittografia E2E. Solo tu e il/i destinatario/i avete le chiavi crittografiche per leggere questi messaggi.";
"settings_key_backup_info_checking" = "Controllo…";
@ -515,7 +512,7 @@
"large_badge_value_k_format" = "%.1fK";
"room_does_not_exist" = "%@ non esiste";
// Call
"call_incoming_voice_prompt" = "Chiamata vocale in arrivo da %@";
"call_incoming_voice_prompt" = "Telefonata in arrivo da %@";
"call_incoming_video_prompt" = "Videochiamata in arrivo da %@";
"call_incoming_voice" = "Chiamata in arrivo…";
"call_incoming_video" = "Videochiamata in arrivo…";
@ -527,8 +524,8 @@
// Crash report
"google_analytics_use_prompt" = "Vuoi aiutare a migliorare %@ inviando automaticamente in modo anonimo i dati di utilizzo e le segnalazioni di crash?";
// Crypto
"e2e_enabling_on_app_update" = "Riot ora supporta la crittografia da-utente-a-utente ma devi eseguire nuovamente l'accesso per abilitarla.\n\nPuoi farlo ora o più tardi dalle impostazioni dell'applicazione.";
"e2e_need_log_in_again" = "È necessario eseguire nuovamente l'accesso per generare le chiavi di cifratura end-to-end per questa sessione ed inviare la chiave pubblica all'homeserver.\nVa fatto una sola volta; ci scusiamo per il disturbo.";
"e2e_enabling_on_app_update" = "Element ora supporta la crittografia da-utente-a-utente ma devi eseguire nuovamente l'accesso per abilitarla.\n\nPuoi farlo ora o più tardi dalle impostazioni dell'applicazione.";
"e2e_need_log_in_again" = "È necessario eseguire nuovamente l'accesso per generare le chiavi di crittografia end-to-end per questa sessione ed inviare la chiave pubblica all'homeserver.\nVa fatto una sola volta; ci scusiamo per il disturbo.";
// Key backup wrong version
"e2e_key_backup_wrong_version_title" = "Nuovo Backup delle chiavi";
"e2e_key_backup_wrong_version" = "È stato effettuato un nuovo Backup delle chiavi per i messaggi crittografati. \n\nSe non sei stato tu, imposta una nuova frase di sicurezza dalle impostazioni.";
@ -539,7 +536,7 @@
"bug_report_description" = "Per favore descrivi l'errore. Cosa hai fatto? Cosa ti aspettavi dovesse accadere? Cosa è effettivamente successo?";
"bug_crash_report_title" = "Segnalazione del crash";
"bug_crash_report_description" = "Per favore descrivi cosa hai fatto prima del crash:";
"bug_report_logs_description" = "Al fine di diagnosticare i problemi, i registri Riot di questo dispositivo saranno inviati con il rapporto dell'errore. Se preferisci inviare solo il testo soprastante, deseleziona:";
"bug_report_logs_description" = "Al fine di diagnosticare i problemi, i registri Element di questo dispositivo saranno inviati con il rapporto dell'errore. Se preferisci inviare solo il testo soprastante, deseleziona:";
"bug_report_send_logs" = "Invia registri";
"bug_report_send_screenshot" = "Invia screenshot";
"bug_report_progress_zipping" = "Ottenimento registri";
@ -588,7 +585,7 @@
"deactivate_account_password_alert_message" = "Per proseguire, inserisci la tua password";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Richiesta inviata";
"rerequest_keys_alert_message" = "Avvia Riot su un altro dispositivo che possa decifrare il messaggio, in modo da poter inviare le chiavi a questa sessione.";
"rerequest_keys_alert_message" = "Avvia Element su un altro dispositivo che possa decifrare il messaggio, in modo da poter inviare le chiavi a questa sessione.";
"key_backup_setup_title" = "Backup chiave";
"key_backup_setup_skip_alert_title" = "Sei sicuro?";
"key_backup_setup_skip_alert_message" = "Se ti disconnetti oppure perdi il dispositivo potresti perdere i tuoi messaggi crittografati.";
@ -1003,7 +1000,7 @@
"device_verification_self_verify_start_waiting" = "In attesa…";
"skip" = "Salta";
"device_verification_self_verify_wait_title" = "Completa la sicurezza";
"device_verification_self_verify_wait_information" = "Verifica questa sessione da una delle tue altre sessioni, dandole l'accesso ai messaggi cifrati.\n\nUsa la versione più recente di Riot sui tuoi altri dispositivi:";
"device_verification_self_verify_wait_information" = "Verifica questa sessione da una delle tue altre sessioni, dandole l'accesso ai messaggi cifrati.\n\nUsa la versione più recente di Element sui tuoi altri dispositivi:";
"device_verification_self_verify_wait_waiting" = "In attesa…";
"room_member_power_level_admin_in" = "Amministratore in %@";
"room_member_power_level_moderator_in" = "Moderatore in %@";
@ -1031,12 +1028,12 @@
"security_settings_crosssigning_complete_security" = "Completa la sicurezza";
"security_settings_complete_security_alert_title" = "Completa la sicurezza";
"security_settings_complete_security_alert_message" = "Dovresti completare la sicurezza prima sulla tua sessione attuale.";
"security_settings_coming_soon" = "Spiacenti. Questa azione non è ancora disponibile su Riot-iOS. Prova ad usare un altro client Matrix per farlo. Riot-iOS lo userà.";
"security_settings_coming_soon" = "Spiacenti. Questa azione non è ancora disponibile su Element iOS. Prova ad usare un altro client Matrix per farlo. Element iOS lo userà.";
// MARK: Clients
"client_desktop_name" = "Riot Desktop";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X per Android";
"client_desktop_name" = "Element Desktop";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"device_verification_self_verify_wait_new_sign_in_title" = "Verifica questo accesso";
"device_verification_self_verify_wait_additional_information" = "o un altro client Matrix che supporti la firma incrociata";
// MARK: - Device Verification
@ -1142,3 +1139,10 @@
"sign_out_non_existing_key_backup_alert_setup_secure_backup_action" = "Inizia ad usare il Backup Sicuro";
"cross_signing_setup_banner_title" = "Imposta la crittografia";
"cross_signing_setup_banner_subtitle" = "Verifica più facilmente i tuoi altri dispositivi";
"store_promotional_text" = "App di chat e collaborazione rispettosa della privacy, su una rete aperta. Decentralizzata per darti il controllo. Nessun datamining, backdoor e accessi di terze parti.";
"major_update_title" = "Riot ora si chiama Element";
"major_update_information" = "Siamo entusiasti di annunciare che abbiamo cambiato nome! La tua app è aggiornata e hai fatto l'accesso al tuo account.";
"major_update_learn_more_action" = "Maggiori informazioni";
"major_update_done_action" = "Capito";
"external_link_confirmation_title" = "Controlla bene questo collegamento";
"external_link_confirmation_message" = "Il collegamento %@ ti porterà in un altro sito: %@\n\nSei sicuro di voler continuare?";

View file

@ -2,4 +2,4 @@
"NSCameraUsageDescription" = "ビデオ通話や写真撮影、動画撮影などを行うときにカメラを使用します。";
"NSPhotoLibraryUsageDescription" = "フォトライブラリは、写真や動画の送信に使用されます。";
"NSMicrophoneUsageDescription" = "マイクは動画撮影や通話に使用されます。";
"NSContactsUsageDescription" = "連絡先のどれがRiotまたはMatrixを既に使用しているかを表示するために、あなたのアドレス帳にあるメールアドレスと電話番号をMatrix Identity Serverに送信することができます。 New Vectorはこのデータを保存したり、他の目的に使用したりしません。 詳細については、アプリケーション設定のプライバシーポリシーページを参照してください。";
"NSContactsUsageDescription" = "連絡先のどれがElementまたはMatrixを既に使用しているかを表示するために、あなたのアドレス帳にあるメールアドレスと電話番号をMatrix Identity Serverに送信することができます。 New Vectorはこのデータを保存したり、他の目的に使用したりしません。 詳細については、アプリケーション設定のプライバシーポリシーページを参照してください。";

View file

@ -51,7 +51,7 @@
"auth_repeat_password_placeholder" = "パスワード再確認";
"auth_repeat_new_password_placeholder" = "新しいパスワードを再確認";
"auth_home_server_placeholder" = "URL (例 https://matrix.org)";
"auth_identity_server_placeholder" = "URL (例 https://matrix.org)";
"auth_identity_server_placeholder" = "URL (例 https://vector.im)";
"auth_invalid_login_param" = "ユーザ名かパスワードが正しくありません";
"auth_invalid_user_name" = "ユーザ名は半角英数字、ドット、ハイフン、アンダスコアのみで記して下さい";
"auth_invalid_password" = "パスワードが短すぎます(最小6文字)";
@ -77,7 +77,7 @@
"auth_msisdn_validation_title" = "認証を確認中";
"auth_msisdn_validation_message" = "SMSで認証番号を送りました. 以下にその番号を入力してください.";
"auth_msisdn_validation_error" = "電話番号を認証できません。";
"auth_recaptcha_message" = "接続先サーバ側が、機械による自動登録ではなく、あなたが人間であることを確認したいとのことです";
"auth_recaptcha_message" = "接続先サーバ側が、機械による自動登録ではなく、あなたが人間であることを確認したいとのことです";
"auth_reset_password_message" = "パスワードを初期化するには, アカウントに登録されている電子メールアドレスを入力してください:";
"auth_reset_password_missing_email" = "あなたのアカウントに登録された電子メールアドレスの入力が必要です.";
"auth_reset_password_missing_password" = "新しいパスワードの入力が必要です.";
@ -85,7 +85,7 @@
"auth_reset_password_next_step_button" = "自分用電子メールアドレスで認証をします";
"auth_reset_password_error_unauthorized" = "電子メールアドレスの確認に失敗しました: 電子メールのリンクをクリックしたことを確認してください";
"auth_reset_password_error_not_found" = "あなたの電子メールアドレスは、接続先サーバ上のMatrix IDと関連付けられていないようです。";
"auth_reset_password_success_message" = "あなたのパスワードは初期化されました.\n\nあなたはすべての端末から切断しており、プッシュ通知を受け取ることはありません。通知を再度有効にするには、各端末に再度ログインします。";
"auth_reset_password_success_message" = "あなたのパスワードは初期化されました.\n\nあなたはすべてのセッションから切断しており、プッシュ通知を受け取ることはありません。通知を再度有効にするには、各端末に再度ログインします。";
"auth_add_email_and_phone_warning" = "電子メールと電話番号の同時登録は, まだシステムが対応できません. 電話番号だけの登録は可能です. お手数おかけしますが, 後ほど個人情報設定から電子メールアドレスを登録してください.";
// Chat creation
"room_creation_title" = "新しい対話";
@ -145,7 +145,7 @@
"contacts_address_book_matrix_users_toggle" = "Matrix利用者のみ";
"contacts_address_book_no_contact" = "端末内電話帳に連絡先がありません";
"contacts_address_book_permission_required" = "端末内電話帳へのアクセス権限が必要です";
"contacts_address_book_permission_denied" = "端末の電話帳をRiotアプリが読み取ることは許可されていません";
"contacts_address_book_permission_denied" = "端末の電話帳をElementアプリが読み取ることは許可されていません";
"contacts_user_directory_section" = "利用者一覧";
"contacts_user_directory_offline_section" = "利用者一覧 (切断中)";
// Chat participants
@ -173,8 +173,8 @@
"room_participants_ago" = "前";
"room_participants_action_section_admin_tools" = "管理者権限操作";
"room_participants_action_section_direct_chats" = "対話";
"room_participants_action_section_devices" = "端末";
"room_participants_action_section_other" = "その他";
"room_participants_action_section_devices" = "セッション";
"room_participants_action_section_other" = "オプション";
"room_participants_action_invite" = "招待";
"room_participants_action_leave" = "部屋を退室";
"room_participants_action_remove" = "部屋から退室させる";
@ -201,7 +201,7 @@
"room_message_short_placeholder" = "ここに送信文を入力…";
"room_offline_notification" = "サーバとの接続が失われました.";
"room_unsent_messages_notification" = "文章が送信できませんでした。現在 %@ または %@ ?";
"room_unsent_messages_unknown_devices_notification" = "未知の端末が存在するために文章が送信されませんでした。現在%@ or %@ ";
"room_unsent_messages_unknown_devices_notification" = "未知のセッションが存在するために文章が送信されませんでした。現在%@ or %@ ";
"room_ongoing_conference_call" = "会議通話実施中。 %@ または %@で参加してください。";
"room_ongoing_conference_call_with_close" = "会議通話実施中。%@または%@で参加してください。 %@。";
"room_ongoing_conference_call_close" = "閉じる";
@ -229,13 +229,13 @@
"room_warning_about_encryption" = "End-to-end 暗号化はベータ版であり、信頼性が低い場合があります。\n\n発言を保護するためにはまだ信用すべきではありません。\n\n端末が参加するより前の発言履歴を復号化することはまだできません。\n\n暗号化された発言は、まだ暗号化を実装していないクライアントでは表示されません。";
"room_event_failed_to_send" = "送信失敗";
// Unknown devices
"unknown_devices_alert_title" = "部屋に未知の端末が存在します";
"unknown_devices_alert" = "この部屋には、確認されていない未知の端末が含まれています。\nすなわち、端末がをユーザ本人が所有しているという保証はありません。\n続ける前に各端末の確認を行うことをおすすめしますが、確認することなく発言を再送信することができます。";
"unknown_devices_alert_title" = "部屋に未知のセッションが存在します";
"unknown_devices_alert" = "この部屋には、確認されていない未知のセッションが含まれています。\nすなわち、セッションがをユーザ本人が所有しているという保証はありません。\n続ける前に各セッションの確認を行うことをおすすめしますが、確認することなく発言を再送信することができます。";
"unknown_devices_send_anyway" = "とにかく送る";
"unknown_devices_call_anyway" = "とにかく通話する";
"unknown_devices_answer_anyway" = "とにかく応答する";
"unknown_devices_verify" = "確認…";
"unknown_devices_title" = "未知の端末";
"unknown_devices_title" = "未知のセッション";
// Room Title
"room_title_new_room" = "新しい部屋";
"room_title_multiple_active_members" = "全%@人中 %@人が回線接続";
@ -267,7 +267,7 @@
"settings_advanced" = "拡張設定";
"settings_other" = "その他";
"settings_labs" = "実験的";
"settings_devices" = "端末";
"settings_devices" = "セッション";
"settings_cryptography" = "暗号化";
"settings_sign_out" = "通信完全切断";
"settings_sign_out_confirmation" = "本当によろしいですか?";
@ -291,7 +291,7 @@
"settings_global_settings_info" = "あなたの %@ webクライアント上で、全体の通知設定が可能です";
"settings_pin_rooms_with_missed_notif" = "通知の届かなかった部屋をピン止めする";
"settings_on_denied_notification" = "%@で通知されないように設定されています。あなたの端末設定で許可してください";
"settings_callkit_info" = "画面がロックされているときに着信がありました。Riotの着信はシステムの通話履歴で確認してください。 iCloudが有効になっている場合、この通話履歴はAppleと共有されます。";
"settings_callkit_info" = "画面がロックされているときに着信がありました。Elementの着信はシステムの通話履歴で確認してください。 iCloudが有効になっている場合、この通話履歴はAppleと共有されます。";
"settings_ui_language" = "言語";
"settings_ui_theme" = "外観";
"settings_ui_theme_auto" = "自動";
@ -309,11 +309,8 @@
"settings_version" = "Version %@";
"settings_olm_version" = "Olm Version %@";
"settings_copyright" = "著作権";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "利用規約";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "個人情報保護方針";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "外部ライブラリの規約";
"settings_send_crash_report" = "匿名利用状況と誤動作情報を送信";
"settings_enable_rageshake" = "バグ報告のため端末を揺さぶる";
@ -324,7 +321,7 @@
"settings_confirm_password" = "パスワード確認";
"settings_fail_to_update_password" = "パスワードの更新に失敗しました";
"settings_password_updated" = "あなたのパスワードは更新されました";
"settings_crypto_device_name" = "端末名: ";
"settings_crypto_device_name" = "セッション名: ";
"settings_crypto_device_id" = "\n装置固有ID: ";
"settings_crypto_device_key" = "\n端末鍵: ";
"settings_crypto_export" = "暗号鍵を外部へ保存";
@ -437,14 +434,14 @@
// Crash report
"google_analytics_use_prompt" = "匿名の誤動作報告と使用状況データを自動的に報告して%@の改善に役立てますか?";
// Crypto
"e2e_enabling_on_app_update" = "Riotはend-to-end暗号化をサポートするようになりましたが、再度有効にするにはログインする必要があります。\n\nアプリの設定から再ログインできます。今すぐ、または後からでも構いません。";
"e2e_enabling_on_app_update" = "Elementはend-to-end暗号化をサポートするようになりましたが、再度有効にするにはログインする必要があります。\n\nアプリの設定から再ログインできます。今すぐ、または後からでも構いません。";
"e2e_need_log_in_again" = "この端末のエンドツーエンド暗号鍵を生成し、接続先サーバに公開鍵を送信するには、再度ログインする必要があります。\n一度回線を切断します。ご不便おかけしてすみません。";
// Bug report
"bug_report_title" = "不具合報告";
"bug_report_description" = "誤動作の内容と状況の説明をお願い致します。あなたは何をしましたか?何が起こると思いますか?実際何が起こったのですか?";
"bug_crash_report_title" = "異常終了報告";
"bug_crash_report_description" = "異常停止する前にあなたがしていたことを記してください:";
"bug_report_logs_description" = "開発者が問題を診断するために、このRiotの動作記録が不具合報告と一緒に送信されます。上記文章のみを送信したい場合は以下のチェックを解除してください";
"bug_report_logs_description" = "開発者が問題を診断するために、このElementの動作記録が不具合報告と一緒に送信されます。上記文章のみを送信したい場合は以下のチェックを解除してください";
"bug_report_send_logs" = "動作記録を送信";
"bug_report_send_screenshot" = "画面のスクリーンショット画像を送信";
"bug_report_progress_zipping" = "動作記録を収集する";
@ -486,7 +483,7 @@
"room_replacement_information" = "この部屋は交換されており、もうアクティブではありません。";
"room_replacement_link" = "会話はここで続けられます。";
"room_predecessor_information" = "この部屋は別の会話の続きです。";
"room_predecessor_link" = "より古いメッセージを見るにはここをクリックしてください。";
"room_predecessor_link" = "より古いメッセージを見るにはここをタップしてください。";
"room_resource_limit_exceeded_message_contact_2_link" = "サービス管理者に連絡する";
"room_resource_limit_exceeded_message_contact_3" = " このサービスの使用を継続するには。";
"room_resource_usage_limit_reached_message_1_default" = "このホームサーバーはリソース制限の1つを超えています ";
@ -557,7 +554,7 @@
"deactivate_account_password_alert_message" = "続行するには、パスワードを入力してください";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "リクエスト送信";
"rerequest_keys_alert_message" = "この端末にキーを送信できるように、メッセージを復号化できる別の端末でRiotを起動してください。";
"rerequest_keys_alert_message" = "この端末にキーを送信できるように、メッセージを復号化できる別の端末でElementを起動してください。";
"room_event_action_ban_prompt_reason" = "このユーザーをブロックする理由";
"room_resource_limit_exceeded_message_contact_1" = " Please ";
"settings_ui_theme_black" = "Black";

View file

@ -398,3 +398,28 @@
"user_verification_session_details_trusted_title" = "Betrodd";
"user_verification_session_details_untrusted_title" = "Advarsel";
"user_verification_session_details_verify_action_current_user" = "Bekreft";
// String for App Store
"store_short_description" = "Sikker desentralisert chat/IP-telefoni";
"store_full_description" = "Kommuniser. På din måte.\n\nEn chatte-app som er fleksibel og fullstendig under din kontroll. Riot lar deg kommunisere slik du vil. Laget for [matrix] - standarden for åpen, desentralisert kommunikasjon.\n\nSkaff deg en gratis matrix.org-konto og din egen server på https://modular.im, eller bruk en annen Matrix-server.\n\nHvorfor velge Riot.im?\n\nKOMPLETT KOMMUNIKASJON: Bygg et eget rom til laget ditt, vennene dine, samfunnet ditt - akkurat på den måten du ønsker! Chat, del filer, legg til widgeter og foreta tale- og videosamtaler - alt sammen helt gratis.\n\nKRAFTIGE INTEGRASJONER: Bruk Riot.im med verktøyene du kjenner og elsker. Med Riot.im kan du til og med chatte med brukere og grupper på andre chatte-apper.\n\nPRIVAT OG SIKKER: Hold samtalene hemmelige. Topp moderne ende-til-ende-kryptering sikrer at privat kommunikasjon forblir privat.\n\nÅPEN, IKKE LUKKET: Åpen kildekode, og bygd på Matrix. Ei dine egne data ved å være vert for din egen server, eller velg en server du stoler på.\n\nUansett hvor du er: Hold kontakten hvor enn du er med synkronisert meldingshistorikk på alle enhetene dine, samt på nettet på https://riot.im.";
"title_favourites" = "Favoritter";
"on" = "På";
"skip" = "Hopp over";
// Accessibility
"accessibility_checkbox_label" = "avkrysningsboks";
// MARK: Clients
"client_desktop_name" = "Riot Desktop";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X til Android";
"auth_login_single_sign_on" = "Logg inn med én innlogging";
"auth_invalid_login_param" = "Feil brukernavn og/eller passord";
"auth_invalid_user_name" = "Brukernavn kan bare inneholde bokstaver, tall, punktum, bindestrek og understrek";
"auth_invalid_password" = "Passordet er for kort (minimum 6 tegn)";
"auth_invalid_email" = "Dette ser ikke ut som en gyldig e-postadresse";
"auth_invalid_phone" = "Dette ser ikke ut som et gyldig telefonnummer";
"auth_add_email_message_2" = "Angi en e-postadresse for gjenoppretting av kontoer. Valgfritt kan du benytte e-postadressen din til å bli oppdaget av folk som kjenner deg.";
"auth_add_phone_message_2" = "Angi et telefonnummer, som du valgfritt kan benytte til å bli oppdaget av folk som kjenner deg.";
"auth_add_email_phone_message_2" = "Angi en e-postadresse for kontogjenoppretting. Senere kan du, helt valgfritt, benytte e-postadressen din eller telefonnummeret ditt til å bli oppdaget av folk som kjenner deg.";
"auth_missing_email_or_phone" = "Manglende e-postadresse eller telefonnummer";
"auth_email_in_use" = "Denne e-postadressen er allerede i bruk";
"auth_phone_in_use" = "Dette telefonnummeret er allerede i bruk";

View file

@ -18,5 +18,5 @@
"NSCameraUsageDescription" = "De camera wordt gebruikt om fotos en videos te maken, en voor videogesprekken.";
"NSPhotoLibraryUsageDescription" = "De fotogalerij wordt gebruikt om fotos en videos te versturen.";
"NSMicrophoneUsageDescription" = "De microfoon wordt gebruikt om videos te maken, en voor spraakoproepen.";
"NSContactsUsageDescription" = "Om u te kunnen tonen welke van uw contacten reeds Matrix gebruiken, kan Riot de e-mailadressen en telefoonnummers in uw adresboek naar uw gekozen Matrix-identiteitsserver sturen. Waar mogelijk worden persoonlijke gegevens gehasht voor verzenden - bekijk het privacybeleid van uw identiteitsserver voor meer informatie.";
"NSContactsUsageDescription" = "Om u te kunnen tonen welke van uw contacten reeds Matrix gebruiken, kan Element de e-mailadressen en telefoonnummers in uw adresboek naar uw gekozen Matrix-identiteitsserver sturen. Waar mogelijk worden persoonlijke gegevens gehasht voor verzenden - bekijk het privacybeleid van uw identiteitsserver voor meer informatie.";
"NSCalendarsUsageDescription" = "Bekijk uw geplande afspraken in de app.";

View file

@ -151,7 +151,7 @@
"contacts_address_book_matrix_users_toggle" = "Alleen Matrix-gebruikers";
"contacts_address_book_no_contact" = "Geen lokale contacten";
"contacts_address_book_permission_required" = "Toestemming vereist voor toegang tot de lokale contacten";
"contacts_address_book_permission_denied" = "U heeft Riot geen toegang tot uw lokale contacten verleend";
"contacts_address_book_permission_denied" = "U heeft Element geen toegang tot uw lokale contacten verleend";
// Chat participants
"room_participants_title" = "Deelnemers";
"room_participants_add_participant" = "Deelnemer toevoegen";
@ -307,11 +307,8 @@
"settings_version" = "Versie %@";
"settings_olm_version" = "Olm-versie %@";
"settings_copyright" = "Copyright";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Algemene voorwaarden";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Privacybeleid";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Derdepartijmeldingen";
"settings_send_crash_report" = "Anonieme crash- en gebruiksgegevens versturen";
"settings_clear_cache" = "Cache verwijderen";
@ -413,7 +410,7 @@
// Crash report
"google_analytics_use_prompt" = "Wilt u helpen met het verbeteren van %@ door anonieme crashrapporten en gebruiksstatistieken te versturen?";
// Crypto
"e2e_enabling_on_app_update" = "Riot ondersteunt nu eind-tot-eind-versleuteling, maar u moet zich opnieuw aanmelden om het in te schakelen.\n\nU kunt dit nu of later doen vanuit de app-instellingen.";
"e2e_enabling_on_app_update" = "Element ondersteunt nu eind-tot-eind-versleuteling, maar u moet zich opnieuw aanmelden om het in te schakelen.\n\nU kunt dit nu of later doen vanuit de app-instellingen.";
"e2e_need_log_in_again" = "U moet zich opnieuw aanmelden om sleutels voor eind-tot-eind-versleuteling te genereren voor dit apparaat, en om de publieke sleutel naar uw thuisserver te sturen.\nDit is eenmalig; excuses voor het ongemak.";
// Bug report
"bug_report_title" = "Foutmelding";
@ -459,7 +456,7 @@
"settings_calls_settings" = "OPROEPEN";
"settings_show_decrypted_content" = "Ontsleutelde inhoud tonen";
"settings_enable_callkit" = "Geïntegreerde oproepen";
"settings_callkit_info" = "Ontvang inkomende oproepen op uw toegangsscherm. Geef uw Riot-oproepen weer in de gespreksgeschiedenis van het systeem. Als iCloud ingeschakeld is zal deze geschiedenis met Apple gedeeld worden.";
"settings_callkit_info" = "Ontvang inkomende oproepen op uw toegangsscherm. Geef uw Element-oproepen weer in de gespreksgeschiedenis van het systeem. Als iCloud ingeschakeld is zal deze geschiedenis met Apple gedeeld worden.";
"settings_ui_theme" = "Thema";
"settings_ui_theme_auto" = "Automatisch";
"settings_ui_theme_light" = "Licht";
@ -546,7 +543,7 @@
"deactivate_account_forget_messages_information_part2_emphasize" = "Waarschuwing";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Aanvraag verstuurd";
"rerequest_keys_alert_message" = "Start Riot op een ander apparaat dat het bericht kan ontsleutelen, zodat het de sleutels kan sturen naar dit apparaat.";
"rerequest_keys_alert_message" = "Start Element op een ander apparaat dat het bericht kan ontsleutelen, zodat het de sleutels kan sturen naar dit apparaat.";
"settings_deactivate_my_account" = "Mijn account deactiveren";
"event_formatter_rerequest_keys_part1_link" = "Versleutelingssleutels opnieuw aanvragen";
"event_formatter_rerequest_keys_part2" = " van uw andere apparaten.";
@ -569,7 +566,7 @@
"room_message_reply_to_short_placeholder" = "Stuur een antwoord…";
// String for App Store
"store_short_description" = "Veilig en gedecentraliseerd chatten en bellen";
"store_full_description" = "Communiceer op uw manier.\n\nEen chat-app, onder uw controle en heel flexibel. Riot laat u communiceren zoals u dat wilt. Gemaakt voor [matrix] - de standaard voor open, gedecentraliseerde communicatie.\n\nMaak een gratis account aan op matrix.org, verkrijg uw eigen server op https://modular.im, of gebruik een andere Matrix-server.\n\nWaarom zou ik voor Riot.im kiezen?\n\n• VOLLEDIGE COMMUNICATIE: maak gesprekken aan rond uw teams, uw vrienden, uw gemeenschap - hoe u maar wilt! Chat, deel bestanden, voeg widgets toe en maak stem- en video-oproepen - allemaal volledig gratis.\n\n• KRACHTIGE INTEGRATIE: gebruik Riot.im met de hulpmiddelen waarmee u vertrouwd bent. Met Riot.im kunt u zelfs chatten met gebruikers en groepen op andere chat-apps.\n\n• PRIVÉ EN VEILIG: houd uw gesprekken geheim. Eind-tot-eind-versleuteling van de bovenste plank zorgt ervoor dat uw privécommunicatie ook privé blijft.\n\n• OPEN, NIET GESLOTEN: vrije software, gebouwd op Matrix. Wees baas over uw eigen gegevens door uw eigen server te gebruiken, of te kiezen voor een andere server die u vertrouwt.\n\n• WAAR U OOK BENT: houd contact waar u ook bent met volledig gesynchroniseerde berichtgeschiedenis op al uw apparaten, en online op https://riot.im.";
"store_full_description" = "Communiceer op uw manier.\n\nEen chat-app, onder uw controle en heel flexibel. Element laat u communiceren zoals u dat wilt. Gemaakt voor [matrix] - de standaard voor open, gedecentraliseerde communicatie.\n\nMaak een gratis account aan op matrix.org, verkrijg uw eigen server op https://ems.element.io, of gebruik een andere Matrix-server.\n\nWaarom zou ik voor Element kiezen?\n\n• VOLLEDIGE COMMUNICATIE: maak gesprekken aan rond uw teams, uw vrienden, uw gemeenschap - hoe u maar wilt! Chat, deel bestanden, voeg widgets toe en maak stem- en video-oproepen - allemaal volledig gratis.\n\n• KRACHTIGE INTEGRATIE: gebruik Element met de hulpmiddelen waarmee u vertrouwd bent. Met Element kunt u zelfs chatten met gebruikers en groepen op andere chat-apps.\n\n• PRIVÉ EN VEILIG: houd uw gesprekken geheim. Eind-tot-eind-versleuteling van de bovenste plank zorgt ervoor dat uw privécommunicatie ook privé blijft.\n\n• OPEN, NIET GESLOTEN: vrije software, gebouwd op Matrix. Wees baas over uw eigen gegevens door uw eigen server te gebruiken, of te kiezen voor een andere server die u vertrouwt.\n\n• WAAR U OOK BENT: houd contact waar u ook bent met volledig gesynchroniseerde berichtgeschiedenis op al uw apparaten, en online op https://app.element.io.";
"auth_login_single_sign_on" = "Aanmelden met enkele aanmelding";
"auth_accept_policies" = "Gelieve het beleid van deze thuisserver te lezen en aanvaarden:";
"auth_autodiscover_invalid_response" = "Ongeldig thuisserverontdekkingsantwoord";
@ -859,10 +856,10 @@
// Accessibility
"accessibility_checkbox_label" = "aanvinkvak";
// MARK: Clients
"client_desktop_name" = "Riot Desktop";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X voor Android";
"client_desktop_name" = "Element Desktop";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"auth_add_email_message_2" = "Stel een e-mailadres in voor accountherstel en om later optioneel vindbaar te zijn voor mensen die u kennen.";
"auth_add_phone_message_2" = "Stel een telefoon in om later optioneel vindbaar te zijn voor mensen die u kennen.";
"auth_add_email_phone_message_2" = "Stel een e-mailadres in voor accountherstel. Gebruik later e-mail of telefoon om optioneel vindbaar te zijn voor mensen die u kennen.";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "Aparat służy do robienia zdjęć i nagrywania filmów, prowadzenia rozmów wideo.";
"NSPhotoLibraryUsageDescription" = "Biblioteka zdjęć służy do wysyłania zdjęć i filmów.";
"NSMicrophoneUsageDescription" = "Mikrofon służy do robienia filmów, wykonywania połączeń.";
"NSContactsUsageDescription" = "Możemy pokazać Ci, które z Twoich kontaktów korzystają aktualnie z Riot, bądź Matrix. Możemy wysyłać adresy e-mail i numery telefonów z Twojej książki adresowej na Twój serwer Matrix. New Vector nie przechowuje Twoich danych, ani nie wykorzystuje ich w żadnym celu. Aby uzyskać dodatkowe informacje zajrzyj do zakładki \"polityka prywatności\" w ustawieniach aplikacji.";
"NSContactsUsageDescription" = "Możemy pokazać Ci, które z Twoich kontaktów korzystają aktualnie z Element, bądź Matrix. Możemy wysyłać adresy e-mail i numery telefonów z Twojej książki adresowej na Twój serwer Matrix. New Vector nie przechowuje Twoich danych, ani nie wykorzystuje ich w żadnym celu. Aby uzyskać dodatkowe informacje zajrzyj do zakładki \"polityka prywatności\" w ustawieniach aplikacji.";
"NSCalendarsUsageDescription" = "Zobacz swoje zaplanowane spotkania w aplikacji.";

View file

@ -243,11 +243,8 @@
"settings_version" = "Wersja %@";
"settings_olm_version" = "Wersja Olm %@";
"settings_copyright" = "Prawa autorskie";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Warunki użytkowania";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Polityka prywatności";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Informacje o stronach trzecich";
"settings_enable_rageshake" = "Potrząśnij wściekle, aby zgłosić błąd";
"settings_clear_cache" = "Wyczyść pamięć podręczną";
@ -356,7 +353,7 @@
"deactivate_account_password_alert_message" = "Aby kontynuować, proszę wprowadzić swoje hasło";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Prośba wysłana";
"rerequest_keys_alert_message" = "Uruchom proszę Riot na innym urządzeniu, które może odszyfrować wiadomość, aby wysłać klucze do tego urządzenia.";
"rerequest_keys_alert_message" = "Uruchom proszę Element na innym urządzeniu, które może odszyfrować wiadomość, aby wysłać klucze do tego urządzenia.";
"on" = "Włączone";
"video" = "Obraz";
"auth_forgot_password" = "Zapomniałeś(-aś) hasło?";
@ -463,7 +460,7 @@
"bug_report_title" = "Zgłoś błąd";
"e2e_need_log_in_again" = "Należy się ponownie zalogować w celu wygenerowania kluczy szyfrowania end-to-end dla tego urządzenia i wysłania klucza publicznego do Twojego serwera domowego.\nJest to jednorazowe działanie; przepraszamy za trudności.";
// Crypto
"e2e_enabling_on_app_update" = "Riot obsługuje już szyfrowanie end-to-end (E2E), ale musisz zalogować się ponownie, aby je włączyć.\n\nMożesz to zrobić teraz lub później z poziomu ustawień aplikacji.";
"e2e_enabling_on_app_update" = "Element obsługuje już szyfrowanie end-to-end (E2E), ale musisz zalogować się ponownie, aby je włączyć.\n\nMożesz to zrobić teraz lub później z poziomu ustawień aplikacji.";
// No VoIP support
"no_voip_title" = "Połączenie przychodzące";
"call_incoming_video" = "Przychodzące połączenie wideo…";
@ -490,7 +487,7 @@
"bug_crash_report_title" = "Raport o awarii";
// String for App Store
"store_short_description" = "Bezpieczny, zdecentralizowany czat/VoIP";
"store_full_description" = "Komunikuj się, po swojemu.\n\nAplikacja do czatowania, pod Twoją kontrolą i całkowicie elastyczna. Riot pozwala Ci komunikować się tak, jak chcesz. Stworzona dla [matrixa] - otwartego standardu, zdecentralizowanej komunikacji.\n\nZałóż darmowe konto na matrix.org, załatw swój własny serwer na https://modular.im lub skorzystaj z innego serwera Matrix.\n\nDlaczego warto wybrać Riot.im?\n\nPEŁNA KOMUNIKACJA: Zbuduj pokoje wokół swoich zespołów, przyjaciół, społeczności - jak chcesz! Czat, udostępnianie plików, dodawanie widgetów i wykonywanie połączeń głosowych i wideo - wszystko to za darmo.\n\n\nPOTĘŻNA INTEGRACJA: Użyj Riot.im z narzędziami, które znasz i kochasz. Dzięki Riot.im możesz nawet rozmawiać z użytkownikami i grupami z innymi aplikacjami do czatowania.\n\nPRYWATNY I BEZPIECZNY: Trzymaj swoje rozmowy w tajemnicy. Najnowocześniejsze szyfrowanie typu end-to-end zapewnia prywatną komunikację.\n\nOTWARTY, NIE ZAMKNIĘTY: Open source i zbudowany na Matrixie. Miej swoje dane pod kontrolą poprzez hosting własnego serwera lub wybranie serwera, któremu ufasz.\n\nGDZIEKOLWIEK JESTEŚ: Bądź w kontakcie gdziekolwiek jesteś, dzięki w pełni zsynchronizowanej historii wiadomości na wszystkich Twoich urządzeniach i online na https://riot.im.";
"store_full_description" = "Komunikuj się, po swojemu.\n\nAplikacja do czatowania, pod Twoją kontrolą i całkowicie elastyczna. Element pozwala Ci komunikować się tak, jak chcesz. Stworzona dla [matrixa] - otwartego standardu, zdecentralizowanej komunikacji.\n\nZałóż darmowe konto na matrix.org, załatw swój własny serwer na https://ems.element.io lub skorzystaj z innego serwera Matrix.\n\nDlaczego warto wybrać Element?\n\nPEŁNA KOMUNIKACJA: Zbuduj pokoje wokół swoich zespołów, przyjaciół, społeczności - jak chcesz! Czat, udostępnianie plików, dodawanie widgetów i wykonywanie połączeń głosowych i wideo - wszystko to za darmo.\n\n\nPOTĘŻNA INTEGRACJA: Użyj Element z narzędziami, które znasz i kochasz. Dzięki Element możesz nawet rozmawiać z użytkownikami i grupami z innymi aplikacjami do czatowania.\n\nPRYWATNY I BEZPIECZNY: Trzymaj swoje rozmowy w tajemnicy. Najnowocześniejsze szyfrowanie typu end-to-end zapewnia prywatną komunikację.\n\nOTWARTY, NIE ZAMKNIĘTY: Open source i zbudowany na Matrixie. Miej swoje dane pod kontrolą poprzez hosting własnego serwera lub wybranie serwera, któremu ufasz.\n\nGDZIEKOLWIEK JESTEŚ: Bądź w kontakcie gdziekolwiek jesteś, dzięki w pełni zsynchronizowanej historii wiadomości na wszystkich Twoich urządzeniach i online na https://app.element.io.";
"room_creation_make_public_prompt_msg" = "Jesteś pewien, że chcesz zrobić ten czat publiczny? Każdy może czytać Twoje wiadomości i dołączyć do czatu.";
"directory_search_fail" = "Nie udało się pobrać danych";
"contacts_address_book_permission_required" = "Uprawnienie jest wymagane żeby uzyskać dostęp do kontaktów lokalnych";
@ -508,7 +505,7 @@
"settings_enable_push_notif" = "Powiadomienia na tym urządzeniu";
"settings_global_settings_info" = "Globalne ustawienia powiadomień są dostępne na Twoim kliencie internetowym %@";
"settings_on_denied_notification" = "Powiadomienia są odrzucane w %@, proszę zezwól na nie w ustawieniach urządzenia";
"settings_callkit_info" = "Odbieraj połączenia przychodzące na ekranie blokady. Zobacz swoje połęczenia Riot w historii połączeń w systemie. Jeśli usługa iCloud jest włączona, historia połączeń zostanie udostępniona Apple.";
"settings_callkit_info" = "Odbieraj połączenia przychodzące na ekranie blokady. Zobacz swoje połęczenia Element w historii połączeń w systemie. Jeśli usługa iCloud jest włączona, historia połączeń zostanie udostępniona Apple.";
"settings_ui_theme_picker_message" = "\"Auto\" używa ustawienia \"Odwróć kolory\" urządzenia";
"close" = "Zamknij";
"auth_softlogout_sign_in" = "Zaloguj się";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "Камера используется для съемки фотографий и видеороликов, а также для видеозвонков.";
"NSPhotoLibraryUsageDescription" = "Галерея используется для отправки фотографий и видео.";
"NSMicrophoneUsageDescription" = "Микрофон используется при съемке видео и выполнении звонков.";
"NSContactsUsageDescription" = "Чтобы обнаружить контакты, уже использующие Matrix, Riot может отправлять адреса электронной почты и номера телефонов из адресной книги на выбранный вами сервер идентификации Matrix. Если поддерживается, то личные данные перед отправкой хэшируются - пожалуйста, ознакомьтесь с политикой конфиденциальности вашего сервера идентификации для получения более подробной информации.";
"NSContactsUsageDescription" = "Чтобы обнаружить контакты, уже использующие Matrix, Element может отправлять адреса электронной почты и номера телефонов из адресной книги на выбранный вами сервер идентификации Matrix. Если поддерживается, то личные данные перед отправкой хэшируются - пожалуйста, ознакомьтесь с политикой конфиденциальности вашего сервера идентификации для получения более подробной информации.";
"NSCalendarsUsageDescription" = "Ознакомьтесь со своими запланированными встречами в приложении.";

View file

@ -132,7 +132,7 @@
"contacts_address_book_matrix_users_toggle" = "Только пользователи Matrix";
"contacts_address_book_no_contact" = "Нет локальных контактов";
"contacts_address_book_permission_required" = "Разрешение на доступ к локальным контактам";
"contacts_address_book_permission_denied" = "Вы не разрешили Riot получить доступ к локальным контактам";
"contacts_address_book_permission_denied" = "Вы не разрешили Element получить доступ к локальным контактам";
// Chat participants
"room_participants_title" = "Участники";
"room_participants_add_participant" = "Добавить участника";
@ -268,11 +268,8 @@
"settings_version" = "Версия %@";
"settings_olm_version" = "Версия Olm %@";
"settings_copyright" = "Авторские права";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Условия и положения";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Политика конфиденциальности";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Уведомления сторонних разработчиков";
"settings_send_crash_report" = "Отправка данных о сбоях и использовании";
"settings_clear_cache" = "Очистить кэш";
@ -376,7 +373,7 @@
// Crash report
"google_analytics_use_prompt" = "Вы хотите помочь улучшить %@, автоматически отправляя анонимные отчеты о сбоях и данные об использовании?";
// Crypto
"e2e_enabling_on_app_update" = "Riot теперь поддерживает сквозное шифрование, но вам нужно снова войти в систему, чтобы включить его.\n\nВы можете сделать это сейчас или позже из настроек приложения.";
"e2e_enabling_on_app_update" = "Element теперь поддерживает сквозное шифрование, но вам нужно снова войти в систему, чтобы включить его.\n\nВы можете сделать это сейчас или позже из настроек приложения.";
"e2e_need_log_in_again" = "Вам нужно войти в систему, чтобы сгенерировать ключи шифрования для этого устройства и отправлять публичный ключ вашему серверу.\nЭто необходимо только один раз; извините за неудобства.";
// Bug report
"bug_report_title" = "Сообщить об ошибке";
@ -451,7 +448,7 @@
"settings_calls_settings" = "ВЫЗОВЫ";
"settings_show_decrypted_content" = "Показать расшифрованное содержимое";
"settings_enable_callkit" = "Интегрированный вызов";
"settings_callkit_info" = "Прием входящих звонков на экране блокировки. Журнал вызовов Riot будет доступен в истории звонков вашего телефона. Если включен iCloud , то журнал вызовов будет доступен в том числе и Apple.";
"settings_callkit_info" = "Прием входящих звонков на экране блокировки. Журнал вызовов Element будет доступен в истории звонков вашего телефона. Если включен iCloud , то журнал вызовов будет доступен в том числе и Apple.";
"settings_ui_theme" = "Тема";
"settings_ui_theme_auto" = "Авто";
"settings_ui_theme_light" = "Светлая";
@ -537,7 +534,7 @@
"event_formatter_rerequest_keys_part2" = " с других устройств.";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "Запрос отправлен";
"rerequest_keys_alert_message" = "Запустите Riot на другом устройстве, которое может расшифровать сообщение, чтобы оно могло отправить ключи этому устройству.";
"rerequest_keys_alert_message" = "Запустите Element на другом устройстве, которое может расшифровать сообщение, чтобы оно могло отправить ключи этому устройству.";
"room_message_reply_to_placeholder" = "Отправить ответ (незашифрованный)…";
"encrypted_room_message_reply_to_placeholder" = "Отправить зашифрованный ответ…";
"room_message_reply_to_short_placeholder" = "Отправить ответ…";
@ -672,7 +669,7 @@
"e2e_key_backup_wrong_version" = "Обнаружена новая резервная копия ключа безопасного сообщения.\n\nЕсли вы этого не делали, установите новую парольную фразу в настройках.";
// String for App Store
"store_short_description" = "Безопасный децентрализованный чат/VoIP";
"store_full_description" = "Приложение для чата, под вашим контролем и полностью гибкое. Райот позволяет вам общаться так, как вы хотите. Сделано на [matrix] — стандарт для открытого, децентрализованного общения.\n\nПолучите бесплатную учетную запись на matrix.org, собственный сервер по адресу https://modular.im или используйте другой сервер Matrix.\n\nПочему стоит выбрать Riot.im?\n\n• ПОЛНАЯ СВЯЗЬ: создавайте комнаты для команд, друзей, сообщест — как хотите! Общайтесь, обменивайтесь файлами, добавляйте виджеты и совершайте голосовые и видеозвонки — и все это бесплатно.\n\n• МОЩНЫЕ ИНТЕГРАЦИИ: Используйте Riot.im с инструментами, которые знаете и любите. С Riot.im вы можете даже общаться с пользователями и группами других приложений.\n\n• ЧАСТНЫЕ И БЕЗОПАСНЫЕ: держите ваши разговоры в тайне. Современное сквозное шифрование гарантирует, что частное общение остается частным.\n\n• ОТКРЫТО, НЕ ЗАКРЫТО: Исходный код открыт, построено на Matrix. Владейте данными, используя собственный сервер или выбирайте тот, которому доверяете.\n\n• Везде, где вы находитесь: оставайтесь на связи, где бы вы ни находились, с полностью синхронизированной историей сообщений на всех ваших устройствах и в Интернете по адресу https://riot.im.";
"store_full_description" = "Приложение для чата, под вашим контролем и полностью гибкое. Райот позволяет вам общаться так, как вы хотите. Сделано на [matrix] — стандарт для открытого, децентрализованного общения.\n\nПолучите бесплатную учетную запись на matrix.org, собственный сервер по адресу https://ems.element.io или используйте другой сервер Matrix.\n\nПочему стоит выбрать Element?\n\n• ПОЛНАЯ СВЯЗЬ: создавайте комнаты для команд, друзей, сообщест — как хотите! Общайтесь, обменивайтесь файлами, добавляйте виджеты и совершайте голосовые и видеозвонки — и все это бесплатно.\n\n• МОЩНЫЕ ИНТЕГРАЦИИ: Используйте Element с инструментами, которые знаете и любите. С Element вы можете даже общаться с пользователями и группами других приложений.\n\n• ЧАСТНЫЕ И БЕЗОПАСНЫЕ: держите ваши разговоры в тайне. Современное сквозное шифрование гарантирует, что частное общение остается частным.\n\n• ОТКРЫТО, НЕ ЗАКРЫТО: Исходный код открыт, построено на Matrix. Владейте данными, используя собственный сервер или выбирайте тот, которому доверяете.\n\n• Везде, где вы находитесь: оставайтесь на связи, где бы вы ни находились, с полностью синхронизированной историей сообщений на всех ваших устройствах и в Интернете по адресу https://app.element.io.";
"auth_login_single_sign_on" = "Войти с помощью единого входа (sign-on)";
"room_message_unable_open_link_error_message" = "Невозможно открыть ссылку.";
"auth_autodiscover_invalid_response" = "Неверный ответ обнаружения сервера";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "Kamera përdoret për të bërë foto dhe regjistruar video, dhe për të bërë thirrje video.";
"NSPhotoLibraryUsageDescription" = "Fototeka përdoret për të dërguar foto dhe video.";
"NSMicrophoneUsageDescription" = "Mikrofoni përdoret për të regjistruar video, dhe për të bërë thirrje.";
"NSContactsUsageDescription" = "Që të zbulohen kontakte që përdorin tashmë Matrix-in, Riot-i mund të dërgojë adresa email dhe numra telefonash nga libri juaj i adresave te shërbyesi juaj i zgjedhur Matrix i identiteteve. Kur kjo mbulohet, të dhënat personale fshehtëzohen, para se të dërgohen - ju lutemi, për më tepër hollësi, shihni rregulla privatësie të shërbyesit tuaj të identiteteve.";
"NSContactsUsageDescription" = "Për zbulim kontaktesh që përdorin tashmë Matrix-in, Element-i mund të dërgojë adresa email dhe numra telefonash nga libri juaj i adresave te shërbyesi juaj i zgjedhur Matrix i identiteteve. Kur kjo mbulohet, të dhënat personale fshehtëzohen, para se të dërgohen - ju lutemi, për më tepër hollësi, shihni rregulla privatësie të shërbyesit tuaj të identiteteve.";
"NSCalendarsUsageDescription" = "Shihini te aplikacioni takimet tuaja të planifikuara.";

View file

@ -55,3 +55,9 @@
/* Sticker from a specific person, not referencing a room. */
"STICKER_FROM_USER" = "%@ dërgoi një ngjitës";
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@ dëshiron të verifikojë";
/* New message indicator on unknown room */
"MESSAGE" = "Mesazh";
/* New message indicator from a DM */
"MESSAGE_FROM_X" = "Mesazh nga %@";
/* New message indicator on a room */
"MESSAGE_IN_X" = "Mesazh te %@";

View file

@ -254,11 +254,8 @@
"settings_labs_e2e_encryption" = "Fshehtëzim Skaj-Më-Skaj";
"settings_version" = "Version %@";
"settings_copyright" = "Të drejta kopjimi";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Terma & Kushte";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Rregulla Privatësie";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Njoftime Palësh të Treta";
"settings_clear_cache" = "Pastroje fshehtinën";
"settings_change_password" = "Ndryshoni fjalëkalimin";
@ -475,7 +472,7 @@
"room_creation_make_public_prompt_msg" = "Jeni i sigurt se doni ta bëni publike këtë fjalosje? Në një të tillë, mesazhet tuaj mund ti lexojë cilido dhe mund të hyjë në bisedë.";
"room_creation_wait_for_creation" = "Po krijohet tashmë një dhomë. Ju lutemi, prisni.";
"contacts_address_book_permission_required" = "Lypset leje për hyrje në kontaktet vendore";
"contacts_address_book_permission_denied" = "Se lejuat Riot-i të hyjë në kontaktet tuaja vendore";
"contacts_address_book_permission_denied" = "Se lejuat Element-i të hyjë në kontaktet tuaja vendore";
"room_participants_remove_third_party_invite_msg" = "Heqja e ftesave nga palë të treta nuk mbulohet ende, derisa të kihet API";
"room_participants_invite_malformed_id" = "ID e keqformuar. Duhet të jetë një adresë email ose ID Matrix, si '@localpart:domain'";
"room_participants_action_ban" = "Dëboje nga kjo dhomë";
@ -499,7 +496,7 @@
"settings_global_settings_info" = "Rregullimet globale për njoftime i gjeni te klienti juaj %@ web";
"settings_on_denied_notification" = "Njoftimet për %@ spranohen, ju lutemi, lejojini që nga rregullimet e pajisjes tuaj";
"settings_enable_callkit" = "Thirrje të integruara";
"settings_callkit_info" = "Merrini thirrjet ardhëse edhe me ekran të kyçur. Shihni thirrjet tuaja nën Riot te historiku i thirrjeve të sistemit. Nëse iCloud është i aktivizuar, ky historik thirrjesh do ti jepet kompanisë Apple.";
"settings_callkit_info" = "Merrini thirrjet ardhëse edhe me ekran të kyçur. Shihni thirrjet tuaja nën Element te historiku i thirrjeve të sistemit. Nëse iCloud është i aktivizuar, ky historik thirrjesh do ti jepet kompanisë Apple.";
"settings_ui_theme_picker_message" = "\"Auto\" përdor rregullimet \"Përmbysi Ngjyrat\" të pajisjes tuaj";
"settings_contacts_discover_matrix_users" = "Përdorni email-e dhe numra telefoni për të gjetur përdorues";
"settings_labs_e2e_encryption_prompt_message" = "Që të përfundohet rregullimi i fshehtëzimit duhet të ribëni hyrjen në llogari.";
@ -525,7 +522,7 @@
// Crash report
"google_analytics_use_prompt" = "Do të donit të ndihmoni në përmirësimin e %@-it duke parashtruar automatikisht dhe në mënyrë anonime raporte vithisjesh dhe të dhëna përdorimi?";
// Crypto
"e2e_enabling_on_app_update" = "Riot tani mbulon fshehtëzim skaj-më-skaj, por lypset të ribëni hyrjen që ta aktivizoni.\n\nMund ta bëni tani ose më vonë, që prej rregullimeve të aplikacionit.";
"e2e_enabling_on_app_update" = "Element tani mbulon fshehtëzim skaj-më-skaj, por lypset të ribëni hyrjen që ta aktivizoni.\n\nMund ta bëni tani ose më vonë, që prej rregullimeve të aplikacionit.";
"bug_report_description" = "Ju lutemi, përshkruajeni të metën. Çpo bënit? Çprisnit të ndodhte? Çndodhi në fakt?";
"bug_crash_report_description" = "Ju lutemi, përshkruani çpo bënit para vithisjes:";
"bug_report_logs_description" = "Që të mund të diagnostikohen probleme, regjistra prej këtij klienti do të dërgohen tok me këtë njoftim të metash. Nëse do të parapëlqenit të dërgohej vetëm teksti më sipër, ju lutemi, hiqjani shenjën kutizës:";
@ -546,7 +543,7 @@
"deactivate_account_informations_part5" = "Nëse do të donit që të harrohen mesazhet tuaj, ju lutemi, i vini shenjë kutizës më poshtë\n\nDukshmëria e mesazheve në Matrix është e ngjashme me atë në email. Harrimi i mesazheve nga ana jonë do të thotë që mesazhet që keni dërguar nuk do të ndahen me çfarëdo përdoruesi të ri apo të paregjistruar, por përdoruesit e regjistruar, që kanë tashmë hyrje në këto mesazhe, do të kenë prapëseprapë hyrje te kopja e tyre.";
"deactivate_account_forget_messages_information_part1" = "Të lutem, harro krejt mesazhet që kamë dërguar, kur të çaktivizohet llogaria ime (";
"deactivate_account_forget_messages_information_part3" = ": kjo do të bëjë që përdorues të ardhshëm të shohin një pamje jo të plotë të bisedave)";
"rerequest_keys_alert_message" = "Ju lutemi, niseni Riot-in në një tjetër pajisje që mund të shfshehtëzoje mesazhin, që kështu të mund të dërgojë kyçet te ky sesion.";
"rerequest_keys_alert_message" = "Ju lutemi, niseni Element-in në një tjetër pajisje që mund të shfshehtëzoje mesazhin, që kështu të mund të dërgojë kyçet te ky sesion.";
"room_event_action_redact" = "Hiqe";
"e2e_need_log_in_again" = "Që të prodhohen kyçe fshehtëzimi skaj-më-skaj për këtë sesion, lypset të ribëni hyrjen dhe të parashtroni kyçin publik te shërbyesi juaj Home.\nKjo duhet vetëm një herë; na ndjeni për belanë.";
"room_action_send_sticker" = "Dërgoni ngjitës";
@ -667,7 +664,7 @@
"key_backup_setup_intro_manual_export_action" = "Eksportoni kyçe dorazi";
// String for App Store
"store_short_description" = "Fjalosje /VoIP e siguruar, e decentralizuar";
"store_full_description" = "Komunikoni sipas rrugës tuaj.\n\nNjë aplikacion fjalosjesh, nën kontrollin tuaj dhe krejtësisht i zhdërvjellët. Riot-i ju lejon të komunikoni si doni. Krijuar për [matrix] - standardi për komunikim të hapur, të decentralizuar.\n\nMerrni një llogari matrix.org falas, merrni shërbyesin tuaj te https://modular.im, ose përdorni një tjetër shërbyes Matrix.\n\nPse të zgjidhet Riot.im?\n\nKOMUNIKIM I PLOTË: Krijoni dhoma rreth ekipeve tuaja, shokëve tuaj, bashkësisë tuaj - rreth kujtdo që doni! Bisedoni, shkëmbeni kartela, shtoni widget-e dhe bëni thirrje audio dhe video - gjithçka falas.\n\nINTEGRIME TË FUQISHME: Përdoreni Riot.im me mjetet që njihni dhe doni. Me Riot.im mundeni madje të bisedoni me përdorues dhe grupe nën aplikacione të tjera fjalosjesh.\n\nPRIVAT DHE I SIGURUAR: Mbajini bisedat tuaja të fshehta. Fshehtëzimi skaj-më-skaj i fjalës së fundit garanton që komunikimi privat mbetet privat.\n\nI HAPUR, JO I MBYLLUR: Me burim të hapur dhe i ngritur mbi Matrix. Jini zot i të dhënave tuaja, duke strehuar shërbyesin tuaj, ose duke përzgjedhur një të cilit i besoni.\n\nKUDO QOFSHI: Mbani lidhjet, kudo qofshi, me historik plotësisht të njëkohësuar mesazhesh në krejt pajisjet tuaja dhe në internet, te https://riot.im.";
"store_full_description" = "Element-i është një lloj i ri aplikacioni shkëmbimi mesazhesh dhe bashkëpunimi që:\n\n1. Ju vë juve në kontroll të ruajtjes së privatësisë\n2. Ju lejon të komunikoni me këdo në rrjetin Matrix, dhe madje edhe tej tij, duke u integruar me aplikacione të tillë si Slack\n3. Ju mbron nga reklama, shfrytëzim të dhënash, deriçka të pasme dhe kopshte të gardhuar\n4. Ju siguron përmes fshehtëzimi skaj-më-skaj, me ndër-nënshkrim për verifikim të tjerësh\n\nElement-i është plotësisht i ndryshëm nga aplikacione të tjerë mesazhesh dhe bashkëpunimi, ngaqë është i decentralizuar dhe me burim të hapët.\n\nElement-i ju lejon ta strehoni ju vetë - ose të zgjidhni një strehë - që kështu të keni privatësi, pronësi dhe kontroll të të dhënave dhe bisedave tuaja. Ju jep hyrje në një rrjet të hapët; kështu që sjeni të kufizuar për të folur vetëm me përdorues të tjerë të Element-i. Dhe është shumë i sigurt.\n\nElement-i është në gjendje të bëjë gjithë këtë ngaqë funksionon me Matrix - standardi për komunikim të hapët, të decentralizuar. \n\nElement-i ju vë juve në kontroll, duke ju lejuar të zgjidhni se cili strehon bisedat tuaja. Prej aplikacionit Element, mund të zgjidhni ti strehoni në rrugë të ndryshme:\n\n1. Të merrni një llogari falas te shërbyesi publik matrix.org\n2. Të vetëstrehoni llogarinë tuaj duke xhiruar një shërbyes në hardware-in tuaj\n3. Të regjistroni një llogari në një shërbyes vetjak thjesht duke u pajtuar te platforma Element Matrix Services\n\nPse të zgjidhet Element-i?\n\nJINI ZOT I TË DHËNAVE TUAJA: Se ku të mbani të dhënat dhe mesazhet tuaja, e vendosni ju vetë. I keni pronë tuajën dhe i kontrolloni, jo ndonjë MEGAKORPORATË që shfrytëzon të dhënat tuaja dhe u lejon hyrje në to palëve të treta.\n\nSHKËMBIM MESAZHESH DHE BASHKËPUNIM I HAPËT: Mund të bisedoni me këdo tjetër në rrjetin Matrix, qoftë kur përdorin Element-in, qoftë tjetër aplikacion Matrix, dhe edhe kur përdorin tjetër sistem shkëmbimi mesazhesh, bie fjala, Slack, IRC apo XMPP.\n\nSUPER-I-SIGURT: Fshehtëzim i vërtetë skaj-më-skaj (vetëm ata që marrim pjesë në bisedë mund të shfshehtëzojnë mesazhe), dhe ndër-nënshkrim për verifikimin e pajisjeve të pjesëmarrësve në bisedë.\n\nKOMUNIKIM I PLOTË: Shkëmbim mesazhesh, thirrje zanore dhe video, shkëmbim kartelash, tregim ekrani dhe një gamë të tërë integrimesh, robotë dhe widget-e. Krijoni dhoma, bashkësi, mbani kontakte dhe mbaroni punë.\n\nKUDO QË JENI: Mbani lidhje kudo që të jeni, me historik tërësisht të njëkohësuar përmes krejt pajisjeve tuaja dhe në internet te https://element.io/app.";
"auth_login_single_sign_on" = "Hyni përmes një hyrjeje njëshe";
"room_message_unable_open_link_error_message" = "Sarrihet të hapet lidhja.";
"auth_autodiscover_invalid_response" = "Përgjigje e pavlefshme pikasjeje shërbyesi Home";
@ -1023,7 +1020,7 @@
"device_verification_self_verify_start_information" = "Përdoreni këtë sesion që të verifikoni atë të riun tuaj, duke i akorduar hyrje te mesazhe të fshehtëzuar.";
"device_verification_self_verify_start_waiting" = "Po pritet…";
"device_verification_self_verify_wait_title" = "Siguri e plotë";
"device_verification_self_verify_wait_information" = "Verifikoni këtë sesion prej një nga sesionet tuaj të tjera, duke i akorduar hyrje te mesazhe të fshehtëzuar.\n\nPërdorni Riot-in më të ri në pajisjet tuaja të tjera:";
"device_verification_self_verify_wait_information" = "Verifikoni këtë sesion prej një nga sesionet tuaj të tjera, duke i akorduar hyrje te mesazhe të fshehtëzuar.\n\nPërdorni Element-in më të ri në pajisjet tuaja të tjera:";
"device_verification_self_verify_wait_waiting" = "Po pritet…";
"room_member_power_level_admin_in" = "Përgjegjës te %@";
"room_member_power_level_moderator_in" = "Moderator te %@";
@ -1034,10 +1031,10 @@
// Recover from private key
"key_backup_recover_from_private_key_info" = "Po rikthehet kopjeruajtje…";
// MARK: Clients
"client_desktop_name" = "Riot Desktop";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X për Android";
"client_desktop_name" = "Element Desktop";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"room_participants_action_security_status_complete_security" = "Siguri e plotë";
"security_settings_crosssigning_info_not_bootstrapped" = "<em>Cross-signing</em> sështë ujdisur ende.";
"security_settings_crosssigning_info_exists" = "Llogaria juaj ka një identitet <em>cross-signing</em>, por sështë ende i besuar nga ky sesion. Plotësoni sigurinë e këtij sesioni.";
@ -1046,7 +1043,7 @@
"security_settings_crosssigning_complete_security" = "Siguri e plotë";
"security_settings_complete_security_alert_title" = "Siguri e plotë";
"security_settings_complete_security_alert_message" = "Së pari duhet të plotësoni sigurinë në sesionin tuaj të tanishëm.";
"security_settings_coming_soon" = "Na ndjeni. Ky veprim sështë ende pjesë e Riot-iOS-it. Ju lutemi, për ta pasur, përdorni një klient tjetër Matrix. Riot-iOS-i do ta përdorë.";
"security_settings_coming_soon" = "Na ndjeni. Ky veprim sështë ende pjesë e Element iOS-it. Ju lutemi, për ta pasur, përdorni një klient tjetër Matrix. Element iOS-i do ta përdorë.";
// MARK: - Device Verification
"key_verification_other_session_title" = "Verifiko sesion";
"key_verification_new_session_title" = "Verifikoni sesionin tuaj të ri";

View file

@ -1425,6 +1425,50 @@
THE SOFTWARE.
<br/><br/>
</li>
<li>
<b>FlowCommoniOS</b> (<a href="https://github.com/createwithflow/FlowCommoniOS">https://github.com/createwithflow/FlowCommoniOS</a>)
<br/><br/>FlowCommoniOS is a set of common files for Flow Animations.
<br/><br/>It is released under the MIT license.
<br/><br/>Copyright © 2016-2020 JABT Labs Inc.
<br/><br/>Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
<br/><br/>The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
<br/><br/>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
<br/><br/>
</li>
<li>
<b>KeychainAccess</b> (<a href="https://github.com/kishikawakatsumi/KeychainAccess">https://github.com/kishikawakatsumi/KeychainAccess</a>)
<br/><br/>Simple Swift wrapper for Keychain that works on iOS, watchOS, tvOS and macOS.
<br/><br/>It is released under the MIT license.
<br/><br/>Copyright (c) 2014 kishikawa katsumi
<br/><br/>Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
<br/><br/>The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
<br/><br/>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
<br/><br/>
</li>
</ul>
</body>
</html>

View file

@ -2,4 +2,4 @@
"NSCameraUsageDescription" = "Máy ảnh được sử dụng để chụp ảnh và quay phim, thực hiện các cuộc gọi video thoại.";
"NSPhotoLibraryUsageDescription" = "Thư viện ảnh được dùng để gửi hình ảnh và videos.";
"NSMicrophoneUsageDescription" = "Microphone được dùng để thực hiện quay video, thực hiện các cuộc gọi.";
"NSContactsUsageDescription" = "Danh bạ được sử dụng để tìm kiếm người dùng bởi email hoặc số điện thoại trên Riot.";
"NSContactsUsageDescription" = "Danh bạ được sử dụng để tìm kiếm người dùng bởi email hoặc số điện thoại trên Element.";

View file

@ -145,7 +145,7 @@
"contacts_address_book_matrix_users_toggle" = "Chỉ người dùng của matrix";
"contacts_address_book_no_contact" = "Không có danh bạ nội bộ";
"contacts_address_book_permission_required" = "Quyền được yêu cầu để truy cập danh bạ nội bộ";
"contacts_address_book_permission_denied" = "Bạn chưa cho phép Riot truy cập danh bạ nội bộ của bạn";
"contacts_address_book_permission_denied" = "Bạn chưa cho phép Element truy cập danh bạ nội bộ của bạn";
"contacts_user_directory_section" = "DANH MỤC NGƯỜI DÙNG";
"contacts_user_directory_offline_section" = "DANH MỤC NGƯỜI DÙNG (ngoại tuyến)";
// Chat participants
@ -310,11 +310,8 @@
"settings_version" = "Phiên bản %@";
"settings_olm_version" = "Phiên bản Olm %@";
"settings_copyright" = "Bản quyền";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "Điều khoản và điều kiện";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "Chính sách bảo mật";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "Thông báo từ bên thứ ba";
"settings_send_crash_report" = "Gửi lỗi & dữ liệu sử dụng";
"settings_enable_rageshake" = "Lắc điện thoại để báo cáo lỗi";
@ -433,7 +430,7 @@
// Crash report
"google_analytics_use_prompt" = "Bạn có muốn giúp cải thiện %@ bằng cách tự động báo cáo sự cố vô danh và dữ liệu sử dụng?";
// Crypto
"e2e_enabling_on_app_update" = "Riot đã hỗ trợ mã hóa end-to-end nhưng bạn cần phải đăng nhập lại để kích hoạt.\n\nBạn có thể thực hiện ngay bây giờ hoặc sau đó từ cài đặt của ứng dụng.";
"e2e_enabling_on_app_update" = "Element đã hỗ trợ mã hóa end-to-end nhưng bạn cần phải đăng nhập lại để kích hoạt.\n\nBạn có thể thực hiện ngay bây giờ hoặc sau đó từ cài đặt của ứng dụng.";
"e2e_need_log_in_again" = "Bạn cần phải đăng nhập lại để tạo các khoá mã hóa end-to-end cho thiết bị này và gửi khoá chung tới máy chủ nhà của bạn.\nĐây là một lần duy nhất; xin lỗi vì sự bất tiện.";
// Bug report
"bug_report_title" = "Báo cáo lỗi";

View file

@ -2,5 +2,5 @@
"NSCameraUsageDescription" = "摄像头权限用于拍摄照片、录制视频或进行视频聊天。";
"NSPhotoLibraryUsageDescription" = "照片库访问权限用于发送图片与视频。";
"NSMicrophoneUsageDescription" = "麦克风权限用于录制视频或进行通话。";
"NSContactsUsageDescription" = "为了发现已在使用Matrix的联系人Riot可以把你地址簿里的邮箱地址和电话号码发送到你所选择的Matrix身份认证服务器。如果支持的话个人数据在发送前会被哈希处理请检查你的身份认证服务器的隐私条款以获取详细信息。";
"NSContactsUsageDescription" = "为了发现已在使用Matrix的联系人Element可以把你地址簿里的邮箱地址和电话号码发送到你所选择的Matrix身份认证服务器。如果支持的话个人数据在发送前会被哈希处理请检查你的身份认证服务器的隐私条款以获取详细信息。";
"NSCalendarsUsageDescription" = "在此应用中查看你计划的会议。";

View file

@ -135,7 +135,7 @@
"contacts_address_book_matrix_users_toggle" = "只有 Matrix 用户";
"contacts_address_book_no_contact" = "没有本地联系人";
"contacts_address_book_permission_required" = "需要权限以便访问本地联系人";
"contacts_address_book_permission_denied" = "你没有允许 Riot 访问本地联系人";
"contacts_address_book_permission_denied" = "你没有允许 Element 访问本地联系人";
"contacts_matrix_users_section" = "已知联系人";
// Chat participants
"room_participants_title" = "参加者";
@ -282,11 +282,8 @@
"settings_version" = "版本 %@";
"settings_olm_version" = "Olm 版本 %@";
"settings_copyright" = "版权";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "条款和条件";
"settings_privacy_policy" = "隐私政策";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "第三方通知";
"settings_send_crash_report" = "发送崩溃和使用数据";
"settings_clear_cache" = "清空缓存";
@ -392,7 +389,7 @@
// Crash report
"google_analytics_use_prompt" = "您打算通过自动报告匿名的崩溃报告和使用数据来帮助提升 %@ 吗?";
// Crypto
"e2e_enabling_on_app_update" = "Riot 目前支持端对端加密,但是您需要重新登录以启用它。\n\n您可以现在重新登录也可以之后再从应用程序设置中选择开启。";
"e2e_enabling_on_app_update" = "Element 目前支持端对端加密,但是您需要重新登录以启用它。\n\n您可以现在重新登录也可以之后再从应用程序设置中选择开启。";
"e2e_need_log_in_again" = "您需要登录回来以便为此会话生成端对端加密密钥并提交公钥到您的主服务器。\n这只需要做一次很抱歉造成打扰。";
// Bug report
"bug_report_title" = "Bug 报告";
@ -520,7 +517,7 @@
"deactivate_account_password_alert_title" = "注销账户";
// Re-request confirmation dialog
"rerequest_keys_alert_title" = "请求已发送";
"settings_callkit_info" = "在您的锁屏界面接听 Riot 来电。在系统通话记录中显示 Riot 通话记录。若您已启用 iCloud通话记录将会与 Apple 共享。";
"settings_callkit_info" = "在您的锁屏界面接听 Element 来电。在系统通话记录中显示 Element 通话记录。若您已启用 iCloud通话记录将会与 Apple 共享。";
"room_replacement_link" = "对话自此继续。";
"room_predecessor_information" = "这个聊天室是另一个对话的延续。";
"room_predecessor_link" = "点击此处查看更早的消息。";
@ -530,7 +527,7 @@
"room_resource_usage_limit_reached_message_contact_3" = " 以提高限制。";
// String for App Store
"store_short_description" = "安全、去中心化的聊天及 VoIP 应用";
"store_full_description" = "沟通,由你掌控。\n\n一个聊天应用由你掌控且完全灵活。Riot 让你以你的方式沟通。为 [matrix] - 开放、去中心化的沟通而打造。\n\n获取一个免费的 matrix.org 账号,在 https://modular.im 获取一个你自己的服务器,或者使用其他 Matrix 服务器。\n\n为什么选择 Riot.im?\n\n完整的沟通围绕你的团队、你的朋友、你的社区创建聊天室 - 随你喜欢!聊天、分享文件、添加插件和语音视频通话 - 全部免费。\n\n强大的集成度通过你了解和喜欢的工具来使用 Riot.im 。你甚至可以在 Riot.im 上与其他聊天应用的用户和群组聊天。\n\n隐私和安全保守你对话的秘密。最先进的端到端加密技术可确保私密通信保持私密性。\n\n开放而非封闭开源基于 Matrix。通过自己开设的服务器来拥有你自己的数据或者选择你信赖的服务器。\n\n随处可及在你所有的设备和线上页面 https://riot.im 上通过完整的历史信息同步让你随处可及。";
"store_full_description" = "沟通,由你掌控。\n\n一个聊天应用由你掌控且完全灵活。Element 让你以你的方式沟通。为 [matrix] - 开放、去中心化的沟通而打造。\n\n获取一个免费的 matrix.org 账号,在 https://ems.element.io 获取一个你自己的服务器,或者使用其他 Matrix 服务器。\n\n为什么选择 Element?\n\n完整的沟通围绕你的团队、你的朋友、你的社区创建聊天室 - 随你喜欢!聊天、分享文件、添加插件和语音视频通话 - 全部免费。\n\n强大的集成度通过你了解和喜欢的工具来使用 Element 。你甚至可以在 Element 上与其他聊天应用的用户和群组聊天。\n\n隐私和安全保守你对话的秘密。最先进的端到端加密技术可确保私密通信保持私密性。\n\n开放而非封闭开源基于 Matrix。通过自己开设的服务器来拥有你自己的数据或者选择你信赖的服务器。\n\n随处可及在你所有的设备和线上页面 https://app.element.io 上通过完整的历史信息同步让你随处可及。";
"auth_accept_policies" = "请查看并接受此主页服务器的服务条款:";
"room_replacement_information" = "这个聊天室已被替换,不再有效。";
"settings_flair" = "在允许的地方显示个性徽章";
@ -591,7 +588,7 @@
"deactivate_account_forget_messages_information_part1" = "当我的账号注销时请忘记我所有的已发送消息(";
"deactivate_account_forget_messages_information_part3" = ": 这会导致将来加入的用户看到的是一段不完整的对话)";
"deactivate_account_password_alert_message" = "要继续,请输入您的密码";
"rerequest_keys_alert_message" = "请在另一台可以解密消息的设备上启动 Riot ,以便将密钥发送到此会话。";
"rerequest_keys_alert_message" = "请在另一台可以解密消息的设备上启动 Element ,以便将密钥发送到此会话。";
"key_backup_setup_title" = "密钥备份";
"key_backup_setup_skip_alert_title" = "您确定吗?";
"key_backup_setup_skip_alert_message" = "如果您退出或丢失设备,可能会丢失安全消息。";
@ -987,10 +984,10 @@
"user_verification_session_details_verify_action_current_user" = "交互式验证";
"user_verification_session_details_verify_action_other_user" = "手动验证";
// MARK: Clients
"client_desktop_name" = "Riot 桌面版";
"client_web_name" = "Riot Web";
"client_ios_name" = "Riot iOS";
"client_android_name" = "Riot X for Android";
"client_desktop_name" = "Element 桌面版";
"client_web_name" = "Element Web";
"client_ios_name" = "Element iOS";
"client_android_name" = "Element Android";
"room_participants_action_security_status_complete_security" = "完整安全性";
"room_participants_action_security_status_loading" = "加载中……";
"room_member_power_level_admin_in" = "在 %@ 的管理员";
@ -1011,7 +1008,7 @@
"security_settings_cryptography" = "加密";
"security_settings_complete_security_alert_title" = "绝对安全";
"security_settings_complete_security_alert_message" = "您应该先完成当前会话的安全防护。";
"security_settings_coming_soon" = "抱歉的。Riot-iOS上尚未提供此操作。请使用其他Matrix客户端进行设置。Riot-iOS将使用它。";
"security_settings_coming_soon" = "抱歉的。Element iOS上尚未提供此操作。请使用其他Matrix客户端进行设置。Element iOS将使用它。";
// Recover from private key
"key_backup_recover_from_private_key_info" = "备份恢复中…";
// MARK: - Device Verification
@ -1035,7 +1032,7 @@
"key_verification_self_verify_unverified_sessions_alert_validate_action" = "检查";
"device_verification_self_verify_wait_title" = "绝对安全";
"device_verification_self_verify_wait_new_sign_in_title" = "验证此登录名";
"device_verification_self_verify_wait_information" = "从您的其他会话之一验证此会话,并授予其对加密信息的访问权限。\n\n在您的其他设备上使用最新的Riot";
"device_verification_self_verify_wait_information" = "从您的其他会话之一验证此会话,并授予其对加密信息的访问权限。\n\n在您的其他设备上使用最新的Element";
"device_verification_self_verify_wait_additional_information" = "或另一个支持交叉签名的Matrix客户端";
"device_verification_self_verify_wait_recover_secrets_without_passphrase" = "使用恢复密钥";
"device_verification_self_verify_wait_recover_secrets_with_passphrase" = "使用恢复密码或密钥";

View file

@ -2,4 +2,4 @@
"NSCameraUsageDescription" = "相機權限會用來拍攝照片與影片,以及進行視訊通話。";
"NSPhotoLibraryUsageDescription" = "照片圖庫的權限會用來傳送照片與影片。";
"NSMicrophoneUsageDescription" = "麥克風的權限會用來拍攝影片與進行通話。";
"NSContactsUsageDescription" = "為了要顯示您的聯絡人中哪些人已在使用 Riot 或 Matrix我們將會傳送聯絡資訊內的電子郵件位址與電話給您的 Matrix 身份伺服器。New Vector 不會儲存這些資訊,也不會將這些資訊用於其他目的。請檢視應用程式設定的隱私權政策頁面來取得更多資訊。";
"NSContactsUsageDescription" = "為了要顯示您的聯絡人中哪些人已在使用 Element 或 Matrix我們將會傳送聯絡資訊內的電子郵件位址與電話給您的 Matrix 身份伺服器。New Vector 不會儲存這些資訊,也不會將這些資訊用於其他目的。請檢視應用程式設定的隱私權政策頁面來取得更多資訊。";

View file

@ -224,7 +224,7 @@
"contacts_address_book_matrix_users_toggle" = "只顯示 Matrix 使用者";
"contacts_address_book_no_contact" = "沒有裝置上的聯絡人";
"contacts_address_book_permission_required" = "取得裝置上的聯絡資訊需要權限";
"contacts_address_book_permission_denied" = "您沒有允許 Riot 存取裝置上的聯絡資訊";
"contacts_address_book_permission_denied" = "您沒有允許 Element 存取裝置上的聯絡資訊";
"contacts_user_directory_section" = "使用者目錄";
"contacts_user_directory_offline_section" = "使用者目錄(離線)";
// Chat participants
@ -347,7 +347,7 @@
"settings_pin_rooms_with_unread" = "釘選含有未讀訊息的聊天室";
"settings_on_denied_notification" = "因 %@ 的通知不被允許,請在裝置設定中允許";
"settings_enable_callkit" = "整合式通話";
"settings_callkit_info" = "提供在鎖定畫面接聽 Riot 來電、在通話紀錄中顯示 Riot 通話。 如果您已啟用 iCloud ,則會與蘋果公司共享通話紀錄。";
"settings_callkit_info" = "提供在鎖定畫面接聽 Element 來電、在通話紀錄中顯示 Element 通話。 如果您已啟用 iCloud ,則會與蘋果公司共享通話紀錄。";
"settings_ui_language" = "語言";
"settings_ui_theme" = "主題";
"settings_ui_theme_auto" = "自動";
@ -365,11 +365,8 @@
"settings_version" = "版本 %@";
"settings_olm_version" = "Olm 版本 %@";
"settings_copyright" = "版權";
"settings_copyright_url" = "https://riot.im/copyright";
"settings_term_conditions" = "合約條款";
"settings_term_conditions_url" = "https://riot.im/tac_apple";
"settings_privacy_policy" = "隱私權政策";
"settings_privacy_policy_url" = "https://riot.im/privacy";
"settings_third_party_notices" = "第三方通知";
"settings_send_crash_report" = "傳送崩潰和使用數據";
"settings_enable_rageshake" = "透過大力搖晃回報錯誤";
@ -493,7 +490,7 @@
// Crash report
"google_analytics_use_prompt" = "您願意透過自動送出匿名的崩潰報告和使用資料來幫住%@進步嗎?";
// Crypto
"e2e_enabling_on_app_update" = "Riot 目前支援點對點加密,但您需要重新登入來啟用他。\n\n您可以現在重新登入或稍後在應用程式設定中進行。";
"e2e_enabling_on_app_update" = "Element 目前支援點對點加密,但您需要重新登入來啟用他。\n\n您可以現在重新登入或稍後在應用程式設定中進行。";
// Bug report
"bug_report_title" = "錯誤回報";
"bug_report_send_screenshot" = "傳送螢幕截圖";
@ -505,7 +502,7 @@
"widget_creation_failure" = "建立 Widget 失敗";
"widget_sticker_picker_no_stickerpacks_alert" = "您目前沒有啟用任何貼圖。";
"widget_sticker_picker_no_stickerpacks_alert_add_now" = "現在新增一些嗎?";
"rerequest_keys_alert_message" = "請在其他可解密訊息的裝置開啟 Riot 以將密鑰傳送到此裝置。";
"rerequest_keys_alert_message" = "請在其他可解密訊息的裝置開啟 Element 以將密鑰傳送到此裝置。";
"bug_report_description" = "請描述此錯誤。您做了什麼? 本來應該發生什麼? 以及實際發生什麼?";
"bug_crash_report_description" = "請描述您在崩潰前做了什麼:";
"bug_report_logs_description" = "為了診斷問題,此用戶端的記錄檔將會隨此錯誤報告送出。 如果您只想傳送上面的文字,請取消:";

View file

@ -0,0 +1,33 @@
//
// Copyright 2020 Vector Creations 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
public extension Bundle {
/// Returns the real app bundle.
/// Can also be used in app extensions.
static var app: Bundle {
let bundle = main
if bundle.bundleURL.pathExtension == "appex" {
// Peel off two directory levels - MY_APP.app/PlugIns/MY_APP_EXTENSION.appex
let url = bundle.bundleURL.deletingLastPathComponent().deletingLastPathComponent()
if let otherBundle = Bundle(url: url) {
return otherBundle
}
}
return bundle
}
}

View file

@ -33,4 +33,10 @@ import UIKit
return false
}
}
/// Returns if the device is a Phone
var isPhone: Bool {
return userInterfaceIdiom == .phone
}
}

View file

@ -0,0 +1,34 @@
//
// Copyright 2020 Vector Creations 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
extension UIScrollView {
/// Scroll to the given view, which must be a view in the scrollView.
/// - Parameters:
/// - view: The view to scroll
/// - insets: Insets for the scroll area. Provide negative values for more visible area than the view's frame
/// - animated: animate the scroll
@objc func vc_scroll(to view: UIView, with insets: UIEdgeInsets = .zero, animated: Bool = true) {
// find the view's frame in the scrollView with given insets
let rect = view.convert(view.frame, to: self).inset(by: insets)
DispatchQueue.main.async {
self.scrollRectToVisible(rect, animated: animated)
}
}
}

View file

@ -28,5 +28,18 @@ extension UITableViewCell {
}
return result
}
@objc func vc_setAccessoryDisclosureIndicator(withTintColor tintColor: UIColor) {
let disclosureImageView = UIImageView(image: Asset.Images.disclosureIcon.image)
disclosureImageView.tintColor = tintColor
self.accessoryView = disclosureImageView
}
@objc func vc_setAccessoryDisclosureIndicator(withTheme theme: Theme) {
self.vc_setAccessoryDisclosureIndicator(withTintColor: theme.textSecondaryColor)
}
@objc func vc_setAccessoryDisclosureIndicatorWithCurrentTheme() {
self.vc_setAccessoryDisclosureIndicator(withTheme: ThemeService.shared().theme)
}
}

View file

@ -37,4 +37,21 @@ extension UIView {
subView.removeFromSuperview()
}
}
/// Shake the view to indicate an error
@objc func vc_shake() {
let shake = CABasicAnimation(keyPath: "position")
let xDelta = CGFloat(10)
shake.duration = 0.07
shake.repeatCount = 2
shake.autoreverses = true
let fromPoint = CGPoint(x: center.x - xDelta, y: center.y)
let toPoint = CGPoint(x: center.x + xDelta, y: center.y)
shake.fromValue = NSValue(cgPoint: fromPoint)
shake.toValue = NSValue(cgPoint: toPoint)
shake.timingFunction = CAMediaTimingFunction(name: .easeOut)
layer.add(shake, forKey: "position")
}
}

View file

@ -1,18 +1,19 @@
// swiftlint:disable all
// Generated using SwiftGen https://github.com/SwiftGen/SwiftGen
#if os(OSX)
import AppKit.NSImage
internal typealias AssetColorTypeAlias = NSColor
internal typealias AssetImageTypeAlias = NSImage
#elseif os(iOS) || os(tvOS) || os(watchOS)
import UIKit.UIImage
internal typealias AssetColorTypeAlias = UIColor
internal typealias AssetImageTypeAlias = UIImage
#if os(macOS)
import AppKit
#elseif os(iOS)
import UIKit
#elseif os(tvOS) || os(watchOS)
import UIKit
#endif
// swiftlint:disable superfluous_disable_command
// swiftlint:disable file_length
// Deprecated typealiases
@available(*, deprecated, renamed: "ImageAsset.Image", message: "This typealias will be removed in SwiftGen 7.0")
internal typealias AssetImageTypeAlias = ImageAsset.Image
// swiftlint:disable superfluous_disable_command file_length implicit_return
// MARK: - Asset Catalogs
@ -34,6 +35,7 @@ internal enum Asset {
internal static let chevron = ImageAsset(name: "chevron")
internal static let closeButton = ImageAsset(name: "close_button")
internal static let disclosureIcon = ImageAsset(name: "disclosure_icon")
internal static let faceidIcon = ImageAsset(name: "faceid_icon")
internal static let group = ImageAsset(name: "group")
internal static let monitor = ImageAsset(name: "monitor")
internal static let placeholder = ImageAsset(name: "placeholder")
@ -45,6 +47,7 @@ internal enum Asset {
internal static let shrinkIcon = ImageAsset(name: "shrink_icon")
internal static let smartphone = ImageAsset(name: "smartphone")
internal static let startChat = ImageAsset(name: "start_chat")
internal static let touchidIcon = ImageAsset(name: "touchid_icon")
internal static let addGroupParticipant = ImageAsset(name: "add_group_participant")
internal static let removeIconBlue = ImageAsset(name: "remove_icon_blue")
internal static let e2eBlocked = ImageAsset(name: "e2e_blocked")
@ -80,7 +83,6 @@ internal enum Asset {
internal static let uploadIcon = ImageAsset(name: "upload_icon")
internal static let voiceCallHangonIcon = ImageAsset(name: "voice_call_hangon_icon")
internal static let voiceCallHangupIcon = ImageAsset(name: "voice_call_hangup_icon")
internal static let voiceCallIcon = ImageAsset(name: "voice_call_icon")
internal static let addParticipant = ImageAsset(name: "add_participant")
internal static let detailsIcon = ImageAsset(name: "details_icon")
internal static let editIcon = ImageAsset(name: "edit_icon")
@ -119,80 +121,39 @@ internal enum Asset {
// MARK: - Implementation Details
internal struct ColorAsset {
internal fileprivate(set) var name: String
@available(iOS 11.0, tvOS 11.0, watchOS 4.0, OSX 10.13, *)
internal var color: AssetColorTypeAlias {
return AssetColorTypeAlias(asset: self)
}
}
internal extension AssetColorTypeAlias {
@available(iOS 11.0, tvOS 11.0, watchOS 4.0, OSX 10.13, *)
convenience init!(asset: ColorAsset) {
let bundle = Bundle(for: BundleToken.self)
#if os(iOS) || os(tvOS)
self.init(named: asset.name, in: bundle, compatibleWith: nil)
#elseif os(OSX)
self.init(named: NSColor.Name(asset.name), bundle: bundle)
#elseif os(watchOS)
self.init(named: asset.name)
#endif
}
}
internal struct DataAsset {
internal fileprivate(set) var name: String
#if os(iOS) || os(tvOS) || os(OSX)
@available(iOS 9.0, tvOS 9.0, OSX 10.11, *)
internal var data: NSDataAsset {
return NSDataAsset(asset: self)
}
#endif
}
#if os(iOS) || os(tvOS) || os(OSX)
@available(iOS 9.0, tvOS 9.0, OSX 10.11, *)
internal extension NSDataAsset {
convenience init!(asset: DataAsset) {
let bundle = Bundle(for: BundleToken.self)
#if os(iOS) || os(tvOS)
self.init(name: asset.name, bundle: bundle)
#elseif os(OSX)
self.init(name: NSDataAsset.Name(asset.name), bundle: bundle)
#endif
}
}
#endif
internal struct ImageAsset {
internal fileprivate(set) var name: String
internal var image: AssetImageTypeAlias {
let bundle = Bundle(for: BundleToken.self)
#if os(macOS)
internal typealias Image = NSImage
#elseif os(iOS) || os(tvOS) || os(watchOS)
internal typealias Image = UIImage
#endif
internal var image: Image {
let bundle = BundleToken.bundle
#if os(iOS) || os(tvOS)
let image = AssetImageTypeAlias(named: name, in: bundle, compatibleWith: nil)
#elseif os(OSX)
let image = Image(named: name, in: bundle, compatibleWith: nil)
#elseif os(macOS)
let image = bundle.image(forResource: NSImage.Name(name))
#elseif os(watchOS)
let image = AssetImageTypeAlias(named: name)
let image = Image(named: name)
#endif
guard let result = image else { fatalError("Unable to load image named \(name).") }
guard let result = image else {
fatalError("Unable to load image named \(name).")
}
return result
}
}
internal extension AssetImageTypeAlias {
@available(iOS 1.0, tvOS 1.0, watchOS 1.0, *)
@available(OSX, deprecated,
internal extension ImageAsset.Image {
@available(macOS, deprecated,
message: "This initializer is unsafe on macOS, please use the ImageAsset.image property")
convenience init!(asset: ImageAsset) {
#if os(iOS) || os(tvOS)
let bundle = Bundle(for: BundleToken.self)
let bundle = BundleToken.bundle
self.init(named: asset.name, in: bundle, compatibleWith: nil)
#elseif os(OSX)
#elseif os(macOS)
self.init(named: NSImage.Name(asset.name))
#elseif os(watchOS)
self.init(named: asset.name)
@ -200,4 +161,10 @@ internal extension AssetImageTypeAlias {
}
}
private final class BundleToken {}
// swiftlint:disable convenience_type
private final class BundleToken {
static let bundle: Bundle = {
Bundle(for: BundleToken.self)
}()
}
// swiftlint:enable convenience_type

View file

@ -0,0 +1,89 @@
// swiftlint:disable all
// Generated using SwiftGen https://github.com/SwiftGen/SwiftGen
import Foundation
// swiftlint:disable superfluous_disable_command
// swiftlint:disable file_length
// MARK: - Plist Files
// swiftlint:disable identifier_name line_length type_body_length
internal enum InfoPlist {
private static let _document = PlistDocument(path: "Info.plist")
internal static let cfBundleDevelopmentRegion: String = _document["CFBundleDevelopmentRegion"]
internal static let cfBundleDisplayName: String = _document["CFBundleDisplayName"]
internal static let cfBundleExecutable: String = _document["CFBundleExecutable"]
internal static let cfBundleIdentifier: String = _document["CFBundleIdentifier"]
internal static let cfBundleInfoDictionaryVersion: String = _document["CFBundleInfoDictionaryVersion"]
internal static let cfBundleName: String = _document["CFBundleName"]
internal static let cfBundlePackageType: String = _document["CFBundlePackageType"]
internal static let cfBundleShortVersionString: String = _document["CFBundleShortVersionString"]
internal static let cfBundleSignature: String = _document["CFBundleSignature"]
internal static let cfBundleVersion: String = _document["CFBundleVersion"]
internal static let itsAppUsesNonExemptEncryption: Bool = _document["ITSAppUsesNonExemptEncryption"]
internal static let itsEncryptionExportComplianceCode: String = _document["ITSEncryptionExportComplianceCode"]
internal static let lsRequiresIPhoneOS: Bool = _document["LSRequiresIPhoneOS"]
internal static let nsAppTransportSecurity: [String: Any] = _document["NSAppTransportSecurity"]
internal static let nsCalendarsUsageDescription: String = _document["NSCalendarsUsageDescription"]
internal static let nsCameraUsageDescription: String = _document["NSCameraUsageDescription"]
internal static let nsContactsUsageDescription: String = _document["NSContactsUsageDescription"]
internal static let nsFaceIDUsageDescription: String = _document["NSFaceIDUsageDescription"]
internal static let nsMicrophoneUsageDescription: String = _document["NSMicrophoneUsageDescription"]
internal static let nsPhotoLibraryUsageDescription: String = _document["NSPhotoLibraryUsageDescription"]
internal static let nsSiriUsageDescription: String = _document["NSSiriUsageDescription"]
internal static let uiBackgroundModes: [String] = _document["UIBackgroundModes"]
internal static let uiLaunchStoryboardName: String = _document["UILaunchStoryboardName"]
internal static let uiMainStoryboardFile: String = _document["UIMainStoryboardFile"]
internal static let uiRequiredDeviceCapabilities: [String] = _document["UIRequiredDeviceCapabilities"]
internal static let uiStatusBarHidden: Bool = _document["UIStatusBarHidden"]
internal static let uiStatusBarTintParameters: [String: Any] = _document["UIStatusBarTintParameters"]
internal static let uiSupportedInterfaceOrientations: [String] = _document["UISupportedInterfaceOrientations"]
internal static let uiSupportedInterfaceOrientationsIpad: [String] = _document["UISupportedInterfaceOrientations~ipad"]
internal static let uiViewControllerBasedStatusBarAppearance: Bool = _document["UIViewControllerBasedStatusBarAppearance"]
internal static let userDefaults: String = _document["UserDefaults"]
internal static let applicationGroupIdentifier: String = _document["applicationGroupIdentifier"]
internal static let baseBundleIdentifier: String = _document["baseBundleIdentifier"]
internal static let keychainAccessGroup: String = _document["keychainAccessGroup"]
}
// swiftlint:enable identifier_name line_length type_body_length
// MARK: - Implementation Details
private func arrayFromPlist<T>(at path: String) -> [T] {
let bundle = BundleToken.bundle
guard let url = bundle.url(forResource: path, withExtension: nil),
let data = NSArray(contentsOf: url) as? [T] else {
fatalError("Unable to load PLIST at path: \(path)")
}
return data
}
private struct PlistDocument {
let data: [String: Any]
init(path: String) {
let bundle = BundleToken.bundle
guard let url = bundle.url(forResource: path, withExtension: nil),
let data = NSDictionary(contentsOf: url) as? [String: Any] else {
fatalError("Unable to load PLIST at path: \(path)")
}
self.data = data
}
subscript<T>(key: String) -> T {
guard let result = data[key] as? T else {
fatalError("Property '\(key)' is not of type \(T.self)")
}
return result
}
}
// swiftlint:disable convenience_type
private final class BundleToken {
static let bundle: Bundle = {
Bundle(for: BundleToken.self)
}()
}
// swiftlint:enable convenience_type

View file

@ -12,52 +12,29 @@ import Foundation
internal enum RiotDefaults {
private static let _document = PlistDocument(path: "Riot-Defaults.plist")
internal static let bugReportApp: String = _document["bugReportApp"]
internal static let bugReportEndpointUrl: String = _document["bugReportEndpointUrl"]
internal static let createConferenceCallsWithJitsi: Bool = _document["createConferenceCallsWithJitsi"]
internal static let enableBotCreation: Bool = _document["enableBotCreation"]
internal static let enableRageShake: Bool = _document["enableRageShake"]
internal static let homeserver: String = _document["homeserver"]
internal static let homeserverurl: String = _document["homeserverurl"]
internal static let identityserverurl: String = _document["identityserverurl"]
internal static let integrationsRestUrl: String = _document["integrationsRestUrl"]
internal static let integrationsUiUrl: String = _document["integrationsUiUrl"]
internal static let integrationsWidgetsUrls: [String] = _document["integrationsWidgetsUrls"]
internal static let jitsiServerURL: String = _document["jitsiServerURL"]
internal static let matrixApps: Bool = _document["matrixApps"]
internal static let maxAllowedMediaCacheSize: Int = _document["maxAllowedMediaCacheSize"]
internal static let pinRoomsWithMissedNotif: Bool = _document["pinRoomsWithMissedNotif"]
internal static let pinRoomsWithUnread: Bool = _document["pinRoomsWithUnread"]
internal static let piwik: [String: Any] = _document["piwik"]
internal static let presenceColorForOfflineUser: Int = _document["presenceColorForOfflineUser"]
internal static let presenceColorForOnlineUser: Int = _document["presenceColorForOnlineUser"]
internal static let presenceColorForUnavailableUser: Int = _document["presenceColorForUnavailableUser"]
internal static let pushGatewayURL: String = _document["pushGatewayURL"]
internal static let pushKitAppIdDev: String = _document["pushKitAppIdDev"]
internal static let pushKitAppIdProd: String = _document["pushKitAppIdProd"]
internal static let pusherAppIdDev: String = _document["pusherAppIdDev"]
internal static let pusherAppIdProd: String = _document["pusherAppIdProd"]
internal static let roomDirectoryServers: [String: Any] = _document["roomDirectoryServers"]
internal static let settingsCopyrightUrl: String = _document["settingsCopyrightUrl"]
internal static let settingsPrivacyPolicyUrl: String = _document["settingsPrivacyPolicyUrl"]
internal static let settingsTermsConditionsUrl: String = _document["settingsTermsConditionsUrl"]
internal static let showAllEventsInRoomHistory: Bool = _document["showAllEventsInRoomHistory"]
internal static let showLeftMembersInRoomMemberList: Bool = _document["showLeftMembersInRoomMemberList"]
internal static let showRedactionsInRoomHistory: Bool = _document["showRedactionsInRoomHistory"]
internal static let showUnsupportedEventsInRoomHistory: Bool = _document["showUnsupportedEventsInRoomHistory"]
internal static let sortRoomMembersUsingLastSeenTime: Bool = _document["sortRoomMembersUsingLastSeenTime"]
internal static let stunServerFallback: String = _document["stunServerFallback"]
internal static let syncLocalContacts: Bool = _document["syncLocalContacts"]
internal static let webAppUrl: String = _document["webAppUrl"]
internal static let webAppUrlDev: String = _document["webAppUrlDev"]
internal static let webAppUrlStaging: String = _document["webAppUrlStaging"]
}
// swiftlint:enable identifier_name line_length type_body_length
// MARK: - Implementation Details
private func arrayFromPlist<T>(at path: String) -> [T] {
let bundle = Bundle(for: BundleToken.self)
let bundle = BundleToken.bundle
guard let url = bundle.url(forResource: path, withExtension: nil),
let data = NSArray(contentsOf: url) as? [T] else {
fatalError("Unable to load PLIST at path: \(path)")
@ -69,7 +46,7 @@ private struct PlistDocument {
let data: [String: Any]
init(path: String) {
let bundle = Bundle(for: BundleToken.self)
let bundle = BundleToken.bundle
guard let url = bundle.url(forResource: path, withExtension: nil),
let data = NSDictionary(contentsOf: url) as? [String: Any] else {
fatalError("Unable to load PLIST at path: \(path)")
@ -85,4 +62,10 @@ private struct PlistDocument {
}
}
private final class BundleToken {}
// swiftlint:disable convenience_type
private final class BundleToken {
static let bundle: Bundle = {
Bundle(for: BundleToken.self)
}()
}
// swiftlint:enable convenience_type

View file

@ -32,6 +32,11 @@ internal enum StoryboardScene {
internal static let initialScene = InitialSceneType<Riot.EmojiPickerViewController>(storyboard: EmojiPickerViewController.self)
}
internal enum EnterPinCodeViewController: StoryboardType {
internal static let storyboardName = "EnterPinCodeViewController"
internal static let initialScene = InitialSceneType<Riot.EnterPinCodeViewController>(storyboard: EnterPinCodeViewController.self)
}
internal enum KeyBackupRecoverFromPassphraseViewController: StoryboardType {
internal static let storyboardName = "KeyBackupRecoverFromPassphraseViewController"
@ -172,6 +177,11 @@ internal enum StoryboardScene {
internal static let initialScene = InitialSceneType<Riot.SettingsIdentityServerViewController>(storyboard: SettingsIdentityServerViewController.self)
}
internal enum SetupBiometricsViewController: StoryboardType {
internal static let storyboardName = "SetupBiometricsViewController"
internal static let initialScene = InitialSceneType<Riot.SetupBiometricsViewController>(storyboard: SetupBiometricsViewController.self)
}
internal enum SimpleScreenTemplateViewController: StoryboardType {
internal static let storyboardName = "SimpleScreenTemplateViewController"
@ -214,7 +224,7 @@ internal protocol StoryboardType {
internal extension StoryboardType {
static var storyboard: UIStoryboard {
let name = self.storyboardName
return UIStoryboard(name: name, bundle: Bundle(for: BundleToken.self))
return UIStoryboard(name: name, bundle: BundleToken.bundle)
}
}
@ -242,4 +252,10 @@ internal struct InitialSceneType<T: UIViewController> {
}
}
private final class BundleToken {}
// swiftlint:disable convenience_type
private final class BundleToken {
static let bundle: Bundle = {
Bundle(for: BundleToken.self)
}()
}
// swiftlint:enable convenience_type

View file

@ -318,6 +318,62 @@ internal enum VectorL10n {
internal static var back: String {
return VectorL10n.tr("Vector", "back")
}
/// Log back in
internal static var biometricsCantUnlockedAlertMessageLogin: String {
return VectorL10n.tr("Vector", "biometrics_cant_unlocked_alert_message_login")
}
/// Retry
internal static var biometricsCantUnlockedAlertMessageRetry: String {
return VectorL10n.tr("Vector", "biometrics_cant_unlocked_alert_message_retry")
}
/// To unlock, use %@ or log back in and enable %@ again
internal static func biometricsCantUnlockedAlertMessageX(_ p1: String, _ p2: String) -> String {
return VectorL10n.tr("Vector", "biometrics_cant_unlocked_alert_message_x", p1, p2)
}
/// Can't unlock app
internal static var biometricsCantUnlockedAlertTitle: String {
return VectorL10n.tr("Vector", "biometrics_cant_unlocked_alert_title")
}
/// Disable %@
internal static func biometricsDesetupDisableButtonTitleX(_ p1: String) -> String {
return VectorL10n.tr("Vector", "biometrics_desetup_disable_button_title_x", p1)
}
///
internal static var biometricsDesetupSubtitle: String {
return VectorL10n.tr("Vector", "biometrics_desetup_subtitle")
}
/// Disable %@
internal static func biometricsDesetupTitleX(_ p1: String) -> String {
return VectorL10n.tr("Vector", "biometrics_desetup_title_x", p1)
}
/// Face ID
internal static var biometricsModeFaceId: String {
return VectorL10n.tr("Vector", "biometrics_mode_face_id")
}
/// Touch ID
internal static var biometricsModeTouchId: String {
return VectorL10n.tr("Vector", "biometrics_mode_touch_id")
}
/// Enable %@
internal static func biometricsSettingsEnableX(_ p1: String) -> String {
return VectorL10n.tr("Vector", "biometrics_settings_enable_x", p1)
}
/// Enable %@
internal static func biometricsSetupEnableButtonTitleX(_ p1: String) -> String {
return VectorL10n.tr("Vector", "biometrics_setup_enable_button_title_x", p1)
}
/// Save yourself time
internal static var biometricsSetupSubtitle: String {
return VectorL10n.tr("Vector", "biometrics_setup_subtitle")
}
/// Enable %@
internal static func biometricsSetupTitleX(_ p1: String) -> String {
return VectorL10n.tr("Vector", "biometrics_setup_title_x", p1)
}
/// Authentication is needed to access your app
internal static var biometricsUsageReason: String {
return VectorL10n.tr("Vector", "biometrics_usage_reason")
}
/// Please describe what you did before the crash:
internal static var bugCrashReportDescription: String {
return VectorL10n.tr("Vector", "bug_crash_report_description")
@ -1122,6 +1178,14 @@ internal enum VectorL10n {
internal static func eventFormatterWidgetRemovedByYou(_ p1: String) -> String {
return VectorL10n.tr("Vector", "event_formatter_widget_removed_by_you", p1)
}
/// The link %@ is taking you to another site: %@\n\nAre you sure you want to continue?
internal static func externalLinkConfirmationMessage(_ p1: String, _ p2: String) -> String {
return VectorL10n.tr("Vector", "external_link_confirmation_message", p1, p2)
}
/// Double-check this link
internal static var externalLinkConfirmationTitle: String {
return VectorL10n.tr("Vector", "external_link_confirmation_title")
}
/// File upload
internal static var fileUploadErrorTitle: String {
return VectorL10n.tr("Vector", "file_upload_error_title")
@ -1902,6 +1966,66 @@ internal enum VectorL10n {
internal static func photoLibraryAccessNotGranted(_ p1: String) -> String {
return VectorL10n.tr("Vector", "photo_library_access_not_granted", p1)
}
/// Choose a PIN for security
internal static var pinProtectionChoosePin: String {
return VectorL10n.tr("Vector", "pin_protection_choose_pin")
}
/// Confirm your PIN
internal static var pinProtectionConfirmPin: String {
return VectorL10n.tr("Vector", "pin_protection_confirm_pin")
}
/// Confirm PIN to disable PIN
internal static var pinProtectionConfirmPinToDisable: String {
return VectorL10n.tr("Vector", "pin_protection_confirm_pin_to_disable")
}
/// Enter your PIN
internal static var pinProtectionEnterPin: String {
return VectorL10n.tr("Vector", "pin_protection_enter_pin")
}
/// Forgot PIN
internal static var pinProtectionForgotPin: String {
return VectorL10n.tr("Vector", "pin_protection_forgot_pin")
}
/// Please try again
internal static var pinProtectionMismatchErrorMessage: String {
return VectorL10n.tr("Vector", "pin_protection_mismatch_error_message")
}
/// PINs don't match
internal static var pinProtectionMismatchErrorTitle: String {
return VectorL10n.tr("Vector", "pin_protection_mismatch_error_title")
}
/// If you can't remember your PIN, tap the forgot PIN button.
internal static var pinProtectionMismatchTooManyTimesErrorMessage: String {
return VectorL10n.tr("Vector", "pin_protection_mismatch_too_many_times_error_message")
}
/// Reset
internal static var pinProtectionResetAlertActionReset: String {
return VectorL10n.tr("Vector", "pin_protection_reset_alert_action_reset")
}
/// To reset your PIN, you'll need to re-login and create a new one
internal static var pinProtectionResetAlertMessage: String {
return VectorL10n.tr("Vector", "pin_protection_reset_alert_message")
}
/// Reset PIN
internal static var pinProtectionResetAlertTitle: String {
return VectorL10n.tr("Vector", "pin_protection_reset_alert_title")
}
/// Enable PIN
internal static var pinProtectionSettingsEnablePin: String {
return VectorL10n.tr("Vector", "pin_protection_settings_enable_pin")
}
/// PIN enabled
internal static var pinProtectionSettingsEnabledForced: String {
return VectorL10n.tr("Vector", "pin_protection_settings_enabled_forced")
}
/// To reset your PIN, you'll need to re-login and create a new one.
internal static var pinProtectionSettingsSectionFooter: String {
return VectorL10n.tr("Vector", "pin_protection_settings_section_footer")
}
/// PIN & %@
internal static func pinProtectionSettingsSectionHeaderX(_ p1: String) -> String {
return VectorL10n.tr("Vector", "pin_protection_settings_section_header_x", p1)
}
/// Preview
internal static var preview: String {
return VectorL10n.tr("Vector", "preview")
@ -3674,14 +3798,6 @@ internal enum VectorL10n {
internal static var settingsLabsMessageReaction: String {
return VectorL10n.tr("Vector", "settings_labs_message_reaction")
}
/// Lazy load rooms members
internal static var settingsLabsRoomMembersLazyLoading: String {
return VectorL10n.tr("Vector", "settings_labs_room_members_lazy_loading")
}
/// Your homeserver does not support lazy loading of room members yet. Try later.
internal static var settingsLabsRoomMembersLazyLoadingErrorMessage: String {
return VectorL10n.tr("Vector", "settings_labs_room_members_lazy_loading_error_message")
}
/// Mark all messages as read
internal static var settingsMarkAllAsRead: String {
return VectorL10n.tr("Vector", "settings_mark_all_as_read")
@ -3918,10 +4034,14 @@ internal enum VectorL10n {
internal static var start: String {
return VectorL10n.tr("Vector", "start")
}
/// Communicate, your way.\n\nA chat app, under your control and entirely flexible. Riot lets you communicate the way you want. Made for [matrix] - the standard for open, decentralised communication.\n\nGet a free matrix.org account, get your own server at https://modular.im, or use another Matrix server.\n\nWhy choose Riot.im?\n\nCOMPLETE COMMUNICATION: Build rooms around your teams, your friends, your community - however you like! Chat, share files, add widgets and make voice and video calls - all free of charge.\n\nPOWERFUL INTEGRATIONS: Use Riot.im with the tools you know and love. With Riot.im you can even chat with users and groups on other chat apps.\n\nPRIVATE AND SECURE: Keep your conversations secret. State of the art end-to-end encryption ensures that private communication stays private.\n\nOPEN, NOT CLOSED: Open source, and built on Matrix. Own your own data by hosting your own server, or selecting one you trust.\n\nEVERYWHERE YOU ARE: Stay in touch wherever you are with fully synchronised message history across all your devices and online at https://element.io.
/// Element is a new type of messenger and collaboration app that:\n\n1. Puts you in control to preserve your privacy\n2. Lets you communicate with anyone in the Matrix network, and even beyond by integrating with apps such as Slack\n3. Protects you from advertising, datamining, backdoors and walled gardens\n4. Secures you through end-to-end encryption, with cross-signing to verify others\n\nElement is completely different from other messaging and collaboration apps because it is decentralised and open source.\n\nElement lets you self-host - or choose a host - so that you have privacy, ownership and control of your data and conversations. It gives you access to an open network; so youre not just stuck speaking to other Element users only. And it is very secure.\n\nElement is able to do all this because it operates on Matrix - the standard for open, decentralised communication. \n\nElement puts you in control by letting you choose who hosts your conversations. From the Element app, you can choose to host in different ways:\n\n1. Get a free account on the matrix.org public server\n2. Self-host your account by running a server on your own hardware\n3. Sign up for an account on a custom server by simply subscribing to the Element Matrix Services hosting platform\n\nWhy choose Element?\n\nOWN YOUR DATA: You decide where to keep your data and messages. You own it and control it, not some MEGACORP that mines your data or gives access to third parties.\n\nOPEN MESSAGING AND COLLABORATION: You can chat with anyone else in the Matrix network, whether theyre using Element or another Matrix app, and even if they are using a different messaging system of the likes of Slack, IRC or XMPP.\n\nSUPER-SECURE: Real end-to-end encryption (only those in the conversation can decrypt messages), and cross-signing to verify the devices of conversation participants.\n\nCOMPLETE COMMUNICATION: Messaging, voice and video calls, file sharing, screen sharing and a whole bunch of integrations, bots and widgets. Build rooms, communities, stay in touch and get things done.\n\nEVERYWHERE YOU ARE: Stay in touch wherever you are with fully synchronised message history across all your devices and on the web at https://element.io/app.
internal static var storeFullDescription: String {
return VectorL10n.tr("Vector", "store_full_description")
}
/// Privacy-preserving chat and collaboration app, on an open network. Decentralised to put you in control. No datamining, no backdoors and no third party access.
internal static var storePromotionalText: String {
return VectorL10n.tr("Vector", "store_promotional_text")
}
/// Secure decentralised chat/VoIP
internal static var storeShortDescription: String {
return VectorL10n.tr("Vector", "store_short_description")

View file

@ -42,8 +42,9 @@ NSString *const kAnalyticsE2eDecryptionFailureAction = @"Decryption failure";
@implementation MatomoTracker (MatomoTrackerMigration)
+ (MatomoTracker *)shared
{
NSDictionary *piwikConfig = [[NSUserDefaults standardUserDefaults] objectForKey:@"piwik"];
MatomoTracker *matomoTracker = [[MatomoTracker alloc] initWithSiteId:piwikConfig[@"siteId"] baseURL:[NSURL URLWithString:piwikConfig[@"url"]] userAgent:@"iOSMatomoTracker"];
MatomoTracker *matomoTracker = [[MatomoTracker alloc] initWithSiteId:BuildSettings.analyticsAppId
baseURL:BuildSettings.analyticsServerUrl
userAgent:@"iOSMatomoTracker"];
[matomoTracker migrateFromFourPointFourSharedInstance];
return matomoTracker;
}

View file

@ -94,6 +94,10 @@ final class AppVersion: NSObject {
UserDefaults.standard.set(currentVersion.bundleShortVersion, forKey: Constants.lastBundleShortVersion)
UserDefaults.standard.set(currentVersion.bundleVersion, forKey: Constants.lastBundleVersion)
}
override var description: String {
return "\(bundleShortVersion)(\(bundleVersion))"
}
// MARK: - Private

View file

@ -0,0 +1,34 @@
//
// Copyright 2020 Vector Creations 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
typealias KeyValueStoreKey = String
protocol KeyValueStore {
// setters
func set(_ value: Data?, forKey key: KeyValueStoreKey) throws
func set(_ value: String?, forKey key: KeyValueStoreKey) throws
func set(_ value: Bool?, forKey key: KeyValueStoreKey) throws
// getters
func data(forKey key: KeyValueStoreKey) throws -> Data?
func string(forKey key: KeyValueStoreKey) throws -> String?
func bool(forKey key: KeyValueStoreKey) throws -> Bool?
// remove
func removeObject(forKey key: KeyValueStoreKey) throws
}

View file

@ -0,0 +1,97 @@
//
// Copyright 2020 Vector Creations 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
import KeychainAccess
/// Extension on Keychain to get/set booleans
extension Keychain {
public func set(_ value: Bool, key: String, ignoringAttributeSynchronizable: Bool = true) throws {
try set(value.description, key: key, ignoringAttributeSynchronizable: ignoringAttributeSynchronizable)
}
public func getBool(_ key: String, ignoringAttributeSynchronizable: Bool = true) throws -> Bool? {
guard let value = try getString(key, ignoringAttributeSynchronizable: ignoringAttributeSynchronizable) else {
return nil
}
guard value == true.description || value == false.description else { return nil }
return value == true.description
}
}
class KeychainStore {
private var keychain: Keychain
/// Initializer
/// - Parameter keychain: Keychain instance to be used to read/write
init(withKeychain keychain: Keychain) {
self.keychain = keychain
}
}
extension KeychainStore: KeyValueStore {
// setters
func set(_ value: Data?, forKey key: KeyValueStoreKey) throws {
guard let value = value else {
try removeObject(forKey: key)
return
}
try keychain.set(value, key: key)
}
func set(_ value: String?, forKey key: KeyValueStoreKey) throws {
guard let value = value else {
try removeObject(forKey: key)
return
}
try keychain.set(value, key: key)
}
func set(_ value: Bool?, forKey key: KeyValueStoreKey) throws {
guard let value = value else {
try removeObject(forKey: key)
return
}
try keychain.set(value, key: key)
}
// getters
func data(forKey key: KeyValueStoreKey) throws -> Data? {
return try keychain.getData(key)
}
func string(forKey key: KeyValueStoreKey) throws -> String? {
return try keychain.getString(key)
}
func bool(forKey key: KeyValueStoreKey) throws -> Bool? {
return try keychain.getBool(key)
}
// remove
func removeObject(forKey key: KeyValueStoreKey) throws {
try keychain.remove(key)
}
}

View file

@ -0,0 +1,70 @@
//
// Copyright 2020 Vector Creations 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
class MemoryStore {
private var map: Dictionary<KeyValueStoreKey, Any> = [:]
private func setObject(_ value: Any?, forKey key: KeyValueStoreKey) {
if let value = value {
map[key] = value
} else {
removeObject(forKey: key)
}
}
private func object(forKey key: KeyValueStoreKey) -> Any? {
return map[key]
}
}
extension MemoryStore: KeyValueStore {
// setters
func set(_ value: Data?, forKey key: KeyValueStoreKey) throws {
setObject(value, forKey: key)
}
func set(_ value: String?, forKey key: KeyValueStoreKey) throws {
setObject(value, forKey: key)
}
func set(_ value: Bool?, forKey key: KeyValueStoreKey) throws {
setObject(value, forKey: key)
}
// getters
func data(forKey key: KeyValueStoreKey) throws -> Data? {
return object(forKey: key) as? Data
}
func string(forKey key: KeyValueStoreKey) throws -> String? {
return object(forKey: key) as? String
}
func bool(forKey key: KeyValueStoreKey) throws -> Bool? {
return object(forKey: key) as? Bool
}
// remove
func removeObject(forKey key: KeyValueStoreKey) {
map.removeValue(forKey: key)
}
}

View file

@ -0,0 +1,63 @@
//
// Copyright 2020 Vector Creations 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
class LocalAuthenticationService: NSObject {
private let pinCodePreferences: PinCodePreferences
init(pinCodePreferences: PinCodePreferences) {
self.pinCodePreferences = pinCodePreferences
super.init()
setup()
}
private var appLastActiveTime: TimeInterval?
private var systemUptime: TimeInterval {
var uptime = timespec()
if 0 != clock_gettime(CLOCK_MONOTONIC_RAW, &uptime) {
fatalError("Could not execute clock_gettime, errno: \(errno)")
}
return TimeInterval(uptime.tv_sec)
}
private func setup() {
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillResignActive), name: UIApplication.willResignActiveNotification, object: nil)
}
var shouldShowPinCode: Bool {
if !pinCodePreferences.isPinSet && !pinCodePreferences.isBiometricsSet {
return false
}
if MXKAccountManager.shared()?.activeAccounts.count == 0 {
return false
}
guard let appLastActiveTime = appLastActiveTime else {
return true
}
return (systemUptime - appLastActiveTime) > pinCodePreferences.graceTimeInSeconds
}
func applicationWillResignActive() {
appLastActiveTime = systemUptime
}
}

View file

@ -23,6 +23,8 @@ final class RiotSettings: NSObject {
// MARK: - Constants
private enum UserDefaultsKeys {
static let homeserverUrlString = "homeserverurl"
static let identityServerUrlString = "identityserverurl"
static let enableCrashReport = "enableCrashReport"
static let enableRageShake = "enableRageShake"
static let createConferenceCallsWithJitsi = "createConferenceCallsWithJitsi"
@ -31,20 +33,38 @@ final class RiotSettings: NSObject {
static let pinRoomsWithMissedNotifications = "pinRoomsWithMissedNotif"
static let pinRoomsWithUnreadMessages = "pinRoomsWithUnread"
static let allowStunServerFallback = "allowStunServerFallback"
static let stunServerFallback = "stunServerFallback"
static let hideVerifyThisSessionAlert = "hideVerifyThisSessionAlert"
static let hideReviewSessionsAlert = "hideReviewSessionsAlert"
static let matrixApps = "matrixApps"
}
static let shared = RiotSettings()
/// UserDefaults to be used on reads and writes.
private lazy var defaults: UserDefaults = {
return UserDefaults(suiteName: "group.im.vector")!
return UserDefaults(suiteName: BuildSettings.applicationGroupIdentifier)!
}()
// MARK: - Public
// MARK: Servers
var homeserverUrlString: String {
get {
return defaults.string(forKey: UserDefaultsKeys.homeserverUrlString) ?? BuildSettings.serverConfigDefaultHomeserverUrlString
} set {
defaults.set(newValue, forKey: UserDefaultsKeys.homeserverUrlString)
}
}
var identityServerUrlString: String {
get {
return defaults.string(forKey: UserDefaultsKeys.identityServerUrlString) ?? BuildSettings.serverConfigDefaultIdentityServerUrlString
} set {
defaults.set(newValue, forKey: UserDefaultsKeys.identityServerUrlString)
}
}
// MARK: Notifications
/// Indicate if `showDecryptedContentInNotifications` settings has been set once.
@ -153,10 +173,6 @@ final class RiotSettings: NSObject {
defaults.set(newValue, forKey: UserDefaultsKeys.allowStunServerFallback)
}
}
var stunServerFallback: String? {
return defaults.string(forKey: UserDefaultsKeys.stunServerFallback)
}
// MARK: Key verification
@ -175,4 +191,12 @@ final class RiotSettings: NSObject {
defaults.set(newValue, forKey: UserDefaultsKeys.hideReviewSessionsAlert)
}
}
var matrixApps: Bool {
get {
return defaults.bool(forKey: UserDefaultsKeys.matrixApps)
} set {
defaults.set(newValue, forKey: UserDefaultsKeys.matrixApps)
}
}
}

View file

@ -296,7 +296,7 @@ NSString *const WidgetManagerErrorDomain = @"WidgetManagerErrorDomain";
// This url can be used as is inside a web container (like iframe for Riot-web)
// Build it from the riot-web app
NSString *appUrlString = [[NSUserDefaults standardUserDefaults] objectForKey:@"webAppUrl"];
NSString *appUrlString = BuildSettings.applicationWebAppUrlString;
// We mix v1 and v2 param for backward compability
NSString *v1Params = [NSString stringWithFormat:@"confId=%@&isAudioConf=%@&displayName=$matrix_display_name&avatarUrl=$matrix_avatar_url&email=$matrix_user_id", confId, video ? @"false" : @"true"];
@ -307,8 +307,7 @@ NSString *const WidgetManagerErrorDomain = @"WidgetManagerErrorDomain";
// Build widget data
// We mix v1 and v2 widget data for backward compability
NSString *preferredJitsiServerUrlString = [[NSUserDefaults standardUserDefaults] objectForKey:@"jitsiServerURL"];
NSURL *preferredJitsiServerUrl = [NSURL URLWithString:preferredJitsiServerUrlString];
NSURL *preferredJitsiServerUrl = BuildSettings.jitsiServerUrl;
JitsiWidgetData *jitsiWidgetData = [JitsiWidgetData new];
jitsiWidgetData.domain = preferredJitsiServerUrl.host;
@ -524,10 +523,8 @@ NSString *const WidgetManagerErrorDomain = @"WidgetManagerErrorDomain";
- (WidgetManagerConfig*)createWidgetManagerConfigWithAppSettings
{
NSString *apiUrl = [[NSUserDefaults standardUserDefaults] objectForKey:@"integrationsRestUrl"];
NSString *uiUrl = [[NSUserDefaults standardUserDefaults] objectForKey:@"integrationsUiUrl"];
return [[WidgetManagerConfig alloc] initWithApiUrl:apiUrl uiUrl:uiUrl];
return [[WidgetManagerConfig alloc] initWithApiUrl:BuildSettings.integrationsRestApiUrlString
uiUrl:BuildSettings.integrationsUiUrlString];
}
#pragma mark - Modular interface
@ -744,7 +741,7 @@ NSString *const WidgetManagerErrorDomain = @"WidgetManagerErrorDomain";
BOOL isScalarUrl = NO;
// TODO: Do we need to add `integrationsWidgetsUrls` to `WidgetManagerConfig`?
NSArray<NSString*> *scalarUrlStrings = [[NSUserDefaults standardUserDefaults] objectForKey:@"integrationsWidgetsUrls"];
NSArray<NSString*> *scalarUrlStrings = BuildSettings.integrationsScalarWidgetsPaths;
if (scalarUrlStrings.count == 0)
{
NSString *apiUrl = [self configForUser:userId].apiUrl;

View file

@ -26,7 +26,9 @@
#import "ForgotPasswordInputsView.h"
#import "AuthFallBackViewController.h"
@interface AuthenticationViewController () <AuthFallBackViewControllerDelegate, KeyVerificationCoordinatorBridgePresenterDelegate>
#import "Riot-Swift.h"
@interface AuthenticationViewController () <AuthFallBackViewControllerDelegate, KeyVerificationCoordinatorBridgePresenterDelegate, SetPinCoordinatorBridgePresenterDelegate>
{
/**
The default country code used to initialize the mobile phone number input.
@ -49,10 +51,15 @@
MXAutoDiscovery *autoDiscovery;
AuthFallBackViewController *authFallBackViewController;
// successful login credentials
MXCredentials *loginCredentials;
}
@property (nonatomic, readonly) BOOL isIdentityServerConfigured;
@property (nonatomic, strong) KeyVerificationCoordinatorBridgePresenter *keyVerificationCoordinatorBridgePresenter;
@property (nonatomic, strong) SetPinCoordinatorBridgePresenter *setPinCoordinatorBridgePresenter;
@property (nonatomic, strong) KeyboardAvoider *keyboardAvoider;
@end
@ -92,9 +99,9 @@
self.mainNavigationItem.title = nil;
self.rightBarButtonItem.title = NSLocalizedStringFromTable(@"auth_register", @"Vector", nil);
self.defaultHomeServerUrl = [[NSUserDefaults standardUserDefaults] objectForKey:@"homeserverurl"];
self.defaultHomeServerUrl = RiotSettings.shared.homeserverUrlString;
self.defaultIdentityServerUrl = [[NSUserDefaults standardUserDefaults] objectForKey:@"identityserverurl"];
self.defaultIdentityServerUrl = RiotSettings.shared.identityServerUrlString;
self.welcomeImageView.image = [UIImage imageNamed:@"horizontal_logo"];
@ -113,6 +120,13 @@
[self.customServersTickButton setImage:[UIImage imageNamed:@"selection_untick"] forState:UIControlStateNormal];
[self.customServersTickButton setImage:[UIImage imageNamed:@"selection_untick"] forState:UIControlStateHighlighted];
if (!BuildSettings.authScreenShowRegister)
{
self.rightBarButtonItem.enabled = NO;
self.rightBarButtonItem.title = nil;
}
self.serverOptionsContainer.hidden = !BuildSettings.authScreenShowCustomServerOptions;
[self hideCustomServers:YES];
// Soft logout section
@ -155,6 +169,8 @@
[self userInterfaceThemeDidChange];
[self updateUniversalLink];
_keyboardAvoider = [[KeyboardAvoider alloc] initWithScrollViewContainerView:self.view scrollView:self.authenticationScrollView];
}
- (void)userInterfaceThemeDidChange
@ -258,6 +274,8 @@
// Screen tracking
[[Analytics sharedInstance] trackScreen:@"Authentication"];
[_keyboardAvoider startAvoiding];
}
- (void)viewDidAppear:(BOOL)animated
@ -283,6 +301,13 @@
}
}
- (void)viewDidDisappear:(BOOL)animated
{
[_keyboardAvoider stopAvoiding];
[super viewDidDisappear:animated];
}
- (void)destroy
{
[super destroy];
@ -301,6 +326,7 @@
autoDiscovery = nil;
_keyVerificationCoordinatorBridgePresenter = nil;
_keyboardAvoider = nil;
}
- (BOOL)isIdentityServerConfigured
@ -422,7 +448,9 @@
// The right bar button is used to switch the authentication type.
if (self.authType == MXKAuthenticationTypeLogin)
{
if (!authInputsview.isSingleSignOnRequired && !self.softLogoutCredentials)
if (!authInputsview.isSingleSignOnRequired
&& !self.softLogoutCredentials
&& BuildSettings.authScreenShowRegister)
{
self.rightBarButtonItem.title = NSLocalizedStringFromTable(@"auth_register", @"Vector", nil);
}
@ -879,34 +907,19 @@
- (void)onSuccessfulLogin:(MXCredentials*)credentials
{
// Check whether a third party identifiers has not been used
if ([self.authInputsView isKindOfClass:AuthInputsView.class])
// if really login and pin protection is forced
if (self.authType == MXKAuthenticationTypeLogin && [PinCodePreferences shared].forcePinProtection)
{
AuthInputsView *authInputsview = (AuthInputsView*)self.authInputsView;
if (authInputsview.isThirdPartyIdentifierPending)
{
// Alert user
if (alert)
{
[alert dismissViewControllerAnimated:NO completion:nil];
}
alert = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"warning", @"Vector", nil) message:NSLocalizedStringFromTable(@"auth_add_email_and_phone_warning", @"Vector", nil) preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"ok"]
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[super onSuccessfulLogin:credentials];
}]];
[self presentViewController:alert animated:YES completion:nil];
return;
}
loginCredentials = credentials;
SetPinCoordinatorBridgePresenter *presenter = [[SetPinCoordinatorBridgePresenter alloc] initWithSession:nil viewMode:SetPinCoordinatorViewModeSetPin];
presenter.delegate = self;
[presenter presentFrom:self animated:YES];
self.setPinCoordinatorBridgePresenter = presenter;
return;
}
[super onSuccessfulLogin:credentials];
[self afterSetPinFlowCompletedWithCredentials:credentials];
}
- (void)updateForgotPwdButtonVisibility
@ -931,13 +944,59 @@
}
}
- (void)afterSetPinFlowCompletedWithCredentials:(MXCredentials*)credentials
{
// Check whether a third party identifiers has not been used
if ([self.authInputsView isKindOfClass:AuthInputsView.class])
{
AuthInputsView *authInputsview = (AuthInputsView*)self.authInputsView;
if (authInputsview.isThirdPartyIdentifierPending)
{
// Alert user
if (alert)
{
[alert dismissViewControllerAnimated:NO completion:nil];
}
alert = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"warning", @"Vector", nil) message:NSLocalizedStringFromTable(@"auth_add_email_and_phone_warning", @"Vector", nil) preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"ok"]
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[super onSuccessfulLogin:credentials];
}]];
[self presentViewController:alert animated:YES completion:nil];
return;
}
}
[super onSuccessfulLogin:credentials];
}
#pragma mark -
- (void)updateRegistrationScreenWithThirdPartyIdentifiersHidden:(BOOL)thirdPartyIdentifiersHidden
{
self.skipButton.hidden = thirdPartyIdentifiersHidden;
self.serverOptionsContainer.hidden = !thirdPartyIdentifiersHidden;
// Do not display the skip button if the 3PID is mandatory
if (!thirdPartyIdentifiersHidden)
{
if ([self.authInputsView isKindOfClass:AuthInputsView.class])
{
AuthInputsView *authInputsview = (AuthInputsView*)self.authInputsView;
if (authInputsview.isThirdPartyIdentifierRequired)
{
self.skipButton.hidden = YES;
}
}
}
self.serverOptionsContainer.hidden = !thirdPartyIdentifiersHidden
|| !BuildSettings.authScreenShowCustomServerOptions;
[self refreshContentViewHeightConstraint];
if (thirdPartyIdentifiersHidden)
@ -975,6 +1034,10 @@
{
constant += customServersContainerFrame.size.height;
}
else
{
constant += self.customServersTickButton.frame.size.height;
}
}
}
@ -1078,6 +1141,13 @@
}];
}
#pragma mark - UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self.authenticationScrollView vc_scrollTo:textField with:UIEdgeInsetsMake(-20, 0, -20, 0) animated:YES];
}
#pragma mark - KVO
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
@ -1372,4 +1442,25 @@
[self dismiss];
}
#pragma mark - SetPinCoordinatorBridgePresenterDelegate
- (void)setPinCoordinatorBridgePresenterDelegateDidComplete:(SetPinCoordinatorBridgePresenter *)coordinatorBridgePresenter
{
[self dismiss];
[self afterSetPinFlowCompletedWithCredentials:loginCredentials];
}
- (void)setPinCoordinatorBridgePresenterDelegateDidCancel:(SetPinCoordinatorBridgePresenter *)coordinatorBridgePresenter
{
// enable the view again
[self setUserInteractionEnabled:YES];
// stop the spinner
[self.authenticationActivityIndicator stopAnimating];
// then, just close the enter pin screen
[coordinatorBridgePresenter dismissWithAnimated:YES completion:nil];
}
@end

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